* 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:
Daniel Jacobowitz 2007-05-14 17:21:50 +00:00
parent f2fec86445
commit 14d0675011
4 changed files with 36 additions and 24 deletions

View File

@ -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

View File

@ -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;

View File

@ -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;
}

View File

@ -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);