From 59c283728fddad638ae301cfb724d629fffc8665 Mon Sep 17 00:00:00 2001 From: Alan Hayward Date: Fri, 22 Mar 2019 10:43:17 +0000 Subject: [PATCH] AArch64: Read pauth section from core files gdb/ChangeLog: * aarch64-linux-tdep.c (aarch64_linux_iterate_over_regset_sections): Check for pauth section. * aarch64-linux-tdep.h (AARCH64_LINUX_SIZEOF_PAUTH): New define. --- gdb/ChangeLog | 8 ++++++++ gdb/aarch64-linux-tdep.c | 20 ++++++++++++++++++++ gdb/aarch64-linux-tdep.h | 3 +++ 3 files changed, 31 insertions(+) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index c23881976c0..798bcc41424 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,11 @@ +2019-03-22 Alan Hayward + Jiong Wang + + * aarch64-linux-tdep.c + (aarch64_linux_iterate_over_regset_sections): Check for pauth + section. + * aarch64-linux-tdep.h (AARCH64_LINUX_SIZEOF_PAUTH): New define. + 2019-03-22 Alan Hayward Jiong Wang diff --git a/gdb/aarch64-linux-tdep.c b/gdb/aarch64-linux-tdep.c index d7db23ef38e..bcd1961744d 100644 --- a/gdb/aarch64-linux-tdep.c +++ b/gdb/aarch64-linux-tdep.c @@ -627,6 +627,26 @@ aarch64_linux_iterate_over_regset_sections (struct gdbarch *gdbarch, else cb (".reg2", AARCH64_LINUX_SIZEOF_FPREGSET, AARCH64_LINUX_SIZEOF_FPREGSET, &aarch64_linux_fpregset, NULL, cb_data); + + + if (tdep->has_pauth ()) + { + /* Create this on the fly in order to handle the variable location. */ + const struct regcache_map_entry pauth_regmap[] = + { + { 2, AARCH64_PAUTH_DMASK_REGNUM (tdep->pauth_reg_base), 8}, + { 0 } + }; + + const struct regset aarch64_linux_pauth_regset = + { + pauth_regmap, regcache_supply_regset, regcache_collect_regset + }; + + cb (".reg-aarch-pauth", AARCH64_LINUX_SIZEOF_PAUTH, + AARCH64_LINUX_SIZEOF_PAUTH, &aarch64_linux_pauth_regset, + "pauth registers", cb_data); + } } /* Implement the "core_read_description" gdbarch method. */ diff --git a/gdb/aarch64-linux-tdep.h b/gdb/aarch64-linux-tdep.h index e9f7c9bccf4..ec494bfc538 100644 --- a/gdb/aarch64-linux-tdep.h +++ b/gdb/aarch64-linux-tdep.h @@ -33,6 +33,9 @@ alignment. */ #define AARCH64_LINUX_SIZEOF_FPREGSET (33 * V_REGISTER_SIZE) +/* The pauth regset consists of 2 X sized registers. */ +#define AARCH64_LINUX_SIZEOF_PAUTH (2 * X_REGISTER_SIZE) + extern const struct regset aarch64_linux_gregset; extern const struct regset aarch64_linux_fpregset; -- 2.30.2