[libcxx-commits] [PATCH] D102912: [libunwind] AARCH64 use inline assembly for pointer authentication
Maksim Kita via Phabricator via libcxx-commits
libcxx-commits at lists.llvm.org
Wed May 26 13:52:25 PDT 2021
kitaisreal updated this revision to Diff 348082.
kitaisreal added a comment.
Updated assembly hints to previous revision.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D102912/new/
https://reviews.llvm.org/D102912
Files:
libunwind/src/DwarfInstructions.hpp
Index: libunwind/src/DwarfInstructions.hpp
===================================================================
--- libunwind/src/DwarfInstructions.hpp
+++ libunwind/src/DwarfInstructions.hpp
@@ -67,7 +67,7 @@
return (pint_t)((sint_t)registers.getRegister((int)prolog.cfaRegister) +
prolog.cfaRegisterOffset);
if (prolog.cfaExpression != 0)
- return evaluateExpression((pint_t)prolog.cfaExpression, addressSpace,
+ return evaluateExpression((pint_t)prolog.cfaExpression, addressSpace,
registers, 0);
assert(0 && "getCFA(): unknown location");
__builtin_unreachable();
@@ -218,17 +218,32 @@
#if !defined(_LIBUNWIND_IS_NATIVE_ONLY)
return UNW_ECROSSRASIGNING;
#else
- register unsigned long long x17 __asm("x17") = returnAddress;
- register unsigned long long x16 __asm("x16") = cfa;
-
// These are the autia1716/autib1716 instructions. The hint instructions
// are used here as gcc does not assemble autia1716/autib1716 for pre
// armv8.3a targets.
+
if (cieInfo.addressesSignedWithBKey)
- asm("hint 0xe" : "+r"(x17) : "r"(x16)); // autib1716
+ {
+ asm volatile(
+ "mov x17, %x0;"
+ "mov x16, %x1;"
+ "hint 0xe;" // autib1716
+ "mov %0, x17"
+ : "+r"(returnAddress)
+ : "r"(cfa)
+ : "x16", "x17");
+ }
else
- asm("hint 0xc" : "+r"(x17) : "r"(x16)); // autia1716
- returnAddress = x17;
+ {
+ asm volatile(
+ "mov x17, %x0;"
+ "mov x16, %x1;"
+ "hint 0xc;" // autia1716
+ "mov %0, x17"
+ : "+r"(returnAddress)
+ : "r"(cfa)
+ : "x16", "x17");
+ }
#endif
}
#endif
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D102912.348082.patch
Type: text/x-patch
Size: 1902 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libcxx-commits/attachments/20210526/39d536d8/attachment.bin>
More information about the libcxx-commits
mailing list