From patchwork Wed Nov 30 14:55:57 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yao Qi X-Patchwork-Id: 18067 Received: (qmail 10900 invoked by alias); 30 Nov 2016 14:56:19 -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 10874 invoked by uid 89); 30 Nov 2016 14:56:16 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.9 required=5.0 tests=AWL, BAYES_00, FREEMAIL_FROM, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.2 spammy=20161130 X-HELO: mail-pg0-f67.google.com Received: from mail-pg0-f67.google.com (HELO mail-pg0-f67.google.com) (74.125.83.67) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 30 Nov 2016 14:56:06 +0000 Received: by mail-pg0-f67.google.com with SMTP id p66so1559782pga.2 for ; Wed, 30 Nov 2016 06:56:06 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:subject:date:message-id; bh=hkwqlFXWYipzZzBF+cZhpCIR0kySBjob6aF7RVvaTOU=; b=ZzPfOGSelHV84cgCF6LL41iWXZ1864FRwcoIx22+5rAvxiecEOs8/RG5hzV2z9TDEA IOymZoyAyWR+MabboYCoKeL7ebxVTgQnRZXDbWjRAaS3kcQ1Q8Mxk0is9L3FvJs1TUqq kubCjEW/n1Yghuvm76Fs8s3xuDmcFMijjUFVOrrYgBOMCtjhGZnx9uszAKdRVWpkhuUI dQRDaOpjvR1y1NyOtsfcb8hfWI7zBi84LLVikBoQWUok3pqKiSoUr+KOxpoFqhKgEQEJ GzXF3cEX3YZm99Czgamv1Vv0cDl1perCNLu67KfOuUvqS88g5Ve+eYW5jgjYTk6cuoa5 1T6A== X-Gm-Message-State: AKaTC01NaEYKZARaxH2qor/XyfRKY5vfIxYT/PTmT5vy1QP95DpGucTQyUmyiDD+gIDaUw== X-Received: by 10.99.113.68 with SMTP id b4mr60852461pgn.33.1480517765125; Wed, 30 Nov 2016 06:56:05 -0800 (PST) Received: from E107787-LIN.cambridge.arm.com (power8-aix.osuosl.org. [140.211.9.96]) by smtp.gmail.com with ESMTPSA id w5sm103728806pfl.31.2016.11.30.06.56.04 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 30 Nov 2016 06:56:04 -0800 (PST) From: Yao Qi X-Google-Original-From: Yao Qi To: gdb-patches@sourceware.org Subject: [PATCH] Assert on lval_register Date: Wed, 30 Nov 2016 14:55:57 +0000 Message-Id: <1480517757-11733-1-git-send-email-yao.qi@linaro.org> X-IsSubscribed: yes This patch adds asserts where the value's lval must be lval_register. This triggers an error in frame_register_unwind because VALUE_REGNUM is used but value's lval is not lval_register. This also reveals a design issue in frame_register_unwind, that is arguments addrp and realnump are mutually exclusive, we either use addrp (for lval_memory), or use realnump (for lval_register). This can be done in a separate patch. Regression tested on x86_64-linux. gdb: 2016-11-30 Yao Qi * frame.c (frame_register_unwind): Set *realnump if *lvalp is lval_register. * value.c (deprecated_value_next_frame_id_hack): Assert value->lval is lval_register. (deprecated_value_regnum_hack): Likewise. --- gdb/frame.c | 3 ++- gdb/value.c | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/gdb/frame.c b/gdb/frame.c index 5414cb3..1c388d1 100644 --- a/gdb/frame.c +++ b/gdb/frame.c @@ -1107,7 +1107,8 @@ frame_register_unwind (struct frame_info *frame, int regnum, *unavailablep = !value_entirely_available (value); *lvalp = VALUE_LVAL (value); *addrp = value_address (value); - *realnump = VALUE_REGNUM (value); + if (*lvalp == lval_register) + *realnump = VALUE_REGNUM (value); if (bufferp) { diff --git a/gdb/value.c b/gdb/value.c index cc291cf..022900f 100644 --- a/gdb/value.c +++ b/gdb/value.c @@ -1576,12 +1576,14 @@ deprecated_value_internalvar_hack (struct value *value) struct frame_id * deprecated_value_next_frame_id_hack (struct value *value) { + gdb_assert (value->lval == lval_register); return &value->location.reg.next_frame_id; } int * deprecated_value_regnum_hack (struct value *value) { + gdb_assert (value->lval == lval_register); return &value->location.reg.regnum; }