diff options
author | Luke Cheeseman <luke.cheeseman@arm.com> | 2018-12-17 11:43:24 +0000 |
---|---|---|
committer | Luke Cheeseman <luke.cheeseman@arm.com> | 2018-12-17 11:43:24 +0000 |
commit | 357973192d2eb45aa8c36b02cfef84d5d533d9d0 (patch) | |
tree | 847f177004c557850d20b09d8aa17dcd1bcb1636 /libunwind/src/DwarfParser.hpp | |
parent | 490ae11717b8da8c50a6d73e6c392df8dfd28553 (diff) | |
download | bcm5719-llvm-357973192d2eb45aa8c36b02cfef84d5d533d9d0.tar.gz bcm5719-llvm-357973192d2eb45aa8c36b02cfef84d5d533d9d0.zip |
[AArch64][libunwind] Unwinding support for return address signing with B Key
- Support for the case where the return address has been signed with the B key
- When the B key is used, a 'B' character is present in the augmentation string
of CIE associated with the FDE for the function.
Differential Revision: https://reviews.llvm.org/D55704
llvm-svn: 349339
Diffstat (limited to 'libunwind/src/DwarfParser.hpp')
-rw-r--r-- | libunwind/src/DwarfParser.hpp | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/libunwind/src/DwarfParser.hpp b/libunwind/src/DwarfParser.hpp index 68506a35053..9de2898c075 100644 --- a/libunwind/src/DwarfParser.hpp +++ b/libunwind/src/DwarfParser.hpp @@ -49,6 +49,9 @@ public: bool isSignalFrame; bool fdesHaveAugmentationData; uint8_t returnAddressRegister; +#if defined(_LIBUNWIND_TARGET_AARCH64) + bool addressesSignedWithBKey; +#endif }; /// Information about an FDE (Frame Description Entry) @@ -263,6 +266,9 @@ const char *CFI_Parser<A>::parseCIE(A &addressSpace, pint_t cie, cieInfo->dataAlignFactor = 0; cieInfo->isSignalFrame = false; cieInfo->fdesHaveAugmentationData = false; +#if defined(_LIBUNWIND_TARGET_AARCH64) + cieInfo->addressesSignedWithBKey = false; +#endif cieInfo->cieStart = cie; pint_t p = cie; pint_t cieLength = (pint_t)addressSpace.get32(p); @@ -326,6 +332,11 @@ const char *CFI_Parser<A>::parseCIE(A &addressSpace, pint_t cie, case 'S': cieInfo->isSignalFrame = true; break; +#if defined(_LIBUNWIND_TARGET_AARCH64) + case 'B': + cieInfo->addressesSignedWithBKey = true; + break; +#endif default: // ignore unknown letters break; |