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 }