diff options
author | Alan Hayward <alan.hayward@arm.com> | 2019-05-22 14:02:17 +0100 |
---|---|---|
committer | Alan Hayward <alan.hayward@arm.com> | 2019-05-22 14:35:25 +0100 |
commit | 8fca4da0759df376bcb646bc4b79a92ba27e2362 (patch) | |
tree | 47050d975da4df191152bcad7f775581b045595c /gdb/aarch64-tdep.c | |
parent | b706061469811a16ff2fb8d42f6e98a22e454212 (diff) | |
download | gdb-8fca4da0759df376bcb646bc4b79a92ba27e2362.zip gdb-8fca4da0759df376bcb646bc4b79a92ba27e2362.tar.gz gdb-8fca4da0759df376bcb646bc4b79a92ba27e2362.tar.bz2 |
AArch64: Treat pauth ops as nops on non-pauth systems
Running an address signed binary through GDB on a non pauth system
gives the following error:
Call Frame Instruction op 45 in vendor extension space is not handled on this architecture.
Instead GDB should ignore the op, treating it as a nop.
Add test case for pauth binaries, regardless of whether the target
supports it.
gdb/ChangeLog:
* aarch64-tdep.c (aarch64_execute_dwarf_cfa_vendor_op): Treat
DW_CFA_AARCH64_negate_ra_state as nop on non pauth targets.
gdb/testsuite/ChangeLog:
* gdb.arch/aarch64-pauth.c: New test.
* gdb.arch/aarch64-pauth.exp: New file.
Diffstat (limited to 'gdb/aarch64-tdep.c')
-rw-r--r-- | gdb/aarch64-tdep.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/gdb/aarch64-tdep.c b/gdb/aarch64-tdep.c index bbb2a25..96ebce4 100644 --- a/gdb/aarch64-tdep.c +++ b/gdb/aarch64-tdep.c @@ -1180,8 +1180,12 @@ aarch64_execute_dwarf_cfa_vendor_op (struct gdbarch *gdbarch, gdb_byte op, struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); struct dwarf2_frame_state_reg *ra_state; - if (tdep->has_pauth () && op == DW_CFA_AARCH64_negate_ra_state) + if (op == DW_CFA_AARCH64_negate_ra_state) { + /* On systems without pauth, treat as a nop. */ + if (!tdep->has_pauth ()) + return true; + /* Allocate RA_STATE column if it's not allocated yet. */ fs->regs.alloc_regs (AARCH64_DWARF_PAUTH_RA_STATE + 1); |