From patchwork Fri Dec 1 10:47:53 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yao Qi X-Patchwork-Id: 24666 Received: (qmail 75357 invoked by alias); 1 Dec 2017 10:48:44 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 74819 invoked by uid 89); 1 Dec 2017 10:48:27 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.7 required=5.0 tests=BAYES_00, FREEMAIL_FROM, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KB_WAM_FROM_NAME_SINGLEWORD, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.2 spammy=H*RU:sk:static., Hx-spam-relays-external:sk:static., Hx-spam-relays-external:209.85.128.194, H*RU:209.85.128.194 X-HELO: mail-wr0-f194.google.com Received: from mail-wr0-f194.google.com (HELO mail-wr0-f194.google.com) (209.85.128.194) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 01 Dec 2017 10:48:24 +0000 Received: by mail-wr0-f194.google.com with SMTP id x49so9589895wrb.13 for ; Fri, 01 Dec 2017 02:48:16 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=2pxMCuDK4PKY/AoBcZUl+3LHyGg6jWrDfWqLJVd+nOU=; b=eiharLWiHweSvQqu3hWXQ3KxPm7pve/CfRDYSrX1FApX/U0pFMuelYSGJdOqYzWzKo N9sZcZmlr1RFiMnkqt7ui9yX9Ss113oN7acT3sum5KOYX7seGW/yGUefQuanGoyXE3/r 8BBUVtyL335/UGboEHtdk0EDlofllU4GtcNGf29TIBsBH7jpMSJgu8Xe4b3HBB7njLW8 MIM7znSjk1n1JhPzJs3DHt74oj5V0xoF7/D0e3QKi5qH+k08UGsLFCL/SbRFSqOnw89v 0bWRmBBAZ40uyfRcfnUiCmHFqmp78E8tcaOxjThDfj8Ridi+Yzt+LLQiHHsxHQYGxG3M dnhg== X-Gm-Message-State: AJaThX7krTO8i5p/5Z7vf4xY79pzDKyyrhHVIC3/Cxp8i7nHYI2D6ueR SHEIbiRuo3C5lGEa5Jx2sTwVeQ== X-Google-Smtp-Source: AGs4zMYjO3GYOx4DVklIZ06HYYS1EcGtKcTRzxZQQjHnTvhmtojeXVj0pwMzZZQhRpEWIJznz4ZEXA== X-Received: by 10.223.172.118 with SMTP id v109mr4889568wrc.229.1512125294536; Fri, 01 Dec 2017 02:48:14 -0800 (PST) Received: from E107787-LIN.cambridge.arm.com (static.42.136.251.148.clients.your-server.de. [148.251.136.42]) by smtp.gmail.com with ESMTPSA id o10sm5316833wrg.5.2017.12.01.02.48.13 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 01 Dec 2017 02:48:14 -0800 (PST) From: Yao Qi X-Google-Original-From: Yao Qi To: gdb-patches@sourceware.org Subject: [PATCH 02/15] Don't call gdbarch_pseudo_register_read_value in jit.c Date: Fri, 1 Dec 2017 10:47:53 +0000 Message-Id: <1512125286-29788-3-git-send-email-yao.qi@linaro.org> In-Reply-To: <1512125286-29788-1-git-send-email-yao.qi@linaro.org> References: <1512125286-29788-1-git-send-email-yao.qi@linaro.org> X-IsSubscribed: yes gdbarch_pseudo_register_read_value is not implemented in every gdbarch, so the predicate gdbarch_pseudo_register_read_value_p is needed before calling it. However, there is no such guard in jit_frame_prev_register, I am wondering how does jit work on the arch without having gdbarch method pseudo_register_read_value. The proper way to get register value is to call cooked_read, and then create the value object from the buffer. gdb: 2017-11-01 Yao Qi * jit.c (jit_frame_prev_register): Call regcache::cooked_read instead of gdbarch_pseudo_register_read_value. --- gdb/jit.c | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/gdb/jit.c b/gdb/jit.c index 98afdf2..36aaefc 100644 --- a/gdb/jit.c +++ b/gdb/jit.c @@ -1271,19 +1271,13 @@ jit_frame_prev_register (struct frame_info *this_frame, void **cache, int reg) return frame_unwind_got_optimized (this_frame, reg); gdbarch = priv->regcache->arch (); - if (reg < gdbarch_num_regs (gdbarch)) - { - gdb_byte *buf = (gdb_byte *) alloca (register_size (gdbarch, reg)); - enum register_status status; + gdb_byte *buf = (gdb_byte *) alloca (register_size (gdbarch, reg)); + enum register_status status = priv->regcache->cooked_read (reg, buf); - status = regcache_raw_read (priv->regcache, reg, buf); - if (status == REG_VALID) - return frame_unwind_got_bytes (this_frame, reg, buf); - else - return frame_unwind_got_optimized (this_frame, reg); - } + if (status == REG_VALID) + return frame_unwind_got_bytes (this_frame, reg, buf); else - return gdbarch_pseudo_register_read_value (gdbarch, priv->regcache, reg); + return frame_unwind_got_optimized (this_frame, reg); } /* Relay everything back to the unwinder registered by the JIT debug