diff options
author | Michael Snyder <msnyder@vmware.com> | 1998-12-02 23:22:58 +0000 |
---|---|---|
committer | Michael Snyder <msnyder@vmware.com> | 1998-12-02 23:22:58 +0000 |
commit | 55be5ef5064e87136980febf6241be046ceabda8 (patch) | |
tree | e365d4ae3aed2b2a0026a85ed5edbbe5b94a326d /gdb/ax-gdb.c | |
parent | 077e3444ce573ce778928794df25f4c5394eb934 (diff) | |
download | gdb-55be5ef5064e87136980febf6241be046ceabda8.zip gdb-55be5ef5064e87136980febf6241be046ceabda8.tar.gz gdb-55be5ef5064e87136980febf6241be046ceabda8.tar.bz2 |
Wed Dec 2 15:11:38 1998 Michael Snyder <msnyder@cleaver.cygnus.com>
* tracepoint.c: Move default definition of
TARGET_VIRTUAL_FRAME_POINTER from here to target.h.
* target.h: Add default definition of TARGET_VIRTUAL_FRAME_POINTER.
* ax-gdb.c (gen_frame_args_address, gen_frame_locals_address):
use TARGET_VIRTUAL_FRAME_POINTER to determine frame pointer.
(gen_trace_for_expr): new argument, address of tracepoint,
gets passed to new_agent_expr and added to struct agent_expr.
(is_nontrivial_conversion): call to new_agent_expr now requires
a dummy argument. (agent_command): use get_current_frame() to
get current PC scope; pass it to gen_trace_for_expr.
* ax-general.c (new_agent_expr): new argument, address of
tracepoint; store it in new field of struct agent_expr.
* ax.h (struct agent_expr): add new field for tracepoint address.
* ax-gdb.h: change prototypes to match above changes.
Diffstat (limited to 'gdb/ax-gdb.c')
-rw-r--r-- | gdb/ax-gdb.c | 33 |
1 files changed, 22 insertions, 11 deletions
diff --git a/gdb/ax-gdb.c b/gdb/ax-gdb.c index de6f870..cf2d90e 100644 --- a/gdb/ax-gdb.c +++ b/gdb/ax-gdb.c @@ -27,6 +27,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "expression.h" #include "command.h" #include "gdbcmd.h" +#include "frame.h" #include "ax.h" #include "ax-gdb.h" @@ -47,7 +48,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -/* Static forward declarations */ +/* Prototypes for local functions. */ /* There's a standard order to the arguments of these functions: union exp_element ** --- pointer into expression @@ -66,7 +67,7 @@ static void gen_fetch PARAMS ((struct agent_expr *, struct type *)); static void gen_left_shift PARAMS ((struct agent_expr *, int)); -static void gen_frame_args_address PARAMS ((struct agent_expr *)); +static void gen_frame_args_address PARAMS ((struct agent_expr *)); static void gen_frame_locals_address PARAMS ((struct agent_expr *)); static void gen_offset PARAMS ((struct agent_expr *ax, int offset)); static void gen_sym_offset PARAMS ((struct agent_expr *, struct symbol *)); @@ -146,6 +147,7 @@ static void gen_sizeof PARAMS ((union exp_element **pc, static void gen_expr PARAMS ((union exp_element **pc, struct agent_expr *ax, struct axs_value *value)); + static void print_axs_value PARAMS ((GDB_FILE *f, struct axs_value *value)); static void agent_command PARAMS ((char *exp, int from_tty)); @@ -475,8 +477,11 @@ static void gen_frame_args_address (ax) struct agent_expr *ax; { - /* FIXME: I'm sure this is wrong for processors other than the 68k. */ - ax_reg (ax, FP_REGNUM); + long frame_reg, frame_offset; + + TARGET_VIRTUAL_FRAME_POINTER (ax->scope, &frame_reg, &frame_offset); + ax_reg (ax, frame_reg); + gen_offset (ax, frame_offset); } @@ -486,8 +491,11 @@ static void gen_frame_locals_address (ax) struct agent_expr *ax; { - /* FIXME: I'm sure this is wrong for processors other than the 68k. */ - ax_reg (ax, FP_REGNUM); + long frame_reg, frame_offset; + + TARGET_VIRTUAL_FRAME_POINTER (ax->scope, &frame_reg, &frame_offset); + ax_reg (ax, frame_reg); + gen_offset (ax, frame_offset); } @@ -822,7 +830,7 @@ static int is_nontrivial_conversion (from, to) struct type *from, *to; { - struct agent_expr *ax = new_agent_expr (); + struct agent_expr *ax = new_agent_expr (0); int nontrivial; /* Actually generate the code, and see if anything came out. At the @@ -1768,6 +1776,7 @@ gen_expr (pc, ax, value) +#if 0 /* not used */ /* Generating bytecode from GDB expressions: driver */ /* Given a GDB expression EXPR, produce a string of agent bytecode @@ -1820,7 +1829,7 @@ expr_to_address_and_size (expr) return ax; } - +#endif /* 0 */ /* Given a GDB expression EXPR, return bytecode to trace its value. The result will use the `trace' and `trace_quick' bytecodes to @@ -1828,11 +1837,12 @@ expr_to_address_and_size (expr) caller can then use the ax_reqs function to discover which registers it relies upon. */ struct agent_expr * -gen_trace_for_expr (expr) +gen_trace_for_expr (scope, expr) + CORE_ADDR scope; struct expression *expr; { struct cleanup *old_chain = 0; - struct agent_expr *ax = new_agent_expr (); + struct agent_expr *ax = new_agent_expr (scope); union exp_element *pc; struct axs_value value; @@ -1893,6 +1903,7 @@ agent_command (exp, from_tty) struct expression *expr; struct agent_expr *agent; struct agent_reqs reqs; + struct frame_info *fi = get_current_frame (); /* need current scope */ /* We don't deal with overlay debugging at the moment. We need to think more carefully about this. If you copy this code into @@ -1906,7 +1917,7 @@ agent_command (exp, from_tty) expr = parse_expression (exp); old_chain = make_cleanup ((make_cleanup_func) free_current_contents, &expr); - agent = gen_trace_for_expr (expr); + agent = gen_trace_for_expr (fi->pc, expr); make_cleanup ((make_cleanup_func) free_agent_expr, agent); ax_print (gdb_stdout, agent); ax_reqs (agent, &reqs); |