27 lines
1.0 KiB
Diff
27 lines
1.0 KiB
Diff
|
diff -up chromium-102.0.5005.115/v8/src/execution/arm64/pointer-authentication-arm64.h.gcc-cfi-fix chromium-102.0.5005.115/v8/src/execution/arm64/pointer-authentication-arm64.h
|
||
|
--- chromium-102.0.5005.115/v8/src/execution/arm64/pointer-authentication-arm64.h.gcc-cfi-fix 2022-06-14 16:34:21.710049421 -0400
|
||
|
+++ chromium-102.0.5005.115/v8/src/execution/arm64/pointer-authentication-arm64.h 2022-06-14 16:35:17.650427761 -0400
|
||
|
@@ -47,15 +47,17 @@ V8_INLINE Address PointerAuthentication:
|
||
|
#ifdef USE_SIMULATOR
|
||
|
return Simulator::StripPAC(pc, Simulator::kInstructionPointer);
|
||
|
#else
|
||
|
+ // x30 == lr, but use 'x30' instead of 'lr' below, as GCC does not accept
|
||
|
+ // 'lr' in the clobbers list.
|
||
|
asm volatile(
|
||
|
- " mov x16, lr\n"
|
||
|
- " mov lr, %[pc]\n"
|
||
|
+ " mov x16, x30\n"
|
||
|
+ " mov x30, %[pc]\n"
|
||
|
" xpaclri\n"
|
||
|
- " mov %[pc], lr\n"
|
||
|
- " mov lr, x16\n"
|
||
|
+ " mov %[pc], x30\n"
|
||
|
+ " mov x30, x16\n"
|
||
|
: [pc] "+r"(pc)
|
||
|
:
|
||
|
- : "x16", "lr");
|
||
|
+ : "x16", "x30");
|
||
|
return pc;
|
||
|
#endif
|
||
|
}
|