* dwarf2loc.c (dwarf_expr_frame_base): Constify.

(dwarf_expr_frame_base_1): Likewise.
	(read_pieced_value): Update.
	(needs_frame_frame_base): Constify.
	(dwarf2_tracepoint_var_loc): Likewise.
	(dwarf2_tracepoint_var_access): Likewise.
	(locexpr_describe_location_piece): Likewise.
	(locexpr_describe_location_1): Likewise.
	* dwarf2expr.h (struct dwarf_expr_context) <get_frame_base>:
	Constify.
	(data): Now const.
	(struct dwarf_expr_piece) <v.literal.data>: Likewise.
	(dwarf_expr_eval, read_uleb128, read_sleb128)
	(dwarf2_read_address): Update.
	* dwarf2expr.c (dwarf_expr_eval): Constify.
	(read_uleb128): Likewise.
	(read_sleb128): Likewise.
	(dwarf2_read_address): Likewise.
	(require_composition): Likewise.
	(execute_stack_op): Likewise.
	* dwarf2-frame.h (struct dwarf2_frame_state_reg) <loc.exp>: Now a
	"const gdb_byte *".
	* dwarf2-frame.c (struct dwarf2_frame_state_reg_info) <cfa_exp>:
	Now const.
	(no_get_frame_base): Constify.
	(execute_stack_op): Likewise.
	(execute_cfa_program): Likewise.
	(read_encoded_value): Likewise.
This commit is contained in:
Tom Tromey 2010-05-25 16:41:46 +00:00
parent e34838f0f7
commit 0d45f56e47
6 changed files with 85 additions and 47 deletions

View file

@ -1,3 +1,34 @@
2010-05-25 Tom Tromey <tromey@redhat.com>
* dwarf2loc.c (dwarf_expr_frame_base): Constify.
(dwarf_expr_frame_base_1): Likewise.
(read_pieced_value): Update.
(needs_frame_frame_base): Constify.
(dwarf2_tracepoint_var_loc): Likewise.
(dwarf2_tracepoint_var_access): Likewise.
(locexpr_describe_location_piece): Likewise.
(locexpr_describe_location_1): Likewise.
* dwarf2expr.h (struct dwarf_expr_context) <get_frame_base>:
Constify.
(data): Now const.
(struct dwarf_expr_piece) <v.literal.data>: Likewise.
(dwarf_expr_eval, read_uleb128, read_sleb128)
(dwarf2_read_address): Update.
* dwarf2expr.c (dwarf_expr_eval): Constify.
(read_uleb128): Likewise.
(read_sleb128): Likewise.
(dwarf2_read_address): Likewise.
(require_composition): Likewise.
(execute_stack_op): Likewise.
* dwarf2-frame.h (struct dwarf2_frame_state_reg) <loc.exp>: Now a
"const gdb_byte *".
* dwarf2-frame.c (struct dwarf2_frame_state_reg_info) <cfa_exp>:
Now const.
(no_get_frame_base): Constify.
(execute_stack_op): Likewise.
(execute_cfa_program): Likewise.
(read_encoded_value): Likewise.
2010-05-25 Doug Evans <dje@google.com> 2010-05-25 Doug Evans <dje@google.com>
* ser-pipe.c (pipe_open): Ignore SIGINTs in child. * ser-pipe.c (pipe_open): Ignore SIGINTs in child.

View file

@ -156,7 +156,7 @@ static int dwarf2_frame_adjust_regnum (struct gdbarch *gdbarch, int regnum,
int eh_frame_p); int eh_frame_p);
static CORE_ADDR read_encoded_value (struct comp_unit *unit, gdb_byte encoding, static CORE_ADDR read_encoded_value (struct comp_unit *unit, gdb_byte encoding,
int ptr_len, gdb_byte *buf, int ptr_len, const gdb_byte *buf,
unsigned int *bytes_read_ptr, unsigned int *bytes_read_ptr,
CORE_ADDR func_base); CORE_ADDR func_base);
@ -179,7 +179,7 @@ struct dwarf2_frame_state
CFA_REG_OFFSET, CFA_REG_OFFSET,
CFA_EXP CFA_EXP
} cfa_how; } cfa_how;
gdb_byte *cfa_exp; const gdb_byte *cfa_exp;
/* Used to implement DW_CFA_remember_state. */ /* Used to implement DW_CFA_remember_state. */
struct dwarf2_frame_state_reg_info *prev; struct dwarf2_frame_state_reg_info *prev;
@ -306,7 +306,7 @@ read_mem (void *baton, gdb_byte *buf, CORE_ADDR addr, size_t len)
} }
static void static void
no_get_frame_base (void *baton, gdb_byte **start, size_t *length) no_get_frame_base (void *baton, const gdb_byte **start, size_t *length)
{ {
internal_error (__FILE__, __LINE__, internal_error (__FILE__, __LINE__,
_("Support for DW_OP_fbreg is unimplemented")); _("Support for DW_OP_fbreg is unimplemented"));
@ -359,7 +359,7 @@ register %s (#%d) at %s"),
} }
static CORE_ADDR static CORE_ADDR
execute_stack_op (gdb_byte *exp, ULONGEST len, int addr_size, execute_stack_op (const gdb_byte *exp, ULONGEST len, int addr_size,
struct frame_info *this_frame, CORE_ADDR initial, struct frame_info *this_frame, CORE_ADDR initial,
int initial_in_stack_memory) int initial_in_stack_memory)
{ {
@ -400,8 +400,8 @@ execute_stack_op (gdb_byte *exp, ULONGEST len, int addr_size,
static void static void
execute_cfa_program (struct dwarf2_fde *fde, gdb_byte *insn_ptr, execute_cfa_program (struct dwarf2_fde *fde, const gdb_byte *insn_ptr,
gdb_byte *insn_end, struct frame_info *this_frame, const gdb_byte *insn_end, struct frame_info *this_frame,
struct dwarf2_frame_state *fs) struct dwarf2_frame_state *fs)
{ {
int eh_frame_p = fde->eh_frame_p; int eh_frame_p = fde->eh_frame_p;
@ -1411,7 +1411,8 @@ encoding_for_size (unsigned int size)
static CORE_ADDR static CORE_ADDR
read_encoded_value (struct comp_unit *unit, gdb_byte encoding, read_encoded_value (struct comp_unit *unit, gdb_byte encoding,
int ptr_len, gdb_byte *buf, unsigned int *bytes_read_ptr, int ptr_len, const gdb_byte *buf,
unsigned int *bytes_read_ptr,
CORE_ADDR func_base) CORE_ADDR func_base)
{ {
ptrdiff_t offset; ptrdiff_t offset;
@ -1468,7 +1469,7 @@ read_encoded_value (struct comp_unit *unit, gdb_byte encoding,
case DW_EH_PE_uleb128: case DW_EH_PE_uleb128:
{ {
ULONGEST value; ULONGEST value;
gdb_byte *end_buf = buf + (sizeof (value) + 1) * 8 / 7; const gdb_byte *end_buf = buf + (sizeof (value) + 1) * 8 / 7;
*bytes_read_ptr += read_uleb128 (buf, end_buf, &value) - buf; *bytes_read_ptr += read_uleb128 (buf, end_buf, &value) - buf;
return base + value; return base + value;
@ -1485,7 +1486,7 @@ read_encoded_value (struct comp_unit *unit, gdb_byte encoding,
case DW_EH_PE_sleb128: case DW_EH_PE_sleb128:
{ {
LONGEST value; LONGEST value;
gdb_byte *end_buf = buf + (sizeof (value) + 1) * 8 / 7; const gdb_byte *end_buf = buf + (sizeof (value) + 1) * 8 / 7;
*bytes_read_ptr += read_sleb128 (buf, end_buf, &value) - buf; *bytes_read_ptr += read_sleb128 (buf, end_buf, &value) - buf;
return base + value; return base + value;

View file

@ -72,7 +72,7 @@ struct dwarf2_frame_state_reg
union { union {
LONGEST offset; LONGEST offset;
ULONGEST reg; ULONGEST reg;
unsigned char *exp; const gdb_byte *exp;
struct value *(*fn) (struct frame_info *this_frame, void **this_cache, struct value *(*fn) (struct frame_info *this_frame, void **this_cache,
int regnum); int regnum);
} loc; } loc;

View file

@ -32,7 +32,7 @@
/* Local prototypes. */ /* Local prototypes. */
static void execute_stack_op (struct dwarf_expr_context *, static void execute_stack_op (struct dwarf_expr_context *,
gdb_byte *, gdb_byte *); const gdb_byte *, const gdb_byte *);
static struct type *unsigned_address_type (struct gdbarch *, int); static struct type *unsigned_address_type (struct gdbarch *, int);
/* Create a new context for the expression evaluator. */ /* Create a new context for the expression evaluator. */
@ -193,7 +193,8 @@ add_piece (struct dwarf_expr_context *ctx, ULONGEST size, ULONGEST offset)
CTX. */ CTX. */
void void
dwarf_expr_eval (struct dwarf_expr_context *ctx, gdb_byte *addr, size_t len) dwarf_expr_eval (struct dwarf_expr_context *ctx, const gdb_byte *addr,
size_t len)
{ {
int old_recursion_depth = ctx->recursion_depth; int old_recursion_depth = ctx->recursion_depth;
@ -208,8 +209,8 @@ dwarf_expr_eval (struct dwarf_expr_context *ctx, gdb_byte *addr, size_t len)
by R, and return the new value of BUF. Verify that it doesn't extend by R, and return the new value of BUF. Verify that it doesn't extend
past BUF_END. */ past BUF_END. */
gdb_byte * const gdb_byte *
read_uleb128 (gdb_byte *buf, gdb_byte *buf_end, ULONGEST * r) read_uleb128 (const gdb_byte *buf, const gdb_byte *buf_end, ULONGEST * r)
{ {
unsigned shift = 0; unsigned shift = 0;
ULONGEST result = 0; ULONGEST result = 0;
@ -234,8 +235,8 @@ read_uleb128 (gdb_byte *buf, gdb_byte *buf_end, ULONGEST * r)
by R, and return the new value of BUF. Verify that it doesn't extend by R, and return the new value of BUF. Verify that it doesn't extend
past BUF_END. */ past BUF_END. */
gdb_byte * const gdb_byte *
read_sleb128 (gdb_byte *buf, gdb_byte *buf_end, LONGEST * r) read_sleb128 (const gdb_byte *buf, const gdb_byte *buf_end, LONGEST * r)
{ {
unsigned shift = 0; unsigned shift = 0;
LONGEST result = 0; LONGEST result = 0;
@ -263,8 +264,8 @@ read_sleb128 (gdb_byte *buf, gdb_byte *buf_end, LONGEST * r)
doesn't extend past BUF_END. */ doesn't extend past BUF_END. */
CORE_ADDR CORE_ADDR
dwarf2_read_address (struct gdbarch *gdbarch, gdb_byte *buf, dwarf2_read_address (struct gdbarch *gdbarch, const gdb_byte *buf,
gdb_byte *buf_end, int addr_size) const gdb_byte *buf_end, int addr_size)
{ {
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
@ -334,7 +335,8 @@ signed_address_type (struct gdbarch *gdbarch, int addr_size)
expression, or that it is followed by a composition operator. */ expression, or that it is followed by a composition operator. */
static void static void
require_composition (gdb_byte *op_ptr, gdb_byte *op_end, const char *op_name) require_composition (const gdb_byte *op_ptr, const gdb_byte *op_end,
const char *op_name)
{ {
/* It seems like DW_OP_GNU_uninit should be handled here. However, /* It seems like DW_OP_GNU_uninit should be handled here. However,
it doesn't seem to make sense for DW_OP_*_value, and it was not it doesn't seem to make sense for DW_OP_*_value, and it was not
@ -351,7 +353,7 @@ require_composition (gdb_byte *op_ptr, gdb_byte *op_end, const char *op_name)
static void static void
execute_stack_op (struct dwarf_expr_context *ctx, execute_stack_op (struct dwarf_expr_context *ctx,
gdb_byte *op_ptr, gdb_byte *op_end) const gdb_byte *op_ptr, const gdb_byte *op_end)
{ {
enum bfd_endian byte_order = gdbarch_byte_order (ctx->gdbarch); enum bfd_endian byte_order = gdbarch_byte_order (ctx->gdbarch);
@ -583,7 +585,7 @@ execute_stack_op (struct dwarf_expr_context *ctx,
break; break;
case DW_OP_fbreg: case DW_OP_fbreg:
{ {
gdb_byte *datastart; const gdb_byte *datastart;
size_t datalen; size_t datalen;
unsigned int before_stack_len; unsigned int before_stack_len;

View file

@ -88,7 +88,7 @@ struct dwarf_expr_context
/* Return the location expression for the frame base attribute, in /* Return the location expression for the frame base attribute, in
START and LENGTH. The result must be live until the current START and LENGTH. The result must be live until the current
expression evaluation is complete. */ expression evaluation is complete. */
void (*get_frame_base) (void *baton, gdb_byte **start, size_t *length); void (*get_frame_base) (void *baton, const gdb_byte **start, size_t *length);
/* Return the CFA for the frame. */ /* Return the CFA for the frame. */
CORE_ADDR (*get_frame_cfa) (void *baton); CORE_ADDR (*get_frame_cfa) (void *baton);
@ -121,7 +121,7 @@ struct dwarf_expr_context
/* For VALUE_LITERAL, a the current literal value's length and /* For VALUE_LITERAL, a the current literal value's length and
data. */ data. */
ULONGEST len; ULONGEST len;
gdb_byte *data; const gdb_byte *data;
/* Initialization status of variable: Non-zero if variable has been /* Initialization status of variable: Non-zero if variable has been
initialized; zero otherwise. */ initialized; zero otherwise. */
@ -175,7 +175,7 @@ struct dwarf_expr_piece
{ {
/* A pointer to the data making up this piece, for literal /* A pointer to the data making up this piece, for literal
pieces. */ pieces. */
gdb_byte *data; const gdb_byte *data;
/* The length of the available data. */ /* The length of the available data. */
ULONGEST length; ULONGEST length;
} literal; } literal;
@ -195,15 +195,17 @@ struct cleanup *
void dwarf_expr_push (struct dwarf_expr_context *ctx, CORE_ADDR value, void dwarf_expr_push (struct dwarf_expr_context *ctx, CORE_ADDR value,
int in_stack_memory); int in_stack_memory);
void dwarf_expr_pop (struct dwarf_expr_context *ctx); void dwarf_expr_pop (struct dwarf_expr_context *ctx);
void dwarf_expr_eval (struct dwarf_expr_context *ctx, unsigned char *addr, void dwarf_expr_eval (struct dwarf_expr_context *ctx, const gdb_byte *addr,
size_t len); size_t len);
CORE_ADDR dwarf_expr_fetch (struct dwarf_expr_context *ctx, int n); CORE_ADDR dwarf_expr_fetch (struct dwarf_expr_context *ctx, int n);
int dwarf_expr_fetch_in_stack_memory (struct dwarf_expr_context *ctx, int n); int dwarf_expr_fetch_in_stack_memory (struct dwarf_expr_context *ctx, int n);
gdb_byte *read_uleb128 (gdb_byte *buf, gdb_byte *buf_end, ULONGEST * r); const gdb_byte *read_uleb128 (const gdb_byte *buf, const gdb_byte *buf_end,
gdb_byte *read_sleb128 (gdb_byte *buf, gdb_byte *buf_end, LONGEST * r); ULONGEST * r);
CORE_ADDR dwarf2_read_address (struct gdbarch *gdbarch, gdb_byte *buf, const gdb_byte *read_sleb128 (const gdb_byte *buf, const gdb_byte *buf_end,
gdb_byte *buf_end, int addr_size); LONGEST * r);
CORE_ADDR dwarf2_read_address (struct gdbarch *gdbarch, const gdb_byte *buf,
const gdb_byte *buf_end, int addr_size);
#endif /* dwarf2expr.h */ #endif /* dwarf2expr.h */

View file

@ -44,7 +44,7 @@
static void static void
dwarf_expr_frame_base_1 (struct symbol *framefunc, CORE_ADDR pc, dwarf_expr_frame_base_1 (struct symbol *framefunc, CORE_ADDR pc,
gdb_byte **start, size_t *length); const gdb_byte **start, size_t *length);
/* A helper function for dealing with location lists. Given a /* A helper function for dealing with location lists. Given a
symbol baton (BATON) and a pc value (PC), find the appropriate symbol baton (BATON) and a pc value (PC), find the appropriate
@ -153,7 +153,7 @@ dwarf_expr_read_mem (void *baton, gdb_byte *buf, CORE_ADDR addr, size_t len)
describing the frame base. Return a pointer to it in START and describing the frame base. Return a pointer to it in START and
its length in LENGTH. */ its length in LENGTH. */
static void static void
dwarf_expr_frame_base (void *baton, gdb_byte **start, size_t * length) dwarf_expr_frame_base (void *baton, const gdb_byte **start, size_t * length)
{ {
/* FIXME: cagney/2003-03-26: This code should be using /* FIXME: cagney/2003-03-26: This code should be using
get_frame_base_address(), and then implement a dwarf2 specific get_frame_base_address(), and then implement a dwarf2 specific
@ -178,7 +178,7 @@ dwarf_expr_frame_base (void *baton, gdb_byte **start, size_t * length)
static void static void
dwarf_expr_frame_base_1 (struct symbol *framefunc, CORE_ADDR pc, dwarf_expr_frame_base_1 (struct symbol *framefunc, CORE_ADDR pc,
gdb_byte **start, size_t *length) const gdb_byte **start, size_t *length)
{ {
if (SYMBOL_LOCATION_BATON (framefunc) == NULL) if (SYMBOL_LOCATION_BATON (framefunc) == NULL)
*start = NULL; *start = NULL;
@ -463,7 +463,7 @@ read_pieced_value (struct value *v)
struct dwarf_expr_piece *p = &c->pieces[i]; struct dwarf_expr_piece *p = &c->pieces[i];
size_t this_size, this_size_bits; size_t this_size, this_size_bits;
long dest_offset_bits, source_offset_bits, source_offset; long dest_offset_bits, source_offset_bits, source_offset;
gdb_byte *intermediate_buffer; const gdb_byte *intermediate_buffer;
/* Compute size, source, and destination offsets for copying, in /* Compute size, source, and destination offsets for copying, in
bits. */ bits. */
@ -917,7 +917,7 @@ needs_frame_read_mem (void *baton, gdb_byte *buf, CORE_ADDR addr, size_t len)
/* Frame-relative accesses do require a frame. */ /* Frame-relative accesses do require a frame. */
static void static void
needs_frame_frame_base (void *baton, gdb_byte **start, size_t * length) needs_frame_frame_base (void *baton, const gdb_byte **start, size_t * length)
{ {
static gdb_byte lit0 = DW_OP_lit0; static gdb_byte lit0 = DW_OP_lit0;
struct needs_frame_baton *nf_baton = baton; struct needs_frame_baton *nf_baton = baton;
@ -1017,12 +1017,12 @@ struct axs_var_loc
LONGEST offset; LONGEST offset;
}; };
static gdb_byte * static const gdb_byte *
dwarf2_tracepoint_var_loc (struct symbol *symbol, dwarf2_tracepoint_var_loc (struct symbol *symbol,
struct agent_expr *ax, struct agent_expr *ax,
struct axs_var_loc *loc, struct axs_var_loc *loc,
struct gdbarch *gdbarch, struct gdbarch *gdbarch,
gdb_byte *data, gdb_byte *end) const gdb_byte *data, const gdb_byte *end)
{ {
if (data[0] >= DW_OP_reg0 && data[0] <= DW_OP_reg31) if (data[0] >= DW_OP_reg0 && data[0] <= DW_OP_reg31)
{ {
@ -1044,7 +1044,7 @@ dwarf2_tracepoint_var_loc (struct symbol *symbol,
struct symbol *framefunc; struct symbol *framefunc;
int frame_reg = 0; int frame_reg = 0;
LONGEST frame_offset; LONGEST frame_offset;
gdb_byte *base_data; const gdb_byte *base_data;
size_t base_size; size_t base_size;
LONGEST base_offset = 0; LONGEST base_offset = 0;
@ -1063,8 +1063,8 @@ dwarf2_tracepoint_var_loc (struct symbol *symbol,
if (base_data[0] >= DW_OP_breg0 && base_data[0] <= DW_OP_breg31) if (base_data[0] >= DW_OP_breg0 && base_data[0] <= DW_OP_breg31)
{ {
gdb_byte *buf_end; const gdb_byte *buf_end;
frame_reg = base_data[0] - DW_OP_breg0; frame_reg = base_data[0] - DW_OP_breg0;
buf_end = read_sleb128 (base_data + 1, buf_end = read_sleb128 (base_data + 1,
base_data + base_size, &base_offset); base_data + base_size, &base_offset);
@ -1143,9 +1143,9 @@ dwarf2_tracepoint_var_access (struct agent_expr *ax,
static void static void
dwarf2_tracepoint_var_ref (struct symbol *symbol, struct gdbarch *gdbarch, dwarf2_tracepoint_var_ref (struct symbol *symbol, struct gdbarch *gdbarch,
struct agent_expr *ax, struct axs_value *value, struct agent_expr *ax, struct axs_value *value,
gdb_byte *data, int size) const gdb_byte *data, int size)
{ {
gdb_byte *end = data + size; const gdb_byte *end = data + size;
enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
/* In practice, a variable is not going to be spread across /* In practice, a variable is not going to be spread across
dozens of registers or memory locations. If someone comes up dozens of registers or memory locations. If someone comes up
@ -1285,10 +1285,11 @@ locexpr_read_needs_frame (struct symbol *symbol)
/* Describe a single piece of a location, returning an updated /* Describe a single piece of a location, returning an updated
position in the bytecode sequence. */ position in the bytecode sequence. */
static gdb_byte * static const gdb_byte *
locexpr_describe_location_piece (struct symbol *symbol, struct ui_file *stream, locexpr_describe_location_piece (struct symbol *symbol, struct ui_file *stream,
CORE_ADDR addr, struct objfile *objfile, CORE_ADDR addr, struct objfile *objfile,
gdb_byte *data, int size, unsigned int addr_size) const gdb_byte *data, int size,
unsigned int addr_size)
{ {
struct gdbarch *gdbarch = get_objfile_arch (objfile); struct gdbarch *gdbarch = get_objfile_arch (objfile);
int regno; int regno;
@ -1315,7 +1316,7 @@ locexpr_describe_location_piece (struct symbol *symbol, struct ui_file *stream,
struct symbol *framefunc; struct symbol *framefunc;
int frame_reg = 0; int frame_reg = 0;
LONGEST frame_offset; LONGEST frame_offset;
gdb_byte *base_data; const gdb_byte *base_data;
size_t base_size; size_t base_size;
LONGEST base_offset = 0; LONGEST base_offset = 0;
@ -1335,7 +1336,7 @@ locexpr_describe_location_piece (struct symbol *symbol, struct ui_file *stream,
if (base_data[0] >= DW_OP_breg0 && base_data[0] <= DW_OP_breg31) if (base_data[0] >= DW_OP_breg0 && base_data[0] <= DW_OP_breg31)
{ {
gdb_byte *buf_end; const gdb_byte *buf_end;
frame_reg = base_data[0] - DW_OP_breg0; frame_reg = base_data[0] - DW_OP_breg0;
buf_end = read_sleb128 (base_data + 1, buf_end = read_sleb128 (base_data + 1,
@ -1422,10 +1423,11 @@ locexpr_describe_location_piece (struct symbol *symbol, struct ui_file *stream,
static void static void
locexpr_describe_location_1 (struct symbol *symbol, CORE_ADDR addr, locexpr_describe_location_1 (struct symbol *symbol, CORE_ADDR addr,
struct ui_file *stream, gdb_byte *data, int size, struct ui_file *stream,
const gdb_byte *data, int size,
struct objfile *objfile, unsigned int addr_size) struct objfile *objfile, unsigned int addr_size)
{ {
gdb_byte *end = data + size; const gdb_byte *end = data + size;
int piece_done = 0, first_piece = 1, bad = 0; int piece_done = 0, first_piece = 1, bad = 0;
/* A multi-piece description consists of multiple sequences of bytes /* A multi-piece description consists of multiple sequences of bytes