diff options
author | Luke Cheeseman <luke.cheeseman@arm.com> | 2018-09-24 15:55:35 +0000 |
---|---|---|
committer | Luke Cheeseman <luke.cheeseman@arm.com> | 2018-09-24 15:55:35 +0000 |
commit | 8284b19c76a7bafdf4e53b3deb6cd35fcd370e92 (patch) | |
tree | 591a63cfc1252ed5c2339baf8b95aedf85097350 /libunwind/include | |
parent | 3cb18346d776cc61da0bc5ea41e4678c1851db68 (diff) | |
download | llvm-8284b19c76a7bafdf4e53b3deb6cd35fcd370e92.tar.gz |
[AArch64] Unwinding support for return address signing
- When return address signing is enabled, the LR may be signed on function entry
- When an exception is thrown the return address is inspected used to unwind the call stack
- Before this happens, the return address must be correctly authenticated to avoid causing an abort by dereferencing the signed pointer
Differential Revision: https://reviews.llvm.org/D51432
llvm-svn: 342895
Diffstat (limited to 'libunwind/include')
-rw-r--r-- | libunwind/include/libunwind.h | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/libunwind/include/libunwind.h b/libunwind/include/libunwind.h index 97d2b82290ce..d824c1318354 100644 --- a/libunwind/include/libunwind.h +++ b/libunwind/include/libunwind.h @@ -57,6 +57,9 @@ enum { UNW_EINVAL = -6547, /* unsupported operation or bad value */ UNW_EBADVERSION = -6548, /* unwind info has unsupported version */ UNW_ENOINFO = -6549 /* no unwind info found */ +#if defined(_LIBUNWIND_TARGET_AARCH64) && !defined(_LIBUNWIND_IS_NATIVE_ONLY) + , UNW_ECROSSRASIGNING = -6550 /* cross unwind with return address signing */ +#endif }; struct unw_context_t { @@ -547,6 +550,8 @@ enum { UNW_ARM64_X31 = 31, UNW_ARM64_SP = 31, // reserved block + UNW_ARM64_RA_SIGN_STATE = 34, + // reserved block UNW_ARM64_D0 = 64, UNW_ARM64_D1 = 65, UNW_ARM64_D2 = 66, |