* dwarf2-frame.c (dwarf2_frame_prev_register): Use pack_long
instead of store_typed_address. * value.c (pack_long): New. (value_from_longest): Use it. * value.h (pack_long): New prototype.
This commit is contained in:
parent
f2fec86445
commit
14d0675011
@ -1,3 +1,11 @@
|
||||
2007-05-14 Daniel Jacobowitz <dan@codesourcery.com>
|
||||
|
||||
* dwarf2-frame.c (dwarf2_frame_prev_register): Use pack_long
|
||||
instead of store_typed_address.
|
||||
* value.c (pack_long): New.
|
||||
(value_from_longest): Use it.
|
||||
* value.h (pack_long): New prototype.
|
||||
|
||||
2007-05-14 Daniel Jacobowitz <dan@codesourcery.com>
|
||||
|
||||
* dwarf2-frame.c (read_encoded_value): Correct typo. Use
|
||||
|
@ -1137,10 +1137,7 @@ dwarf2_frame_prev_register (struct frame_info *next_frame, void **this_cache,
|
||||
*addrp = 0;
|
||||
*realnump = -1;
|
||||
if (valuep)
|
||||
{
|
||||
/* Store the value. */
|
||||
store_typed_address (valuep, builtin_type_void_data_ptr, cache->cfa);
|
||||
}
|
||||
pack_long (valuep, register_type (gdbarch, regnum), cache->cfa);
|
||||
break;
|
||||
|
||||
case DWARF2_FRAME_REG_CFA_OFFSET:
|
||||
@ -1149,11 +1146,8 @@ dwarf2_frame_prev_register (struct frame_info *next_frame, void **this_cache,
|
||||
*addrp = 0;
|
||||
*realnump = -1;
|
||||
if (valuep)
|
||||
{
|
||||
/* Store the value. */
|
||||
store_typed_address (valuep, builtin_type_void_data_ptr,
|
||||
cache->cfa + cache->reg[regnum].loc.offset);
|
||||
}
|
||||
pack_long (valuep, register_type (gdbarch, regnum),
|
||||
cache->cfa + cache->reg[regnum].loc.offset);
|
||||
break;
|
||||
|
||||
case DWARF2_FRAME_REG_RA_OFFSET:
|
||||
@ -1167,7 +1161,7 @@ dwarf2_frame_prev_register (struct frame_info *next_frame, void **this_cache,
|
||||
|
||||
regnum = DWARF2_REG_TO_REGNUM (cache->retaddr_reg.loc.reg);
|
||||
pc += frame_unwind_register_unsigned (next_frame, regnum);
|
||||
store_typed_address (valuep, builtin_type_void_func_ptr, pc);
|
||||
pack_long (valuep, register_type (gdbarch, regnum), pc);
|
||||
}
|
||||
break;
|
||||
|
||||
|
36
gdb/value.c
36
gdb/value.c
@ -1505,23 +1505,18 @@ modify_field (gdb_byte *addr, LONGEST fieldval, int bitpos, int bitsize)
|
||||
store_unsigned_integer (addr, sizeof oword, oword);
|
||||
}
|
||||
|
||||
/* Convert C numbers into newly allocated values */
|
||||
/* Pack NUM into BUF using a target format of TYPE. */
|
||||
|
||||
struct value *
|
||||
value_from_longest (struct type *type, LONGEST num)
|
||||
void
|
||||
pack_long (gdb_byte *buf, struct type *type, LONGEST num)
|
||||
{
|
||||
struct value *val = allocate_value (type);
|
||||
enum type_code code;
|
||||
int len;
|
||||
retry:
|
||||
code = TYPE_CODE (type);
|
||||
|
||||
type = check_typedef (type);
|
||||
len = TYPE_LENGTH (type);
|
||||
|
||||
switch (code)
|
||||
switch (TYPE_CODE (type))
|
||||
{
|
||||
case TYPE_CODE_TYPEDEF:
|
||||
type = check_typedef (type);
|
||||
goto retry;
|
||||
case TYPE_CODE_INT:
|
||||
case TYPE_CODE_CHAR:
|
||||
case TYPE_CODE_ENUM:
|
||||
@ -1529,17 +1524,30 @@ retry:
|
||||
case TYPE_CODE_BOOL:
|
||||
case TYPE_CODE_RANGE:
|
||||
case TYPE_CODE_MEMBERPTR:
|
||||
store_signed_integer (value_contents_raw (val), len, num);
|
||||
store_signed_integer (buf, len, num);
|
||||
break;
|
||||
|
||||
case TYPE_CODE_REF:
|
||||
case TYPE_CODE_PTR:
|
||||
store_typed_address (value_contents_raw (val), type, (CORE_ADDR) num);
|
||||
store_typed_address (buf, type, (CORE_ADDR) num);
|
||||
break;
|
||||
|
||||
default:
|
||||
error (_("Unexpected type (%d) encountered for integer constant."), code);
|
||||
error (_("Unexpected type (%d) encountered for integer constant."),
|
||||
TYPE_CODE (type));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Convert C numbers into newly allocated values. */
|
||||
|
||||
struct value *
|
||||
value_from_longest (struct type *type, LONGEST num)
|
||||
{
|
||||
struct value *val = allocate_value (type);
|
||||
|
||||
pack_long (value_contents_raw (val), type, num);
|
||||
|
||||
return val;
|
||||
}
|
||||
|
||||
|
@ -271,6 +271,8 @@ extern LONGEST unpack_field_as_long (struct type *type,
|
||||
const gdb_byte *valaddr,
|
||||
int fieldno);
|
||||
|
||||
extern void pack_long (gdb_byte *buf, struct type *type, LONGEST num);
|
||||
|
||||
extern struct value *value_from_longest (struct type *type, LONGEST num);
|
||||
extern struct value *value_from_pointer (struct type *type, CORE_ADDR addr);
|
||||
extern struct value *value_from_double (struct type *type, DOUBLEST num);
|
||||
|
Loading…
x
Reference in New Issue
Block a user