diff options
author | Yao Qi <yao.qi@linaro.org> | 2016-11-28 17:09:26 +0000 |
---|---|---|
committer | Yao Qi <yao.qi@linaro.org> | 2016-11-28 17:09:26 +0000 |
commit | 7dc54575d91a2b41f6c3e838eec44a7017a24436 (patch) | |
tree | 5140ebb00b483d631739e03184a30d5ce672f564 /gdb | |
parent | ee40d8d45213caf0cfb63e603f0fd5a58532e751 (diff) | |
download | binutils-gdb-7dc54575d91a2b41f6c3e838eec44a7017a24436.tar.gz |
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 <yao.qi@linaro.org>
* valops.c (value_slice): Don't set frame id of slice.
* value.c (struct value) <regnum, next_frame_id>: Move them to...
(struct value) <location>: ... 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.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/valops.c | 1 | ||||
-rw-r--r-- | gdb/value.c | 44 | ||||
-rw-r--r-- | gdb/value.h | 2 |
3 files changed, 18 insertions, 29 deletions
diff --git a/gdb/valops.c b/gdb/valops.c index 8a456413a09..3a7550dfdb5 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 8d33501a158..13a0bb9c866 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 281b5a8c8ac..f776323c4a8 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 |