mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-21 01:12:32 +08:00
* ax-gdb.c (gen_bitfield_ref): Add EXP argument, use expression
architecture instead of current_gdbarch. (gen_struct_ref): Add EXP argument, pass to get_bitfield_ref. (gen_expr): Pass expression to get_struct_ref. * symtab.h (struct symbol_ops): Add GDBARCH parameter to tracepoint_var_ref callback. * ax-gdb.c (gen_var_ref): Pass architecture to tracepoint_var_ref symbol operation callback. * dwarf2loc.c (dwarf2_tracepoint_var_ref): Add GDBARCH parameter. Use it instead of current_gdbarch. (locexpr_tracepoint_var_ref): Add GDBARCH parameter. Pass it to dwarf2_tracepoint_var_ref. (loclist_tracepoint_var_ref): Likewise.
This commit is contained in:
parent
55f960e1d2
commit
505e835dc0
@ -1,3 +1,20 @@
|
||||
2009-06-17 Ulrich Weigand <uweigand@de.ibm.com>
|
||||
|
||||
* ax-gdb.c (gen_bitfield_ref): Add EXP argument, use expression
|
||||
architecture instead of current_gdbarch.
|
||||
(gen_struct_ref): Add EXP argument, pass to get_bitfield_ref.
|
||||
(gen_expr): Pass expression to get_struct_ref.
|
||||
|
||||
* symtab.h (struct symbol_ops): Add GDBARCH parameter to
|
||||
tracepoint_var_ref callback.
|
||||
* ax-gdb.c (gen_var_ref): Pass architecture to tracepoint_var_ref
|
||||
symbol operation callback.
|
||||
* dwarf2loc.c (dwarf2_tracepoint_var_ref): Add GDBARCH parameter.
|
||||
Use it instead of current_gdbarch.
|
||||
(locexpr_tracepoint_var_ref): Add GDBARCH parameter. Pass it to
|
||||
dwarf2_tracepoint_var_ref.
|
||||
(loclist_tracepoint_var_ref): Likewise.
|
||||
|
||||
2009-06-17 Ulrich Weigand <uweigand@de.ibm.com>
|
||||
|
||||
* prologue-value.c (make_pv_area): Add ADDR_BIT argument.
|
||||
|
22
gdb/ax-gdb.c
22
gdb/ax-gdb.c
@ -124,10 +124,10 @@ static void gen_complement (struct agent_expr *ax, struct axs_value *value);
|
||||
static void gen_deref (struct agent_expr *, struct axs_value *);
|
||||
static void gen_address_of (struct agent_expr *, struct axs_value *);
|
||||
static int find_field (struct type *type, char *name);
|
||||
static void gen_bitfield_ref (struct agent_expr *ax,
|
||||
static void gen_bitfield_ref (struct expression *exp, struct agent_expr *ax,
|
||||
struct axs_value *value,
|
||||
struct type *type, int start, int end);
|
||||
static void gen_struct_ref (struct agent_expr *ax,
|
||||
static void gen_struct_ref (struct expression *exp, struct agent_expr *ax,
|
||||
struct axs_value *value,
|
||||
char *field,
|
||||
char *operator_name, char *operand_name);
|
||||
@ -623,7 +623,7 @@ gen_var_ref (struct gdbarch *gdbarch, struct agent_expr *ax,
|
||||
Unfortunately DWARF 2 stores the frame-base (instead of the
|
||||
function) location in a function's symbol. Oops! For the
|
||||
moment enable this when/where applicable. */
|
||||
SYMBOL_COMPUTED_OPS (var)->tracepoint_var_ref (var, ax, value);
|
||||
SYMBOL_COMPUTED_OPS (var)->tracepoint_var_ref (var, gdbarch, ax, value);
|
||||
break;
|
||||
|
||||
case LOC_OPTIMIZED_OUT:
|
||||
@ -1147,8 +1147,9 @@ find_field (struct type *type, char *name)
|
||||
starting and one-past-ending *bit* numbers of the field within the
|
||||
structure. */
|
||||
static void
|
||||
gen_bitfield_ref (struct agent_expr *ax, struct axs_value *value,
|
||||
struct type *type, int start, int end)
|
||||
gen_bitfield_ref (struct expression *exp, struct agent_expr *ax,
|
||||
struct axs_value *value, struct type *type,
|
||||
int start, int end)
|
||||
{
|
||||
/* Note that ops[i] fetches 8 << i bits. */
|
||||
static enum agent_op ops[]
|
||||
@ -1274,7 +1275,7 @@ gen_bitfield_ref (struct agent_expr *ax, struct axs_value *value,
|
||||
the sign/zero extension will wipe them out.
|
||||
- If we're in the interior of the word, then there is no garbage
|
||||
on either end, because the ref operators zero-extend. */
|
||||
if (gdbarch_byte_order (current_gdbarch) == BFD_ENDIAN_BIG)
|
||||
if (gdbarch_byte_order (exp->gdbarch) == BFD_ENDIAN_BIG)
|
||||
gen_left_shift (ax, end - (offset + op_size));
|
||||
else
|
||||
gen_left_shift (ax, offset - start);
|
||||
@ -1308,7 +1309,8 @@ gen_bitfield_ref (struct agent_expr *ax, struct axs_value *value,
|
||||
the operator being compiled, and OPERAND_NAME is the kind of thing
|
||||
it operates on; we use them in error messages. */
|
||||
static void
|
||||
gen_struct_ref (struct agent_expr *ax, struct axs_value *value, char *field,
|
||||
gen_struct_ref (struct expression *exp, struct agent_expr *ax,
|
||||
struct axs_value *value, char *field,
|
||||
char *operator_name, char *operand_name)
|
||||
{
|
||||
struct type *type;
|
||||
@ -1339,7 +1341,7 @@ gen_struct_ref (struct agent_expr *ax, struct axs_value *value, char *field,
|
||||
|
||||
/* Is this a bitfield? */
|
||||
if (TYPE_FIELD_PACKED (type, i))
|
||||
gen_bitfield_ref (ax, value, TYPE_FIELD_TYPE (type, i),
|
||||
gen_bitfield_ref (exp, ax, value, TYPE_FIELD_TYPE (type, i),
|
||||
TYPE_FIELD_BITPOS (type, i),
|
||||
(TYPE_FIELD_BITPOS (type, i)
|
||||
+ TYPE_FIELD_BITSIZE (type, i)));
|
||||
@ -1698,9 +1700,9 @@ gen_expr (struct expression *exp, union exp_element **pc,
|
||||
(*pc) += 4 + BYTES_TO_EXP_ELEM (length + 1);
|
||||
gen_expr (exp, pc, ax, value);
|
||||
if (op == STRUCTOP_STRUCT)
|
||||
gen_struct_ref (ax, value, name, ".", "structure or union");
|
||||
gen_struct_ref (exp, ax, value, name, ".", "structure or union");
|
||||
else if (op == STRUCTOP_PTR)
|
||||
gen_struct_ref (ax, value, name, "->",
|
||||
gen_struct_ref (exp, ax, value, name, "->",
|
||||
"pointer to a structure or union");
|
||||
else
|
||||
/* If this `if' chain doesn't handle it, then the case list
|
||||
|
@ -366,9 +366,9 @@ dwarf2_loc_desc_needs_frame (gdb_byte *data, unsigned short size,
|
||||
}
|
||||
|
||||
static void
|
||||
dwarf2_tracepoint_var_ref (struct symbol *symbol, struct agent_expr *ax,
|
||||
struct axs_value *value, gdb_byte *data,
|
||||
int size)
|
||||
dwarf2_tracepoint_var_ref (struct symbol *symbol, struct gdbarch *gdbarch,
|
||||
struct agent_expr *ax, struct axs_value *value,
|
||||
gdb_byte *data, int size)
|
||||
{
|
||||
if (size == 0)
|
||||
error (_("Symbol \"%s\" has been optimized out."),
|
||||
@ -401,7 +401,7 @@ dwarf2_tracepoint_var_ref (struct symbol *symbol, struct agent_expr *ax,
|
||||
error (_("Unexpected opcode after DW_OP_fbreg for symbol \"%s\"."),
|
||||
SYMBOL_PRINT_NAME (symbol));
|
||||
|
||||
gdbarch_virtual_frame_pointer (current_gdbarch,
|
||||
gdbarch_virtual_frame_pointer (gdbarch,
|
||||
ax->scope, &frame_reg, &frame_offset);
|
||||
ax_reg (ax, frame_reg);
|
||||
ax_const_l (ax, frame_offset);
|
||||
@ -522,12 +522,13 @@ locexpr_describe_location (struct symbol *symbol, struct ui_file *stream)
|
||||
against. When there is one this function should be revisited. */
|
||||
|
||||
static void
|
||||
locexpr_tracepoint_var_ref (struct symbol * symbol, struct agent_expr * ax,
|
||||
struct axs_value * value)
|
||||
locexpr_tracepoint_var_ref (struct symbol *symbol, struct gdbarch *gdbarch,
|
||||
struct agent_expr *ax, struct axs_value *value)
|
||||
{
|
||||
struct dwarf2_locexpr_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
|
||||
|
||||
dwarf2_tracepoint_var_ref (symbol, ax, value, dlbaton->data, dlbaton->size);
|
||||
dwarf2_tracepoint_var_ref (symbol, gdbarch, ax, value,
|
||||
dlbaton->data, dlbaton->size);
|
||||
}
|
||||
|
||||
/* The set of location functions used with the DWARF-2 expression
|
||||
@ -594,8 +595,8 @@ loclist_describe_location (struct symbol *symbol, struct ui_file *stream)
|
||||
/* Describe the location of SYMBOL as an agent value in VALUE, generating
|
||||
any necessary bytecode in AX. */
|
||||
static void
|
||||
loclist_tracepoint_var_ref (struct symbol * symbol, struct agent_expr * ax,
|
||||
struct axs_value * value)
|
||||
loclist_tracepoint_var_ref (struct symbol *symbol, struct gdbarch *gdbarch,
|
||||
struct agent_expr *ax, struct axs_value *value)
|
||||
{
|
||||
struct dwarf2_loclist_baton *dlbaton = SYMBOL_LOCATION_BATON (symbol);
|
||||
gdb_byte *data;
|
||||
@ -605,7 +606,7 @@ loclist_tracepoint_var_ref (struct symbol * symbol, struct agent_expr * ax,
|
||||
if (data == NULL)
|
||||
error (_("Variable \"%s\" is not available."), SYMBOL_NATURAL_NAME (symbol));
|
||||
|
||||
dwarf2_tracepoint_var_ref (symbol, ax, value, data, size);
|
||||
dwarf2_tracepoint_var_ref (symbol, gdbarch, ax, value, data, size);
|
||||
}
|
||||
|
||||
/* The set of location functions used with the DWARF-2 expression
|
||||
|
@ -527,8 +527,8 @@ struct symbol_computed_ops
|
||||
the caller will generate the right code in the process of
|
||||
treating this as an lvalue or rvalue. */
|
||||
|
||||
void (*tracepoint_var_ref) (struct symbol * symbol, struct agent_expr * ax,
|
||||
struct axs_value * value);
|
||||
void (*tracepoint_var_ref) (struct symbol *symbol, struct gdbarch *gdbarch,
|
||||
struct agent_expr *ax, struct axs_value *value);
|
||||
};
|
||||
|
||||
/* Functions used with LOC_REGISTER and LOC_REGPARM_ADDR. */
|
||||
|
Loading…
Reference in New Issue
Block a user