This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[PATCH 6/8] [AArch64] Implement gdbarch_gen_return_address gdbarch method
- From: Pierre Langlois <pierre dot langlois at arm dot com>
- To: gdb-patches at sourceware dot org
- Cc: Pierre Langlois <pierre dot langlois at arm dot com>
- Date: Tue, 7 Jul 2015 13:51:56 +0100
- Subject: [PATCH 6/8] [AArch64] Implement gdbarch_gen_return_address gdbarch method
- Authentication-results: sourceware.org; auth=none
- References: <1436273518-5959-1-git-send-email-pierre dot langlois at arm dot com>
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/aarch64-tdep.c | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/gdb/aarch64-tdep.c b/gdb/aarch64-tdep.c
index 57976b7..c7ccbb5 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"
@@ -2261,6 +2263,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. */
@@ -2830,6 +2844,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.1.0