2005-11-03 Andrew Cagney <cagney@gnu.org>
Checked in by Elena Zannoni <ezannoni@redhat.com> * dwarf2loc.c (dwarf2_evaluate_loc_desc): Handle DW_OP_piece reads.
This commit is contained in:
parent
9b1771bc2b
commit
23572ecadc
@ -1,3 +1,10 @@
|
||||
2005-11-03 Andrew Cagney <cagney@gnu.org>
|
||||
|
||||
Checked in by Elena Zannoni <ezannoni@redhat.com>
|
||||
|
||||
* dwarf2loc.c (dwarf2_evaluate_loc_desc): Handle DW_OP_piece
|
||||
reads.
|
||||
|
||||
2006-11-03 Daniel Jacobowitz <dan@codesourcery.com>
|
||||
|
||||
* linux-nat.c (linux_nat_resume): Add more debugging messages. Do
|
||||
|
@ -302,11 +302,28 @@ dwarf2_evaluate_loc_desc (struct symbol *var, struct frame_info *frame,
|
||||
dwarf_expr_eval (ctx, data, size);
|
||||
if (ctx->num_pieces > 0)
|
||||
{
|
||||
/* We haven't implemented splicing together pieces from
|
||||
arbitrary sources yet. */
|
||||
error (_("The value of variable '%s' is distributed across several\n"
|
||||
"locations, and GDB cannot access its value.\n"),
|
||||
SYMBOL_NATURAL_NAME (var));
|
||||
int i;
|
||||
long offset = 0;
|
||||
bfd_byte *contents;
|
||||
|
||||
retval = allocate_value (SYMBOL_TYPE (var));
|
||||
contents = value_contents_raw (retval);
|
||||
for (i = 0; i < ctx->num_pieces; i++)
|
||||
{
|
||||
struct dwarf_expr_piece *p = &ctx->pieces[i];
|
||||
if (p->in_reg)
|
||||
{
|
||||
bfd_byte regval[MAX_REGISTER_SIZE];
|
||||
int gdb_regnum = DWARF2_REG_TO_REGNUM (p->value);
|
||||
get_frame_register (frame, gdb_regnum, regval);
|
||||
memcpy (contents + offset, regval, p->size);
|
||||
}
|
||||
else /* In memory? */
|
||||
{
|
||||
read_memory (p->value, contents + offset, p->size);
|
||||
}
|
||||
offset += p->size;
|
||||
}
|
||||
}
|
||||
else if (ctx->in_reg)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user