gdb
* dwarf2loc.c (extract_bits_primitive): New function. (extract_bits): Likewise. (insert_bits): Likewise. (copy_bitwise): Likewise. (read_pieced_value): Do all operations in bits. (write_pieced_value): Likewise. * dwarf2expr.h (struct dwarf_expr_piece) <offset>: New field. * dwarf2expr.c (add_piece): New arguments bit_piece, offset. Always use xrealloc to resize piece array. (execute_stack_op) <DW_OP_reg0>: Handle DW_OP_bit_piece. <DW_OP_piece>: Update. <DW_OP_bit_piece>: New case. gdb/testsuite * gdb.dwarf2/pieces.exp (pieces_test_f3): New proc. Call it. * gdb.dwarf2/pieces.S: Update. * gdb.dwarf2/pieces.c (struct B): Remove initial field.
This commit is contained in:
parent
cb82636715
commit
d3b1e87423
8 changed files with 403 additions and 102 deletions
|
@ -155,7 +155,7 @@ struct dwarf_expr_context
|
|||
};
|
||||
|
||||
|
||||
/* A piece of an object, as recorded by DW_OP_piece. */
|
||||
/* A piece of an object, as recorded by DW_OP_piece or DW_OP_bit_piece. */
|
||||
struct dwarf_expr_piece
|
||||
{
|
||||
enum dwarf_value_location location;
|
||||
|
@ -181,8 +181,10 @@ struct dwarf_expr_piece
|
|||
} literal;
|
||||
} v;
|
||||
|
||||
/* The length of the piece, in bytes. */
|
||||
/* The length of the piece, in bits. */
|
||||
ULONGEST size;
|
||||
/* The piece offset, in bits. */
|
||||
ULONGEST offset;
|
||||
};
|
||||
|
||||
struct dwarf_expr_context *new_dwarf_expr_context (void);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue