From ea873d8ea64281250434e198b57373f308c3bddb Mon Sep 17 00:00:00 2001 From: Pierre Langlois Date: Thu, 9 Jul 2015 16:35:11 +0100 Subject: [PATCH] [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. --- gdb/ChangeLog | 6 ++++++ gdb/aarch64-tdep.c | 16 ++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 5899173..b68b60d 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,11 @@ 2015-07-09 Pierre Langlois + * aarch64-tdep.c: Add ax.h and ax-gdb.h includes. + (aarch64_gen_return_address): New function. + (aarch64_gdbarch_init): Hook it. + +2015-07-09 Pierre Langlois + * aarch64-tdep.c (aarch64_make_stub_cache): Set available_p and swallow NOT_AVAILABLE_ERROR. (aarch64_stub_this_id): Call frame_id_build_unavailable_stack if 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. */ -- 2.7.4