From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 30431 invoked by alias); 25 Nov 2016 10:07:05 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 30217 invoked by uid 89); 25 Nov 2016 10:07:04 -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,KAM_STOCKGEN,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=no version=3.3.2 spammy=gdb_assert, H*RU:74.125.83.65, gdbarch, sk:allocat X-HELO: mail-pg0-f65.google.com Received: from mail-pg0-f65.google.com (HELO mail-pg0-f65.google.com) (74.125.83.65) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 25 Nov 2016 10:06:56 +0000 Received: by mail-pg0-f65.google.com with SMTP id 3so5228187pgd.0 for ; Fri, 25 Nov 2016 02:06:56 -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:in-reply-to :references; bh=LZp8iHgZGDKsIq4D6ZAjrXdatiAUoXjyWda+vXJP+48=; b=gAeITiqj6BeCvPEio3Qju5/tp1CWoun1oWD4xxCtBGcERH3enawpvQoNg8p1o4gx23 GgPeascNYCH3xHZg9tNtu0P3iAlT9hUgQp0lEuHO7Z0+yWa+IwNNHlUlrc2OmTQ5pGRD IfLFln/U9DP5+NStGq6FWsnF47yte76b+emEuCQFv6JlLGaVp1KvyaaLKm/GCectEUZY ERSh6P+iDWdcWmAbTAAM21xYp8OOTL0JeMUgraCJhyE7d828rRsjFfUKkukeqTFkZBTd xrBoKWLMgP1pZy/e5ql1mxIv74lKU7GA04ntUlDXb02O3lZCb/54d465yMrm190lLRzE lhDg== X-Gm-Message-State: AKaTC00Ouqh1VV7t1oaZbJeOZbKLQqbDOitmbQcXZP1hYXhicowAxScemEJ3WAiLnVGCsg== X-Received: by 10.99.19.65 with SMTP id 1mr12568329pgt.71.1480068414982; Fri, 25 Nov 2016 02:06:54 -0800 (PST) Received: from E107787-LIN.cambridge.arm.com (gcc1-power7.osuosl.org. [140.211.15.137]) by smtp.gmail.com with ESMTPSA id 13sm66563287pfz.30.2016.11.25.02.06.54 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 25 Nov 2016 02:06:54 -0800 (PST) From: Yao Qi X-Google-Original-From: Yao Qi To: gdb-patches@sourceware.org Subject: [PATCH 3/3] Restrict checking value.lval on using address Date: Fri, 25 Nov 2016 10:07:00 -0000 Message-Id: <1480068407-22616-4-git-send-email-yao.qi@linaro.org> In-Reply-To: <1480068407-22616-1-git-send-email-yao.qi@linaro.org> References: <20161123125000.DBC6D10FB47@oc8523832656.ibm.com> <1480068407-22616-1-git-send-email-yao.qi@linaro.org> X-IsSubscribed: yes X-SW-Source: 2016-11/txt/msg00796.txt.bz2 With the previous change, value.location.address is only valid for lval_memory. This patch restrict some checking on value.lval on using address. Since we have a check on VALUE_VAL in set_value_address, we need to set VALUE_VAL properly before set_value_address too. gdb: 2016-11-25 Yao Qi * ada-lang.c (ensure_lval): Call set_value_address after setting VALUE_LVAL. * elfread.c (elf_gnu_ifunc_resolve_addr): Set VALUE_LVAL to lval_memory. (elf_gnu_ifunc_resolver_return_stop): Likewise. * value.c (value_fn_field): Likewise. (value_from_contents_and_address_unresolved): Likewise. (value_from_contents_and_address): Likewise. (value_address): Check value->lval isn't lval_memory. (value_raw_address): Likewise. (set_value_address): Assert value->lval is lval_memory. --- gdb/ada-lang.c | 2 +- gdb/elfread.c | 2 ++ gdb/value.c | 17 ++++++----------- 3 files changed, 9 insertions(+), 12 deletions(-) diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index 0647a9b..33591af 100644 --- a/gdb/ada-lang.c +++ b/gdb/ada-lang.c @@ -4473,8 +4473,8 @@ ensure_lval (struct value *val) const CORE_ADDR addr = value_as_long (value_allocate_space_in_inferior (len)); - set_value_address (val, addr); VALUE_LVAL (val) = lval_memory; + set_value_address (val, addr); write_memory (addr, value_contents (val), len); } diff --git a/gdb/elfread.c b/gdb/elfread.c index e49af6d..c6d0fdb 100644 --- a/gdb/elfread.c +++ b/gdb/elfread.c @@ -879,6 +879,7 @@ elf_gnu_ifunc_resolve_addr (struct gdbarch *gdbarch, CORE_ADDR pc) name_at_pc = NULL; function = allocate_value (func_func_type); + VALUE_LVAL (function) = lval_memory; set_value_address (function, pc); /* STT_GNU_IFUNC resolver functions usually receive the HWCAP vector as @@ -992,6 +993,7 @@ elf_gnu_ifunc_resolver_return_stop (struct breakpoint *b) gdb_assert (b->loc->next == NULL); func_func = allocate_value (func_func_type); + VALUE_LVAL (func_func) = lval_memory; set_value_address (func_func, b->loc->related_address); value = allocate_value (value_type); diff --git a/gdb/value.c b/gdb/value.c index eff5462..9fb5fe1 100644 --- a/gdb/value.c +++ b/gdb/value.c @@ -1539,9 +1539,7 @@ value_lval_const (const struct value *value) CORE_ADDR value_address (const struct value *value) { - if (value->lval == lval_internalvar - || value->lval == lval_internalvar_component - || value->lval == lval_xcallable) + if (value->lval != lval_memory) return 0; if (value->parent != NULL) return value_address (value->parent) + value->offset; @@ -1557,9 +1555,7 @@ value_address (const struct value *value) CORE_ADDR value_raw_address (const struct value *value) { - if (value->lval == lval_internalvar - || value->lval == lval_internalvar_component - || value->lval == lval_xcallable) + if (value->lval != lval_memory) return 0; return value->location.address; } @@ -1567,9 +1563,7 @@ value_raw_address (const struct value *value) void set_value_address (struct value *value, CORE_ADDR addr) { - gdb_assert (value->lval != lval_internalvar - && value->lval != lval_internalvar_component - && value->lval != lval_xcallable); + gdb_assert (value->lval == lval_memory); value->location.address = addr; } @@ -3268,6 +3262,7 @@ value_fn_field (struct value **arg1p, struct fn_field *f, } v = allocate_value (ftype); + VALUE_LVAL (v) = lval_memory; if (sym) { set_value_address (v, BLOCK_START (SYMBOL_BLOCK_VALUE (sym))); @@ -3654,8 +3649,8 @@ value_from_contents_and_address_unresolved (struct type *type, v = allocate_value_lazy (type); else v = value_from_contents (type, valaddr); - set_value_address (v, address); VALUE_LVAL (v) = lval_memory; + set_value_address (v, address); return v; } @@ -3680,8 +3675,8 @@ value_from_contents_and_address (struct type *type, if (TYPE_DATA_LOCATION (resolved_type_no_typedef) != NULL && TYPE_DATA_LOCATION_KIND (resolved_type_no_typedef) == PROP_CONST) address = TYPE_DATA_LOCATION_ADDR (resolved_type_no_typedef); - set_value_address (v, address); VALUE_LVAL (v) = lval_memory; + set_value_address (v, address); return v; } -- 1.9.1