diff options
author | Ulrich Weigand <uweigand@de.ibm.com> | 2009-06-17 18:40:53 +0000 |
---|---|---|
committer | Ulrich Weigand <uweigand@de.ibm.com> | 2009-06-17 18:40:53 +0000 |
commit | 505e835dc07557a142853b0f18513b876f7b7625 (patch) | |
tree | 9fd253e9a536b82d8aa3eb8e386d42045a30abc9 /gdb/ax-gdb.c | |
parent | 55f960e1d2e58215a0c274e8d30e6036c96a2959 (diff) | |
download | gdb-505e835dc07557a142853b0f18513b876f7b7625.zip gdb-505e835dc07557a142853b0f18513b876f7b7625.tar.gz gdb-505e835dc07557a142853b0f18513b876f7b7625.tar.bz2 |
* 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.
Diffstat (limited to 'gdb/ax-gdb.c')
-rw-r--r-- | gdb/ax-gdb.c | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/gdb/ax-gdb.c b/gdb/ax-gdb.c index 0572899..5e04b07 100644 --- a/gdb/ax-gdb.c +++ b/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 |