* 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:
Tom Tromey 2010-05-21 21:13:13 +00:00
parent cb82636715
commit d3b1e87423
8 changed files with 403 additions and 102 deletions

View file

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