diff options
author | Pierre Langlois <pierre.langlois@arm.com> | 2015-07-09 16:35:11 +0100 |
---|---|---|
committer | Pierre Langlois <pierre.langlois@arm.com> | 2015-07-09 16:35:11 +0100 |
commit | ea873d8ea64281250434e198b57373f308c3bddb (patch) | |
tree | d8bb50606015ae905bb2bc3eab47a417fe8a6f1c /gdb/aarch64-tdep.c | |
parent | 02a2a705aa71646a47c955388491523a989516c5 (diff) | |
download | gdb-ea873d8ea64281250434e198b57373f308c3bddb.zip gdb-ea873d8ea64281250434e198b57373f308c3bddb.tar.gz gdb-ea873d8ea64281250434e198b57373f308c3bddb.tar.bz2 |
[AArch64] Implement gdbarch_gen_return_address gdbarch method
This patch implements the 'collect $_ret' command to collect the return
address of a function in a tracepoint. It marks the LR register for
collection.
gdb/ChangeLog:
* aarch64-tdep.c: Add ax.h and ax-gdb.h includes.
(aarch64_gen_return_address): New function.
(aarch64_gdbarch_init): Hook it.
Diffstat (limited to 'gdb/aarch64-tdep.c')
-rw-r--r-- | gdb/aarch64-tdep.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/gdb/aarch64-tdep.c b/gdb/aarch64-tdep.c index db9ea76..b613532 100644 --- a/gdb/aarch64-tdep.c +++ b/gdb/aarch64-tdep.c @@ -42,6 +42,8 @@ #include "user-regs.h" #include "language.h" #include "infcall.h" +#include "ax.h" +#include "ax-gdb.h" #include "aarch64-tdep.h" @@ -2273,6 +2275,18 @@ aarch64_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc) *pc = extract_unsigned_integer (buf, X_REGISTER_SIZE, byte_order); return 1; } + +/* Implement the "gen_return_address" gdbarch method. */ + +static void +aarch64_gen_return_address (struct gdbarch *gdbarch, + struct agent_expr *ax, struct axs_value *value, + CORE_ADDR scope) +{ + value->type = register_type (gdbarch, AARCH64_LR_REGNUM); + value->kind = axs_lvalue_register; + value->u.reg = AARCH64_LR_REGNUM; +} /* Return the pseudo register name corresponding to register regnum. */ @@ -2842,6 +2856,8 @@ aarch64_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) if (tdep->jb_pc >= 0) set_gdbarch_get_longjmp_target (gdbarch, aarch64_get_longjmp_target); + set_gdbarch_gen_return_address (gdbarch, aarch64_gen_return_address); + tdesc_use_registers (gdbarch, tdesc, tdesc_data); /* Add standard register aliases. */ |