* values.c (value_primitive_field): Account for offset when
extracting the value of a bitfield. From Paul Hilfinger <hilfingr@CS.Berkeley.EDU>.
This commit is contained in:
parent
0485d3df51
commit
93e7a07fd7
2 changed files with 16 additions and 7 deletions
|
@ -1,3 +1,9 @@
|
||||||
|
Sat Aug 9 01:50:14 1997 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
|
||||||
|
|
||||||
|
* values.c (value_primitive_field): Account for offset when
|
||||||
|
extracting the value of a bitfield.
|
||||||
|
From Paul Hilfinger <hilfingr@CS.Berkeley.EDU>.
|
||||||
|
|
||||||
Fri Aug 8 21:35:44 1997 Mark Alexander <marka@cygnus.com>
|
Fri Aug 8 21:35:44 1997 Mark Alexander <marka@cygnus.com>
|
||||||
|
|
||||||
start-sanitize-tic80
|
start-sanitize-tic80
|
||||||
|
|
13
gdb/values.c
13
gdb/values.c
|
@ -1,5 +1,5 @@
|
||||||
/* Low level packing and unpacking of values for GDB, the GNU Debugger.
|
/* Low level packing and unpacking of values for GDB, the GNU Debugger.
|
||||||
Copyright 1986, 1987, 1989, 1991, 1993, 1994, 1995, 1996
|
Copyright 1986, 1987, 1989, 1991, 1993, 1994, 1995, 1996, 1997
|
||||||
Free Software Foundation, Inc.
|
Free Software Foundation, Inc.
|
||||||
|
|
||||||
This file is part of GDB.
|
This file is part of GDB.
|
||||||
|
@ -761,12 +761,12 @@ value_primitive_field (arg1, offset, fieldno, arg_type)
|
||||||
|
|
||||||
/* Handle packed fields */
|
/* Handle packed fields */
|
||||||
|
|
||||||
offset += TYPE_FIELD_BITPOS (arg_type, fieldno) / 8;
|
|
||||||
if (TYPE_FIELD_BITSIZE (arg_type, fieldno))
|
if (TYPE_FIELD_BITSIZE (arg_type, fieldno))
|
||||||
{
|
{
|
||||||
v = value_from_longest (type,
|
v = value_from_longest (type,
|
||||||
unpack_field_as_long (arg_type,
|
unpack_field_as_long (arg_type,
|
||||||
VALUE_CONTENTS (arg1),
|
VALUE_CONTENTS (arg1)
|
||||||
|
+ offset,
|
||||||
fieldno));
|
fieldno));
|
||||||
VALUE_BITPOS (v) = TYPE_FIELD_BITPOS (arg_type, fieldno) % 8;
|
VALUE_BITPOS (v) = TYPE_FIELD_BITPOS (arg_type, fieldno) % 8;
|
||||||
VALUE_BITSIZE (v) = TYPE_FIELD_BITSIZE (arg_type, fieldno);
|
VALUE_BITSIZE (v) = TYPE_FIELD_BITSIZE (arg_type, fieldno);
|
||||||
|
@ -777,14 +777,17 @@ value_primitive_field (arg1, offset, fieldno, arg_type)
|
||||||
if (VALUE_LAZY (arg1))
|
if (VALUE_LAZY (arg1))
|
||||||
VALUE_LAZY (v) = 1;
|
VALUE_LAZY (v) = 1;
|
||||||
else
|
else
|
||||||
memcpy (VALUE_CONTENTS_RAW (v), VALUE_CONTENTS_RAW (arg1) + offset,
|
memcpy (VALUE_CONTENTS_RAW (v),
|
||||||
|
VALUE_CONTENTS_RAW (arg1) + offset
|
||||||
|
+ TYPE_FIELD_BITPOS (arg_type, fieldno) / 8,
|
||||||
TYPE_LENGTH (type));
|
TYPE_LENGTH (type));
|
||||||
}
|
}
|
||||||
VALUE_LVAL (v) = VALUE_LVAL (arg1);
|
VALUE_LVAL (v) = VALUE_LVAL (arg1);
|
||||||
if (VALUE_LVAL (arg1) == lval_internalvar)
|
if (VALUE_LVAL (arg1) == lval_internalvar)
|
||||||
VALUE_LVAL (v) = lval_internalvar_component;
|
VALUE_LVAL (v) = lval_internalvar_component;
|
||||||
VALUE_ADDRESS (v) = VALUE_ADDRESS (arg1);
|
VALUE_ADDRESS (v) = VALUE_ADDRESS (arg1);
|
||||||
VALUE_OFFSET (v) = offset + VALUE_OFFSET (arg1);
|
VALUE_OFFSET (v) = VALUE_OFFSET (arg1) + offset
|
||||||
|
+ TYPE_FIELD_BITPOS (arg_type, fieldno) / 8;
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue