diff options
| author | Luke Cheeseman <luke.cheeseman@arm.com> | 2018-12-14 11:30:12 +0000 |
|---|---|---|
| committer | Luke Cheeseman <luke.cheeseman@arm.com> | 2018-12-14 11:30:12 +0000 |
| commit | e1a819e82de87bfd217d73ca74a39d10b46d0a71 (patch) | |
| tree | d2d100a78ce79f0bffbe3fd90f02e544c6e754f0 /libunwind/src/DwarfParser.hpp | |
| parent | 96408bb04a03b4ac961831c270fd9c996358ee03 (diff) | |
| download | bcm5719-llvm-e1a819e82de87bfd217d73ca74a39d10b46d0a71.tar.gz bcm5719-llvm-e1a819e82de87bfd217d73ca74a39d10b46d0a71.zip | |
[AArch64][libunwind] Unwinding support for return address signing
- Follow up to revision r342895
- gcc would not build libunwind with the earlier patch as the autia1716
instruction wasn't allowed to be assembled for pre armv8.3a targets
- The autia1716 instruction lives in the hint space encodings so is a valid
instruction for all armv8a targets
- To work around this I have swapped out the autia1716 instruction for the hint
instruction
Differential Revision: https://reviews.llvm.org/D55700
llvm-svn: 349140
Diffstat (limited to 'libunwind/src/DwarfParser.hpp')
| -rw-r--r-- | libunwind/src/DwarfParser.hpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/libunwind/src/DwarfParser.hpp b/libunwind/src/DwarfParser.hpp index b749b7776e1..68506a35053 100644 --- a/libunwind/src/DwarfParser.hpp +++ b/libunwind/src/DwarfParser.hpp @@ -666,6 +666,14 @@ bool CFI_Parser<A>::parseInstructions(A &addressSpace, pint_t instructions, _LIBUNWIND_TRACE_DWARF( "DW_CFA_GNU_negative_offset_extended(%" PRId64 ")\n", offset); break; + +#if defined(_LIBUNWIND_TARGET_AARCH64) + case DW_CFA_AARCH64_negate_ra_state: + results->savedRegisters[UNW_ARM64_RA_SIGN_STATE].value ^= 0x1; + _LIBUNWIND_TRACE_DWARF("DW_CFA_AARCH64_negate_ra_state\n"); + break; +#endif + default: operand = opcode & 0x3F; switch (opcode & 0xC0) { |

