Blob Blame History Raw
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
 }