diff options
author | Alan Hayward <alan.hayward@arm.com> | 2019-03-22 10:43:17 +0000 |
---|---|---|
committer | Alan Hayward <alan.hayward@arm.com> | 2019-03-22 10:43:17 +0000 |
commit | 59c283728fddad638ae301cfb724d629fffc8665 (patch) | |
tree | dedb5d26df34ee67d16984a8ddf0b5e53d2e6290 | |
parent | 17e116a7d1501a46cf4e45ec181148dc6a1e3e2b (diff) | |
download | gdb-59c283728fddad638ae301cfb724d629fffc8665.zip gdb-59c283728fddad638ae301cfb724d629fffc8665.tar.gz gdb-59c283728fddad638ae301cfb724d629fffc8665.tar.bz2 |
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.
-rw-r--r-- | gdb/ChangeLog | 8 | ||||
-rw-r--r-- | gdb/aarch64-linux-tdep.c | 20 | ||||
-rw-r--r-- | gdb/aarch64-linux-tdep.h | 3 |
3 files changed, 31 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index c238819..798bcc4 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,6 +1,14 @@ 2019-03-22 Alan Hayward <alan.hayward@arm.com> Jiong Wang <jiong.wang@arm.com> + * 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 <alan.hayward@arm.com> + Jiong Wang <jiong.wang@arm.com> + * aarch64-tdep.c (aarch64_analyze_prologue): Check for pauth instructions. (aarch64_analyze_prologue_test): Add PACIASP test. diff --git a/gdb/aarch64-linux-tdep.c b/gdb/aarch64-linux-tdep.c index d7db23e..bcd1961 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 e9f7c9b..ec494bf 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; |