From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 91286 invoked by alias); 28 Nov 2016 17:22:16 -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 91261 invoked by uid 89); 28 Nov 2016 17:22:15 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.5 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,RCVD_IN_SORBS_SPAM,SPF_PASS autolearn=no version=3.3.2 spammy=H*r:AES128-SHA, 2666, lazy, 266,6 X-HELO: mail-wj0-f196.google.com Received: from mail-wj0-f196.google.com (HELO mail-wj0-f196.google.com) (209.85.210.196) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 28 Nov 2016 17:22:05 +0000 Received: by mail-wj0-f196.google.com with SMTP id kp2so14950681wjc.0 for ; Mon, 28 Nov 2016 09:22:05 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to:user-agent; bh=MY58OL5sMIjNmZMd83N2/rKxd8SDAeYX2Z0JawU25Po=; b=d9alouH7fcPmoMSzGYZG/zo6ye7kLemTOCngBbsQi8/wi13B3sC6ewQV78ml4X/xQY f5Bo0hgtfMQldGEoJRnEe1R82u6sickirl9NssunbPkxy2n1vMXGl4lVxX0K6DIeQ0i/ SmNxnHtt95CrgkHGqoR5gC6fHsDjTQ7KPox5GHVq+jevb4yrCaksNwVbzywoGwEy15Qh T7XZd8Z30lIz2mopxMnvWFo2zqiqyphHwMIiQbTKM3A7DXaYHbQ46ds1Nmr31EYQgyii JxT6nUmnjavjxXPwPcqJVlx/BIAMKeYmVteWAr46q8WKd4RYfhgf0m+X7x37J064hbyI WP+Q== X-Gm-Message-State: AKaTC0352GhiSlxDpTidduHeayWLYY/Faf5IjILALmbErr5YS23I0tVWQdKETTFSTllYLA== X-Received: by 10.194.121.6 with SMTP id lg6mr23159112wjb.105.1480353723481; Mon, 28 Nov 2016 09:22:03 -0800 (PST) Received: from E107787-LIN (power8-aix.osuosl.org. [140.211.9.96]) by smtp.gmail.com with ESMTPSA id y4sm63569693wjp.0.2016.11.28.09.22.00 (version=TLS1_2 cipher=AES128-SHA bits=128/128); Mon, 28 Nov 2016 09:22:03 -0800 (PST) Date: Mon, 28 Nov 2016 17:22:00 -0000 From: Yao Qi To: Ulrich Weigand Cc: gdb-patches@sourceware.org Subject: Re: [PATCH 2/3] Adjust Value.location for lval_register Message-ID: <20161128172153.GC22209@E107787-LIN> References: <20161125115744.GA22209@E107787-LIN> <20161125121002.2CF3910BCB8@oc8523832656.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20161125121002.2CF3910BCB8@oc8523832656.ibm.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-IsSubscribed: yes X-SW-Source: 2016-11/txt/msg00919.txt.bz2 On Fri, Nov 25, 2016 at 01:10:02PM +0100, Ulrich Weigand wrote: > > On Fri, Nov 25, 2016 at 12:51:30PM +0100, Ulrich Weigand wrote: > > > > > > > > > > /* Describes offset of a value within lval of a structure in target > > > > addressable memory units. If lval == lval_memory, this is an offset to > > > > - the address. If lval == lval_register, this is a further offset from > > > > - location.address within the registers structure. Note also the member > > > > - embedded_offset below. */ > > > > + the address. Note also the member embedded_offset below. */ > > > > LONGEST offset; > > > > > > Hmm, I think we recently had the discussion that *any* values should allow > > > using an offset. The comment should probably reflect this. > > > > > > > How about "Describes offset of a value within lval of a structure. Note > > also the member embedded_offset below."? > > I think we should leave in the "in target addressable memory units" to clarify > that this is a *byte* offset, not a bit offset. > > Otherwise, looks good to me. > OK, patch below is pushed in. -- Yao (齐尧) >From 7dc54575d91a2b41f6c3e838eec44a7017a24436 Mon Sep 17 00:00:00 2001 From: Yao Qi Date: Mon, 28 Nov 2016 17:09:26 +0000 Subject: [PATCH] Adjust Value.location for lval_register value.regnum and value.next_frame_id are only used for lval_register, so this patch moves them to union value.location. As a result, when we copy value, only copy location, don't need to copy regnum and next_frame_id. This patch also changes regnum's type to int as there is no space constraint, so update deprecated_value_regnum_hack return type too. gdb: 2016-11-28 Yao Qi * valops.c (value_slice): Don't set frame id of slice. * value.c (struct value) : Move them to... (struct value) : ... here. Update comments. (allocate_value_lazy): Don't set frame id and regnum. (deprecated_value_next_frame_id_hack): Adjust. (deprecated_value_regnum_hack): Adjust. (value_copy): Don't copy frame id and regnu. (value_primitive_field): Likewise. (value_from_component): Likewise. (deprecated_value_regnum_hack): Return int *. * value.h (deprecated_value_regnum_hack): Update declaration. diff --git a/gdb/valops.c b/gdb/valops.c index 8a45641..3a7550d 100644 --- a/gdb/valops.c +++ b/gdb/valops.c @@ -3827,7 +3827,6 @@ value_slice (struct value *array, int lowbound, int length) } set_value_component_location (slice, array); - VALUE_NEXT_FRAME_ID (slice) = VALUE_NEXT_FRAME_ID (array); set_value_offset (slice, value_offset (array) + offset); } diff --git a/gdb/value.c b/gdb/value.c index 8d33501..13a0bb9 100644 --- a/gdb/value.c +++ b/gdb/value.c @@ -205,17 +205,23 @@ struct value /* If the value has been released. */ unsigned int released : 1; - /* Register number if the value is from a register. */ - short regnum; - /* Location of value (if lval). */ union { - /* If lval == lval_memory, this is the address in the inferior. - If lval == lval_register, this is the byte offset into the - registers structure. */ + /* If lval == lval_memory, this is the address in the inferior */ CORE_ADDR address; + /*If lval == lval_register, the value is from a register. */ + struct + { + /* Register number. */ + int regnum; + /* Frame ID of "next" frame to which a register value is relative. + If the register value is found relative to frame F, then the + frame id of F->next will be stored in next_frame_id. */ + struct frame_id next_frame_id; + } reg; + /* Pointer to internal variable. */ struct internalvar *internalvar; @@ -236,10 +242,8 @@ struct value } location; /* Describes offset of a value within lval of a structure in target - addressable memory units. If lval == lval_memory, this is an offset to - the address. If lval == lval_register, this is a further offset from - location.address within the registers structure. Note also the member - embedded_offset below. */ + addressable memory units. Note also the member embedded_offset + below. */ LONGEST offset; /* Only used for bitfields; number of bits contained in them. */ @@ -262,12 +266,6 @@ struct value bitfields. */ struct value *parent; - /* Frame ID of "next" frame to which a register value is relative. A - register value is indicated when the lval enum (above) is set to - lval_register. So, if the register value is found relative to frame F, - then the frame id of F->next will be stored in next_frame_id. */ - struct frame_id next_frame_id; - /* Type of the value. */ struct type *type; @@ -945,11 +943,9 @@ allocate_value_lazy (struct type *type) val->enclosing_type = type; VALUE_LVAL (val) = not_lval; val->location.address = 0; - VALUE_NEXT_FRAME_ID (val) = null_frame_id; val->offset = 0; val->bitpos = 0; val->bitsize = 0; - VALUE_REGNUM (val) = -1; val->lazy = 1; val->embedded_offset = 0; val->pointed_to_offset = 0; @@ -1586,13 +1582,13 @@ deprecated_value_internalvar_hack (struct value *value) struct frame_id * deprecated_value_next_frame_id_hack (struct value *value) { - return &value->next_frame_id; + return &value->location.reg.next_frame_id; } -short * +int * deprecated_value_regnum_hack (struct value *value) { - return &value->regnum; + return &value->location.reg.regnum; } int @@ -1788,8 +1784,6 @@ value_copy (struct value *arg) val->offset = arg->offset; val->bitpos = arg->bitpos; val->bitsize = arg->bitsize; - VALUE_NEXT_FRAME_ID (val) = VALUE_NEXT_FRAME_ID (arg); - VALUE_REGNUM (val) = VALUE_REGNUM (arg); val->lazy = arg->lazy; val->embedded_offset = value_embedded_offset (arg); val->pointed_to_offset = arg->pointed_to_offset; @@ -3229,8 +3223,6 @@ value_primitive_field (struct value *arg1, LONGEST offset, + value_embedded_offset (arg1)); } set_value_component_location (v, arg1); - VALUE_REGNUM (v) = VALUE_REGNUM (arg1); - VALUE_NEXT_FRAME_ID (v) = VALUE_NEXT_FRAME_ID (arg1); return v; } @@ -3814,8 +3806,6 @@ value_from_component (struct value *whole, struct type *type, LONGEST offset) } v->offset = value_offset (whole) + offset + value_embedded_offset (whole); set_value_component_location (v, whole); - VALUE_REGNUM (v) = VALUE_REGNUM (whole); - VALUE_NEXT_FRAME_ID (v) = VALUE_NEXT_FRAME_ID (whole); return v; } diff --git a/gdb/value.h b/gdb/value.h index 281b5a8..f776323 100644 --- a/gdb/value.h +++ b/gdb/value.h @@ -448,7 +448,7 @@ extern struct frame_id *deprecated_value_next_frame_id_hack (struct value *); #define VALUE_FRAME_ID(val) (get_prev_frame_id_by_id (VALUE_NEXT_FRAME_ID (val))) /* Register number if the value is from a register. */ -extern short *deprecated_value_regnum_hack (struct value *); +extern int *deprecated_value_regnum_hack (struct value *); #define VALUE_REGNUM(val) (*deprecated_value_regnum_hack (val)) /* Return value after lval_funcs->coerce_ref (after check_typedef). Return