[libunwind] [llvm] [MC][AArch64] Add .cfi_set_ra_sign_state for PAuth_LR (PR #205442)
Jon Roelofs via cfe-commits
cfe-commits at lists.llvm.org
Sat Jul 11 08:45:14 PDT 2026
https://github.com/jroelofs updated https://github.com/llvm/llvm-project/pull/205442
>From c05793d405bb826b25dc54bbb5800d62aee4f34d Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Thu, 18 Jun 2026 18:13:35 -0700
Subject: [PATCH 01/58] [libunwind] Fix exposure of UNW_AARCH64_RA_SIGN_STATE
through _Unwind_GetGR
The pseudo register was previously hacked in unrder kRegisterIsUndefined,
leaving it in a state that was only accessible from within the unwinder itself.
To fix this, allowing external access to the state (and therefore tests!), we
invent a new register location kRegisterIsPseudo to record the additional state
that the register has been defined by a .cfi_negate_ra_state opcode having been
executed.
---
libunwind/src/DwarfInstructions.hpp | 8 ++
libunwind/src/DwarfParser.hpp | 11 +--
libunwind/test/ra_sign_state.pass.cpp | 125 ++++++++++++++++++++++++++
3 files changed, 139 insertions(+), 5 deletions(-)
create mode 100644 libunwind/test/ra_sign_state.pass.cpp
diff --git a/libunwind/src/DwarfInstructions.hpp b/libunwind/src/DwarfInstructions.hpp
index 165c4a99e9a92..0133b2dd330e7 100644
--- a/libunwind/src/DwarfInstructions.hpp
+++ b/libunwind/src/DwarfInstructions.hpp
@@ -113,8 +113,14 @@ typename A::pint_t DwarfInstructions<A, R>::getSavedRegister(
case CFI_Parser<A>::kRegisterInRegister:
return registers.getRegister((int)savedReg.value);
+
case CFI_Parser<A>::kRegisterUndefined:
return 0;
+
+ case CFI_Parser<A>::kRegisterIsPseudo:
+#if defined(_LIBUNWIND_TARGET_AARCH64)
+ return savedReg.value;
+#endif
case CFI_Parser<A>::kRegisterUnused:
case CFI_Parser<A>::kRegisterOffsetFromCFA:
// FIX ME
@@ -141,6 +147,7 @@ double DwarfInstructions<A, R>::getSavedFloatRegister(
#ifndef _LIBUNWIND_TARGET_ARM
return registers.getFloatRegister((int)savedReg.value);
#endif
+ case CFI_Parser<A>::kRegisterIsPseudo:
case CFI_Parser<A>::kRegisterIsExpression:
case CFI_Parser<A>::kRegisterUnused:
case CFI_Parser<A>::kRegisterOffsetFromCFA:
@@ -164,6 +171,7 @@ v128 DwarfInstructions<A, R>::getSavedVectorRegister(
evaluateExpression((pint_t)savedReg.value, addressSpace,
registers, cfa));
+ case CFI_Parser<A>::kRegisterIsPseudo:
case CFI_Parser<A>::kRegisterIsExpression:
case CFI_Parser<A>::kRegisterUnused:
case CFI_Parser<A>::kRegisterUndefined:
diff --git a/libunwind/src/DwarfParser.hpp b/libunwind/src/DwarfParser.hpp
index 8e080fb33c5f8..ba40b757ab977 100644
--- a/libunwind/src/DwarfParser.hpp
+++ b/libunwind/src/DwarfParser.hpp
@@ -81,7 +81,8 @@ class CFI_Parser {
kRegisterOffsetFromCFA,
kRegisterInRegister,
kRegisterAtExpression,
- kRegisterIsExpression
+ kRegisterIsExpression,
+ kRegisterIsPseudo,
};
struct RegisterLocation {
RegisterSavedWhere location;
@@ -794,8 +795,8 @@ bool CFI_Parser<A>::parseFDEInstructions(
case REGISTERS_ARM64: {
int64_t value =
results->savedRegisters[UNW_AARCH64_RA_SIGN_STATE].value ^ 0x1;
- results->setRegisterValue(UNW_AARCH64_RA_SIGN_STATE, value,
- initialState);
+ results->setRegister(UNW_AARCH64_RA_SIGN_STATE, kRegisterIsPseudo,
+ value, initialState);
_LIBUNWIND_TRACE_DWARF("DW_CFA_AARCH64_negate_ra_state\n");
} break;
#endif
@@ -846,8 +847,8 @@ bool CFI_Parser<A>::parseFDEInstructions(
case DW_CFA_AARCH64_negate_ra_state_with_pc: {
int64_t value =
results->savedRegisters[UNW_AARCH64_RA_SIGN_STATE].value ^ 0x3;
- results->setRegisterValue(UNW_AARCH64_RA_SIGN_STATE, value,
- initialState);
+ results->setRegister(UNW_AARCH64_RA_SIGN_STATE, kRegisterIsPseudo,
+ value, initialState);
// When using Feat_PAuthLR, the PC value needs to be captured so that
// during unwinding, the correct PC value is used for re-authentication.
// It is assumed that the CFI is placed before the signing instruction.
diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
new file mode 100644
index 0000000000000..1e113955db027
--- /dev/null
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -0,0 +1,125 @@
+// -*- C++ -*-
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+// REQUIRES: target={{aarch64.*}}
+// UNSUPPORTED: target={{.*-windows.*}}
+
+#undef NDEBUG
+#include "support/func_bounds.h"
+#include <assert.h>
+#include <inttypes.h>
+#include <libunwind.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <unwind.h>
+
+#if defined(__APPLE__)
+#include <sys/sysctl.h>
+#endif
+
+// Note: This test requires FEAT_PAuth (and is setup to pass on other targets).
+
+#if defined(__APPLE__)
+static bool checkHasPAuth() {
+ int has_pauth = 0;
+ size_t size = sizeof(has_pauth);
+ if (sysctlbyname("hw.optional.arm.FEAT_PAuth", &has_pauth, &size, NULL, 0))
+ return false;
+ return has_pauth != 0;
+}
+#else
+static bool checkHasPAuth() {
+ // TODO: Support other platforms.
+ return false;
+}
+#endif
+
+FUNC_BOUNDS_DECL(main_func);
+
+_Unwind_Reason_Code frame_handler(struct _Unwind_Context *ctx, void *arg) {
+ uint64_t ra_sign_state =
+ (uint64_t)_Unwind_GetGR(ctx, UNW_AARCH64_RA_SIGN_STATE);
+
+ uintptr_t ip = _Unwind_GetIP(ctx);
+ if (ip >= (uintptr_t)FUNC_START(main_func) &&
+ ip < (uintptr_t)FUNC_END(main_func)) {
+
+ // Collect the RA from the callee that will return to main.
+ *(uint64_t *)arg = ra_sign_state;
+
+ // Unwind until main is reached, above frames depend on the platform and
+ // architecture.
+ return _URC_END_OF_STACK;
+ }
+
+#if defined(__PTRAUTH__) || __has_feature(ptrauth_calls)
+ assert(ra_sign_state == 1);
+#else
+ assert(ra_sign_state == 0);
+#endif
+
+ return _URC_NO_REASON;
+}
+
+__attribute__((noinline)) extern "C" uintptr_t get_main_ra_sign_state() {
+ uint64_t sign_state = -1;
+ _Unwind_Backtrace(frame_handler, &sign_state);
+ printf("UNW_AARCH64_RA_SIGN_STATE = %" PRIu64 "\n", sign_state);
+ return sign_state;
+}
+
+__attribute__((noinline)) uint64_t check_vanilla() {
+ return get_main_ra_sign_state();
+}
+
+__attribute__((naked)) uint64_t check_negate() {
+ asm(".cfi_negate_ra_state\n"
+ "pacibsp\n"
+
+ "stp x29, x30, [sp, #-16]!\n"
+ ".cfi_def_cfa_offset 16\n"
+ ".cfi_offset x29, -16\n"
+ ".cfi_offset x30, -8\n"
+
+ "bl _get_main_ra_sign_state\n"
+
+ "ldp x29, x30, [sp], #16\n"
+ ".cfi_def_cfa_offset 0\n"
+ ".cfi_restore x29\n"
+ ".cfi_restore x30\n"
+
+ ".cfi_negate_ra_state\n"
+ "retab");
+}
+
+FUNC_ATTR(main_func) int main(int, char **) {
+ uint64_t ret;
+
+ ret = check_vanilla();
+ assert((ret & 2) == ret);
+
+#if defined(__PTRAUTH__) || __has_feature(ptrauth_calls)
+ assert(ret == 1);
+#else
+ assert(ret == 0);
+#endif
+
+ if (!checkHasPAuth()) {
+ printf("target does not have FEAT_PAuth\n");
+ return 0;
+ }
+
+ ret = check_negate();
+ assert(ret == 1);
+
+ printf("success\n");
+ return 0;
+}
>From b232cd6fe924ff20f7c1f8abca4f3061830a96a1 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Tue, 23 Jun 2026 15:20:55 -0700
Subject: [PATCH 02/58] move/fix state range assertion. add missing target
feature.
---
libunwind/test/ra_sign_state.pass.cpp | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index 1e113955db027..2b31ef4000386 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -73,6 +73,7 @@ __attribute__((noinline)) extern "C" uintptr_t get_main_ra_sign_state() {
uint64_t sign_state = -1;
_Unwind_Backtrace(frame_handler, &sign_state);
printf("UNW_AARCH64_RA_SIGN_STATE = %" PRIu64 "\n", sign_state);
+ assert((sign_state & 0x3) == sign_state);
return sign_state;
}
@@ -80,7 +81,7 @@ __attribute__((noinline)) uint64_t check_vanilla() {
return get_main_ra_sign_state();
}
-__attribute__((naked)) uint64_t check_negate() {
+__attribute__((naked, target("pauth"))) uint64_t check_negate() {
asm(".cfi_negate_ra_state\n"
"pacibsp\n"
@@ -104,10 +105,8 @@ FUNC_ATTR(main_func) int main(int, char **) {
uint64_t ret;
ret = check_vanilla();
- assert((ret & 2) == ret);
-
#if defined(__PTRAUTH__) || __has_feature(ptrauth_calls)
- assert(ret == 1);
+ assert(ret == 1 || ret == 2);
#else
assert(ret == 0);
#endif
>From 21104ea8fe6840863caa14c3b9161cee908285b0 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Wed, 17 Jun 2026 14:55:05 -0700
Subject: [PATCH 03/58] [MC][AArch64] Add .cfi_llvm_set_ra_sign_state for
PAuth_LR
The new CFI directive directly assigns an RA signing state to the RA_SIGN_STATE
DWARF pseudo-register for use when unwinding, to indicate whether the value of
PC has been used as a diversifier for return address signing. The new directive
subsumes and replaces .cfi_negate_ra_state_with_pc, which was found to be
unsuitable for descibing some block layouts [1], particularly in hot-cold-split
functions.
1: https://github.com/ARM-software/abi-aa/pull/346
---
libunwind/src/DwarfParser.hpp | 20 +
libunwind/src/dwarf2.h | 1 +
libunwind/test/CMakeLists.txt | 17 +
libunwind/test/ra_sign_state.pass.cpp | 28 +
llvm/include/llvm/BinaryFormat/Dwarf.def | 1 +
llvm/include/llvm/CodeGen/CFIInstBuilder.h | 5 +
.../DWARF/LowLevel/DWARFCFIProgram.h | 11 +-
llvm/include/llvm/MC/MCDwarf.h | 46 +-
llvm/include/llvm/MC/MCStreamer.h | 4 +
.../CodeGen/AsmPrinter/AsmPrinterDwarf.cpp | 5 +
llvm/lib/CodeGen/CFIInstrInserter.cpp | 1 +
llvm/lib/CodeGen/MIRParser/MILexer.cpp | 1 +
llvm/lib/CodeGen/MIRParser/MILexer.h | 1 +
llvm/lib/CodeGen/MIRParser/MIParser.cpp | 23 +
llvm/lib/CodeGen/MachineOperand.cpp | 11 +
llvm/lib/DWARFCFIChecker/DWARFCFIState.cpp | 6 +
llvm/lib/DebugInfo/DWARF/DWARFCFIPrinter.cpp | 9 +
.../DWARF/LowLevel/DWARFCFIProgram.cpp | 16 +
.../DWARF/LowLevel/DWARFUnwindTable.cpp | 11 +
llvm/lib/MC/MCAsmStreamer.cpp | 21 +
llvm/lib/MC/MCDwarf.cpp | 21 +
llvm/lib/MC/MCSFrame.cpp | 1 +
llvm/lib/MC/MCStreamer.cpp | 22 +
.../lib/Target/AArch64/AArch64PointerAuth.cpp | 113 +++-
.../AArch64/AsmParser/AArch64AsmParser.cpp | 20 +
.../MCTargetDesc/AArch64AsmBackend.cpp | 3 +
.../AArch64/pauth-lr-tail-call-fpdiff.ll | 96 +--
.../sign-return-address-pauth-lr-mir.ll | 68 +--
.../AArch64/sign-return-address-pauth-lr.ll | 549 ++++++++++++++++--
.../sign-return-address-pauthlr-slh.ll | 8 +-
.../CodeGen/AArch64/sign-return-address.ll | 346 +++++++++++
.../test/CodeGen/AArch64/swifttail-ptrauth.ll | 36 +-
llvm/test/CodeGen/MIR/AArch64/cfi.mir | 4 +
.../MIR/AArch64/return-address-signing.mir | 2 +-
.../cfi_llvm_set_ra_state-shrinkwrap.s | 142 +++++
llvm/test/MC/AArch64/cfi_llvm_set_ra_state.s | 31 +
.../MC/AArch64/directives-case_insensitive.s | 2 +
.../DebugInfo/DWARF/DWARFDebugFrameTest.cpp | 1 +
38 files changed, 1547 insertions(+), 156 deletions(-)
create mode 100644 llvm/test/MC/AArch64/cfi_llvm_set_ra_state-shrinkwrap.s
create mode 100644 llvm/test/MC/AArch64/cfi_llvm_set_ra_state.s
diff --git a/libunwind/src/DwarfParser.hpp b/libunwind/src/DwarfParser.hpp
index ba40b757ab977..4d3a44567d7a6 100644
--- a/libunwind/src/DwarfParser.hpp
+++ b/libunwind/src/DwarfParser.hpp
@@ -859,6 +859,26 @@ bool CFI_Parser<A>::parseFDEInstructions(
} break;
#endif
+#if defined(_LIBUNWIND_TARGET_AARCH64)
+ case DW_CFA_AARCH64_set_ra_state: {
+ int64_t value = (int64_t)addressSpace.getULEB128(p, instructionsEnd);
+ if (value < 0 || 2 < value) {
+ _LIBUNWIND_LOG0("malformed DW_CFA_AARCH64_set_ra_state DWARF "
+ "unwind, RA_SIGN_STATE value not recognized");
+ return false;
+ }
+ offset = addressSpace.getSLEB128(p, instructionsEnd) *
+ cieInfo.codeAlignFactor;
+ results->setRegisterValue(UNW_AARCH64_RA_SIGN_STATE, value,
+ initialState);
+ results->ptrAuthDiversifier = fdeInfo.pcStart + codeOffset + offset;
+ _LIBUNWIND_TRACE_DWARF(
+ "DW_CFA_AARCH64_set_ra_state(state=%" PRId64 ",pc=0x%" PRIx64 ")\n",
+ value,
+ static_cast<uint64_t>(results->ptrAuthDiversifier));
+ } break;
+#endif
+
#else
(void)arch;
#endif
diff --git a/libunwind/src/dwarf2.h b/libunwind/src/dwarf2.h
index 68ad882347203..19f6e4de3fe34 100644
--- a/libunwind/src/dwarf2.h
+++ b/libunwind/src/dwarf2.h
@@ -51,6 +51,7 @@ enum {
DW_CFA_GNU_negative_offset_extended = 0x2F,
// AARCH64 extensions
+ DW_CFA_AARCH64_set_ra_state = 0x2B,
DW_CFA_AARCH64_negate_ra_state_with_pc = 0x2C,
DW_CFA_AARCH64_negate_ra_state = 0x2D
};
diff --git a/libunwind/test/CMakeLists.txt b/libunwind/test/CMakeLists.txt
index 28cf2acd02aa9..5dbfb2d93c7e6 100644
--- a/libunwind/test/CMakeLists.txt
+++ b/libunwind/test/CMakeLists.txt
@@ -32,6 +32,23 @@ pythonize_bool(LIBUNWIND_ENABLE_GCS)
pythonize_bool(LIBUNWIND_ENABLE_THREADS)
pythonize_bool(LIBUNWIND_USES_ARM_EHABI)
+file(WRITE "${CMAKE_BINARY_DIR}/check_cfi_llvm_set_ra_state.s" "
+ .text
+ .global _test_cfi_llvm_set_ra_state
+_test_cfi_llvm_set_ra_state:
+ .cfi_startproc
+ .cfi_llvm_set_ra_state 0, 0
+ ret
+ .cfi_endproc
+")
+try_compile(HAVE_CFI_LLVM_SET_RA_STATE
+ "${CMAKE_BINARY_DIR}/check_cfi_llvm_set_ra_state"
+ SOURCES "${CMAKE_BINARY_DIR}/check_cfi_llvm_set_ra_state.s"
+)
+if(HAVE_CFI_LLVM_SET_RA_STATE)
+ add_compile_definitions(HAVE_CFI_LLVM_SET_RA_STATE=1)
+endif()
+
set(AUTO_GEN_COMMENT "## Autogenerated by libunwind configuration.\n# Do not edit!")
set(SERIALIZED_LIT_PARAMS "# Lit parameters serialized here for llvm-lit to pick them up\n")
diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index 2b31ef4000386..b5d7866ec8c94 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -101,6 +101,29 @@ __attribute__((naked, target("pauth"))) uint64_t check_negate() {
"retab");
}
+#if defined(HAVE_CFI_LLVM_SET_RA_STATE)
+__attribute__((naked))
+uint64_t check_set() {
+ asm(".cfi_llvm_set_ra_state 1, 0\n"
+ "pacibsp\n"
+
+ "stp x29, x30, [sp, #-16]!\n"
+ ".cfi_def_cfa_offset 16\n"
+ ".cfi_offset x29, -16\n"
+ ".cfi_offset x30, -8\n"
+
+ "bl _get_main_ra_sign_state\n"
+
+ "ldp x29, x30, [sp], #16\n"
+ ".cfi_def_cfa_offset 0\n"
+ ".cfi_restore x29\n"
+ ".cfi_restore x30\n"
+
+ ".cfi_llvm_set_ra_state 0, -20\n"
+ "retab");
+}
+#endif
+
FUNC_ATTR(main_func) int main(int, char **) {
uint64_t ret;
@@ -119,6 +142,11 @@ FUNC_ATTR(main_func) int main(int, char **) {
ret = check_negate();
assert(ret == 1);
+#if defined(HAVE_CFI_LLVM_SET_RA_STATE)
+ ret = check_set();
+ assert(ret == 1);
+#endif
+
printf("success\n");
return 0;
}
diff --git a/llvm/include/llvm/BinaryFormat/Dwarf.def b/llvm/include/llvm/BinaryFormat/Dwarf.def
index 8bb1766bcc259..c7ec6b673976a 100644
--- a/llvm/include/llvm/BinaryFormat/Dwarf.def
+++ b/llvm/include/llvm/BinaryFormat/Dwarf.def
@@ -1301,6 +1301,7 @@ HANDLE_DW_CFA(0x16, val_expression)
// Vendor extensions:
HANDLE_DW_CFA_PRED(0x1d, MIPS_advance_loc8, SELECT_MIPS64)
HANDLE_DW_CFA_PRED(0x2d, GNU_window_save, SELECT_SPARC)
+HANDLE_DW_CFA_PRED(0x2b, AARCH64_set_ra_state, SELECT_AARCH64)
HANDLE_DW_CFA_PRED(0x2c, AARCH64_negate_ra_state_with_pc, SELECT_AARCH64)
HANDLE_DW_CFA_PRED(0x2d, AARCH64_negate_ra_state, SELECT_AARCH64)
HANDLE_DW_CFA_PRED(0x2e, GNU_args_size, SELECT_X86)
diff --git a/llvm/include/llvm/CodeGen/CFIInstBuilder.h b/llvm/include/llvm/CodeGen/CFIInstBuilder.h
index 8e22a5bacef6e..414fee4b38a77 100644
--- a/llvm/include/llvm/CodeGen/CFIInstBuilder.h
+++ b/llvm/include/llvm/CodeGen/CFIInstBuilder.h
@@ -88,6 +88,11 @@ class CFIInstBuilder {
insertCFIInst(MCCFIInstruction::createNegateRAStateWithPC(nullptr));
}
+ void buildSetRAState(unsigned State, MCSymbol *PACSym) const {
+ insertCFIInst(
+ MCCFIInstruction::createLLVMSetRAState(nullptr, State, PACSym));
+ }
+
void buildRegister(MCRegister Reg1, MCRegister Reg2) const {
insertCFIInst(MCCFIInstruction::createRegister(
nullptr, TRI.getDwarfRegNum(Reg1, IsEH),
diff --git a/llvm/include/llvm/DebugInfo/DWARF/LowLevel/DWARFCFIProgram.h b/llvm/include/llvm/DebugInfo/DWARF/LowLevel/DWARFCFIProgram.h
index 398da49aa861a..6e4aca5c0a8fb 100644
--- a/llvm/include/llvm/DebugInfo/DWARF/LowLevel/DWARFCFIProgram.h
+++ b/llvm/include/llvm/DebugInfo/DWARF/LowLevel/DWARFCFIProgram.h
@@ -122,6 +122,13 @@ class CFIProgram {
// No operands
addInstruction(Opcode);
break;
+ case DW_CFA_AARCH64_set_ra_state: {
+ // Operands: ULEB128 ra_state, SLEB128 offset
+ uint64_t Op1 = Data.getULEB128(C);
+ uint64_t Op2 = (uint64_t)Data.getSLEB128(C);
+ addInstruction(Opcode, Op1, Op2);
+ break;
+ }
case DW_CFA_set_loc:
// Operands: Address
addInstruction(Opcode, Data.getRelocatedAddress(C));
@@ -236,11 +243,13 @@ class CFIProgram {
OT_Address,
OT_Offset,
OT_FactoredCodeOffset,
+ OT_SignedFactCodeOffset,
OT_SignedFactDataOffset,
OT_UnsignedFactDataOffset,
OT_Register,
OT_AddressSpace,
- OT_Expression
+ OT_Expression,
+ OT_RAState,
};
/// Get the OperandType as a "const char *".
diff --git a/llvm/include/llvm/MC/MCDwarf.h b/llvm/include/llvm/MC/MCDwarf.h
index 10a7035326036..c4224f2ecacbc 100644
--- a/llvm/include/llvm/MC/MCDwarf.h
+++ b/llvm/include/llvm/MC/MCDwarf.h
@@ -527,6 +527,7 @@ class MCCFIInstruction {
OpWindowSave,
OpNegateRAState,
OpNegateRAStateWithPC,
+ OpLLVMSetRAState,
OpGnuArgsSize,
OpLabel,
OpValOffset,
@@ -594,12 +595,24 @@ class MCCFIInstruction {
unsigned MaskRegister;
unsigned MaskRegisterSizeInBits;
};
+ /// Held in ExtraFields when OpLLVMSetRAState.
+ struct LLVMSetRAStateFields {
+ /// The ra_state value (DW_AARCH64_RA_NOT_SIGNED, DW_AARCH64_RA_SIGNED_SP,
+ /// or DW_AARCH64_RA_SIGNED_SP_PC).
+ unsigned State;
+ /// Symbol pointing to the signing instruction.
+ /// Precisely one of \p PACSym xor \p Offset should be non-zero.
+ MCSymbol *PACSym;
+ /// Factored offset to the signing instruction.
+ /// Precisely one of \p PACSym xor \p Offset should be non-zero.
+ int64_t Offset;
+ };
private:
MCSymbol *Label;
std::variant<CommonFields, EscapeFields, LabelFields, RegisterPairFields,
VectorRegistersFields, VectorOffsetFields,
- VectorRegisterMaskFields>
+ VectorRegisterMaskFields, LLVMSetRAStateFields>
ExtraFields;
OpType Operation;
SMLoc Loc;
@@ -690,6 +703,22 @@ class MCCFIInstruction {
return {OpNegateRAStateWithPC, L, CommonFields{}, Loc};
}
+ /// .cfi_llvm_set_ra_state AArch64 set RA sign state,
+ // with a symbolic offset to the signing instruction.
+ static MCCFIInstruction createLLVMSetRAState(MCSymbol *L, unsigned State,
+ MCSymbol *PACSym = nullptr,
+ SMLoc Loc = {}) {
+ return {OpLLVMSetRAState, L, LLVMSetRAStateFields{State, PACSym, 0}, Loc};
+ }
+
+ /// .cfi_llvm_set_ra_state AArch64 set RA sign state,
+ /// with a pre-computed factored offset to the signing instruction.
+ static MCCFIInstruction createLLVMSetRAState(MCSymbol *L, unsigned State,
+ int64_t Offset, SMLoc Loc = {}) {
+ return {OpLLVMSetRAState, L, LLVMSetRAStateFields{State, nullptr, Offset},
+ Loc};
+ }
+
/// .cfi_restore says that the rule for Register is now the same as it
/// was at the beginning of the function, after all initial instructions added
/// by .cfi_startproc were executed.
@@ -831,6 +860,21 @@ class MCCFIInstruction {
return std::get<CommonFields>(ExtraFields).Offset;
}
+ unsigned getRASignState() const {
+ assert(Operation == OpLLVMSetRAState);
+ return std::get<LLVMSetRAStateFields>(ExtraFields).State;
+ }
+
+ MCSymbol *getRASignSymbol() const {
+ assert(Operation == OpLLVMSetRAState);
+ return std::get<LLVMSetRAStateFields>(ExtraFields).PACSym;
+ }
+
+ int64_t getRASignOffset() const {
+ assert(Operation == OpLLVMSetRAState);
+ return std::get<LLVMSetRAStateFields>(ExtraFields).Offset;
+ }
+
MCSymbol *getCfiLabel() const {
assert(Operation == OpLabel);
return std::get<LabelFields>(ExtraFields).CfiLabel;
diff --git a/llvm/include/llvm/MC/MCStreamer.h b/llvm/include/llvm/MC/MCStreamer.h
index f1479f860e885..0facd10e92832 100644
--- a/llvm/include/llvm/MC/MCStreamer.h
+++ b/llvm/include/llvm/MC/MCStreamer.h
@@ -1062,6 +1062,10 @@ class LLVM_ABI MCStreamer {
int64_t MaskRegisterSizeInBits, SMLoc Loc = {});
virtual void emitCFINegateRAStateWithPC(SMLoc Loc = {});
+ virtual void emitCFILLVMSetRAState(unsigned State, MCSymbol *PACSym,
+ SMLoc Loc = {});
+ virtual void emitCFILLVMSetRAState(unsigned State, int64_t Offset,
+ SMLoc Loc = {});
virtual void emitCFILabelDirective(SMLoc Loc, StringRef Name);
virtual void emitCFIValOffset(int64_t Register, int64_t Offset,
SMLoc Loc = {});
diff --git a/llvm/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp b/llvm/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp
index 36f186d312e9a..6dad244ad1cfc 100644
--- a/llvm/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp
+++ b/llvm/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp
@@ -238,6 +238,11 @@ void AsmPrinter::emitCFIInstruction(const MCCFIInstruction &Inst) const {
case MCCFIInstruction::OpNegateRAStateWithPC:
OutStreamer->emitCFINegateRAStateWithPC(Loc);
break;
+ case MCCFIInstruction::OpLLVMSetRAState: {
+ OutStreamer->emitCFILLVMSetRAState(Inst.getRASignState(),
+ Inst.getRASignSymbol(), Loc);
+ break;
+ }
case MCCFIInstruction::OpSameValue:
OutStreamer->emitCFISameValue(Inst.getRegister(), Loc);
break;
diff --git a/llvm/lib/CodeGen/CFIInstrInserter.cpp b/llvm/lib/CodeGen/CFIInstrInserter.cpp
index b9a48188931de..ad81aaa5e276e 100644
--- a/llvm/lib/CodeGen/CFIInstrInserter.cpp
+++ b/llvm/lib/CodeGen/CFIInstrInserter.cpp
@@ -323,6 +323,7 @@ void CFIInstrInserter::calculateOutgoingCFAInfo(MBBCFAInfo &MBBInfo) {
case MCCFIInstruction::OpWindowSave:
case MCCFIInstruction::OpNegateRAState:
case MCCFIInstruction::OpNegateRAStateWithPC:
+ case MCCFIInstruction::OpLLVMSetRAState:
case MCCFIInstruction::OpGnuArgsSize:
case MCCFIInstruction::OpLLVMRegisterPair:
case MCCFIInstruction::OpLLVMVectorRegisters:
diff --git a/llvm/lib/CodeGen/MIRParser/MILexer.cpp b/llvm/lib/CodeGen/MIRParser/MILexer.cpp
index 4188ff8f85131..958e5a3e682c0 100644
--- a/llvm/lib/CodeGen/MIRParser/MILexer.cpp
+++ b/llvm/lib/CodeGen/MIRParser/MILexer.cpp
@@ -242,6 +242,7 @@ static MIToken::TokenKind getIdentifierKind(StringRef Identifier) {
MIToken::kw_cfi_aarch64_negate_ra_sign_state)
.Case("negate_ra_sign_state_with_pc",
MIToken::kw_cfi_aarch64_negate_ra_sign_state_with_pc)
+ .Case("llvm_set_ra_state", MIToken::kw_cfi_llvm_set_ra_state)
.Case("llvm_register_pair", MIToken::kw_cfi_llvm_register_pair)
.Case("llvm_vector_registers", MIToken::kw_cfi_llvm_vector_registers)
.Case("llvm_vector_offset", MIToken::kw_cfi_llvm_vector_offset)
diff --git a/llvm/lib/CodeGen/MIRParser/MILexer.h b/llvm/lib/CodeGen/MIRParser/MILexer.h
index 3915222896263..02af892d12ad6 100644
--- a/llvm/lib/CodeGen/MIRParser/MILexer.h
+++ b/llvm/lib/CodeGen/MIRParser/MILexer.h
@@ -99,6 +99,7 @@ struct MIToken {
kw_cfi_window_save,
kw_cfi_aarch64_negate_ra_sign_state,
kw_cfi_aarch64_negate_ra_sign_state_with_pc,
+ kw_cfi_llvm_set_ra_state,
kw_cfi_llvm_register_pair,
kw_cfi_llvm_vector_registers,
kw_cfi_llvm_vector_offset,
diff --git a/llvm/lib/CodeGen/MIRParser/MIParser.cpp b/llvm/lib/CodeGen/MIRParser/MIParser.cpp
index 2924c0dda2390..4d9a8ee4b9cb7 100644
--- a/llvm/lib/CodeGen/MIRParser/MIParser.cpp
+++ b/llvm/lib/CodeGen/MIRParser/MIParser.cpp
@@ -2853,6 +2853,28 @@ bool MIParser::parseCFIOperand(MachineOperand &Dest) {
CFIIndex =
MF.addFrameInst(MCCFIInstruction::createNegateRAStateWithPC(nullptr));
break;
+ case MIToken::kw_cfi_llvm_set_ra_state: {
+ unsigned State;
+ MCSymbol *PACSym = nullptr;
+ if (parseCFIUnsigned(State) || expectAndConsume(MIToken::comma))
+ return true;
+ if (Token.is(MIToken::MCSymbol)) {
+ PACSym = getOrCreateMCSymbol(Token.stringValue());
+ lex();
+ CFIIndex = MF.addFrameInst(
+ MCCFIInstruction::createLLVMSetRAState(nullptr, State, PACSym));
+ } else if (Token.is(MIToken::IntegerLiteral)) {
+ int Offset;
+ if (parseCFIOffset(Offset))
+ return true;
+ CFIIndex = MF.addFrameInst(
+ MCCFIInstruction::createLLVMSetRAState(nullptr, State, Offset));
+ } else {
+ return error("expected '<mcsymbol ...>' or integer offset for "
+ "cfi_llvm_set_ra_state");
+ }
+ break;
+ }
case MIToken::kw_cfi_llvm_register_pair: {
unsigned Reg, R1, R2;
unsigned R1Size, R2Size;
@@ -3298,6 +3320,7 @@ bool MIParser::parseMachineOperand(const unsigned OpCode, const unsigned OpIdx,
case MIToken::kw_cfi_window_save:
case MIToken::kw_cfi_aarch64_negate_ra_sign_state:
case MIToken::kw_cfi_aarch64_negate_ra_sign_state_with_pc:
+ case MIToken::kw_cfi_llvm_set_ra_state:
case MIToken::kw_cfi_llvm_register_pair:
case MIToken::kw_cfi_llvm_vector_registers:
case MIToken::kw_cfi_llvm_vector_offset:
diff --git a/llvm/lib/CodeGen/MachineOperand.cpp b/llvm/lib/CodeGen/MachineOperand.cpp
index 518759952667e..bf48bc7a1cbbb 100644
--- a/llvm/lib/CodeGen/MachineOperand.cpp
+++ b/llvm/lib/CodeGen/MachineOperand.cpp
@@ -790,6 +790,17 @@ static void printCFI(raw_ostream &OS, const MCCFIInstruction &CFI,
if (MCSymbol *Label = CFI.getLabel())
MachineOperand::printSymbol(OS, *Label);
break;
+ case MCCFIInstruction::OpLLVMSetRAState: {
+ OS << "llvm_set_ra_state ";
+ if (MCSymbol *Label = CFI.getLabel())
+ MachineOperand::printSymbol(OS, *Label);
+ OS << CFI.getRASignState() << ", ";
+ if (MCSymbol *PACSym = CFI.getRASignSymbol())
+ MachineOperand::printSymbol(OS, *PACSym);
+ else
+ OS << CFI.getRASignOffset();
+ break;
+ }
case MCCFIInstruction::OpLLVMRegisterPair: {
const auto &Fields =
CFI.getExtraFields<MCCFIInstruction::RegisterPairFields>();
diff --git a/llvm/lib/DWARFCFIChecker/DWARFCFIState.cpp b/llvm/lib/DWARFCFIChecker/DWARFCFIState.cpp
index 2c0eeac0089ae..f76f1ea17314e 100644
--- a/llvm/lib/DWARFCFIChecker/DWARFCFIState.cpp
+++ b/llvm/lib/DWARFCFIChecker/DWARFCFIState.cpp
@@ -150,6 +150,12 @@ dwarf::CFIProgram DWARFCFIState::convert(MCCFIInstruction Directive) {
case MCCFIInstruction::OpNegateRAStateWithPC:
CFIP.addInstruction(dwarf::DW_CFA_AARCH64_negate_ra_state_with_pc);
break;
+ case MCCFIInstruction::OpLLVMSetRAState: {
+ CFIP.addInstruction(dwarf::DW_CFA_AARCH64_set_ra_state,
+ Directive.getRASignState(),
+ (uint64_t)Directive.getRASignOffset());
+ break;
+ }
case MCCFIInstruction::OpGnuArgsSize:
CFIP.addInstruction(dwarf::DW_CFA_GNU_args_size);
break;
diff --git a/llvm/lib/DebugInfo/DWARF/DWARFCFIPrinter.cpp b/llvm/lib/DebugInfo/DWARF/DWARFCFIPrinter.cpp
index 182b4956e5792..adc1c1ac48a15 100644
--- a/llvm/lib/DebugInfo/DWARF/DWARFCFIPrinter.cpp
+++ b/llvm/lib/DebugInfo/DWARF/DWARFCFIPrinter.cpp
@@ -83,6 +83,12 @@ static void printOperand(raw_ostream &OS, const DIDumpOptions &DumpOpts,
else
OS << formatv(" {0}*data_alignment_factor", int64_t(Operand));
break;
+ case CFIProgram::OT_SignedFactCodeOffset:
+ if (P.codeAlign())
+ OS << formatv(" {0}", int64_t(Operand) * (int64_t)P.codeAlign());
+ else
+ OS << formatv(" {0}*code_alignment_factor", int64_t(Operand));
+ break;
case CFIProgram::OT_UnsignedFactDataOffset:
if (P.dataAlign())
OS << formatv(" {0}", int64_t(Operand * P.dataAlign()));
@@ -93,6 +99,9 @@ static void printOperand(raw_ostream &OS, const DIDumpOptions &DumpOpts,
OS << ' ';
printRegister(OS, DumpOpts, Operand);
break;
+ case CFIProgram::OT_RAState:
+ OS << ' ' << Operand;
+ break;
case CFIProgram::OT_AddressSpace:
OS << formatv(" in addrspace{0}", Operand);
break;
diff --git a/llvm/lib/DebugInfo/DWARF/LowLevel/DWARFCFIProgram.cpp b/llvm/lib/DebugInfo/DWARF/LowLevel/DWARFCFIProgram.cpp
index eaf56b3071592..f8bc7dd2623f3 100644
--- a/llvm/lib/DebugInfo/DWARF/LowLevel/DWARFCFIProgram.cpp
+++ b/llvm/lib/DebugInfo/DWARF/LowLevel/DWARFCFIProgram.cpp
@@ -32,11 +32,13 @@ const char *CFIProgram::operandTypeString(CFIProgram::OperandType OT) {
ENUM_TO_CSTR(OT_Address);
ENUM_TO_CSTR(OT_Offset);
ENUM_TO_CSTR(OT_FactoredCodeOffset);
+ ENUM_TO_CSTR(OT_SignedFactCodeOffset);
ENUM_TO_CSTR(OT_SignedFactDataOffset);
ENUM_TO_CSTR(OT_UnsignedFactDataOffset);
ENUM_TO_CSTR(OT_Register);
ENUM_TO_CSTR(OT_AddressSpace);
ENUM_TO_CSTR(OT_Expression);
+ ENUM_TO_CSTR(OT_RAState);
}
return "<unknown CFIProgram::OperandType>";
}
@@ -61,6 +63,7 @@ CFIProgram::Instruction::getOperandAsUnsigned(const CFIProgram &CFIP,
case OT_Offset:
case OT_SignedFactDataOffset:
case OT_UnsignedFactDataOffset:
+ case OT_SignedFactCodeOffset:
return createStringError(
errc::invalid_argument,
"op[%" PRIu32 "] has OperandType OT_Offset which produces a signed "
@@ -70,6 +73,7 @@ CFIProgram::Instruction::getOperandAsUnsigned(const CFIProgram &CFIP,
case OT_Address:
case OT_Register:
case OT_AddressSpace:
+ case OT_RAState:
return Operand;
case OT_FactoredCodeOffset: {
@@ -106,6 +110,7 @@ CFIProgram::Instruction::getOperandAsSigned(const CFIProgram &CFIP,
case OT_Address:
case OT_Register:
case OT_AddressSpace:
+ case OT_RAState:
return createStringError(
errc::invalid_argument,
"op[%" PRIu32 "] has OperandType %s which produces an unsigned result, "
@@ -126,6 +131,16 @@ CFIProgram::Instruction::getOperandAsSigned(const CFIProgram &CFIP,
return int64_t(Operand) * DataAlignmentFactor;
}
+ case OT_SignedFactCodeOffset: {
+ const int64_t CodeAlignmentFactor = CFIP.codeAlign();
+ if (CodeAlignmentFactor == 0)
+ return createStringError(errc::invalid_argument,
+ "op[%" PRIu32 "] has type %s but code "
+ "alignment is zero",
+ OperandIdx, CFIProgram::operandTypeString(Type));
+ return int64_t(Operand) * CodeAlignmentFactor;
+ }
+
case OT_UnsignedFactDataOffset: {
const int64_t DataAlignmentFactor = CFIP.dataAlign();
if (DataAlignmentFactor == 0)
@@ -192,6 +207,7 @@ CFIProgram::getOperandTypes() {
DECLARE_OP0(DW_CFA_restore_state);
DECLARE_OP0(DW_CFA_GNU_window_save);
DECLARE_OP0(DW_CFA_AARCH64_negate_ra_state_with_pc);
+ DECLARE_OP2(DW_CFA_AARCH64_set_ra_state, OT_RAState, OT_SignedFactCodeOffset);
DECLARE_OP1(DW_CFA_GNU_args_size, OT_Offset);
DECLARE_OP0(DW_CFA_nop);
diff --git a/llvm/lib/DebugInfo/DWARF/LowLevel/DWARFUnwindTable.cpp b/llvm/lib/DebugInfo/DWARF/LowLevel/DWARFUnwindTable.cpp
index 20f52673eefe1..94d62d176e638 100644
--- a/llvm/lib/DebugInfo/DWARF/LowLevel/DWARFUnwindTable.cpp
+++ b/llvm/lib/DebugInfo/DWARF/LowLevel/DWARFUnwindTable.cpp
@@ -257,6 +257,17 @@ llvm::dwarf::parseRows(const CFIProgram &CFIP, UnwindRow &Row,
break;
}
+ case dwarf::DW_CFA_AARCH64_set_ra_state: {
+ constexpr uint32_t AArch64DWARFPAuthRaState = 34;
+ llvm::Expected<uint64_t> State = Inst.getOperandAsUnsigned(CFIP, 0);
+ if (!State)
+ return State.takeError();
+ Row.getRegisterLocations().setRegisterLocation(
+ AArch64DWARFPAuthRaState,
+ UnwindLocation::createIsConstant((int64_t)*State));
+ break;
+ }
+
case dwarf::DW_CFA_undefined: {
llvm::Expected<uint64_t> RegNum = Inst.getOperandAsUnsigned(CFIP, 0);
if (!RegNum)
diff --git a/llvm/lib/MC/MCAsmStreamer.cpp b/llvm/lib/MC/MCAsmStreamer.cpp
index a518daa997945..36296a61c3d26 100644
--- a/llvm/lib/MC/MCAsmStreamer.cpp
+++ b/llvm/lib/MC/MCAsmStreamer.cpp
@@ -396,6 +396,9 @@ class MCAsmStreamer final : public MCAsmBaseStreamer {
void emitCFIWindowSave(SMLoc Loc) override;
void emitCFINegateRAState(SMLoc Loc) override;
void emitCFINegateRAStateWithPC(SMLoc Loc) override;
+ void emitCFILLVMSetRAState(unsigned State, MCSymbol *PACSym,
+ SMLoc Loc) override;
+ void emitCFILLVMSetRAState(unsigned State, int64_t Offset, SMLoc Loc) override;
void emitCFIReturnColumn(int64_t Register) override;
void emitCFILLVMRegisterPair(int64_t Register, int64_t R1, int64_t R1Size,
int64_t R2, int64_t R2Size, SMLoc Loc) override;
@@ -2283,6 +2286,24 @@ void MCAsmStreamer::emitCFINegateRAStateWithPC(SMLoc Loc) {
EmitEOL();
}
+void MCAsmStreamer::emitCFILLVMSetRAState(unsigned State, MCSymbol *PACSym,
+ SMLoc Loc) {
+ MCStreamer::emitCFILLVMSetRAState(State, PACSym, Loc);
+ OS << "\t.cfi_llvm_set_ra_state " << State << ", ";
+ if (PACSym)
+ PACSym->print(OS, MAI);
+ else
+ OS << "0";
+ EmitEOL();
+}
+
+void MCAsmStreamer::emitCFILLVMSetRAState(unsigned State, int64_t Offset,
+ SMLoc Loc) {
+ MCStreamer::emitCFILLVMSetRAState(State, Offset, Loc);
+ OS << "\t.cfi_llvm_set_ra_state " << State << ", " << Offset;
+ EmitEOL();
+}
+
void MCAsmStreamer::emitCFIReturnColumn(int64_t Register) {
MCStreamer::emitCFIReturnColumn(Register);
OS << "\t.cfi_return_column ";
diff --git a/llvm/lib/MC/MCDwarf.cpp b/llvm/lib/MC/MCDwarf.cpp
index 37ec324cdc499..209fcbf056e12 100644
--- a/llvm/lib/MC/MCDwarf.cpp
+++ b/llvm/lib/MC/MCDwarf.cpp
@@ -1330,6 +1330,9 @@ void MCCFIInstruction::replaceRegister(unsigned FromReg, unsigned ToReg) {
ReplaceReg(F.Register);
ReplaceReg(F.SpillRegister);
ReplaceReg(F.MaskRegister);
+ },
+ [](LLVMSetRAStateFields &) {
+ assert(false && ".cfi_set_ra_state does not have registers");
});
std::visit(Visitor, ExtraFields);
}
@@ -1456,6 +1459,24 @@ void FrameEmitterImpl::emitCFIInstruction(const MCCFIInstruction &Instr) {
Streamer.emitInt8(dwarf::DW_CFA_AARCH64_negate_ra_state_with_pc);
return;
+ case MCCFIInstruction::OpLLVMSetRAState: {
+ Streamer.emitInt8(dwarf::DW_CFA_AARCH64_set_ra_state);
+ Streamer.emitULEB128IntValue(Instr.getRASignState());
+ if (MCSymbol *PACSym = Instr.getRASignSymbol()) {
+ MCContext &Ctx = Streamer.getContext();
+ const MCExpr *Diff = MCBinaryExpr::createSub(
+ MCSymbolRefExpr::create(PACSym, Ctx),
+ MCSymbolRefExpr::create(Instr.getLabel(), Ctx), Ctx);
+ const MCExpr *Factored = MCBinaryExpr::createDiv(
+ Diff,
+ MCConstantExpr::create(Ctx.getAsmInfo().getMinInstAlignment(), Ctx),
+ Ctx);
+ Streamer.emitSLEB128Value(Factored);
+ } else {
+ Streamer.emitSLEB128IntValue(Instr.getRASignOffset());
+ }
+ return;
+ }
case MCCFIInstruction::OpUndefined: {
unsigned Reg = Instr.getRegister();
Streamer.emitInt8(dwarf::DW_CFA_undefined);
diff --git a/llvm/lib/MC/MCSFrame.cpp b/llvm/lib/MC/MCSFrame.cpp
index bdf2c95d5c071..5e5a6aaeb19f0 100644
--- a/llvm/lib/MC/MCSFrame.cpp
+++ b/llvm/lib/MC/MCSFrame.cpp
@@ -339,6 +339,7 @@ class SFrameEmitterImpl {
case dwarf::DW_CFA_MIPS_advance_loc8:
case dwarf::DW_CFA_AARCH64_negate_ra_state_with_pc:
case dwarf::DW_CFA_AARCH64_negate_ra_state:
+ case dwarf::DW_CFA_AARCH64_set_ra_state:
case dwarf::DW_CFA_LLVM_def_aspace_cfa:
case dwarf::DW_CFA_LLVM_def_aspace_cfa_sf:
Streamer.getContext().reportWarning(
diff --git a/llvm/lib/MC/MCStreamer.cpp b/llvm/lib/MC/MCStreamer.cpp
index 1cd94715b2592..7ca8658f53afc 100644
--- a/llvm/lib/MC/MCStreamer.cpp
+++ b/llvm/lib/MC/MCStreamer.cpp
@@ -748,6 +748,28 @@ void MCStreamer::emitCFINegateRAStateWithPC(SMLoc Loc) {
CurFrame->Instructions.push_back(std::move(Instruction));
}
+void MCStreamer::emitCFILLVMSetRAState(unsigned State, MCSymbol *PACSym,
+ SMLoc Loc) {
+ MCSymbol *Label = emitCFILabel();
+ MCCFIInstruction Instruction =
+ MCCFIInstruction::createLLVMSetRAState(Label, State, PACSym, Loc);
+ MCDwarfFrameInfo *CurFrame = getCurrentDwarfFrameInfo();
+ if (!CurFrame)
+ return;
+ CurFrame->Instructions.push_back(std::move(Instruction));
+}
+
+void MCStreamer::emitCFILLVMSetRAState(unsigned State, int64_t Offset,
+ SMLoc Loc) {
+ MCSymbol *Label = emitCFILabel();
+ MCCFIInstruction Instruction =
+ MCCFIInstruction::createLLVMSetRAState(Label, State, Offset, Loc);
+ MCDwarfFrameInfo *CurFrame = getCurrentDwarfFrameInfo();
+ if (!CurFrame)
+ return;
+ CurFrame->Instructions.push_back(std::move(Instruction));
+}
+
void MCStreamer::emitCFIReturnColumn(int64_t Register) {
MCDwarfFrameInfo *CurFrame = getCurrentDwarfFrameInfo();
if (!CurFrame)
diff --git a/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp b/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
index cd660ad7d37f2..98d13226af30d 100644
--- a/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
+++ b/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
@@ -25,6 +25,40 @@ using namespace llvm::AArch64PAuth;
namespace {
+/// Control the emission of .cfi_llvm_set_ra_state, which replaces the
+/// deprecated .cfi_negate_ra_state_with_pc [1].
+///
+/// The latter is fundamentally unable to express some program orders [2], as the
+/// dwarf 'program' reads functions in a linear scan of their addresses to
+/// reconstruct the state of the frame, whereas control flow may enter and exit
+/// such regions arbitrarily (such as in hot-cold-split, and shrinkwrapped
+/// fucntions), and thus the negate-based cfi is unable to encode the address of
+/// the signing instruciton in all program orders.
+///
+/// Since .cfi_negate_ra_state is still sufficient for describing
+/// ptrauth-returns=pauth, we default to using the new CFI only for PAuth_LR, as
+/// it is a smaller encoding than DW_CFA_AARCH64_set_ra_state.
+///
+/// 1: https://github.com/ARM-software/abi-aa/pull/346
+/// 2: https://github.com/ARM-software/abi-aa/issues/327
+enum class SetRAStateMode {
+ Never, // Always use .cfi_negate_ra_state(_with_pc)
+ PAuthLR, // Use .cfi_llvm_set_ra_state only for PAuth_LR
+ Always, // Use .cfi_llvm_set_ra_state for both PAuth and PAuth_LR
+};
+cl::opt<SetRAStateMode> CFILLVMSetRASignStateMode(
+ "aarch64-cfi-llvm-set-ra-sign-state", cl::init(SetRAStateMode::PAuthLR),
+ cl::desc(
+ "Control emission of .cfi_llvm_set_ra_state for PAC return address "
+ "signing CFI"),
+ cl::values(clEnumValN(SetRAStateMode::Never, "never",
+ "Always use legacy .cfi_negate_ra_state[_with_pc]"),
+ clEnumValN(SetRAStateMode::PAuthLR, "pauth-lr",
+ "Use new CFI only for PAuth_LR (default)"),
+ clEnumValN(SetRAStateMode::Always, "always",
+ "Use new CFI for both PAuth and PAuth_LR")),
+ cl::Hidden);
+
class AArch64PointerAuthImpl {
public:
bool run(MachineFunction &MF);
@@ -77,18 +111,69 @@ static void emitEpiloguePACSymOffsetIntoReg(const TargetInstrInfo &TII,
}
static void emitPACCFI(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI,
- MachineInstr::MIFlag Flags, bool EmitCFI) {
+ bool EmitCFI, MCSymbol *PACSym) {
if (!EmitCFI)
return;
auto &MF = *MBB.getParent();
auto &MFnI = *MF.getInfo<AArch64FunctionInfo>();
+ CFIInstBuilder CFIBuilder(MBB, MBBI, MachineInstr::FrameSetup);
+ const Triple &TT = MF.getTarget().getTargetTriple();
- CFIInstBuilder CFIBuilder(MBB, MBBI, Flags);
if (MFnI.branchProtectionPAuthLR()) {
- CFIBuilder.buildNegateRAStateWithPC();
- } else if (!MF.getTarget().getTargetTriple().isOSBinFormatMachO()) {
- CFIBuilder.buildNegateRAState();
+ switch (CFILLVMSetRASignStateMode) {
+ case SetRAStateMode::Never:
+ CFIBuilder.buildNegateRAStateWithPC();
+ break;
+ case SetRAStateMode::PAuthLR:
+ case SetRAStateMode::Always:
+ assert(PACSym && "No PAC instruction to refer to");
+ CFIBuilder.buildSetRAState(2, PACSym);
+ break;
+ }
+ } else if (!TT.isOSBinFormatMachO()) {
+ switch (CFILLVMSetRASignStateMode) {
+ case SetRAStateMode::Never:
+ case SetRAStateMode::PAuthLR:
+ CFIBuilder.buildNegateRAState();
+ break;
+ case SetRAStateMode::Always:
+ CFIBuilder.buildSetRAState(1, nullptr);
+ break;
+ }
+ }
+}
+
+static void emitAUTCFI(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI,
+ bool EmitCFI, MCSymbol *PACSym) {
+ if (!EmitCFI)
+ return;
+
+ auto &MF = *MBB.getParent();
+ auto &MFnI = *MF.getInfo<AArch64FunctionInfo>();
+ CFIInstBuilder CFIBuilder(MBB, MBBI, MachineInstr::FrameDestroy);
+ const Triple &TT = MF.getTarget().getTargetTriple();
+
+ if (MFnI.branchProtectionPAuthLR()) {
+ switch (CFILLVMSetRASignStateMode) {
+ case SetRAStateMode::Never:
+ CFIBuilder.buildNegateRAStateWithPC();
+ break;
+ case SetRAStateMode::PAuthLR:
+ case SetRAStateMode::Always:
+ CFIBuilder.buildSetRAState(0, nullptr);
+ break;
+ }
+ } else if (!TT.isOSBinFormatMachO()) {
+ switch (CFILLVMSetRASignStateMode) {
+ case SetRAStateMode::Never:
+ case SetRAStateMode::PAuthLR:
+ CFIBuilder.buildNegateRAState();
+ break;
+ case SetRAStateMode::Always:
+ CFIBuilder.buildSetRAState(0, nullptr);
+ break;
+ }
}
}
@@ -119,7 +204,7 @@ void AArch64PointerAuthImpl::signLR(MachineFunction &MF,
// No SEH opcode for this one; it doesn't materialize into an
// instruction on Windows.
if (MFnI.branchProtectionPAuthLR() && Subtarget->hasPAuthLR()) {
- emitPACCFI(MBB, MBBI, MachineInstr::FrameSetup, EmitCFI);
+ emitPACCFI(MBB, MBBI, EmitCFI, MFnI.getSigningInstrLabel());
BuildMI(MBB, MBBI, DL,
TII->get(UseBKey ? AArch64::PACIBSPPC : AArch64::PACIASPPC))
.setMIFlag(MachineInstr::FrameSetup)
@@ -128,14 +213,14 @@ void AArch64PointerAuthImpl::signLR(MachineFunction &MF,
if (MFnI.branchProtectionPAuthLR()) {
BuildMI(MBB, MBBI, DL, TII->get(AArch64::PACM))
.setMIFlag(MachineInstr::FrameSetup);
- emitPACCFI(MBB, MBBI, MachineInstr::FrameSetup, EmitCFI);
+ emitPACCFI(MBB, MBBI, EmitCFI, MFnI.getSigningInstrLabel());
}
BuildMI(MBB, MBBI, DL,
TII->get(UseBKey ? AArch64::PACIBSP : AArch64::PACIASP))
.setMIFlag(MachineInstr::FrameSetup)
->setPreInstrSymbol(MF, MFnI.getSigningInstrLabel());
if (!MFnI.branchProtectionPAuthLR())
- emitPACCFI(MBB, MBBI, MachineInstr::FrameSetup, EmitCFI);
+ emitPACCFI(MBB, MBBI, EmitCFI, nullptr);
}
if (!EmitCFI && NeedsWinCFI) {
@@ -217,7 +302,7 @@ void AArch64PointerAuthImpl::authenticateLR(
emitEpiloguePACSymOffsetIntoReg(*TII, MBB, MBBI, DL, PACSym,
AArch64::X15);
- emitPACCFI(MBB, MBBI, MachineInstr::FrameDestroy, EmitAsyncCFI);
+ emitAUTCFI(MBB, MBBI, EmitAsyncCFI, PACSym);
unsigned AutOpc = UseBKey ? AArch64::AUTIB171615 : AArch64::AUTIA171615;
BuildMI(MBB, MBBI, DL, TII->get(AutOpc))
.setMIFlag(MachineInstr::FrameDestroy);
@@ -234,7 +319,7 @@ void AArch64PointerAuthImpl::authenticateLR(
BuildMI(MBB, MBBI, DL, TII->get(AArch64::PACM))
.setMIFlag(MachineInstr::FrameDestroy);
- emitPACCFI(MBB, MBBI, MachineInstr::FrameDestroy, EmitAsyncCFI);
+ emitAUTCFI(MBB, MBBI, EmitAsyncCFI, PACSym);
unsigned AutOpc = UseBKey ? AArch64::AUTIB1716 : AArch64::AUTIA1716;
BuildMI(MBB, MBBI, DL, TII->get(AutOpc))
.setMIFlag(MachineInstr::FrameDestroy);
@@ -242,7 +327,7 @@ void AArch64PointerAuthImpl::authenticateLR(
unsigned AutOpc = UseBKey ? AArch64::AUTIB1716 : AArch64::AUTIA1716;
BuildMI(MBB, MBBI, DL, TII->get(AutOpc))
.setMIFlag(MachineInstr::FrameDestroy);
- emitPACCFI(MBB, MBBI, MachineInstr::FrameDestroy, EmitAsyncCFI);
+ emitAUTCFI(MBB, MBBI, EmitAsyncCFI, PACSym);
}
BuildMI(MBB, MBBI, DL, TII->get(AArch64::ORRXrs), AArch64::LR)
@@ -278,7 +363,7 @@ void AArch64PointerAuthImpl::authenticateLR(
if (MFnI->branchProtectionPAuthLR() && Subtarget->hasPAuthLR()) {
assert(PACSym && "No PAC instruction to refer to");
- emitPACCFI(MBB, MBBI, MachineInstr::FrameDestroy, EmitAsyncCFI);
+ emitAUTCFI(MBB, MBBI, EmitAsyncCFI, PACSym);
BuildMI(MBB, MBBI, DL,
TII->get(UseBKey ? AArch64::AUTIBSPPCi : AArch64::AUTIASPPCi))
.addSym(PACSym)
@@ -290,13 +375,13 @@ void AArch64PointerAuthImpl::authenticateLR(
BuildMI(MBB, MBBI, DL, TII->get(AArch64::PACM))
.setMIFlag(MachineInstr::FrameDestroy);
- emitPACCFI(MBB, MBBI, MachineInstr::FrameDestroy, EmitAsyncCFI);
+ emitAUTCFI(MBB, MBBI, EmitAsyncCFI, PACSym);
}
BuildMI(MBB, MBBI, DL,
TII->get(UseBKey ? AArch64::AUTIBSP : AArch64::AUTIASP))
.setMIFlag(MachineInstr::FrameDestroy);
if (!MFnI->branchProtectionPAuthLR())
- emitPACCFI(MBB, MBBI, MachineInstr::FrameDestroy, EmitAsyncCFI);
+ emitAUTCFI(MBB, MBBI, EmitAsyncCFI, nullptr);
}
if (NeedsWinCFI) {
diff --git a/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp b/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
index 6a6b73b8a4c88..5cbce8bf9527f 100644
--- a/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
+++ b/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
@@ -200,6 +200,7 @@ class AArch64AsmParser : public MCTargetAsmParser {
bool parseDirectiveUnreq(SMLoc L);
bool parseDirectiveCFINegateRAState();
bool parseDirectiveCFINegateRAStateWithPC();
+ bool parseDirectiveCFILLVMSetRAState();
bool parseDirectiveCFIBKeyFrame();
bool parseDirectiveCFIMTETaggedFrame();
@@ -7282,6 +7283,8 @@ bool AArch64AsmParser::ParseDirective(AsmToken DirectiveID) {
parseDirectiveCFINegateRAState();
else if (IDVal == ".cfi_negate_ra_state_with_pc")
parseDirectiveCFINegateRAStateWithPC();
+ else if (IDVal == ".cfi_llvm_set_ra_state")
+ parseDirectiveCFILLVMSetRAState();
else if (IDVal == ".cfi_b_key_frame")
parseDirectiveCFIBKeyFrame();
else if (IDVal == ".cfi_mte_tagged_frame")
@@ -7757,6 +7760,23 @@ bool AArch64AsmParser::parseDirectiveCFINegateRAStateWithPC() {
return false;
}
+/// parseDirectiveCFILLVMSetRAState
+/// ::= .cfi_llvm_set_ra_state ra_state, offset
+bool AArch64AsmParser::parseDirectiveCFILLVMSetRAState() {
+ int64_t State;
+ if (getParser().parseAbsoluteExpression(State))
+ return true;
+ if (parseToken(AsmToken::Comma, "expected ','"))
+ return true;
+ int64_t Offset;
+ if (getParser().parseAbsoluteExpression(Offset))
+ return true;
+ if (parseEOL())
+ return true;
+ getStreamer().emitCFILLVMSetRAState((unsigned)State, Offset);
+ return false;
+}
+
/// parseDirectiveCFIBKeyFrame
/// ::= .cfi_b_key
bool AArch64AsmParser::parseDirectiveCFIBKeyFrame() {
diff --git a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64AsmBackend.cpp b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64AsmBackend.cpp
index 98fd4fd4a451b..8d1125ef4cf14 100644
--- a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64AsmBackend.cpp
+++ b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64AsmBackend.cpp
@@ -724,6 +724,9 @@ class DarwinAArch64AsmBackend : public AArch64AsmBackend {
break;
}
+ case MCCFIInstruction::OpLLVMSetRAState:
+ // .cfi_llvm_set_ra_state is not yet supported in Compact Unwind.
+ return CU::UNWIND_ARM64_MODE_DWARF;
}
}
diff --git a/llvm/test/CodeGen/AArch64/pauth-lr-tail-call-fpdiff.ll b/llvm/test/CodeGen/AArch64/pauth-lr-tail-call-fpdiff.ll
index 67bff0b15fd49..429586dc235c1 100644
--- a/llvm/test/CodeGen/AArch64/pauth-lr-tail-call-fpdiff.ll
+++ b/llvm/test/CodeGen/AArch64/pauth-lr-tail-call-fpdiff.ll
@@ -18,16 +18,16 @@ define swifttailcc void @tail_call_fpdiff_a_key(ptr swiftasync %ctx) "branch-pro
; CHECK: // %bb.0:
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp0
; COMPAT-NEXT: .Ltmp0:
; COMPAT-NEXT: hint #25
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_negate_ra_state_with_pc
+; V83A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp0
; V83A-NEXT: .Ltmp0:
; V83A-NEXT: paciasp
-; V9A-NEXT: .cfi_negate_ra_state_with_pc
+; V9A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp0
; V9A-NEXT: .Ltmp0:
; V9A-NEXT: paciasppc
@@ -66,18 +66,18 @@ define swifttailcc void @tail_call_fpdiff_a_key(ptr swiftasync %ctx) "branch-pro
; COMPAT-NEXT: adrp x15, .Ltmp0
; COMPAT-NEXT: add x15, x15, :lo12:.Ltmp0
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT: .cfi_llvm_set_ra_state 0, 0
; COMPAT-NEXT: hint #12
; V83A-NEXT: adrp x15, .Ltmp0
; V83A-NEXT: add x15, x15, :lo12:.Ltmp0
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_negate_ra_state_with_pc
+; V83A-NEXT: .cfi_llvm_set_ra_state 0, 0
; V83A-NEXT: autia1716
; V9A-NEXT: adrp x15, .Ltmp0
; V9A-NEXT: add x15, x15, :lo12:.Ltmp0
-; V9A-NEXT: .cfi_negate_ra_state_with_pc
+; V9A-NEXT: .cfi_llvm_set_ra_state 0, 0
; V9A-NEXT: autia171615
; PAUTH-NEXT: autia1716
@@ -96,16 +96,16 @@ define swifttailcc void @tail_call_fpdiff_b_key(ptr swiftasync %ctx) "branch-pro
; CHECK-NEXT: .cfi_b_key_frame
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp1
; COMPAT-NEXT: .Ltmp1:
; COMPAT-NEXT: hint #27
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_negate_ra_state_with_pc
+; V83A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp1
; V83A-NEXT: .Ltmp1:
; V83A-NEXT: pacibsp
-; V9A-NEXT: .cfi_negate_ra_state_with_pc
+; V9A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp1
; V9A-NEXT: .Ltmp1:
; V9A-NEXT: pacibsppc
@@ -144,18 +144,18 @@ define swifttailcc void @tail_call_fpdiff_b_key(ptr swiftasync %ctx) "branch-pro
; COMPAT-NEXT: adrp x15, .Ltmp1
; COMPAT-NEXT: add x15, x15, :lo12:.Ltmp1
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT: .cfi_llvm_set_ra_state 0, 0
; COMPAT-NEXT: hint #14
; V83A-NEXT: adrp x15, .Ltmp1
; V83A-NEXT: add x15, x15, :lo12:.Ltmp1
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_negate_ra_state_with_pc
+; V83A-NEXT: .cfi_llvm_set_ra_state 0, 0
; V83A-NEXT: autib1716
; V9A-NEXT: adrp x15, .Ltmp1
; V9A-NEXT: add x15, x15, :lo12:.Ltmp1
-; V9A-NEXT: .cfi_negate_ra_state_with_pc
+; V9A-NEXT: .cfi_llvm_set_ra_state 0, 0
; V9A-NEXT: autib171615
; PAUTH-NEXT: autib1716
@@ -173,16 +173,16 @@ define swifttailcc void @tail_call_no_fpdiff_a_key(ptr swiftasync %ctx) "branch-
; CHECK: // %bb.0:
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp2
; COMPAT-NEXT: .Ltmp2:
; COMPAT-NEXT: hint #25
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_negate_ra_state_with_pc
+; V83A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp2
; V83A-NEXT: .Ltmp2:
; V83A-NEXT: paciasp
-; V9A-NEXT: .cfi_negate_ra_state_with_pc
+; V9A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp2
; V9A-NEXT: .Ltmp2:
; V9A-NEXT: paciasppc
@@ -209,16 +209,16 @@ define swifttailcc void @tail_call_no_fpdiff_a_key(ptr swiftasync %ctx) "branch-
; COMPAT-NEXT: adrp x16, .Ltmp2
; COMPAT-NEXT: add x16, x16, :lo12:.Ltmp2
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT: .cfi_llvm_set_ra_state 0, 0
; COMPAT-NEXT: hint #29
; V83A-NEXT: adrp x16, .Ltmp2
; V83A-NEXT: add x16, x16, :lo12:.Ltmp2
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_negate_ra_state_with_pc
+; V83A-NEXT: .cfi_llvm_set_ra_state 0, 0
; V83A-NEXT: autiasp
-; V9A-NEXT: .cfi_negate_ra_state_with_pc
+; V9A-NEXT: .cfi_llvm_set_ra_state 0, 0
; V9A-NEXT: autiasppc .Ltmp2
; PAUTH-NEXT: autiasp
@@ -236,16 +236,16 @@ define swifttailcc void @tail_call_no_fpdiff_b_key(ptr swiftasync %ctx) "branch-
; CHECK-NEXT: .cfi_b_key_frame
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp3
; COMPAT-NEXT: .Ltmp3:
; COMPAT-NEXT: hint #27
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_negate_ra_state_with_pc
+; V83A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp3
; V83A-NEXT: .Ltmp3:
; V83A-NEXT: pacibsp
-; V9A-NEXT: .cfi_negate_ra_state_with_pc
+; V9A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp3
; V9A-NEXT: .Ltmp3:
; V9A-NEXT: pacibsppc
@@ -272,16 +272,16 @@ define swifttailcc void @tail_call_no_fpdiff_b_key(ptr swiftasync %ctx) "branch-
; COMPAT-NEXT: adrp x16, .Ltmp3
; COMPAT-NEXT: add x16, x16, :lo12:.Ltmp3
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT: .cfi_llvm_set_ra_state 0, 0
; COMPAT-NEXT: hint #31
; V83A-NEXT: adrp x16, .Ltmp3
; V83A-NEXT: add x16, x16, :lo12:.Ltmp3
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_negate_ra_state_with_pc
+; V83A-NEXT: .cfi_llvm_set_ra_state 0, 0
; V83A-NEXT: autibsp
-; V9A-NEXT: .cfi_negate_ra_state_with_pc
+; V9A-NEXT: .cfi_llvm_set_ra_state 0, 0
; V9A-NEXT: autibsppc .Ltmp3
; PAUTH-NEXT: autibsp
@@ -298,16 +298,16 @@ define swifttailcc void @indirect_tail_call_fpdiff_a_key(ptr swiftasync %ctx, pt
; CHECK: // %bb.0:
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp4
; COMPAT-NEXT: .Ltmp4:
; COMPAT-NEXT: hint #25
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_negate_ra_state_with_pc
+; V83A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp4
; V83A-NEXT: .Ltmp4:
; V83A-NEXT: paciasp
-; V9A-NEXT: .cfi_negate_ra_state_with_pc
+; V9A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp4
; V9A-NEXT: .Ltmp4:
; V9A-NEXT: paciasppc
@@ -347,18 +347,18 @@ define swifttailcc void @indirect_tail_call_fpdiff_a_key(ptr swiftasync %ctx, pt
; COMPAT-NEXT: adrp x15, .Ltmp4
; COMPAT-NEXT: add x15, x15, :lo12:.Ltmp4
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT: .cfi_llvm_set_ra_state 0, 0
; COMPAT-NEXT: hint #12
; V83A-NEXT: adrp x15, .Ltmp4
; V83A-NEXT: add x15, x15, :lo12:.Ltmp4
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_negate_ra_state_with_pc
+; V83A-NEXT: .cfi_llvm_set_ra_state 0, 0
; V83A-NEXT: autia1716
; V9A-NEXT: adrp x15, .Ltmp4
; V9A-NEXT: add x15, x15, :lo12:.Ltmp4
-; V9A-NEXT: .cfi_negate_ra_state_with_pc
+; V9A-NEXT: .cfi_llvm_set_ra_state 0, 0
; V9A-NEXT: autia171615
; PAUTH-NEXT: autia1716
@@ -377,16 +377,16 @@ define swifttailcc void @indirect_tail_call_fpdiff_b_key(ptr swiftasync %ctx, pt
; CHECK-NEXT: .cfi_b_key_frame
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp5
; COMPAT-NEXT: .Ltmp5:
; COMPAT-NEXT: hint #27
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_negate_ra_state_with_pc
+; V83A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp5
; V83A-NEXT: .Ltmp5:
; V83A-NEXT: pacibsp
-; V9A-NEXT: .cfi_negate_ra_state_with_pc
+; V9A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp5
; V9A-NEXT: .Ltmp5:
; V9A-NEXT: pacibsppc
@@ -426,18 +426,18 @@ define swifttailcc void @indirect_tail_call_fpdiff_b_key(ptr swiftasync %ctx, pt
; COMPAT-NEXT: adrp x15, .Ltmp5
; COMPAT-NEXT: add x15, x15, :lo12:.Ltmp5
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT: .cfi_llvm_set_ra_state 0, 0
; COMPAT-NEXT: hint #14
; V83A-NEXT: adrp x15, .Ltmp5
; V83A-NEXT: add x15, x15, :lo12:.Ltmp5
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_negate_ra_state_with_pc
+; V83A-NEXT: .cfi_llvm_set_ra_state 0, 0
; V83A-NEXT: autib1716
; V9A-NEXT: adrp x15, .Ltmp5
; V9A-NEXT: add x15, x15, :lo12:.Ltmp5
-; V9A-NEXT: .cfi_negate_ra_state_with_pc
+; V9A-NEXT: .cfi_llvm_set_ra_state 0, 0
; V9A-NEXT: autib171615
; PAUTH-NEXT: autib1716
@@ -455,16 +455,16 @@ define swifttailcc void @indirect_tail_call_no_fpdiff_a_key(ptr swiftasync %ctx,
; CHECK: // %bb.0:
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp6
; COMPAT-NEXT: .Ltmp6:
; COMPAT-NEXT: hint #25
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_negate_ra_state_with_pc
+; V83A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp6
; V83A-NEXT: .Ltmp6:
; V83A-NEXT: paciasp
-; V9A-NEXT: .cfi_negate_ra_state_with_pc
+; V9A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp6
; V9A-NEXT: .Ltmp6:
; V9A-NEXT: paciasppc
@@ -491,16 +491,16 @@ define swifttailcc void @indirect_tail_call_no_fpdiff_a_key(ptr swiftasync %ctx,
; COMPAT-NEXT: adrp x16, .Ltmp6
; COMPAT-NEXT: add x16, x16, :lo12:.Ltmp6
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT: .cfi_llvm_set_ra_state 0, 0
; COMPAT-NEXT: hint #29
; V83A-NEXT: adrp x16, .Ltmp6
; V83A-NEXT: add x16, x16, :lo12:.Ltmp6
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_negate_ra_state_with_pc
+; V83A-NEXT: .cfi_llvm_set_ra_state 0, 0
; V83A-NEXT: autiasp
-; V9A-NEXT: .cfi_negate_ra_state_with_pc
+; V9A-NEXT: .cfi_llvm_set_ra_state 0, 0
; V9A-NEXT: autiasppc .Ltmp6
; PAUTH-NEXT: autiasp
@@ -518,16 +518,16 @@ define swifttailcc void @indirect_tail_call_no_fpdiff_b_key(ptr swiftasync %ctx,
; CHECK-NEXT: .cfi_b_key_frame
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp7
; COMPAT-NEXT: .Ltmp7:
; COMPAT-NEXT: hint #27
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_negate_ra_state_with_pc
+; V83A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp7
; V83A-NEXT: .Ltmp7:
; V83A-NEXT: pacibsp
-; V9A-NEXT: .cfi_negate_ra_state_with_pc
+; V9A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp7
; V9A-NEXT: .Ltmp7:
; V9A-NEXT: pacibsppc
@@ -554,16 +554,16 @@ define swifttailcc void @indirect_tail_call_no_fpdiff_b_key(ptr swiftasync %ctx,
; COMPAT-NEXT: adrp x16, .Ltmp7
; COMPAT-NEXT: add x16, x16, :lo12:.Ltmp7
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT: .cfi_llvm_set_ra_state 0, 0
; COMPAT-NEXT: hint #31
; V83A-NEXT: adrp x16, .Ltmp7
; V83A-NEXT: add x16, x16, :lo12:.Ltmp7
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_negate_ra_state_with_pc
+; V83A-NEXT: .cfi_llvm_set_ra_state 0, 0
; V83A-NEXT: autibsp
-; V9A-NEXT: .cfi_negate_ra_state_with_pc
+; V9A-NEXT: .cfi_llvm_set_ra_state 0, 0
; V9A-NEXT: autibsppc .Ltmp7
; PAUTH-NEXT: autibsp
diff --git a/llvm/test/CodeGen/AArch64/sign-return-address-pauth-lr-mir.ll b/llvm/test/CodeGen/AArch64/sign-return-address-pauth-lr-mir.ll
index 2de549bdcca26..684c8565cd8b4 100644
--- a/llvm/test/CodeGen/AArch64/sign-return-address-pauth-lr-mir.ll
+++ b/llvm/test/CodeGen/AArch64/sign-return-address-pauth-lr-mir.ll
@@ -57,7 +57,7 @@ define i32 @leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-addr
; COMPAT-MIR-NEXT: liveins: $w0
; COMPAT-MIR-NEXT: {{ $}}
; COMPAT-MIR-NEXT: frame-setup PACM
- ; COMPAT-MIR-NEXT: frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+ ; COMPAT-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; COMPAT-MIR-NEXT: frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
; COMPAT-MIR-NEXT: $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
; COMPAT-MIR-NEXT: $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
@@ -70,7 +70,7 @@ define i32 @leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-addr
; V83A-MIR-NEXT: liveins: $w0
; V83A-MIR-NEXT: {{ $}}
; V83A-MIR-NEXT: frame-setup PACM
- ; V83A-MIR-NEXT: frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+ ; V83A-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; V83A-MIR-NEXT: frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
; V83A-MIR-NEXT: $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
; V83A-MIR-NEXT: $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
@@ -81,7 +81,7 @@ define i32 @leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-addr
; PAUTHLR-MIR: bb.0 (%ir-block.0):
; PAUTHLR-MIR-NEXT: liveins: $w0
; PAUTHLR-MIR-NEXT: {{ $}}
- ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+ ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; PAUTHLR-MIR-NEXT: frame-setup PACIASPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
; PAUTHLR-MIR-NEXT: frame-destroy RETAASPPCi <mcsymbol >, implicit $lr, implicit $sp, implicit-def $lr, implicit killed $lr, implicit $sp
ret i32 %x
@@ -93,7 +93,7 @@ define i64 @leaf_clobbers_lr(i64 %x) "branch-protection-pauth-lr" "sign-return-a
; COMPAT-MIR-NEXT: liveins: $x0, $lr
; COMPAT-MIR-NEXT: {{ $}}
; COMPAT-MIR-NEXT: frame-setup PACM
- ; COMPAT-MIR-NEXT: frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+ ; COMPAT-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; COMPAT-MIR-NEXT: frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
; COMPAT-MIR-NEXT: early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
; COMPAT-MIR-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16
@@ -111,7 +111,7 @@ define i64 @leaf_clobbers_lr(i64 %x) "branch-protection-pauth-lr" "sign-return-a
; V83A-MIR-NEXT: liveins: $x0, $lr
; V83A-MIR-NEXT: {{ $}}
; V83A-MIR-NEXT: frame-setup PACM
- ; V83A-MIR-NEXT: frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+ ; V83A-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; V83A-MIR-NEXT: frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
; V83A-MIR-NEXT: early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
; V83A-MIR-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16
@@ -127,7 +127,7 @@ define i64 @leaf_clobbers_lr(i64 %x) "branch-protection-pauth-lr" "sign-return-a
; PAUTHLR-MIR: bb.0 (%ir-block.0):
; PAUTHLR-MIR-NEXT: liveins: $x0, $lr
; PAUTHLR-MIR-NEXT: {{ $}}
- ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+ ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; PAUTHLR-MIR-NEXT: frame-setup PACIASPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
; PAUTHLR-MIR-NEXT: early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16
@@ -147,7 +147,7 @@ define i32 @non_leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-
; COMPAT-MIR-NEXT: liveins: $w0, $lr
; COMPAT-MIR-NEXT: {{ $}}
; COMPAT-MIR-NEXT: frame-setup PACM
- ; COMPAT-MIR-NEXT: frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+ ; COMPAT-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; COMPAT-MIR-NEXT: frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
; COMPAT-MIR-NEXT: early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
; COMPAT-MIR-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16
@@ -165,7 +165,7 @@ define i32 @non_leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-
; V83A-MIR-NEXT: liveins: $w0, $lr
; V83A-MIR-NEXT: {{ $}}
; V83A-MIR-NEXT: frame-setup PACM
- ; V83A-MIR-NEXT: frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+ ; V83A-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; V83A-MIR-NEXT: frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
; V83A-MIR-NEXT: early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
; V83A-MIR-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16
@@ -181,7 +181,7 @@ define i32 @non_leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-
; PAUTHLR-MIR: bb.0 (%ir-block.0):
; PAUTHLR-MIR-NEXT: liveins: $w0, $lr
; PAUTHLR-MIR-NEXT: {{ $}}
- ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+ ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; PAUTHLR-MIR-NEXT: frame-setup PACIASPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
; PAUTHLR-MIR-NEXT: early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16
@@ -199,7 +199,7 @@ define i32 @non_leaf_sign_non_leaf(i32 %x) "branch-protection-pauth-lr" "sign-re
; COMPAT-MIR-NEXT: liveins: $w0, $lr
; COMPAT-MIR-NEXT: {{ $}}
; COMPAT-MIR-NEXT: frame-setup PACM
- ; COMPAT-MIR-NEXT: frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+ ; COMPAT-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; COMPAT-MIR-NEXT: frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
; COMPAT-MIR-NEXT: early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
; COMPAT-MIR-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16
@@ -217,7 +217,7 @@ define i32 @non_leaf_sign_non_leaf(i32 %x) "branch-protection-pauth-lr" "sign-re
; V83A-MIR-NEXT: liveins: $w0, $lr
; V83A-MIR-NEXT: {{ $}}
; V83A-MIR-NEXT: frame-setup PACM
- ; V83A-MIR-NEXT: frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+ ; V83A-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; V83A-MIR-NEXT: frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
; V83A-MIR-NEXT: early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
; V83A-MIR-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16
@@ -233,7 +233,7 @@ define i32 @non_leaf_sign_non_leaf(i32 %x) "branch-protection-pauth-lr" "sign-re
; PAUTHLR-MIR: bb.0 (%ir-block.0):
; PAUTHLR-MIR-NEXT: liveins: $w0, $lr
; PAUTHLR-MIR-NEXT: {{ $}}
- ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+ ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; PAUTHLR-MIR-NEXT: frame-setup PACIASPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
; PAUTHLR-MIR-NEXT: early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16
@@ -251,7 +251,7 @@ define i32 @non_leaf_scs(i32 %x) "branch-protection-pauth-lr" "sign-return-addre
; CHECK-MIR-NEXT: liveins: $w0, $lr, $x18
; CHECK-MIR-NEXT: {{ $}}
; CHECK-MIR-NEXT: frame-setup PACM
- ; CHECK-MIR-NEXT: frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+ ; CHECK-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; CHECK-MIR-NEXT: frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
; CHECK-MIR-NEXT: early-clobber $x18 = frame-setup STRXpost $lr, $x18, 8
; CHECK-MIR-NEXT: frame-setup CFI_INSTRUCTION escape 0x16, 0x12, 0x02, 0x82, 0x78
@@ -271,7 +271,7 @@ define i32 @non_leaf_scs(i32 %x) "branch-protection-pauth-lr" "sign-return-addre
; PAUTHLR-MIR: bb.0 (%ir-block.0):
; PAUTHLR-MIR-NEXT: liveins: $w0, $lr, $x18
; PAUTHLR-MIR-NEXT: {{ $}}
- ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+ ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; PAUTHLR-MIR-NEXT: frame-setup PACIASPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
; PAUTHLR-MIR-NEXT: early-clobber $x18 = frame-setup STRXpost $lr, $x18, 8
; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION escape 0x16, 0x12, 0x02, 0x82, 0x78
@@ -293,7 +293,7 @@ define i32 @leaf_sign_all_v83(i32 %x) "branch-protection-pauth-lr" "sign-return-
; CHECK-MIR-NEXT: liveins: $w0
; CHECK-MIR-NEXT: {{ $}}
; CHECK-MIR-NEXT: frame-setup PACM
- ; CHECK-MIR-NEXT: frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+ ; CHECK-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; CHECK-MIR-NEXT: frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
; CHECK-MIR-NEXT: $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
; CHECK-MIR-NEXT: $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
@@ -304,7 +304,7 @@ define i32 @leaf_sign_all_v83(i32 %x) "branch-protection-pauth-lr" "sign-return-
; PAUTHLR-MIR: bb.0 (%ir-block.0):
; PAUTHLR-MIR-NEXT: liveins: $w0
; PAUTHLR-MIR-NEXT: {{ $}}
- ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+ ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; PAUTHLR-MIR-NEXT: frame-setup PACIASPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
; PAUTHLR-MIR-NEXT: frame-destroy RETAASPPCi <mcsymbol >, implicit $lr, implicit $sp, implicit-def $lr, implicit killed $lr, implicit $sp
ret i32 %x
@@ -318,7 +318,7 @@ define fastcc void @spill_lr_and_tail_call(i64 %x) "branch-protection-pauth-lr"
; CHECK-MIR-NEXT: liveins: $x0, $lr
; CHECK-MIR-NEXT: {{ $}}
; CHECK-MIR-NEXT: frame-setup PACM
- ; CHECK-MIR-NEXT: frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+ ; CHECK-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; CHECK-MIR-NEXT: frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
; CHECK-MIR-NEXT: early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
; CHECK-MIR-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16
@@ -335,7 +335,7 @@ define fastcc void @spill_lr_and_tail_call(i64 %x) "branch-protection-pauth-lr"
; PAUTHLR-MIR: bb.0 (%ir-block.0):
; PAUTHLR-MIR-NEXT: liveins: $x0, $lr
; PAUTHLR-MIR-NEXT: {{ $}}
- ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+ ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; PAUTHLR-MIR-NEXT: frame-setup PACIASPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
; PAUTHLR-MIR-NEXT: early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16
@@ -355,7 +355,7 @@ define i32 @leaf_sign_all_a_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
; COMPAT-MIR-NEXT: liveins: $w0
; COMPAT-MIR-NEXT: {{ $}}
; COMPAT-MIR-NEXT: frame-setup PACM
- ; COMPAT-MIR-NEXT: frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+ ; COMPAT-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; COMPAT-MIR-NEXT: frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
; COMPAT-MIR-NEXT: $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
; COMPAT-MIR-NEXT: $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
@@ -368,7 +368,7 @@ define i32 @leaf_sign_all_a_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
; V83A-MIR-NEXT: liveins: $w0
; V83A-MIR-NEXT: {{ $}}
; V83A-MIR-NEXT: frame-setup PACM
- ; V83A-MIR-NEXT: frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+ ; V83A-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; V83A-MIR-NEXT: frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
; V83A-MIR-NEXT: $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
; V83A-MIR-NEXT: $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
@@ -379,7 +379,7 @@ define i32 @leaf_sign_all_a_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
; PAUTHLR-MIR: bb.0 (%ir-block.0):
; PAUTHLR-MIR-NEXT: liveins: $w0
; PAUTHLR-MIR-NEXT: {{ $}}
- ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+ ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; PAUTHLR-MIR-NEXT: frame-setup PACIASPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
; PAUTHLR-MIR-NEXT: frame-destroy RETAASPPCi <mcsymbol >, implicit $lr, implicit $sp, implicit-def $lr, implicit killed $lr, implicit $sp
ret i32 %x
@@ -392,7 +392,7 @@ define i32 @leaf_sign_all_b_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
; COMPAT-MIR-NEXT: {{ $}}
; COMPAT-MIR-NEXT: frame-setup EMITBKEY
; COMPAT-MIR-NEXT: frame-setup PACM
- ; COMPAT-MIR-NEXT: frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+ ; COMPAT-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; COMPAT-MIR-NEXT: frame-setup PACIBSP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
; COMPAT-MIR-NEXT: $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
; COMPAT-MIR-NEXT: $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
@@ -406,7 +406,7 @@ define i32 @leaf_sign_all_b_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
; V83A-MIR-NEXT: {{ $}}
; V83A-MIR-NEXT: frame-setup EMITBKEY
; V83A-MIR-NEXT: frame-setup PACM
- ; V83A-MIR-NEXT: frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+ ; V83A-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; V83A-MIR-NEXT: frame-setup PACIBSP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
; V83A-MIR-NEXT: $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
; V83A-MIR-NEXT: $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
@@ -418,7 +418,7 @@ define i32 @leaf_sign_all_b_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
; PAUTHLR-MIR-NEXT: liveins: $w0
; PAUTHLR-MIR-NEXT: {{ $}}
; PAUTHLR-MIR-NEXT: frame-setup EMITBKEY
- ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+ ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; PAUTHLR-MIR-NEXT: frame-setup PACIBSPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
; PAUTHLR-MIR-NEXT: frame-destroy RETABSPPCi <mcsymbol >, implicit $lr, implicit $sp, implicit-def $lr, implicit killed $lr, implicit $sp
ret i32 %x
@@ -431,7 +431,7 @@ define i32 @leaf_sign_all_v83_b_key(i32 %x) "branch-protection-pauth-lr" "sign-r
; CHECK-MIR-NEXT: {{ $}}
; CHECK-MIR-NEXT: frame-setup EMITBKEY
; CHECK-MIR-NEXT: frame-setup PACM
- ; CHECK-MIR-NEXT: frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+ ; CHECK-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; CHECK-MIR-NEXT: frame-setup PACIBSP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
; CHECK-MIR-NEXT: $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
; CHECK-MIR-NEXT: $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
@@ -443,7 +443,7 @@ define i32 @leaf_sign_all_v83_b_key(i32 %x) "branch-protection-pauth-lr" "sign-r
; PAUTHLR-MIR-NEXT: liveins: $w0
; PAUTHLR-MIR-NEXT: {{ $}}
; PAUTHLR-MIR-NEXT: frame-setup EMITBKEY
- ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+ ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; PAUTHLR-MIR-NEXT: frame-setup PACIBSPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
; PAUTHLR-MIR-NEXT: frame-destroy RETABSPPCi <mcsymbol >, implicit $lr, implicit $sp, implicit-def $lr, implicit killed $lr, implicit $sp
ret i32 %x
@@ -455,7 +455,7 @@ define i32 @leaf_sign_all_a_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
; COMPAT-MIR-NEXT: liveins: $w0
; COMPAT-MIR-NEXT: {{ $}}
; COMPAT-MIR-NEXT: frame-setup PACM
- ; COMPAT-MIR-NEXT: frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+ ; COMPAT-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; COMPAT-MIR-NEXT: frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
; COMPAT-MIR-NEXT: $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
; COMPAT-MIR-NEXT: $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
@@ -468,7 +468,7 @@ define i32 @leaf_sign_all_a_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
; V83A-MIR-NEXT: liveins: $w0
; V83A-MIR-NEXT: {{ $}}
; V83A-MIR-NEXT: frame-setup PACM
- ; V83A-MIR-NEXT: frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+ ; V83A-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; V83A-MIR-NEXT: frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
; V83A-MIR-NEXT: $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
; V83A-MIR-NEXT: $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
@@ -479,7 +479,7 @@ define i32 @leaf_sign_all_a_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
; PAUTHLR-MIR: bb.0 (%ir-block.0):
; PAUTHLR-MIR-NEXT: liveins: $w0
; PAUTHLR-MIR-NEXT: {{ $}}
- ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+ ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; PAUTHLR-MIR-NEXT: frame-setup PACIASPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
; PAUTHLR-MIR-NEXT: frame-destroy RETAASPPCi <mcsymbol >, implicit $lr, implicit $sp, implicit-def $lr, implicit killed $lr, implicit $sp
ret i32 %x
@@ -492,7 +492,7 @@ define i32 @leaf_sign_all_b_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
; COMPAT-MIR-NEXT: {{ $}}
; COMPAT-MIR-NEXT: frame-setup EMITBKEY
; COMPAT-MIR-NEXT: frame-setup PACM
- ; COMPAT-MIR-NEXT: frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+ ; COMPAT-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; COMPAT-MIR-NEXT: frame-setup PACIBSP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
; COMPAT-MIR-NEXT: $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
; COMPAT-MIR-NEXT: $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
@@ -506,7 +506,7 @@ define i32 @leaf_sign_all_b_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
; V83A-MIR-NEXT: {{ $}}
; V83A-MIR-NEXT: frame-setup EMITBKEY
; V83A-MIR-NEXT: frame-setup PACM
- ; V83A-MIR-NEXT: frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+ ; V83A-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; V83A-MIR-NEXT: frame-setup PACIBSP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
; V83A-MIR-NEXT: $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
; V83A-MIR-NEXT: $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
@@ -518,7 +518,7 @@ define i32 @leaf_sign_all_b_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
; PAUTHLR-MIR-NEXT: liveins: $w0
; PAUTHLR-MIR-NEXT: {{ $}}
; PAUTHLR-MIR-NEXT: frame-setup EMITBKEY
- ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+ ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; PAUTHLR-MIR-NEXT: frame-setup PACIBSPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
; PAUTHLR-MIR-NEXT: frame-destroy RETABSPPCi <mcsymbol >, implicit $lr, implicit $sp, implicit-def $lr, implicit killed $lr, implicit $sp
ret i32 %x
@@ -531,7 +531,7 @@ define i32 @leaf_sign_all_v83_b_key_bti(i32 %x) "branch-protection-pauth-lr" "si
; CHECK-MIR-NEXT: {{ $}}
; CHECK-MIR-NEXT: frame-setup EMITBKEY
; CHECK-MIR-NEXT: frame-setup PACM
- ; CHECK-MIR-NEXT: frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+ ; CHECK-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; CHECK-MIR-NEXT: frame-setup PACIBSP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
; CHECK-MIR-NEXT: $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
; CHECK-MIR-NEXT: $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
@@ -543,7 +543,7 @@ define i32 @leaf_sign_all_v83_b_key_bti(i32 %x) "branch-protection-pauth-lr" "si
; PAUTHLR-MIR-NEXT: liveins: $w0
; PAUTHLR-MIR-NEXT: {{ $}}
; PAUTHLR-MIR-NEXT: frame-setup EMITBKEY
- ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+ ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; PAUTHLR-MIR-NEXT: frame-setup PACIBSPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
; PAUTHLR-MIR-NEXT: frame-destroy RETABSPPCi <mcsymbol >, implicit $lr, implicit $sp, implicit-def $lr, implicit killed $lr, implicit $sp
ret i32 %x
diff --git a/llvm/test/CodeGen/AArch64/sign-return-address-pauth-lr.ll b/llvm/test/CodeGen/AArch64/sign-return-address-pauth-lr.ll
index 7f7c021995bb2..2b844efff6456 100644
--- a/llvm/test/CodeGen/AArch64/sign-return-address-pauth-lr.ll
+++ b/llvm/test/CodeGen/AArch64/sign-return-address-pauth-lr.ll
@@ -22,6 +22,9 @@
; RUN: llc -mtriple=aarch64 < %s | FileCheck --check-prefixes=CHECK,COMPAT %s
; RUN: llc -mtriple=aarch64 -mattr=v8.3a < %s | FileCheck --check-prefixes=CHECK,V83A %s
; RUN: llc -mtriple=aarch64 -mattr=v9a -mattr=pauth-lr < %s | FileCheck --check-prefixes=PAUTHLR %s
+; RUN: llc -mtriple=aarch64 -aarch64-cfi-llvm-set-ra-sign-state=never < %s | FileCheck --check-prefixes=NEGATE-CHECK,NEGATE-COMPAT %s
+; RUN: llc -mtriple=aarch64 -mattr=v8.3a -aarch64-cfi-llvm-set-ra-sign-state=never < %s | FileCheck --check-prefixes=NEGATE-CHECK,NEGATE-V83A %s
+; RUN: llc -mtriple=aarch64 -mattr=v9a -mattr=pauth-lr -aarch64-cfi-llvm-set-ra-sign-state=never < %s | FileCheck --check-prefixes=NEGATE-PAUTHLR %s
; See also: sign-return-address-pauth-lr-mir.ll
@@ -33,6 +36,14 @@ define i32 @leaf(i32 %x) "branch-protection-pauth-lr" {
; PAUTHLR-LABEL: leaf:
; PAUTHLR: // %bb.0:
; PAUTHLR-NEXT: ret
+;
+; NEGATE-CHECK-LABEL: leaf:
+; NEGATE-CHECK: // %bb.0:
+; NEGATE-CHECK-NEXT: ret
+;
+; NEGATE-PAUTHLR-LABEL: leaf:
+; NEGATE-PAUTHLR: // %bb.0:
+; NEGATE-PAUTHLR-NEXT: ret
ret i32 %x
}
@@ -44,6 +55,14 @@ define i32 @leaf_sign_none(i32 %x) "branch-protection-pauth-lr" {
; PAUTHLR-LABEL: leaf_sign_none:
; PAUTHLR: // %bb.0:
; PAUTHLR-NEXT: ret
+;
+; NEGATE-CHECK-LABEL: leaf_sign_none:
+; NEGATE-CHECK: // %bb.0:
+; NEGATE-CHECK-NEXT: ret
+;
+; NEGATE-PAUTHLR-LABEL: leaf_sign_none:
+; NEGATE-PAUTHLR: // %bb.0:
+; NEGATE-PAUTHLR-NEXT: ret
ret i32 %x
}
@@ -55,6 +74,14 @@ define i32 @leaf_sign_non_leaf(i32 %x) "branch-protection-pauth-lr" "sign-return
; PAUTHLR-LABEL: leaf_sign_non_leaf:
; PAUTHLR: // %bb.0:
; PAUTHLR-NEXT: ret
+;
+; NEGATE-CHECK-LABEL: leaf_sign_non_leaf:
+; NEGATE-CHECK: // %bb.0:
+; NEGATE-CHECK-NEXT: ret
+;
+; NEGATE-PAUTHLR-LABEL: leaf_sign_non_leaf:
+; NEGATE-PAUTHLR: // %bb.0:
+; NEGATE-PAUTHLR-NEXT: ret
ret i32 %x
}
@@ -62,7 +89,7 @@ define i32 @leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-addr
; COMPAT-LABEL: leaf_sign_all:
; COMPAT: // %bb.0:
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp0
; COMPAT-NEXT: .Ltmp0:
; COMPAT-NEXT: hint #25
; COMPAT-NEXT: adrp x16, .Ltmp0
@@ -74,7 +101,7 @@ define i32 @leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-addr
; V83A-LABEL: leaf_sign_all:
; V83A: // %bb.0:
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_negate_ra_state_with_pc
+; V83A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp0
; V83A-NEXT: .Ltmp0:
; V83A-NEXT: paciasp
; V83A-NEXT: adrp x16, .Ltmp0
@@ -84,10 +111,40 @@ define i32 @leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-addr
;
; PAUTHLR-LABEL: leaf_sign_all:
; PAUTHLR: // %bb.0:
-; PAUTHLR-NEXT: .cfi_negate_ra_state_with_pc
+; PAUTHLR-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp0
; PAUTHLR-NEXT: .Ltmp0:
; PAUTHLR-NEXT: paciasppc
; PAUTHLR-NEXT: retaasppc .Ltmp0
+;
+; NEGATE-COMPAT-LABEL: leaf_sign_all:
+; NEGATE-COMPAT: // %bb.0:
+; NEGATE-COMPAT-NEXT: hint #39
+; NEGATE-COMPAT-NEXT: .cfi_negate_ra_state_with_pc
+; NEGATE-COMPAT-NEXT: .Ltmp0:
+; NEGATE-COMPAT-NEXT: hint #25
+; NEGATE-COMPAT-NEXT: adrp x16, .Ltmp0
+; NEGATE-COMPAT-NEXT: add x16, x16, :lo12:.Ltmp0
+; NEGATE-COMPAT-NEXT: hint #39
+; NEGATE-COMPAT-NEXT: hint #29
+; NEGATE-COMPAT-NEXT: ret
+;
+; NEGATE-V83A-LABEL: leaf_sign_all:
+; NEGATE-V83A: // %bb.0:
+; NEGATE-V83A-NEXT: hint #39
+; NEGATE-V83A-NEXT: .cfi_negate_ra_state_with_pc
+; NEGATE-V83A-NEXT: .Ltmp0:
+; NEGATE-V83A-NEXT: paciasp
+; NEGATE-V83A-NEXT: adrp x16, .Ltmp0
+; NEGATE-V83A-NEXT: add x16, x16, :lo12:.Ltmp0
+; NEGATE-V83A-NEXT: hint #39
+; NEGATE-V83A-NEXT: retaa
+;
+; NEGATE-PAUTHLR-LABEL: leaf_sign_all:
+; NEGATE-PAUTHLR: // %bb.0:
+; NEGATE-PAUTHLR-NEXT: .cfi_negate_ra_state_with_pc
+; NEGATE-PAUTHLR-NEXT: .Ltmp0:
+; NEGATE-PAUTHLR-NEXT: paciasppc
+; NEGATE-PAUTHLR-NEXT: retaasppc .Ltmp0
ret i32 %x
}
@@ -95,7 +152,7 @@ define i64 @leaf_clobbers_lr(i64 %x) "branch-protection-pauth-lr" "sign-return-a
; COMPAT-LABEL: leaf_clobbers_lr:
; COMPAT: // %bb.0:
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp1
; COMPAT-NEXT: .Ltmp1:
; COMPAT-NEXT: hint #25
; COMPAT-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -114,7 +171,7 @@ define i64 @leaf_clobbers_lr(i64 %x) "branch-protection-pauth-lr" "sign-return-a
; V83A-LABEL: leaf_clobbers_lr:
; V83A: // %bb.0:
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_negate_ra_state_with_pc
+; V83A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp1
; V83A-NEXT: .Ltmp1:
; V83A-NEXT: paciasp
; V83A-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -131,7 +188,7 @@ define i64 @leaf_clobbers_lr(i64 %x) "branch-protection-pauth-lr" "sign-return-a
;
; PAUTHLR-LABEL: leaf_clobbers_lr:
; PAUTHLR: // %bb.0:
-; PAUTHLR-NEXT: .cfi_negate_ra_state_with_pc
+; PAUTHLR-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp1
; PAUTHLR-NEXT: .Ltmp1:
; PAUTHLR-NEXT: paciasppc
; PAUTHLR-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -142,6 +199,57 @@ define i64 @leaf_clobbers_lr(i64 %x) "branch-protection-pauth-lr" "sign-return-a
; PAUTHLR-NEXT: //NO_APP
; PAUTHLR-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
; PAUTHLR-NEXT: retaasppc .Ltmp1
+;
+; NEGATE-COMPAT-LABEL: leaf_clobbers_lr:
+; NEGATE-COMPAT: // %bb.0:
+; NEGATE-COMPAT-NEXT: hint #39
+; NEGATE-COMPAT-NEXT: .cfi_negate_ra_state_with_pc
+; NEGATE-COMPAT-NEXT: .Ltmp1:
+; NEGATE-COMPAT-NEXT: hint #25
+; NEGATE-COMPAT-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-COMPAT-NEXT: .cfi_def_cfa_offset 16
+; NEGATE-COMPAT-NEXT: .cfi_offset w30, -16
+; NEGATE-COMPAT-NEXT: //APP
+; NEGATE-COMPAT-NEXT: mov x30, x0
+; NEGATE-COMPAT-NEXT: //NO_APP
+; NEGATE-COMPAT-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-COMPAT-NEXT: adrp x16, .Ltmp1
+; NEGATE-COMPAT-NEXT: add x16, x16, :lo12:.Ltmp1
+; NEGATE-COMPAT-NEXT: hint #39
+; NEGATE-COMPAT-NEXT: hint #29
+; NEGATE-COMPAT-NEXT: ret
+;
+; NEGATE-V83A-LABEL: leaf_clobbers_lr:
+; NEGATE-V83A: // %bb.0:
+; NEGATE-V83A-NEXT: hint #39
+; NEGATE-V83A-NEXT: .cfi_negate_ra_state_with_pc
+; NEGATE-V83A-NEXT: .Ltmp1:
+; NEGATE-V83A-NEXT: paciasp
+; NEGATE-V83A-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-V83A-NEXT: .cfi_def_cfa_offset 16
+; NEGATE-V83A-NEXT: .cfi_offset w30, -16
+; NEGATE-V83A-NEXT: //APP
+; NEGATE-V83A-NEXT: mov x30, x0
+; NEGATE-V83A-NEXT: //NO_APP
+; NEGATE-V83A-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-V83A-NEXT: adrp x16, .Ltmp1
+; NEGATE-V83A-NEXT: add x16, x16, :lo12:.Ltmp1
+; NEGATE-V83A-NEXT: hint #39
+; NEGATE-V83A-NEXT: retaa
+;
+; NEGATE-PAUTHLR-LABEL: leaf_clobbers_lr:
+; NEGATE-PAUTHLR: // %bb.0:
+; NEGATE-PAUTHLR-NEXT: .cfi_negate_ra_state_with_pc
+; NEGATE-PAUTHLR-NEXT: .Ltmp1:
+; NEGATE-PAUTHLR-NEXT: paciasppc
+; NEGATE-PAUTHLR-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-PAUTHLR-NEXT: .cfi_def_cfa_offset 16
+; NEGATE-PAUTHLR-NEXT: .cfi_offset w30, -16
+; NEGATE-PAUTHLR-NEXT: //APP
+; NEGATE-PAUTHLR-NEXT: mov x30, x0
+; NEGATE-PAUTHLR-NEXT: //NO_APP
+; NEGATE-PAUTHLR-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-PAUTHLR-NEXT: retaasppc .Ltmp1
call void asm sideeffect "mov x30, $0", "r,~{lr}"(i64 %x) #1
ret i64 %x
}
@@ -152,7 +260,7 @@ define i32 @non_leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-
; COMPAT-LABEL: non_leaf_sign_all:
; COMPAT: // %bb.0:
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp2
; COMPAT-NEXT: .Ltmp2:
; COMPAT-NEXT: hint #25
; COMPAT-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -169,7 +277,7 @@ define i32 @non_leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-
; V83A-LABEL: non_leaf_sign_all:
; V83A: // %bb.0:
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_negate_ra_state_with_pc
+; V83A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp2
; V83A-NEXT: .Ltmp2:
; V83A-NEXT: paciasp
; V83A-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -184,7 +292,7 @@ define i32 @non_leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-
;
; PAUTHLR-LABEL: non_leaf_sign_all:
; PAUTHLR: // %bb.0:
-; PAUTHLR-NEXT: .cfi_negate_ra_state_with_pc
+; PAUTHLR-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp2
; PAUTHLR-NEXT: .Ltmp2:
; PAUTHLR-NEXT: paciasppc
; PAUTHLR-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -193,6 +301,51 @@ define i32 @non_leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-
; PAUTHLR-NEXT: bl foo
; PAUTHLR-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
; PAUTHLR-NEXT: retaasppc .Ltmp2
+;
+; NEGATE-COMPAT-LABEL: non_leaf_sign_all:
+; NEGATE-COMPAT: // %bb.0:
+; NEGATE-COMPAT-NEXT: hint #39
+; NEGATE-COMPAT-NEXT: .cfi_negate_ra_state_with_pc
+; NEGATE-COMPAT-NEXT: .Ltmp2:
+; NEGATE-COMPAT-NEXT: hint #25
+; NEGATE-COMPAT-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-COMPAT-NEXT: .cfi_def_cfa_offset 16
+; NEGATE-COMPAT-NEXT: .cfi_offset w30, -16
+; NEGATE-COMPAT-NEXT: bl foo
+; NEGATE-COMPAT-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-COMPAT-NEXT: adrp x16, .Ltmp2
+; NEGATE-COMPAT-NEXT: add x16, x16, :lo12:.Ltmp2
+; NEGATE-COMPAT-NEXT: hint #39
+; NEGATE-COMPAT-NEXT: hint #29
+; NEGATE-COMPAT-NEXT: ret
+;
+; NEGATE-V83A-LABEL: non_leaf_sign_all:
+; NEGATE-V83A: // %bb.0:
+; NEGATE-V83A-NEXT: hint #39
+; NEGATE-V83A-NEXT: .cfi_negate_ra_state_with_pc
+; NEGATE-V83A-NEXT: .Ltmp2:
+; NEGATE-V83A-NEXT: paciasp
+; NEGATE-V83A-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-V83A-NEXT: .cfi_def_cfa_offset 16
+; NEGATE-V83A-NEXT: .cfi_offset w30, -16
+; NEGATE-V83A-NEXT: bl foo
+; NEGATE-V83A-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-V83A-NEXT: adrp x16, .Ltmp2
+; NEGATE-V83A-NEXT: add x16, x16, :lo12:.Ltmp2
+; NEGATE-V83A-NEXT: hint #39
+; NEGATE-V83A-NEXT: retaa
+;
+; NEGATE-PAUTHLR-LABEL: non_leaf_sign_all:
+; NEGATE-PAUTHLR: // %bb.0:
+; NEGATE-PAUTHLR-NEXT: .cfi_negate_ra_state_with_pc
+; NEGATE-PAUTHLR-NEXT: .Ltmp2:
+; NEGATE-PAUTHLR-NEXT: paciasppc
+; NEGATE-PAUTHLR-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-PAUTHLR-NEXT: .cfi_def_cfa_offset 16
+; NEGATE-PAUTHLR-NEXT: .cfi_offset w30, -16
+; NEGATE-PAUTHLR-NEXT: bl foo
+; NEGATE-PAUTHLR-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-PAUTHLR-NEXT: retaasppc .Ltmp2
%call = call i32 @foo(i32 %x)
ret i32 %call
}
@@ -201,7 +354,7 @@ define i32 @non_leaf_sign_non_leaf(i32 %x) "branch-protection-pauth-lr" "sign-re
; COMPAT-LABEL: non_leaf_sign_non_leaf:
; COMPAT: // %bb.0:
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp3
; COMPAT-NEXT: .Ltmp3:
; COMPAT-NEXT: hint #25
; COMPAT-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -218,7 +371,7 @@ define i32 @non_leaf_sign_non_leaf(i32 %x) "branch-protection-pauth-lr" "sign-re
; V83A-LABEL: non_leaf_sign_non_leaf:
; V83A: // %bb.0:
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_negate_ra_state_with_pc
+; V83A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp3
; V83A-NEXT: .Ltmp3:
; V83A-NEXT: paciasp
; V83A-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -233,7 +386,7 @@ define i32 @non_leaf_sign_non_leaf(i32 %x) "branch-protection-pauth-lr" "sign-re
;
; PAUTHLR-LABEL: non_leaf_sign_non_leaf:
; PAUTHLR: // %bb.0:
-; PAUTHLR-NEXT: .cfi_negate_ra_state_with_pc
+; PAUTHLR-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp3
; PAUTHLR-NEXT: .Ltmp3:
; PAUTHLR-NEXT: paciasppc
; PAUTHLR-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -242,6 +395,51 @@ define i32 @non_leaf_sign_non_leaf(i32 %x) "branch-protection-pauth-lr" "sign-re
; PAUTHLR-NEXT: bl foo
; PAUTHLR-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
; PAUTHLR-NEXT: retaasppc .Ltmp3
+;
+; NEGATE-COMPAT-LABEL: non_leaf_sign_non_leaf:
+; NEGATE-COMPAT: // %bb.0:
+; NEGATE-COMPAT-NEXT: hint #39
+; NEGATE-COMPAT-NEXT: .cfi_negate_ra_state_with_pc
+; NEGATE-COMPAT-NEXT: .Ltmp3:
+; NEGATE-COMPAT-NEXT: hint #25
+; NEGATE-COMPAT-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-COMPAT-NEXT: .cfi_def_cfa_offset 16
+; NEGATE-COMPAT-NEXT: .cfi_offset w30, -16
+; NEGATE-COMPAT-NEXT: bl foo
+; NEGATE-COMPAT-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-COMPAT-NEXT: adrp x16, .Ltmp3
+; NEGATE-COMPAT-NEXT: add x16, x16, :lo12:.Ltmp3
+; NEGATE-COMPAT-NEXT: hint #39
+; NEGATE-COMPAT-NEXT: hint #29
+; NEGATE-COMPAT-NEXT: ret
+;
+; NEGATE-V83A-LABEL: non_leaf_sign_non_leaf:
+; NEGATE-V83A: // %bb.0:
+; NEGATE-V83A-NEXT: hint #39
+; NEGATE-V83A-NEXT: .cfi_negate_ra_state_with_pc
+; NEGATE-V83A-NEXT: .Ltmp3:
+; NEGATE-V83A-NEXT: paciasp
+; NEGATE-V83A-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-V83A-NEXT: .cfi_def_cfa_offset 16
+; NEGATE-V83A-NEXT: .cfi_offset w30, -16
+; NEGATE-V83A-NEXT: bl foo
+; NEGATE-V83A-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-V83A-NEXT: adrp x16, .Ltmp3
+; NEGATE-V83A-NEXT: add x16, x16, :lo12:.Ltmp3
+; NEGATE-V83A-NEXT: hint #39
+; NEGATE-V83A-NEXT: retaa
+;
+; NEGATE-PAUTHLR-LABEL: non_leaf_sign_non_leaf:
+; NEGATE-PAUTHLR: // %bb.0:
+; NEGATE-PAUTHLR-NEXT: .cfi_negate_ra_state_with_pc
+; NEGATE-PAUTHLR-NEXT: .Ltmp3:
+; NEGATE-PAUTHLR-NEXT: paciasppc
+; NEGATE-PAUTHLR-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-PAUTHLR-NEXT: .cfi_def_cfa_offset 16
+; NEGATE-PAUTHLR-NEXT: .cfi_offset w30, -16
+; NEGATE-PAUTHLR-NEXT: bl foo
+; NEGATE-PAUTHLR-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-PAUTHLR-NEXT: retaasppc .Ltmp3
%call = call i32 @foo(i32 %x)
ret i32 %call
}
@@ -251,7 +449,7 @@ define i32 @non_leaf_scs(i32 %x) "branch-protection-pauth-lr" "sign-return-addre
; CHECK-LABEL: non_leaf_scs:
; CHECK: // %bb.0:
; CHECK-NEXT: hint #39
-; CHECK-NEXT: .cfi_negate_ra_state_with_pc
+; CHECK-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp4
; CHECK-NEXT: .Ltmp4:
; CHECK-NEXT: paciasp
; CHECK-NEXT: str x30, [x18], #8
@@ -270,7 +468,7 @@ define i32 @non_leaf_scs(i32 %x) "branch-protection-pauth-lr" "sign-return-addre
;
; PAUTHLR-LABEL: non_leaf_scs:
; PAUTHLR: // %bb.0:
-; PAUTHLR-NEXT: .cfi_negate_ra_state_with_pc
+; PAUTHLR-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp4
; PAUTHLR-NEXT: .Ltmp4:
; PAUTHLR-NEXT: paciasppc
; PAUTHLR-NEXT: str x30, [x18], #8
@@ -283,6 +481,42 @@ define i32 @non_leaf_scs(i32 %x) "branch-protection-pauth-lr" "sign-return-addre
; PAUTHLR-NEXT: ldr x30, [x18, #-8]!
; PAUTHLR-NEXT: autiasppc .Ltmp4
; PAUTHLR-NEXT: ret
+;
+; NEGATE-CHECK-LABEL: non_leaf_scs:
+; NEGATE-CHECK: // %bb.0:
+; NEGATE-CHECK-NEXT: hint #39
+; NEGATE-CHECK-NEXT: .cfi_negate_ra_state_with_pc
+; NEGATE-CHECK-NEXT: .Ltmp4:
+; NEGATE-CHECK-NEXT: paciasp
+; NEGATE-CHECK-NEXT: str x30, [x18], #8
+; NEGATE-CHECK-NEXT: .cfi_escape 0x16, 0x12, 0x02, 0x82, 0x78 //
+; NEGATE-CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-CHECK-NEXT: .cfi_def_cfa_offset 16
+; NEGATE-CHECK-NEXT: .cfi_offset w30, -16
+; NEGATE-CHECK-NEXT: bl foo
+; NEGATE-CHECK-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-CHECK-NEXT: ldr x30, [x18, #-8]!
+; NEGATE-CHECK-NEXT: adrp x16, .Ltmp4
+; NEGATE-CHECK-NEXT: add x16, x16, :lo12:.Ltmp4
+; NEGATE-CHECK-NEXT: hint #39
+; NEGATE-CHECK-NEXT: autiasp
+; NEGATE-CHECK-NEXT: ret
+;
+; NEGATE-PAUTHLR-LABEL: non_leaf_scs:
+; NEGATE-PAUTHLR: // %bb.0:
+; NEGATE-PAUTHLR-NEXT: .cfi_negate_ra_state_with_pc
+; NEGATE-PAUTHLR-NEXT: .Ltmp4:
+; NEGATE-PAUTHLR-NEXT: paciasppc
+; NEGATE-PAUTHLR-NEXT: str x30, [x18], #8
+; NEGATE-PAUTHLR-NEXT: .cfi_escape 0x16, 0x12, 0x02, 0x82, 0x78 //
+; NEGATE-PAUTHLR-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-PAUTHLR-NEXT: .cfi_def_cfa_offset 16
+; NEGATE-PAUTHLR-NEXT: .cfi_offset w30, -16
+; NEGATE-PAUTHLR-NEXT: bl foo
+; NEGATE-PAUTHLR-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-PAUTHLR-NEXT: ldr x30, [x18, #-8]!
+; NEGATE-PAUTHLR-NEXT: autiasppc .Ltmp4
+; NEGATE-PAUTHLR-NEXT: ret
%call = call i32 @foo(i32 %x)
ret i32 %call
}
@@ -291,7 +525,7 @@ define i32 @leaf_sign_all_v83(i32 %x) "branch-protection-pauth-lr" "sign-return-
; CHECK-LABEL: leaf_sign_all_v83:
; CHECK: // %bb.0:
; CHECK-NEXT: hint #39
-; CHECK-NEXT: .cfi_negate_ra_state_with_pc
+; CHECK-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp5
; CHECK-NEXT: .Ltmp5:
; CHECK-NEXT: paciasp
; CHECK-NEXT: adrp x16, .Ltmp5
@@ -301,10 +535,28 @@ define i32 @leaf_sign_all_v83(i32 %x) "branch-protection-pauth-lr" "sign-return-
;
; PAUTHLR-LABEL: leaf_sign_all_v83:
; PAUTHLR: // %bb.0:
-; PAUTHLR-NEXT: .cfi_negate_ra_state_with_pc
+; PAUTHLR-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp5
; PAUTHLR-NEXT: .Ltmp5:
; PAUTHLR-NEXT: paciasppc
; PAUTHLR-NEXT: retaasppc .Ltmp5
+;
+; NEGATE-CHECK-LABEL: leaf_sign_all_v83:
+; NEGATE-CHECK: // %bb.0:
+; NEGATE-CHECK-NEXT: hint #39
+; NEGATE-CHECK-NEXT: .cfi_negate_ra_state_with_pc
+; NEGATE-CHECK-NEXT: .Ltmp5:
+; NEGATE-CHECK-NEXT: paciasp
+; NEGATE-CHECK-NEXT: adrp x16, .Ltmp5
+; NEGATE-CHECK-NEXT: add x16, x16, :lo12:.Ltmp5
+; NEGATE-CHECK-NEXT: hint #39
+; NEGATE-CHECK-NEXT: retaa
+;
+; NEGATE-PAUTHLR-LABEL: leaf_sign_all_v83:
+; NEGATE-PAUTHLR: // %bb.0:
+; NEGATE-PAUTHLR-NEXT: .cfi_negate_ra_state_with_pc
+; NEGATE-PAUTHLR-NEXT: .Ltmp5:
+; NEGATE-PAUTHLR-NEXT: paciasppc
+; NEGATE-PAUTHLR-NEXT: retaasppc .Ltmp5
ret i32 %x
}
@@ -314,7 +566,7 @@ define fastcc void @spill_lr_and_tail_call(i64 %x) "branch-protection-pauth-lr"
; COMPAT-LABEL: spill_lr_and_tail_call:
; COMPAT: // %bb.0:
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp6
; COMPAT-NEXT: .Ltmp6:
; COMPAT-NEXT: hint #25
; COMPAT-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -333,7 +585,7 @@ define fastcc void @spill_lr_and_tail_call(i64 %x) "branch-protection-pauth-lr"
; V83A-LABEL: spill_lr_and_tail_call:
; V83A: // %bb.0:
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_negate_ra_state_with_pc
+; V83A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp6
; V83A-NEXT: .Ltmp6:
; V83A-NEXT: paciasp
; V83A-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -351,7 +603,7 @@ define fastcc void @spill_lr_and_tail_call(i64 %x) "branch-protection-pauth-lr"
;
; PAUTHLR-LABEL: spill_lr_and_tail_call:
; PAUTHLR: // %bb.0:
-; PAUTHLR-NEXT: .cfi_negate_ra_state_with_pc
+; PAUTHLR-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp6
; PAUTHLR-NEXT: .Ltmp6:
; PAUTHLR-NEXT: paciasppc
; PAUTHLR-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -363,6 +615,59 @@ define fastcc void @spill_lr_and_tail_call(i64 %x) "branch-protection-pauth-lr"
; PAUTHLR-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
; PAUTHLR-NEXT: autiasppc .Ltmp6
; PAUTHLR-NEXT: b bar
+;
+; NEGATE-COMPAT-LABEL: spill_lr_and_tail_call:
+; NEGATE-COMPAT: // %bb.0:
+; NEGATE-COMPAT-NEXT: hint #39
+; NEGATE-COMPAT-NEXT: .cfi_negate_ra_state_with_pc
+; NEGATE-COMPAT-NEXT: .Ltmp6:
+; NEGATE-COMPAT-NEXT: hint #25
+; NEGATE-COMPAT-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-COMPAT-NEXT: .cfi_def_cfa_offset 16
+; NEGATE-COMPAT-NEXT: .cfi_offset w30, -16
+; NEGATE-COMPAT-NEXT: //APP
+; NEGATE-COMPAT-NEXT: mov x30, x0
+; NEGATE-COMPAT-NEXT: //NO_APP
+; NEGATE-COMPAT-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-COMPAT-NEXT: adrp x16, .Ltmp6
+; NEGATE-COMPAT-NEXT: add x16, x16, :lo12:.Ltmp6
+; NEGATE-COMPAT-NEXT: hint #39
+; NEGATE-COMPAT-NEXT: hint #29
+; NEGATE-COMPAT-NEXT: b bar
+;
+; NEGATE-V83A-LABEL: spill_lr_and_tail_call:
+; NEGATE-V83A: // %bb.0:
+; NEGATE-V83A-NEXT: hint #39
+; NEGATE-V83A-NEXT: .cfi_negate_ra_state_with_pc
+; NEGATE-V83A-NEXT: .Ltmp6:
+; NEGATE-V83A-NEXT: paciasp
+; NEGATE-V83A-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-V83A-NEXT: .cfi_def_cfa_offset 16
+; NEGATE-V83A-NEXT: .cfi_offset w30, -16
+; NEGATE-V83A-NEXT: //APP
+; NEGATE-V83A-NEXT: mov x30, x0
+; NEGATE-V83A-NEXT: //NO_APP
+; NEGATE-V83A-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-V83A-NEXT: adrp x16, .Ltmp6
+; NEGATE-V83A-NEXT: add x16, x16, :lo12:.Ltmp6
+; NEGATE-V83A-NEXT: hint #39
+; NEGATE-V83A-NEXT: autiasp
+; NEGATE-V83A-NEXT: b bar
+;
+; NEGATE-PAUTHLR-LABEL: spill_lr_and_tail_call:
+; NEGATE-PAUTHLR: // %bb.0:
+; NEGATE-PAUTHLR-NEXT: .cfi_negate_ra_state_with_pc
+; NEGATE-PAUTHLR-NEXT: .Ltmp6:
+; NEGATE-PAUTHLR-NEXT: paciasppc
+; NEGATE-PAUTHLR-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-PAUTHLR-NEXT: .cfi_def_cfa_offset 16
+; NEGATE-PAUTHLR-NEXT: .cfi_offset w30, -16
+; NEGATE-PAUTHLR-NEXT: //APP
+; NEGATE-PAUTHLR-NEXT: mov x30, x0
+; NEGATE-PAUTHLR-NEXT: //NO_APP
+; NEGATE-PAUTHLR-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-PAUTHLR-NEXT: autiasppc .Ltmp6
+; NEGATE-PAUTHLR-NEXT: b bar
call void asm sideeffect "mov x30, $0", "r,~{lr}"(i64 %x) #1
tail call fastcc i64 @bar(i64 %x)
ret void
@@ -372,7 +677,7 @@ define i32 @leaf_sign_all_a_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
; COMPAT-LABEL: leaf_sign_all_a_key:
; COMPAT: // %bb.0:
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp7
; COMPAT-NEXT: .Ltmp7:
; COMPAT-NEXT: hint #25
; COMPAT-NEXT: adrp x16, .Ltmp7
@@ -384,7 +689,7 @@ define i32 @leaf_sign_all_a_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
; V83A-LABEL: leaf_sign_all_a_key:
; V83A: // %bb.0:
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_negate_ra_state_with_pc
+; V83A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp7
; V83A-NEXT: .Ltmp7:
; V83A-NEXT: paciasp
; V83A-NEXT: adrp x16, .Ltmp7
@@ -394,10 +699,40 @@ define i32 @leaf_sign_all_a_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
;
; PAUTHLR-LABEL: leaf_sign_all_a_key:
; PAUTHLR: // %bb.0:
-; PAUTHLR-NEXT: .cfi_negate_ra_state_with_pc
+; PAUTHLR-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp7
; PAUTHLR-NEXT: .Ltmp7:
; PAUTHLR-NEXT: paciasppc
; PAUTHLR-NEXT: retaasppc .Ltmp7
+;
+; NEGATE-COMPAT-LABEL: leaf_sign_all_a_key:
+; NEGATE-COMPAT: // %bb.0:
+; NEGATE-COMPAT-NEXT: hint #39
+; NEGATE-COMPAT-NEXT: .cfi_negate_ra_state_with_pc
+; NEGATE-COMPAT-NEXT: .Ltmp7:
+; NEGATE-COMPAT-NEXT: hint #25
+; NEGATE-COMPAT-NEXT: adrp x16, .Ltmp7
+; NEGATE-COMPAT-NEXT: add x16, x16, :lo12:.Ltmp7
+; NEGATE-COMPAT-NEXT: hint #39
+; NEGATE-COMPAT-NEXT: hint #29
+; NEGATE-COMPAT-NEXT: ret
+;
+; NEGATE-V83A-LABEL: leaf_sign_all_a_key:
+; NEGATE-V83A: // %bb.0:
+; NEGATE-V83A-NEXT: hint #39
+; NEGATE-V83A-NEXT: .cfi_negate_ra_state_with_pc
+; NEGATE-V83A-NEXT: .Ltmp7:
+; NEGATE-V83A-NEXT: paciasp
+; NEGATE-V83A-NEXT: adrp x16, .Ltmp7
+; NEGATE-V83A-NEXT: add x16, x16, :lo12:.Ltmp7
+; NEGATE-V83A-NEXT: hint #39
+; NEGATE-V83A-NEXT: retaa
+;
+; NEGATE-PAUTHLR-LABEL: leaf_sign_all_a_key:
+; NEGATE-PAUTHLR: // %bb.0:
+; NEGATE-PAUTHLR-NEXT: .cfi_negate_ra_state_with_pc
+; NEGATE-PAUTHLR-NEXT: .Ltmp7:
+; NEGATE-PAUTHLR-NEXT: paciasppc
+; NEGATE-PAUTHLR-NEXT: retaasppc .Ltmp7
ret i32 %x
}
@@ -406,7 +741,7 @@ define i32 @leaf_sign_all_b_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
; COMPAT: // %bb.0:
; COMPAT-NEXT: .cfi_b_key_frame
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp8
; COMPAT-NEXT: .Ltmp8:
; COMPAT-NEXT: hint #27
; COMPAT-NEXT: adrp x16, .Ltmp8
@@ -419,7 +754,7 @@ define i32 @leaf_sign_all_b_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
; V83A: // %bb.0:
; V83A-NEXT: .cfi_b_key_frame
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_negate_ra_state_with_pc
+; V83A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp8
; V83A-NEXT: .Ltmp8:
; V83A-NEXT: pacibsp
; V83A-NEXT: adrp x16, .Ltmp8
@@ -430,10 +765,43 @@ define i32 @leaf_sign_all_b_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
; PAUTHLR-LABEL: leaf_sign_all_b_key:
; PAUTHLR: // %bb.0:
; PAUTHLR-NEXT: .cfi_b_key_frame
-; PAUTHLR-NEXT: .cfi_negate_ra_state_with_pc
+; PAUTHLR-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp8
; PAUTHLR-NEXT: .Ltmp8:
; PAUTHLR-NEXT: pacibsppc
; PAUTHLR-NEXT: retabsppc .Ltmp8
+;
+; NEGATE-COMPAT-LABEL: leaf_sign_all_b_key:
+; NEGATE-COMPAT: // %bb.0:
+; NEGATE-COMPAT-NEXT: .cfi_b_key_frame
+; NEGATE-COMPAT-NEXT: hint #39
+; NEGATE-COMPAT-NEXT: .cfi_negate_ra_state_with_pc
+; NEGATE-COMPAT-NEXT: .Ltmp8:
+; NEGATE-COMPAT-NEXT: hint #27
+; NEGATE-COMPAT-NEXT: adrp x16, .Ltmp8
+; NEGATE-COMPAT-NEXT: add x16, x16, :lo12:.Ltmp8
+; NEGATE-COMPAT-NEXT: hint #39
+; NEGATE-COMPAT-NEXT: hint #31
+; NEGATE-COMPAT-NEXT: ret
+;
+; NEGATE-V83A-LABEL: leaf_sign_all_b_key:
+; NEGATE-V83A: // %bb.0:
+; NEGATE-V83A-NEXT: .cfi_b_key_frame
+; NEGATE-V83A-NEXT: hint #39
+; NEGATE-V83A-NEXT: .cfi_negate_ra_state_with_pc
+; NEGATE-V83A-NEXT: .Ltmp8:
+; NEGATE-V83A-NEXT: pacibsp
+; NEGATE-V83A-NEXT: adrp x16, .Ltmp8
+; NEGATE-V83A-NEXT: add x16, x16, :lo12:.Ltmp8
+; NEGATE-V83A-NEXT: hint #39
+; NEGATE-V83A-NEXT: retab
+;
+; NEGATE-PAUTHLR-LABEL: leaf_sign_all_b_key:
+; NEGATE-PAUTHLR: // %bb.0:
+; NEGATE-PAUTHLR-NEXT: .cfi_b_key_frame
+; NEGATE-PAUTHLR-NEXT: .cfi_negate_ra_state_with_pc
+; NEGATE-PAUTHLR-NEXT: .Ltmp8:
+; NEGATE-PAUTHLR-NEXT: pacibsppc
+; NEGATE-PAUTHLR-NEXT: retabsppc .Ltmp8
ret i32 %x
}
@@ -442,7 +810,7 @@ define i32 @leaf_sign_all_v83_b_key(i32 %x) "branch-protection-pauth-lr" "sign-r
; CHECK: // %bb.0:
; CHECK-NEXT: .cfi_b_key_frame
; CHECK-NEXT: hint #39
-; CHECK-NEXT: .cfi_negate_ra_state_with_pc
+; CHECK-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp9
; CHECK-NEXT: .Ltmp9:
; CHECK-NEXT: pacibsp
; CHECK-NEXT: adrp x16, .Ltmp9
@@ -453,10 +821,30 @@ define i32 @leaf_sign_all_v83_b_key(i32 %x) "branch-protection-pauth-lr" "sign-r
; PAUTHLR-LABEL: leaf_sign_all_v83_b_key:
; PAUTHLR: // %bb.0:
; PAUTHLR-NEXT: .cfi_b_key_frame
-; PAUTHLR-NEXT: .cfi_negate_ra_state_with_pc
+; PAUTHLR-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp9
; PAUTHLR-NEXT: .Ltmp9:
; PAUTHLR-NEXT: pacibsppc
; PAUTHLR-NEXT: retabsppc .Ltmp9
+;
+; NEGATE-CHECK-LABEL: leaf_sign_all_v83_b_key:
+; NEGATE-CHECK: // %bb.0:
+; NEGATE-CHECK-NEXT: .cfi_b_key_frame
+; NEGATE-CHECK-NEXT: hint #39
+; NEGATE-CHECK-NEXT: .cfi_negate_ra_state_with_pc
+; NEGATE-CHECK-NEXT: .Ltmp9:
+; NEGATE-CHECK-NEXT: pacibsp
+; NEGATE-CHECK-NEXT: adrp x16, .Ltmp9
+; NEGATE-CHECK-NEXT: add x16, x16, :lo12:.Ltmp9
+; NEGATE-CHECK-NEXT: hint #39
+; NEGATE-CHECK-NEXT: retab
+;
+; NEGATE-PAUTHLR-LABEL: leaf_sign_all_v83_b_key:
+; NEGATE-PAUTHLR: // %bb.0:
+; NEGATE-PAUTHLR-NEXT: .cfi_b_key_frame
+; NEGATE-PAUTHLR-NEXT: .cfi_negate_ra_state_with_pc
+; NEGATE-PAUTHLR-NEXT: .Ltmp9:
+; NEGATE-PAUTHLR-NEXT: pacibsppc
+; NEGATE-PAUTHLR-NEXT: retabsppc .Ltmp9
ret i32 %x
}
@@ -466,7 +854,7 @@ define i32 @leaf_sign_all_a_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
; COMPAT: // %bb.0:
; COMPAT-NEXT: hint #34
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp10
; COMPAT-NEXT: .Ltmp10:
; COMPAT-NEXT: hint #25
; COMPAT-NEXT: adrp x16, .Ltmp10
@@ -479,7 +867,7 @@ define i32 @leaf_sign_all_a_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
; V83A: // %bb.0:
; V83A-NEXT: hint #34
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_negate_ra_state_with_pc
+; V83A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp10
; V83A-NEXT: .Ltmp10:
; V83A-NEXT: paciasp
; V83A-NEXT: adrp x16, .Ltmp10
@@ -489,11 +877,44 @@ define i32 @leaf_sign_all_a_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
;
; PAUTHLR-LABEL: leaf_sign_all_a_key_bti:
; PAUTHLR: // %bb.0:
-; PAUTHLR-NEXT: .cfi_negate_ra_state_with_pc
+; PAUTHLR-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp10
; PAUTHLR-NEXT: bti c
; PAUTHLR-NEXT: .Ltmp10:
; PAUTHLR-NEXT: paciasppc
; PAUTHLR-NEXT: retaasppc .Ltmp10
+;
+; NEGATE-COMPAT-LABEL: leaf_sign_all_a_key_bti:
+; NEGATE-COMPAT: // %bb.0:
+; NEGATE-COMPAT-NEXT: hint #34
+; NEGATE-COMPAT-NEXT: hint #39
+; NEGATE-COMPAT-NEXT: .cfi_negate_ra_state_with_pc
+; NEGATE-COMPAT-NEXT: .Ltmp10:
+; NEGATE-COMPAT-NEXT: hint #25
+; NEGATE-COMPAT-NEXT: adrp x16, .Ltmp10
+; NEGATE-COMPAT-NEXT: add x16, x16, :lo12:.Ltmp10
+; NEGATE-COMPAT-NEXT: hint #39
+; NEGATE-COMPAT-NEXT: hint #29
+; NEGATE-COMPAT-NEXT: ret
+;
+; NEGATE-V83A-LABEL: leaf_sign_all_a_key_bti:
+; NEGATE-V83A: // %bb.0:
+; NEGATE-V83A-NEXT: hint #34
+; NEGATE-V83A-NEXT: hint #39
+; NEGATE-V83A-NEXT: .cfi_negate_ra_state_with_pc
+; NEGATE-V83A-NEXT: .Ltmp10:
+; NEGATE-V83A-NEXT: paciasp
+; NEGATE-V83A-NEXT: adrp x16, .Ltmp10
+; NEGATE-V83A-NEXT: add x16, x16, :lo12:.Ltmp10
+; NEGATE-V83A-NEXT: hint #39
+; NEGATE-V83A-NEXT: retaa
+;
+; NEGATE-PAUTHLR-LABEL: leaf_sign_all_a_key_bti:
+; NEGATE-PAUTHLR: // %bb.0:
+; NEGATE-PAUTHLR-NEXT: .cfi_negate_ra_state_with_pc
+; NEGATE-PAUTHLR-NEXT: bti c
+; NEGATE-PAUTHLR-NEXT: .Ltmp10:
+; NEGATE-PAUTHLR-NEXT: paciasppc
+; NEGATE-PAUTHLR-NEXT: retaasppc .Ltmp10
ret i32 %x
}
@@ -504,7 +925,7 @@ define i32 @leaf_sign_all_b_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
; COMPAT-NEXT: .cfi_b_key_frame
; COMPAT-NEXT: hint #34
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp11
; COMPAT-NEXT: .Ltmp11:
; COMPAT-NEXT: hint #27
; COMPAT-NEXT: adrp x16, .Ltmp11
@@ -518,7 +939,7 @@ define i32 @leaf_sign_all_b_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
; V83A-NEXT: .cfi_b_key_frame
; V83A-NEXT: hint #34
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_negate_ra_state_with_pc
+; V83A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp11
; V83A-NEXT: .Ltmp11:
; V83A-NEXT: pacibsp
; V83A-NEXT: adrp x16, .Ltmp11
@@ -529,11 +950,47 @@ define i32 @leaf_sign_all_b_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
; PAUTHLR-LABEL: leaf_sign_all_b_key_bti:
; PAUTHLR: // %bb.0:
; PAUTHLR-NEXT: .cfi_b_key_frame
-; PAUTHLR-NEXT: .cfi_negate_ra_state_with_pc
+; PAUTHLR-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp11
; PAUTHLR-NEXT: bti c
; PAUTHLR-NEXT: .Ltmp11:
; PAUTHLR-NEXT: pacibsppc
; PAUTHLR-NEXT: retabsppc .Ltmp11
+;
+; NEGATE-COMPAT-LABEL: leaf_sign_all_b_key_bti:
+; NEGATE-COMPAT: // %bb.0:
+; NEGATE-COMPAT-NEXT: .cfi_b_key_frame
+; NEGATE-COMPAT-NEXT: hint #34
+; NEGATE-COMPAT-NEXT: hint #39
+; NEGATE-COMPAT-NEXT: .cfi_negate_ra_state_with_pc
+; NEGATE-COMPAT-NEXT: .Ltmp11:
+; NEGATE-COMPAT-NEXT: hint #27
+; NEGATE-COMPAT-NEXT: adrp x16, .Ltmp11
+; NEGATE-COMPAT-NEXT: add x16, x16, :lo12:.Ltmp11
+; NEGATE-COMPAT-NEXT: hint #39
+; NEGATE-COMPAT-NEXT: hint #31
+; NEGATE-COMPAT-NEXT: ret
+;
+; NEGATE-V83A-LABEL: leaf_sign_all_b_key_bti:
+; NEGATE-V83A: // %bb.0:
+; NEGATE-V83A-NEXT: .cfi_b_key_frame
+; NEGATE-V83A-NEXT: hint #34
+; NEGATE-V83A-NEXT: hint #39
+; NEGATE-V83A-NEXT: .cfi_negate_ra_state_with_pc
+; NEGATE-V83A-NEXT: .Ltmp11:
+; NEGATE-V83A-NEXT: pacibsp
+; NEGATE-V83A-NEXT: adrp x16, .Ltmp11
+; NEGATE-V83A-NEXT: add x16, x16, :lo12:.Ltmp11
+; NEGATE-V83A-NEXT: hint #39
+; NEGATE-V83A-NEXT: retab
+;
+; NEGATE-PAUTHLR-LABEL: leaf_sign_all_b_key_bti:
+; NEGATE-PAUTHLR: // %bb.0:
+; NEGATE-PAUTHLR-NEXT: .cfi_b_key_frame
+; NEGATE-PAUTHLR-NEXT: .cfi_negate_ra_state_with_pc
+; NEGATE-PAUTHLR-NEXT: bti c
+; NEGATE-PAUTHLR-NEXT: .Ltmp11:
+; NEGATE-PAUTHLR-NEXT: pacibsppc
+; NEGATE-PAUTHLR-NEXT: retabsppc .Ltmp11
ret i32 %x
}
@@ -544,7 +1001,7 @@ define i32 @leaf_sign_all_v83_b_key_bti(i32 %x) "branch-protection-pauth-lr" "si
; CHECK-NEXT: .cfi_b_key_frame
; CHECK-NEXT: hint #34
; CHECK-NEXT: hint #39
-; CHECK-NEXT: .cfi_negate_ra_state_with_pc
+; CHECK-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp12
; CHECK-NEXT: .Ltmp12:
; CHECK-NEXT: pacibsp
; CHECK-NEXT: adrp x16, .Ltmp12
@@ -555,10 +1012,32 @@ define i32 @leaf_sign_all_v83_b_key_bti(i32 %x) "branch-protection-pauth-lr" "si
; PAUTHLR-LABEL: leaf_sign_all_v83_b_key_bti:
; PAUTHLR: // %bb.0:
; PAUTHLR-NEXT: .cfi_b_key_frame
-; PAUTHLR-NEXT: .cfi_negate_ra_state_with_pc
+; PAUTHLR-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp12
; PAUTHLR-NEXT: bti c
; PAUTHLR-NEXT: .Ltmp12:
; PAUTHLR-NEXT: pacibsppc
; PAUTHLR-NEXT: retabsppc .Ltmp12
+;
+; NEGATE-CHECK-LABEL: leaf_sign_all_v83_b_key_bti:
+; NEGATE-CHECK: // %bb.0:
+; NEGATE-CHECK-NEXT: .cfi_b_key_frame
+; NEGATE-CHECK-NEXT: hint #34
+; NEGATE-CHECK-NEXT: hint #39
+; NEGATE-CHECK-NEXT: .cfi_negate_ra_state_with_pc
+; NEGATE-CHECK-NEXT: .Ltmp12:
+; NEGATE-CHECK-NEXT: pacibsp
+; NEGATE-CHECK-NEXT: adrp x16, .Ltmp12
+; NEGATE-CHECK-NEXT: add x16, x16, :lo12:.Ltmp12
+; NEGATE-CHECK-NEXT: hint #39
+; NEGATE-CHECK-NEXT: retab
+;
+; NEGATE-PAUTHLR-LABEL: leaf_sign_all_v83_b_key_bti:
+; NEGATE-PAUTHLR: // %bb.0:
+; NEGATE-PAUTHLR-NEXT: .cfi_b_key_frame
+; NEGATE-PAUTHLR-NEXT: .cfi_negate_ra_state_with_pc
+; NEGATE-PAUTHLR-NEXT: bti c
+; NEGATE-PAUTHLR-NEXT: .Ltmp12:
+; NEGATE-PAUTHLR-NEXT: pacibsppc
+; NEGATE-PAUTHLR-NEXT: retabsppc .Ltmp12
ret i32 %x
}
diff --git a/llvm/test/CodeGen/AArch64/sign-return-address-pauthlr-slh.ll b/llvm/test/CodeGen/AArch64/sign-return-address-pauthlr-slh.ll
index f74e369647730..07ae21464646e 100644
--- a/llvm/test/CodeGen/AArch64/sign-return-address-pauthlr-slh.ll
+++ b/llvm/test/CodeGen/AArch64/sign-return-address-pauthlr-slh.ll
@@ -10,7 +10,7 @@ define i32 @f() #0 {
; CHECK-NO-PAUTH-NEXT: dsb sy
; CHECK-NO-PAUTH-NEXT: isb
; CHECK-NO-PAUTH-NEXT: hint #39
-; CHECK-NO-PAUTH-NEXT: .cfi_negate_ra_state_with_pc
+; CHECK-NO-PAUTH-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp0
; CHECK-NO-PAUTH-NEXT: .Ltmp0:
; CHECK-NO-PAUTH-NEXT: hint #25
; CHECK-NO-PAUTH-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -32,7 +32,7 @@ define i32 @f() #0 {
; CHECK-PAUTH-NEXT: dsb sy
; CHECK-PAUTH-NEXT: isb
; CHECK-PAUTH-NEXT: hint #39
-; CHECK-PAUTH-NEXT: .cfi_negate_ra_state_with_pc
+; CHECK-PAUTH-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp0
; CHECK-PAUTH-NEXT: .Ltmp0:
; CHECK-PAUTH-NEXT: paciasp
; CHECK-PAUTH-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -52,7 +52,7 @@ define i32 @f() #0 {
; CHECK-PAUTHLR: // %bb.0: // %entry
; CHECK-PAUTHLR-NEXT: cmp sp, #0
; CHECK-PAUTHLR-NEXT: csetm x16, ne
-; CHECK-PAUTHLR-NEXT: .cfi_negate_ra_state_with_pc
+; CHECK-PAUTHLR-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp0
; CHECK-PAUTHLR-NEXT: .Ltmp0:
; CHECK-PAUTHLR-NEXT: paciasppc
; CHECK-PAUTHLR-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -75,7 +75,7 @@ define i32 @f() #0 {
; CHECK-PAUTH-PAUTHLR: // %bb.0: // %entry
; CHECK-PAUTH-PAUTHLR-NEXT: cmp sp, #0
; CHECK-PAUTH-PAUTHLR-NEXT: csetm x16, ne
-; CHECK-PAUTH-PAUTHLR-NEXT: .cfi_negate_ra_state_with_pc
+; CHECK-PAUTH-PAUTHLR-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp0
; CHECK-PAUTH-PAUTHLR-NEXT: .Ltmp0:
; CHECK-PAUTH-PAUTHLR-NEXT: paciasppc
; CHECK-PAUTH-PAUTHLR-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
diff --git a/llvm/test/CodeGen/AArch64/sign-return-address.ll b/llvm/test/CodeGen/AArch64/sign-return-address.ll
index 7267ce0e3afbf..a13e8284dc64e 100644
--- a/llvm/test/CodeGen/AArch64/sign-return-address.ll
+++ b/llvm/test/CodeGen/AArch64/sign-return-address.ll
@@ -4,6 +4,10 @@
; v9.5-A is not expected to change codegen without -mbranch-protection=+pc, so reuse DWARFCFI-V83A.
; RUN: llc -mtriple=aarch64 -mattr=v9.5a < %s | FileCheck --check-prefixes=CHECK,DWARFCFI,DWARFCFI-V83A %s
+; RUN: llc -mtriple=aarch64 -aarch64-cfi-llvm-set-ra-sign-state=never < %s | FileCheck --check-prefixes=CHECK,NEGATE-CFI,NEGATE-CFI-COMPAT %s
+; RUN: llc -mtriple=aarch64 -mattr=v8.3a -aarch64-cfi-llvm-set-ra-sign-state=never < %s | FileCheck --check-prefixes=CHECK,NEGATE-CFI,NEGATE-CFI-V83A %s
+; RUN: llc -mtriple=aarch64 -aarch64-cfi-llvm-set-ra-sign-state=always < %s | FileCheck --check-prefixes=CHECK,ALWAYS-CFI,ALWAYS-CFI-COMPAT %s
+; RUN: llc -mtriple=aarch64 -mattr=v8.3a -aarch64-cfi-llvm-set-ra-sign-state=always < %s | FileCheck --check-prefixes=CHECK,ALWAYS-CFI,ALWAYS-CFI-V83A %s
; RUN: llc -mtriple=aarch64-windows < %s | FileCheck --check-prefixes=CHECK,WINCFI,WINCFI-COMPAT %s
; RUN: llc -mtriple=aarch64-windows -mattr=v8.3a < %s | FileCheck --check-prefixes=CHECK,WINCFI,WINCFI-V83A %s
@@ -37,18 +41,35 @@ define i32 @leaf_sign_non_leaf(i32 %x) "sign-return-address"="non-leaf" {
define i32 @leaf_sign_all(i32 %x) "sign-return-address"="all" {
; DWARFCFI-COMPAT-LABEL: leaf_sign_all:
+; ALWAYS-CFI-COMPAT-LABEL: leaf_sign_all:
; DWARFCFI-COMPAT: // %bb.0:
; DWARFCFI-COMPAT-NEXT: hint #25
; DWARFCFI-COMPAT-NEXT: .cfi_negate_ra_state
+; ALWAYS-CFI-COMPAT: .cfi_llvm_set_ra_state 1, 0
; DWARFCFI-COMPAT-NEXT: hint #29
; DWARFCFI-COMPAT-NEXT: ret
;
; DWARFCFI-V83A-LABEL: leaf_sign_all:
+; ALWAYS-CFI-V83A-LABEL: leaf_sign_all:
; DWARFCFI-V83A: // %bb.0:
; DWARFCFI-V83A-NEXT: paciasp
; DWARFCFI-V83A-NEXT: .cfi_negate_ra_state
+; ALWAYS-CFI-V83A: .cfi_llvm_set_ra_state 1, 0
; DWARFCFI-V83A-NEXT: retaa
;
+; NEGATE-CFI-COMPAT-LABEL: leaf_sign_all:
+; NEGATE-CFI-COMPAT: // %bb.0:
+; NEGATE-CFI-COMPAT-NEXT: hint #25
+; NEGATE-CFI-COMPAT-NEXT: .cfi_negate_ra_state
+; NEGATE-CFI-COMPAT-NEXT: hint #29
+; NEGATE-CFI-COMPAT-NEXT: ret
+;
+; NEGATE-CFI-V83A-LABEL: leaf_sign_all:
+; NEGATE-CFI-V83A: // %bb.0:
+; NEGATE-CFI-V83A-NEXT: paciasp
+; NEGATE-CFI-V83A-NEXT: .cfi_negate_ra_state
+; NEGATE-CFI-V83A-NEXT: retaa
+;
; WINCFI-COMPAT-LABEL: leaf_sign_all:
; WINCFI-COMPAT: .seh_proc leaf_sign_all
; WINCFI-COMPAT-NEXT: // %bb.0:
@@ -81,9 +102,11 @@ define i32 @leaf_sign_all(i32 %x) "sign-return-address"="all" {
define i64 @leaf_clobbers_lr(i64 %x) "sign-return-address"="non-leaf" {
; DWARFCFI-COMPAT-LABEL: leaf_clobbers_lr:
+; ALWAYS-CFI-COMPAT-LABEL: leaf_clobbers_lr:
; DWARFCFI-COMPAT: // %bb.0:
; DWARFCFI-COMPAT-NEXT: hint #25
; DWARFCFI-COMPAT-NEXT: .cfi_negate_ra_state
+; ALWAYS-CFI-COMPAT: .cfi_llvm_set_ra_state 1, 0
; DWARFCFI-COMPAT-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
; DWARFCFI-COMPAT-NEXT: .cfi_def_cfa_offset 16
; DWARFCFI-COMPAT-NEXT: .cfi_offset w30, -16
@@ -95,9 +118,11 @@ define i64 @leaf_clobbers_lr(i64 %x) "sign-return-address"="non-leaf" {
; DWARFCFI-COMPAT-NEXT: ret
;
; DWARFCFI-V83A-LABEL: leaf_clobbers_lr:
+; ALWAYS-CFI-V83A-LABEL: leaf_clobbers_lr:
; DWARFCFI-V83A: // %bb.0:
; DWARFCFI-V83A-NEXT: paciasp
; DWARFCFI-V83A-NEXT: .cfi_negate_ra_state
+; ALWAYS-CFI-V83A: .cfi_llvm_set_ra_state 1, 0
; DWARFCFI-V83A-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
; DWARFCFI-V83A-NEXT: .cfi_def_cfa_offset 16
; DWARFCFI-V83A-NEXT: .cfi_offset w30, -16
@@ -107,6 +132,33 @@ define i64 @leaf_clobbers_lr(i64 %x) "sign-return-address"="non-leaf" {
; DWARFCFI-V83A-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
; DWARFCFI-V83A-NEXT: retaa
;
+; NEGATE-CFI-COMPAT-LABEL: leaf_clobbers_lr:
+; NEGATE-CFI-COMPAT: // %bb.0:
+; NEGATE-CFI-COMPAT-NEXT: hint #25
+; NEGATE-CFI-COMPAT-NEXT: .cfi_negate_ra_state
+; NEGATE-CFI-COMPAT-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-CFI-COMPAT-NEXT: .cfi_def_cfa_offset 16
+; NEGATE-CFI-COMPAT-NEXT: .cfi_offset w30, -16
+; NEGATE-CFI-COMPAT-NEXT: //APP
+; NEGATE-CFI-COMPAT-NEXT: mov x30, x0
+; NEGATE-CFI-COMPAT-NEXT: //NO_APP
+; NEGATE-CFI-COMPAT-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-CFI-COMPAT-NEXT: hint #29
+; NEGATE-CFI-COMPAT-NEXT: ret
+;
+; NEGATE-CFI-V83A-LABEL: leaf_clobbers_lr:
+; NEGATE-CFI-V83A: // %bb.0:
+; NEGATE-CFI-V83A-NEXT: paciasp
+; NEGATE-CFI-V83A-NEXT: .cfi_negate_ra_state
+; NEGATE-CFI-V83A-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-CFI-V83A-NEXT: .cfi_def_cfa_offset 16
+; NEGATE-CFI-V83A-NEXT: .cfi_offset w30, -16
+; NEGATE-CFI-V83A-NEXT: //APP
+; NEGATE-CFI-V83A-NEXT: mov x30, x0
+; NEGATE-CFI-V83A-NEXT: //NO_APP
+; NEGATE-CFI-V83A-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-CFI-V83A-NEXT: retaa
+;
; WINCFI-COMPAT-LABEL: leaf_clobbers_lr:
; WINCFI-COMPAT: .seh_proc leaf_clobbers_lr
; WINCFI-COMPAT-NEXT: // %bb.0:
@@ -156,9 +208,11 @@ declare i32 @foo(i32)
define i32 @non_leaf_sign_all(i32 %x) "sign-return-address"="all" {
; DWARFCFI-COMPAT-LABEL: non_leaf_sign_all:
+; ALWAYS-CFI-COMPAT-LABEL: non_leaf_sign_all:
; DWARFCFI-COMPAT: // %bb.0:
; DWARFCFI-COMPAT-NEXT: hint #25
; DWARFCFI-COMPAT-NEXT: .cfi_negate_ra_state
+; ALWAYS-CFI-COMPAT: .cfi_llvm_set_ra_state 1, 0
; DWARFCFI-COMPAT-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
; DWARFCFI-COMPAT-NEXT: .cfi_def_cfa_offset 16
; DWARFCFI-COMPAT-NEXT: .cfi_offset w30, -16
@@ -168,9 +222,11 @@ define i32 @non_leaf_sign_all(i32 %x) "sign-return-address"="all" {
; DWARFCFI-COMPAT-NEXT: ret
;
; DWARFCFI-V83A-LABEL: non_leaf_sign_all:
+; ALWAYS-CFI-V83A-LABEL: non_leaf_sign_all:
; DWARFCFI-V83A: // %bb.0:
; DWARFCFI-V83A-NEXT: paciasp
; DWARFCFI-V83A-NEXT: .cfi_negate_ra_state
+; ALWAYS-CFI-V83A: .cfi_llvm_set_ra_state 1, 0
; DWARFCFI-V83A-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
; DWARFCFI-V83A-NEXT: .cfi_def_cfa_offset 16
; DWARFCFI-V83A-NEXT: .cfi_offset w30, -16
@@ -178,6 +234,29 @@ define i32 @non_leaf_sign_all(i32 %x) "sign-return-address"="all" {
; DWARFCFI-V83A-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
; DWARFCFI-V83A-NEXT: retaa
;
+; NEGATE-CFI-COMPAT-LABEL: non_leaf_sign_all:
+; NEGATE-CFI-COMPAT: // %bb.0:
+; NEGATE-CFI-COMPAT-NEXT: hint #25
+; NEGATE-CFI-COMPAT-NEXT: .cfi_negate_ra_state
+; NEGATE-CFI-COMPAT-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-CFI-COMPAT-NEXT: .cfi_def_cfa_offset 16
+; NEGATE-CFI-COMPAT-NEXT: .cfi_offset w30, -16
+; NEGATE-CFI-COMPAT-NEXT: bl foo
+; NEGATE-CFI-COMPAT-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-CFI-COMPAT-NEXT: hint #29
+; NEGATE-CFI-COMPAT-NEXT: ret
+;
+; NEGATE-CFI-V83A-LABEL: non_leaf_sign_all:
+; NEGATE-CFI-V83A: // %bb.0:
+; NEGATE-CFI-V83A-NEXT: paciasp
+; NEGATE-CFI-V83A-NEXT: .cfi_negate_ra_state
+; NEGATE-CFI-V83A-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-CFI-V83A-NEXT: .cfi_def_cfa_offset 16
+; NEGATE-CFI-V83A-NEXT: .cfi_offset w30, -16
+; NEGATE-CFI-V83A-NEXT: bl foo
+; NEGATE-CFI-V83A-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-CFI-V83A-NEXT: retaa
+;
; WINCFI-COMPAT-LABEL: non_leaf_sign_all:
; WINCFI-COMPAT: .seh_proc non_leaf_sign_all
; WINCFI-COMPAT-NEXT: // %bb.0:
@@ -221,9 +300,11 @@ define i32 @non_leaf_sign_all(i32 %x) "sign-return-address"="all" {
define i32 @non_leaf_sign_non_leaf(i32 %x) "sign-return-address"="non-leaf" {
; DWARFCFI-COMPAT-LABEL: non_leaf_sign_non_leaf:
+; ALWAYS-CFI-COMPAT-LABEL: non_leaf_sign_non_leaf:
; DWARFCFI-COMPAT: // %bb.0:
; DWARFCFI-COMPAT-NEXT: hint #25
; DWARFCFI-COMPAT-NEXT: .cfi_negate_ra_state
+; ALWAYS-CFI-COMPAT: .cfi_llvm_set_ra_state 1, 0
; DWARFCFI-COMPAT-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
; DWARFCFI-COMPAT-NEXT: .cfi_def_cfa_offset 16
; DWARFCFI-COMPAT-NEXT: .cfi_offset w30, -16
@@ -233,9 +314,11 @@ define i32 @non_leaf_sign_non_leaf(i32 %x) "sign-return-address"="non-leaf" {
; DWARFCFI-COMPAT-NEXT: ret
;
; DWARFCFI-V83A-LABEL: non_leaf_sign_non_leaf:
+; ALWAYS-CFI-V83A-LABEL: non_leaf_sign_non_leaf:
; DWARFCFI-V83A: // %bb.0:
; DWARFCFI-V83A-NEXT: paciasp
; DWARFCFI-V83A-NEXT: .cfi_negate_ra_state
+; ALWAYS-CFI-V83A: .cfi_llvm_set_ra_state 1, 0
; DWARFCFI-V83A-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
; DWARFCFI-V83A-NEXT: .cfi_def_cfa_offset 16
; DWARFCFI-V83A-NEXT: .cfi_offset w30, -16
@@ -243,6 +326,29 @@ define i32 @non_leaf_sign_non_leaf(i32 %x) "sign-return-address"="non-leaf" {
; DWARFCFI-V83A-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
; DWARFCFI-V83A-NEXT: retaa
;
+; NEGATE-CFI-COMPAT-LABEL: non_leaf_sign_non_leaf:
+; NEGATE-CFI-COMPAT: // %bb.0:
+; NEGATE-CFI-COMPAT-NEXT: hint #25
+; NEGATE-CFI-COMPAT-NEXT: .cfi_negate_ra_state
+; NEGATE-CFI-COMPAT-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-CFI-COMPAT-NEXT: .cfi_def_cfa_offset 16
+; NEGATE-CFI-COMPAT-NEXT: .cfi_offset w30, -16
+; NEGATE-CFI-COMPAT-NEXT: bl foo
+; NEGATE-CFI-COMPAT-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-CFI-COMPAT-NEXT: hint #29
+; NEGATE-CFI-COMPAT-NEXT: ret
+;
+; NEGATE-CFI-V83A-LABEL: non_leaf_sign_non_leaf:
+; NEGATE-CFI-V83A: // %bb.0:
+; NEGATE-CFI-V83A-NEXT: paciasp
+; NEGATE-CFI-V83A-NEXT: .cfi_negate_ra_state
+; NEGATE-CFI-V83A-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-CFI-V83A-NEXT: .cfi_def_cfa_offset 16
+; NEGATE-CFI-V83A-NEXT: .cfi_offset w30, -16
+; NEGATE-CFI-V83A-NEXT: bl foo
+; NEGATE-CFI-V83A-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-CFI-V83A-NEXT: retaa
+;
; WINCFI-COMPAT-LABEL: non_leaf_sign_non_leaf:
; WINCFI-COMPAT: .seh_proc non_leaf_sign_non_leaf
; WINCFI-COMPAT-NEXT: // %bb.0:
@@ -287,9 +393,11 @@ define i32 @non_leaf_sign_non_leaf(i32 %x) "sign-return-address"="non-leaf" {
; Should not use the RETAA instruction.
define i32 @non_leaf_scs(i32 %x) "sign-return-address"="non-leaf" shadowcallstack "target-features"="+v8.3a,+reserve-x18" {
; DWARFCFI-LABEL: non_leaf_scs:
+; ALWAYS-CFI-LABEL: non_leaf_scs:
; DWARFCFI: // %bb.0:
; DWARFCFI-NEXT: paciasp
; DWARFCFI-NEXT: .cfi_negate_ra_state
+; ALWAYS-CFI: .cfi_llvm_set_ra_state 1, 0
; DWARFCFI-NEXT: str x30, [x18], #8
; DWARFCFI-NEXT: .cfi_escape 0x16, 0x12, 0x02, 0x82, 0x78 //
; DWARFCFI-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -301,6 +409,21 @@ define i32 @non_leaf_scs(i32 %x) "sign-return-address"="non-leaf" shadowcallstac
; DWARFCFI-NEXT: autiasp
; DWARFCFI-NEXT: ret
;
+; NEGATE-CFI-LABEL: non_leaf_scs:
+; NEGATE-CFI: // %bb.0:
+; NEGATE-CFI-NEXT: paciasp
+; NEGATE-CFI-NEXT: .cfi_negate_ra_state
+; NEGATE-CFI-NEXT: str x30, [x18], #8
+; NEGATE-CFI-NEXT: .cfi_escape 0x16, 0x12, 0x02, 0x82, 0x78 //
+; NEGATE-CFI-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-CFI-NEXT: .cfi_def_cfa_offset 16
+; NEGATE-CFI-NEXT: .cfi_offset w30, -16
+; NEGATE-CFI-NEXT: bl foo
+; NEGATE-CFI-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-CFI-NEXT: ldr x30, [x18, #-8]!
+; NEGATE-CFI-NEXT: autiasp
+; NEGATE-CFI-NEXT: ret
+;
; WINCFI-LABEL: non_leaf_scs:
; WINCFI: .seh_proc non_leaf_scs
; WINCFI-NEXT: // %bb.0:
@@ -332,11 +455,13 @@ define i32 @non_leaf_scs(i32 %x) "sign-return-address"="non-leaf" shadowcallstac
; By default, pac-ret hardening respects shrink-wrapping optimization.
define void @shrink_wrap_sign_non_leaf(i32 %x, i32 %cond) "sign-return-address"="non-leaf" uwtable(async) {
; DWARFCFI-COMPAT-LABEL: shrink_wrap_sign_non_leaf:
+; ALWAYS-CFI-COMPAT-LABEL: shrink_wrap_sign_non_leaf:
; DWARFCFI-COMPAT: // %bb.0: // %entry
; DWARFCFI-COMPAT-NEXT: cbnz w1, .LBB8_2
; DWARFCFI-COMPAT-NEXT: // %bb.1: // %if.then
; DWARFCFI-COMPAT-NEXT: hint #25
; DWARFCFI-COMPAT-NEXT: .cfi_negate_ra_state
+; ALWAYS-CFI-COMPAT: .cfi_llvm_set_ra_state 1, 0
; DWARFCFI-COMPAT-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
; DWARFCFI-COMPAT-NEXT: .cfi_def_cfa_offset 16
; DWARFCFI-COMPAT-NEXT: .cfi_offset w30, -16
@@ -346,6 +471,7 @@ define void @shrink_wrap_sign_non_leaf(i32 %x, i32 %cond) "sign-return-address"=
; DWARFCFI-COMPAT-NEXT: .cfi_restore w30
; DWARFCFI-COMPAT-NEXT: hint #29
; DWARFCFI-COMPAT-NEXT: .cfi_negate_ra_state
+; ALWAYS-CFI-COMPAT: .cfi_llvm_set_ra_state 0, 0
; DWARFCFI-COMPAT-NEXT: .LBB8_2: // %exit
; DWARFCFI-COMPAT-NEXT: adrp x8, var
; DWARFCFI-COMPAT-NEXT: mov w9, #42 // =0x2a
@@ -353,11 +479,13 @@ define void @shrink_wrap_sign_non_leaf(i32 %x, i32 %cond) "sign-return-address"=
; DWARFCFI-COMPAT-NEXT: ret
;
; DWARFCFI-V83A-LABEL: shrink_wrap_sign_non_leaf:
+; ALWAYS-CFI-V83A-LABEL: shrink_wrap_sign_non_leaf:
; DWARFCFI-V83A: // %bb.0: // %entry
; DWARFCFI-V83A-NEXT: cbnz w1, .LBB8_2
; DWARFCFI-V83A-NEXT: // %bb.1: // %if.then
; DWARFCFI-V83A-NEXT: paciasp
; DWARFCFI-V83A-NEXT: .cfi_negate_ra_state
+; ALWAYS-CFI-V83A: .cfi_llvm_set_ra_state 1, 0
; DWARFCFI-V83A-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
; DWARFCFI-V83A-NEXT: .cfi_def_cfa_offset 16
; DWARFCFI-V83A-NEXT: .cfi_offset w30, -16
@@ -367,12 +495,55 @@ define void @shrink_wrap_sign_non_leaf(i32 %x, i32 %cond) "sign-return-address"=
; DWARFCFI-V83A-NEXT: .cfi_restore w30
; DWARFCFI-V83A-NEXT: autiasp
; DWARFCFI-V83A-NEXT: .cfi_negate_ra_state
+; ALWAYS-CFI-V83A: .cfi_llvm_set_ra_state 0, 0
; DWARFCFI-V83A-NEXT: .LBB8_2: // %exit
; DWARFCFI-V83A-NEXT: adrp x8, var
; DWARFCFI-V83A-NEXT: mov w9, #42 // =0x2a
; DWARFCFI-V83A-NEXT: str x9, [x8, :lo12:var]
; DWARFCFI-V83A-NEXT: ret
;
+; NEGATE-CFI-COMPAT-LABEL: shrink_wrap_sign_non_leaf:
+; NEGATE-CFI-COMPAT: // %bb.0: // %entry
+; NEGATE-CFI-COMPAT-NEXT: cbnz w1, .LBB8_2
+; NEGATE-CFI-COMPAT-NEXT: // %bb.1: // %if.then
+; NEGATE-CFI-COMPAT-NEXT: hint #25
+; NEGATE-CFI-COMPAT-NEXT: .cfi_negate_ra_state
+; NEGATE-CFI-COMPAT-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-CFI-COMPAT-NEXT: .cfi_def_cfa_offset 16
+; NEGATE-CFI-COMPAT-NEXT: .cfi_offset w30, -16
+; NEGATE-CFI-COMPAT-NEXT: bl foo
+; NEGATE-CFI-COMPAT-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-CFI-COMPAT-NEXT: .cfi_def_cfa_offset 0
+; NEGATE-CFI-COMPAT-NEXT: .cfi_restore w30
+; NEGATE-CFI-COMPAT-NEXT: hint #29
+; NEGATE-CFI-COMPAT-NEXT: .cfi_negate_ra_state
+; NEGATE-CFI-COMPAT-NEXT: .LBB8_2: // %exit
+; NEGATE-CFI-COMPAT-NEXT: adrp x8, var
+; NEGATE-CFI-COMPAT-NEXT: mov w9, #42 // =0x2a
+; NEGATE-CFI-COMPAT-NEXT: str x9, [x8, :lo12:var]
+; NEGATE-CFI-COMPAT-NEXT: ret
+;
+; NEGATE-CFI-V83A-LABEL: shrink_wrap_sign_non_leaf:
+; NEGATE-CFI-V83A: // %bb.0: // %entry
+; NEGATE-CFI-V83A-NEXT: cbnz w1, .LBB8_2
+; NEGATE-CFI-V83A-NEXT: // %bb.1: // %if.then
+; NEGATE-CFI-V83A-NEXT: paciasp
+; NEGATE-CFI-V83A-NEXT: .cfi_negate_ra_state
+; NEGATE-CFI-V83A-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-CFI-V83A-NEXT: .cfi_def_cfa_offset 16
+; NEGATE-CFI-V83A-NEXT: .cfi_offset w30, -16
+; NEGATE-CFI-V83A-NEXT: bl foo
+; NEGATE-CFI-V83A-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-CFI-V83A-NEXT: .cfi_def_cfa_offset 0
+; NEGATE-CFI-V83A-NEXT: .cfi_restore w30
+; NEGATE-CFI-V83A-NEXT: autiasp
+; NEGATE-CFI-V83A-NEXT: .cfi_negate_ra_state
+; NEGATE-CFI-V83A-NEXT: .LBB8_2: // %exit
+; NEGATE-CFI-V83A-NEXT: adrp x8, var
+; NEGATE-CFI-V83A-NEXT: mov w9, #42 // =0x2a
+; NEGATE-CFI-V83A-NEXT: str x9, [x8, :lo12:var]
+; NEGATE-CFI-V83A-NEXT: ret
+;
; WINCFI-COMPAT-LABEL: shrink_wrap_sign_non_leaf:
; WINCFI-COMPAT: .seh_proc shrink_wrap_sign_non_leaf
; WINCFI-COMPAT-NEXT: // %bb.0: // %entry
@@ -437,9 +608,11 @@ exit:
; function, ignoring shrink-wrapping.
define void @shrink_wrap_sign_all(i32 %x, i32 %cond) "sign-return-address"="all" uwtable(async) {
; DWARFCFI-COMPAT-LABEL: shrink_wrap_sign_all:
+; ALWAYS-CFI-COMPAT-LABEL: shrink_wrap_sign_all:
; DWARFCFI-COMPAT: // %bb.0: // %entry
; DWARFCFI-COMPAT-NEXT: hint #25
; DWARFCFI-COMPAT-NEXT: .cfi_negate_ra_state
+; ALWAYS-CFI-COMPAT: .cfi_llvm_set_ra_state 1, 0
; DWARFCFI-COMPAT-NEXT: cbnz w1, .LBB9_2
; DWARFCFI-COMPAT-NEXT: // %bb.1: // %if.then
; DWARFCFI-COMPAT-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -455,12 +628,15 @@ define void @shrink_wrap_sign_all(i32 %x, i32 %cond) "sign-return-address"="all"
; DWARFCFI-COMPAT-NEXT: str x9, [x8, :lo12:var]
; DWARFCFI-COMPAT-NEXT: hint #29
; DWARFCFI-COMPAT-NEXT: .cfi_negate_ra_state
+; ALWAYS-CFI-COMPAT: .cfi_llvm_set_ra_state 0, 0
; DWARFCFI-COMPAT-NEXT: ret
;
; DWARFCFI-V83A-LABEL: shrink_wrap_sign_all:
+; ALWAYS-CFI-V83A-LABEL: shrink_wrap_sign_all:
; DWARFCFI-V83A: // %bb.0: // %entry
; DWARFCFI-V83A-NEXT: paciasp
; DWARFCFI-V83A-NEXT: .cfi_negate_ra_state
+; ALWAYS-CFI-V83A: .cfi_llvm_set_ra_state 1, 0
; DWARFCFI-V83A-NEXT: cbnz w1, .LBB9_2
; DWARFCFI-V83A-NEXT: // %bb.1: // %if.then
; DWARFCFI-V83A-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -476,6 +652,46 @@ define void @shrink_wrap_sign_all(i32 %x, i32 %cond) "sign-return-address"="all"
; DWARFCFI-V83A-NEXT: str x9, [x8, :lo12:var]
; DWARFCFI-V83A-NEXT: retaa
;
+; NEGATE-CFI-COMPAT-LABEL: shrink_wrap_sign_all:
+; NEGATE-CFI-COMPAT: // %bb.0: // %entry
+; NEGATE-CFI-COMPAT-NEXT: hint #25
+; NEGATE-CFI-COMPAT-NEXT: .cfi_negate_ra_state
+; NEGATE-CFI-COMPAT-NEXT: cbnz w1, .LBB9_2
+; NEGATE-CFI-COMPAT-NEXT: // %bb.1: // %if.then
+; NEGATE-CFI-COMPAT-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-CFI-COMPAT-NEXT: .cfi_def_cfa_offset 16
+; NEGATE-CFI-COMPAT-NEXT: .cfi_offset w30, -16
+; NEGATE-CFI-COMPAT-NEXT: bl foo
+; NEGATE-CFI-COMPAT-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-CFI-COMPAT-NEXT: .cfi_def_cfa_offset 0
+; NEGATE-CFI-COMPAT-NEXT: .cfi_restore w30
+; NEGATE-CFI-COMPAT-NEXT: .LBB9_2: // %exit
+; NEGATE-CFI-COMPAT-NEXT: adrp x8, var
+; NEGATE-CFI-COMPAT-NEXT: mov w9, #42 // =0x2a
+; NEGATE-CFI-COMPAT-NEXT: str x9, [x8, :lo12:var]
+; NEGATE-CFI-COMPAT-NEXT: hint #29
+; NEGATE-CFI-COMPAT-NEXT: .cfi_negate_ra_state
+; NEGATE-CFI-COMPAT-NEXT: ret
+;
+; NEGATE-CFI-V83A-LABEL: shrink_wrap_sign_all:
+; NEGATE-CFI-V83A: // %bb.0: // %entry
+; NEGATE-CFI-V83A-NEXT: paciasp
+; NEGATE-CFI-V83A-NEXT: .cfi_negate_ra_state
+; NEGATE-CFI-V83A-NEXT: cbnz w1, .LBB9_2
+; NEGATE-CFI-V83A-NEXT: // %bb.1: // %if.then
+; NEGATE-CFI-V83A-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-CFI-V83A-NEXT: .cfi_def_cfa_offset 16
+; NEGATE-CFI-V83A-NEXT: .cfi_offset w30, -16
+; NEGATE-CFI-V83A-NEXT: bl foo
+; NEGATE-CFI-V83A-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-CFI-V83A-NEXT: .cfi_def_cfa_offset 0
+; NEGATE-CFI-V83A-NEXT: .cfi_restore w30
+; NEGATE-CFI-V83A-NEXT: .LBB9_2: // %exit
+; NEGATE-CFI-V83A-NEXT: adrp x8, var
+; NEGATE-CFI-V83A-NEXT: mov w9, #42 // =0x2a
+; NEGATE-CFI-V83A-NEXT: str x9, [x8, :lo12:var]
+; NEGATE-CFI-V83A-NEXT: retaa
+;
; WINCFI-COMPAT-LABEL: shrink_wrap_sign_all:
; WINCFI-COMPAT: .seh_proc shrink_wrap_sign_all
; WINCFI-COMPAT-NEXT: // %bb.0: // %entry
@@ -538,11 +754,19 @@ exit:
define i32 @leaf_sign_all_v83(i32 %x) "sign-return-address"="all" "target-features"="+v8.3a" {
; DWARFCFI-LABEL: leaf_sign_all_v83:
+; ALWAYS-CFI-LABEL: leaf_sign_all_v83:
; DWARFCFI: // %bb.0:
; DWARFCFI-NEXT: paciasp
; DWARFCFI-NEXT: .cfi_negate_ra_state
+; ALWAYS-CFI: .cfi_llvm_set_ra_state 1, 0
; DWARFCFI-NEXT: retaa
;
+; NEGATE-CFI-LABEL: leaf_sign_all_v83:
+; NEGATE-CFI: // %bb.0:
+; NEGATE-CFI-NEXT: paciasp
+; NEGATE-CFI-NEXT: .cfi_negate_ra_state
+; NEGATE-CFI-NEXT: retaa
+;
; WINCFI-LABEL: leaf_sign_all_v83:
; WINCFI: .seh_proc leaf_sign_all_v83
; WINCFI-NEXT: // %bb.0:
@@ -563,9 +787,11 @@ declare fastcc i64 @bar(i64)
define fastcc void @spill_lr_and_tail_call(i64 %x) "sign-return-address"="all" {
; DWARFCFI-COMPAT-LABEL: spill_lr_and_tail_call:
+; ALWAYS-CFI-COMPAT-LABEL: spill_lr_and_tail_call:
; DWARFCFI-COMPAT: // %bb.0:
; DWARFCFI-COMPAT-NEXT: hint #25
; DWARFCFI-COMPAT-NEXT: .cfi_negate_ra_state
+; ALWAYS-CFI-COMPAT: .cfi_llvm_set_ra_state 1, 0
; DWARFCFI-COMPAT-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
; DWARFCFI-COMPAT-NEXT: .cfi_def_cfa_offset 16
; DWARFCFI-COMPAT-NEXT: .cfi_offset w30, -16
@@ -577,9 +803,11 @@ define fastcc void @spill_lr_and_tail_call(i64 %x) "sign-return-address"="all" {
; DWARFCFI-COMPAT-NEXT: b bar
;
; DWARFCFI-V83A-LABEL: spill_lr_and_tail_call:
+; ALWAYS-CFI-V83A-LABEL: spill_lr_and_tail_call:
; DWARFCFI-V83A: // %bb.0:
; DWARFCFI-V83A-NEXT: paciasp
; DWARFCFI-V83A-NEXT: .cfi_negate_ra_state
+; ALWAYS-CFI-V83A: .cfi_llvm_set_ra_state 1, 0
; DWARFCFI-V83A-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
; DWARFCFI-V83A-NEXT: .cfi_def_cfa_offset 16
; DWARFCFI-V83A-NEXT: .cfi_offset w30, -16
@@ -590,6 +818,34 @@ define fastcc void @spill_lr_and_tail_call(i64 %x) "sign-return-address"="all" {
; DWARFCFI-V83A-NEXT: autiasp
; DWARFCFI-V83A-NEXT: b bar
;
+; NEGATE-CFI-COMPAT-LABEL: spill_lr_and_tail_call:
+; NEGATE-CFI-COMPAT: // %bb.0:
+; NEGATE-CFI-COMPAT-NEXT: hint #25
+; NEGATE-CFI-COMPAT-NEXT: .cfi_negate_ra_state
+; NEGATE-CFI-COMPAT-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-CFI-COMPAT-NEXT: .cfi_def_cfa_offset 16
+; NEGATE-CFI-COMPAT-NEXT: .cfi_offset w30, -16
+; NEGATE-CFI-COMPAT-NEXT: //APP
+; NEGATE-CFI-COMPAT-NEXT: mov x30, x0
+; NEGATE-CFI-COMPAT-NEXT: //NO_APP
+; NEGATE-CFI-COMPAT-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-CFI-COMPAT-NEXT: hint #29
+; NEGATE-CFI-COMPAT-NEXT: b bar
+;
+; NEGATE-CFI-V83A-LABEL: spill_lr_and_tail_call:
+; NEGATE-CFI-V83A: // %bb.0:
+; NEGATE-CFI-V83A-NEXT: paciasp
+; NEGATE-CFI-V83A-NEXT: .cfi_negate_ra_state
+; NEGATE-CFI-V83A-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
+; NEGATE-CFI-V83A-NEXT: .cfi_def_cfa_offset 16
+; NEGATE-CFI-V83A-NEXT: .cfi_offset w30, -16
+; NEGATE-CFI-V83A-NEXT: //APP
+; NEGATE-CFI-V83A-NEXT: mov x30, x0
+; NEGATE-CFI-V83A-NEXT: //NO_APP
+; NEGATE-CFI-V83A-NEXT: ldr x30, [sp], #16 // 8-byte Folded Reload
+; NEGATE-CFI-V83A-NEXT: autiasp
+; NEGATE-CFI-V83A-NEXT: b bar
+;
; WINCFI-COMPAT-LABEL: spill_lr_and_tail_call:
; WINCFI-COMPAT: .seh_proc spill_lr_and_tail_call
; WINCFI-COMPAT-NEXT: // %bb.0:
@@ -638,18 +894,35 @@ define fastcc void @spill_lr_and_tail_call(i64 %x) "sign-return-address"="all" {
define i32 @leaf_sign_all_a_key(i32 %x) "sign-return-address"="all" "sign-return-address-key"="a_key" {
; DWARFCFI-COMPAT-LABEL: leaf_sign_all_a_key:
+; ALWAYS-CFI-COMPAT-LABEL: leaf_sign_all_a_key:
; DWARFCFI-COMPAT: // %bb.0:
; DWARFCFI-COMPAT-NEXT: hint #25
; DWARFCFI-COMPAT-NEXT: .cfi_negate_ra_state
+; ALWAYS-CFI-COMPAT: .cfi_llvm_set_ra_state 1, 0
; DWARFCFI-COMPAT-NEXT: hint #29
; DWARFCFI-COMPAT-NEXT: ret
;
; DWARFCFI-V83A-LABEL: leaf_sign_all_a_key:
+; ALWAYS-CFI-V83A-LABEL: leaf_sign_all_a_key:
; DWARFCFI-V83A: // %bb.0:
; DWARFCFI-V83A-NEXT: paciasp
; DWARFCFI-V83A-NEXT: .cfi_negate_ra_state
+; ALWAYS-CFI-V83A: .cfi_llvm_set_ra_state 1, 0
; DWARFCFI-V83A-NEXT: retaa
;
+; NEGATE-CFI-COMPAT-LABEL: leaf_sign_all_a_key:
+; NEGATE-CFI-COMPAT: // %bb.0:
+; NEGATE-CFI-COMPAT-NEXT: hint #25
+; NEGATE-CFI-COMPAT-NEXT: .cfi_negate_ra_state
+; NEGATE-CFI-COMPAT-NEXT: hint #29
+; NEGATE-CFI-COMPAT-NEXT: ret
+;
+; NEGATE-CFI-V83A-LABEL: leaf_sign_all_a_key:
+; NEGATE-CFI-V83A: // %bb.0:
+; NEGATE-CFI-V83A-NEXT: paciasp
+; NEGATE-CFI-V83A-NEXT: .cfi_negate_ra_state
+; NEGATE-CFI-V83A-NEXT: retaa
+;
; WINCFI-COMPAT-LABEL: leaf_sign_all_a_key:
; WINCFI-COMPAT: .seh_proc leaf_sign_all_a_key
; WINCFI-COMPAT-NEXT: // %bb.0:
@@ -682,20 +955,39 @@ define i32 @leaf_sign_all_a_key(i32 %x) "sign-return-address"="all" "sign-return
define i32 @leaf_sign_all_b_key(i32 %x) "sign-return-address"="all" "sign-return-address-key"="b_key" {
; DWARFCFI-COMPAT-LABEL: leaf_sign_all_b_key:
+; ALWAYS-CFI-COMPAT-LABEL: leaf_sign_all_b_key:
; DWARFCFI-COMPAT: // %bb.0:
; DWARFCFI-COMPAT-NEXT: .cfi_b_key_frame
; DWARFCFI-COMPAT-NEXT: hint #27
; DWARFCFI-COMPAT-NEXT: .cfi_negate_ra_state
+; ALWAYS-CFI-COMPAT: .cfi_llvm_set_ra_state 1, 0
; DWARFCFI-COMPAT-NEXT: hint #31
; DWARFCFI-COMPAT-NEXT: ret
;
; DWARFCFI-V83A-LABEL: leaf_sign_all_b_key:
+; ALWAYS-CFI-V83A-LABEL: leaf_sign_all_b_key:
; DWARFCFI-V83A: // %bb.0:
; DWARFCFI-V83A-NEXT: .cfi_b_key_frame
; DWARFCFI-V83A-NEXT: pacibsp
; DWARFCFI-V83A-NEXT: .cfi_negate_ra_state
+; ALWAYS-CFI-V83A: .cfi_llvm_set_ra_state 1, 0
; DWARFCFI-V83A-NEXT: retab
;
+; NEGATE-CFI-COMPAT-LABEL: leaf_sign_all_b_key:
+; NEGATE-CFI-COMPAT: // %bb.0:
+; NEGATE-CFI-COMPAT-NEXT: .cfi_b_key_frame
+; NEGATE-CFI-COMPAT-NEXT: hint #27
+; NEGATE-CFI-COMPAT-NEXT: .cfi_negate_ra_state
+; NEGATE-CFI-COMPAT-NEXT: hint #31
+; NEGATE-CFI-COMPAT-NEXT: ret
+;
+; NEGATE-CFI-V83A-LABEL: leaf_sign_all_b_key:
+; NEGATE-CFI-V83A: // %bb.0:
+; NEGATE-CFI-V83A-NEXT: .cfi_b_key_frame
+; NEGATE-CFI-V83A-NEXT: pacibsp
+; NEGATE-CFI-V83A-NEXT: .cfi_negate_ra_state
+; NEGATE-CFI-V83A-NEXT: retab
+;
; WINCFI-COMPAT-LABEL: leaf_sign_all_b_key:
; WINCFI-COMPAT: .seh_proc leaf_sign_all_b_key
; WINCFI-COMPAT-NEXT: // %bb.0:
@@ -728,12 +1020,21 @@ define i32 @leaf_sign_all_b_key(i32 %x) "sign-return-address"="all" "sign-return
define i32 @leaf_sign_all_v83_b_key(i32 %x) "sign-return-address"="all" "target-features"="+v8.3a" "sign-return-address-key"="b_key" {
; DWARFCFI-LABEL: leaf_sign_all_v83_b_key:
+; ALWAYS-CFI-LABEL: leaf_sign_all_v83_b_key:
; DWARFCFI: // %bb.0:
; DWARFCFI-NEXT: .cfi_b_key_frame
; DWARFCFI-NEXT: pacibsp
; DWARFCFI-NEXT: .cfi_negate_ra_state
+; ALWAYS-CFI: .cfi_llvm_set_ra_state 1, 0
; DWARFCFI-NEXT: retab
;
+; NEGATE-CFI-LABEL: leaf_sign_all_v83_b_key:
+; NEGATE-CFI: // %bb.0:
+; NEGATE-CFI-NEXT: .cfi_b_key_frame
+; NEGATE-CFI-NEXT: pacibsp
+; NEGATE-CFI-NEXT: .cfi_negate_ra_state
+; NEGATE-CFI-NEXT: retab
+;
; WINCFI-LABEL: leaf_sign_all_v83_b_key:
; WINCFI: .seh_proc leaf_sign_all_v83_b_key
; WINCFI-NEXT: // %bb.0:
@@ -753,18 +1054,35 @@ define i32 @leaf_sign_all_v83_b_key(i32 %x) "sign-return-address"="all" "target-
; Note that BTI instruction is not needed before PACIASP.
define i32 @leaf_sign_all_a_key_bti(i32 %x) "sign-return-address"="all" "sign-return-address-key"="a_key" "branch-target-enforcement"{
; DWARFCFI-COMPAT-LABEL: leaf_sign_all_a_key_bti:
+; ALWAYS-CFI-COMPAT-LABEL: leaf_sign_all_a_key_bti:
; DWARFCFI-COMPAT: // %bb.0:
; DWARFCFI-COMPAT-NEXT: hint #25
; DWARFCFI-COMPAT-NEXT: .cfi_negate_ra_state
+; ALWAYS-CFI-COMPAT: .cfi_llvm_set_ra_state 1, 0
; DWARFCFI-COMPAT-NEXT: hint #29
; DWARFCFI-COMPAT-NEXT: ret
;
; DWARFCFI-V83A-LABEL: leaf_sign_all_a_key_bti:
+; ALWAYS-CFI-V83A-LABEL: leaf_sign_all_a_key_bti:
; DWARFCFI-V83A: // %bb.0:
; DWARFCFI-V83A-NEXT: paciasp
; DWARFCFI-V83A-NEXT: .cfi_negate_ra_state
+; ALWAYS-CFI-V83A: .cfi_llvm_set_ra_state 1, 0
; DWARFCFI-V83A-NEXT: retaa
;
+; NEGATE-CFI-COMPAT-LABEL: leaf_sign_all_a_key_bti:
+; NEGATE-CFI-COMPAT: // %bb.0:
+; NEGATE-CFI-COMPAT-NEXT: hint #25
+; NEGATE-CFI-COMPAT-NEXT: .cfi_negate_ra_state
+; NEGATE-CFI-COMPAT-NEXT: hint #29
+; NEGATE-CFI-COMPAT-NEXT: ret
+;
+; NEGATE-CFI-V83A-LABEL: leaf_sign_all_a_key_bti:
+; NEGATE-CFI-V83A: // %bb.0:
+; NEGATE-CFI-V83A-NEXT: paciasp
+; NEGATE-CFI-V83A-NEXT: .cfi_negate_ra_state
+; NEGATE-CFI-V83A-NEXT: retaa
+;
; WINCFI-COMPAT-LABEL: leaf_sign_all_a_key_bti:
; WINCFI-COMPAT: .seh_proc leaf_sign_all_a_key_bti
; WINCFI-COMPAT-NEXT: // %bb.0:
@@ -798,20 +1116,39 @@ define i32 @leaf_sign_all_a_key_bti(i32 %x) "sign-return-address"="all" "sign-re
; Note that BTI instruction is not needed before PACIBSP.
define i32 @leaf_sign_all_b_key_bti(i32 %x) "sign-return-address"="all" "sign-return-address-key"="b_key" "branch-target-enforcement"{
; DWARFCFI-COMPAT-LABEL: leaf_sign_all_b_key_bti:
+; ALWAYS-CFI-COMPAT-LABEL: leaf_sign_all_b_key_bti:
; DWARFCFI-COMPAT: // %bb.0:
; DWARFCFI-COMPAT-NEXT: .cfi_b_key_frame
; DWARFCFI-COMPAT-NEXT: hint #27
; DWARFCFI-COMPAT-NEXT: .cfi_negate_ra_state
+; ALWAYS-CFI-COMPAT: .cfi_llvm_set_ra_state 1, 0
; DWARFCFI-COMPAT-NEXT: hint #31
; DWARFCFI-COMPAT-NEXT: ret
;
; DWARFCFI-V83A-LABEL: leaf_sign_all_b_key_bti:
+; ALWAYS-CFI-V83A-LABEL: leaf_sign_all_b_key_bti:
; DWARFCFI-V83A: // %bb.0:
; DWARFCFI-V83A-NEXT: .cfi_b_key_frame
; DWARFCFI-V83A-NEXT: pacibsp
; DWARFCFI-V83A-NEXT: .cfi_negate_ra_state
+; ALWAYS-CFI-V83A: .cfi_llvm_set_ra_state 1, 0
; DWARFCFI-V83A-NEXT: retab
;
+; NEGATE-CFI-COMPAT-LABEL: leaf_sign_all_b_key_bti:
+; NEGATE-CFI-COMPAT: // %bb.0:
+; NEGATE-CFI-COMPAT-NEXT: .cfi_b_key_frame
+; NEGATE-CFI-COMPAT-NEXT: hint #27
+; NEGATE-CFI-COMPAT-NEXT: .cfi_negate_ra_state
+; NEGATE-CFI-COMPAT-NEXT: hint #31
+; NEGATE-CFI-COMPAT-NEXT: ret
+;
+; NEGATE-CFI-V83A-LABEL: leaf_sign_all_b_key_bti:
+; NEGATE-CFI-V83A: // %bb.0:
+; NEGATE-CFI-V83A-NEXT: .cfi_b_key_frame
+; NEGATE-CFI-V83A-NEXT: pacibsp
+; NEGATE-CFI-V83A-NEXT: .cfi_negate_ra_state
+; NEGATE-CFI-V83A-NEXT: retab
+;
; WINCFI-COMPAT-LABEL: leaf_sign_all_b_key_bti:
; WINCFI-COMPAT: .seh_proc leaf_sign_all_b_key_bti
; WINCFI-COMPAT-NEXT: // %bb.0:
@@ -845,12 +1182,21 @@ define i32 @leaf_sign_all_b_key_bti(i32 %x) "sign-return-address"="all" "sign-re
; Note that BTI instruction is not needed before PACIBSP.
define i32 @leaf_sign_all_v83_b_key_bti(i32 %x) "sign-return-address"="all" "target-features"="+v8.3a" "sign-return-address-key"="b_key" "branch-target-enforcement" {
; DWARFCFI-LABEL: leaf_sign_all_v83_b_key_bti:
+; ALWAYS-CFI-LABEL: leaf_sign_all_v83_b_key_bti:
; DWARFCFI: // %bb.0:
; DWARFCFI-NEXT: .cfi_b_key_frame
; DWARFCFI-NEXT: pacibsp
; DWARFCFI-NEXT: .cfi_negate_ra_state
+; ALWAYS-CFI: .cfi_llvm_set_ra_state 1, 0
; DWARFCFI-NEXT: retab
;
+; NEGATE-CFI-LABEL: leaf_sign_all_v83_b_key_bti:
+; NEGATE-CFI: // %bb.0:
+; NEGATE-CFI-NEXT: .cfi_b_key_frame
+; NEGATE-CFI-NEXT: pacibsp
+; NEGATE-CFI-NEXT: .cfi_negate_ra_state
+; NEGATE-CFI-NEXT: retab
+;
; WINCFI-LABEL: leaf_sign_all_v83_b_key_bti:
; WINCFI: .seh_proc leaf_sign_all_v83_b_key_bti
; WINCFI-NEXT: // %bb.0:
diff --git a/llvm/test/CodeGen/AArch64/swifttail-ptrauth.ll b/llvm/test/CodeGen/AArch64/swifttail-ptrauth.ll
index 5d31d7a99ef7b..6c099bae66c81 100644
--- a/llvm/test/CodeGen/AArch64/swifttail-ptrauth.ll
+++ b/llvm/test/CodeGen/AArch64/swifttail-ptrauth.ll
@@ -20,16 +20,16 @@ define swifttailcc void @caller_to0_from0() "branch-protection-pauth-lr" "sign-r
; CHECK: // %bb.0:
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp0
; COMPAT-NEXT: .Ltmp0:
; COMPAT-NEXT: hint #25
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_negate_ra_state_with_pc
+; V83A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp0
; V83A-NEXT: .Ltmp0:
; V83A-NEXT: paciasp
-; V9A-NEXT: .cfi_negate_ra_state_with_pc
+; V9A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp0
; V9A-NEXT: .Ltmp0:
; V9A-NEXT: paciasppc
@@ -51,16 +51,16 @@ define swifttailcc void @caller_to0_from0() "branch-protection-pauth-lr" "sign-r
; COMPAT-NEXT: adrp x16, .Ltmp0
; COMPAT-NEXT: add x16, x16, :lo12:.Ltmp0
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT: .cfi_llvm_set_ra_state 0, 0
; COMPAT-NEXT: hint #29
; V83A-NEXT: adrp x16, .Ltmp0
; V83A-NEXT: add x16, x16, :lo12:.Ltmp0
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_negate_ra_state_with_pc
+; V83A-NEXT: .cfi_llvm_set_ra_state 0, 0
; V83A-NEXT: autiasp
-; V9A-NEXT: .cfi_negate_ra_state_with_pc
+; V9A-NEXT: .cfi_llvm_set_ra_state 0, 0
; V9A-NEXT: autiasppc .Ltmp0
; PAUTH-NEXT: autiasp
@@ -83,16 +83,16 @@ define swifttailcc void @caller_to0_from8([8 x i64], i64) "branch-protection-pau
; CHECK: // %bb.0:
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp1
; COMPAT-NEXT: .Ltmp1:
; COMPAT-NEXT: hint #25
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_negate_ra_state_with_pc
+; V83A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp1
; V83A-NEXT: .Ltmp1:
; V83A-NEXT: paciasp
-; V9A-NEXT: .cfi_negate_ra_state_with_pc
+; V9A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp1
; V9A-NEXT: .Ltmp1:
; V9A-NEXT: paciasppc
@@ -115,16 +115,16 @@ define swifttailcc void @caller_to0_from8([8 x i64], i64) "branch-protection-pau
; COMPAT-NEXT: adrp x16, .Ltmp1
; COMPAT-NEXT: add x16, x16, :lo12:.Ltmp1
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT: .cfi_llvm_set_ra_state 0, 0
; COMPAT-NEXT: hint #29
; V83A-NEXT: adrp x16, .Ltmp1
; V83A-NEXT: add x16, x16, :lo12:.Ltmp1
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_negate_ra_state_with_pc
+; V83A-NEXT: .cfi_llvm_set_ra_state 0, 0
; V83A-NEXT: autiasp
-; V9A-NEXT: .cfi_negate_ra_state_with_pc
+; V9A-NEXT: .cfi_llvm_set_ra_state 0, 0
; V9A-NEXT: autiasppc .Ltmp1
; PAUTH-NEXT: autiasp
@@ -143,16 +143,16 @@ define swifttailcc void @caller_to8_from0() "branch-protection-pauth-lr" "sign-r
; CHECK: // %bb.0:
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp2
; COMPAT-NEXT: .Ltmp2:
; COMPAT-NEXT: hint #25
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_negate_ra_state_with_pc
+; V83A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp2
; V83A-NEXT: .Ltmp2:
; V83A-NEXT: paciasp
-; V9A-NEXT: .cfi_negate_ra_state_with_pc
+; V9A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp2
; V9A-NEXT: .Ltmp2:
; V9A-NEXT: paciasppc
@@ -178,18 +178,18 @@ define swifttailcc void @caller_to8_from0() "branch-protection-pauth-lr" "sign-r
; COMPAT-NEXT: adrp x15, .Ltmp2
; COMPAT-NEXT: add x15, x15, :lo12:.Ltmp2
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_negate_ra_state_with_pc
+; COMPAT-NEXT: .cfi_llvm_set_ra_state 0, 0
; COMPAT-NEXT: hint #12
; V83A-NEXT: adrp x15, .Ltmp2
; V83A-NEXT: add x15, x15, :lo12:.Ltmp2
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_negate_ra_state_with_pc
+; V83A-NEXT: .cfi_llvm_set_ra_state 0, 0
; V83A-NEXT: autia1716
; V9A-NEXT: adrp x15, .Ltmp2
; V9A-NEXT: add x15, x15, :lo12:.Ltmp2
-; V9A-NEXT: .cfi_negate_ra_state_with_pc
+; V9A-NEXT: .cfi_llvm_set_ra_state 0, 0
; V9A-NEXT: autia171615
; PAUTH-NEXT: autia1716
diff --git a/llvm/test/CodeGen/MIR/AArch64/cfi.mir b/llvm/test/CodeGen/MIR/AArch64/cfi.mir
index efa053699b491..7e08c4040b9bf 100644
--- a/llvm/test/CodeGen/MIR/AArch64/cfi.mir
+++ b/llvm/test/CodeGen/MIR/AArch64/cfi.mir
@@ -49,4 +49,8 @@ body: |
; CHECK: CFI_INSTRUCTION window_save
CFI_INSTRUCTION negate_ra_sign_state
; CHECK: CFI_INSTRUCTION negate_ra_sign_state
+ CFI_INSTRUCTION negate_ra_sign_state_with_pc
+ ; CHECK: CFI_INSTRUCTION negate_ra_sign_state_with_pc
+ CFI_INSTRUCTION llvm_set_ra_state 2, 0
+ ; CHECK: CFI_INSTRUCTION llvm_set_ra_state 2, 0
RET_ReallyLR
diff --git a/llvm/test/CodeGen/MIR/AArch64/return-address-signing.mir b/llvm/test/CodeGen/MIR/AArch64/return-address-signing.mir
index 302f70fc15192..78e87c2074406 100644
--- a/llvm/test/CodeGen/MIR/AArch64/return-address-signing.mir
+++ b/llvm/test/CodeGen/MIR/AArch64/return-address-signing.mir
@@ -59,7 +59,7 @@ tracksRegLiveness: true
frameInfo:
maxCallFrameSize: 0
#CHECK: frame-setup PACM
-#CHECK: frame-setup CFI_INSTRUCTION negate_ra_sign_state_with_pc
+#CHECK: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
#CHECK: frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
#CHECK: frame-destroy PACM
#CHECK: frame-destroy AUTIASP implicit-def $lr, implicit $lr, implicit $sp
diff --git a/llvm/test/MC/AArch64/cfi_llvm_set_ra_state-shrinkwrap.s b/llvm/test/MC/AArch64/cfi_llvm_set_ra_state-shrinkwrap.s
new file mode 100644
index 0000000000000..d75c6a164a06d
--- /dev/null
+++ b/llvm/test/MC/AArch64/cfi_llvm_set_ra_state-shrinkwrap.s
@@ -0,0 +1,142 @@
+# RUN: llvm-mc -triple arm64e-apple-darwin -mattr=+pauth-lr %s -filetype=obj -o %t.o
+# RUN: llvm-objdump --macho --unwind-info --dwarf=frames %t.o | FileCheck %s
+
+# Vanilla ptrauth-returns=pauth frame.
+ .globl _pauth
+_pauth:
+ .cfi_startproc
+ .cfi_llvm_set_ra_state 1, 0
+ pacibsp
+
+ .cfi_llvm_set_ra_state 0, -4
+ retab
+ .cfi_endproc
+
+
+# Vanilla ptrauth-returns=pauth-lr frame, with .cfi_llvm_set_ra_state instead of
+# the deprecated .cfi_negate_ra_state_with_pc
+ .globl _pauthlr
+_pauthlr:
+ .cfi_startproc
+ .cfi_llvm_set_ra_state 2, 0
+ pacibsppc
+
+ .cfi_llvm_set_ra_state 0, -4
+ retabsppc _pauthlr
+ .cfi_endproc
+
+
+# Shrink-wrapped frame, with a strange block ordering that puts the aut before
+# the pac, which is not representable via .cfi_negate_ra_state_with_pc
+# See: https://github.com/ARM-software/abi-aa/issues/327
+ .globl _pauthlr_shrinkwrap
+_pauthlr_shrinkwrap:
+ .cfi_startproc
+ cmp w0, #42
+ b.lt LBB0
+ ret
+
+LBB1:
+ ldp x29, x30, [sp], #16
+ .cfi_def_cfa_offset 0
+ .cfi_restore x29
+ .cfi_restore x30
+
+ adrp x16, LBB0 at PAGE
+ add x16, x16, LBB0 at PAGEOFF
+ .cfi_llvm_set_ra_state 0, 16
+ autibsppcr x16
+
+ mov w0, #42
+ ret
+
+LBB0:
+ .cfi_llvm_set_ra_state 2, 0
+ pacibsppc
+
+ stp x29, x30, [sp, #-16]!
+ .cfi_def_cfa_offset 16
+ .cfi_offset x29, -16
+ .cfi_offset x30, -8
+
+ b LBB1
+ .cfi_endproc
+
+
+# CHECK-LABEL: Contents of __compact_unwind section:
+# CHECK-NEXT: Entry at offset 0x0:
+# CHECK-NEXT: start: 0x0 ltmp0
+# CHECK-NEXT: length: 0x8
+# CHECK-NEXT: compact encoding: 0x03000000
+# CHECK-NEXT: Entry at offset 0x20:
+# CHECK-NEXT: start: 0x8 _pauthlr
+# CHECK-NEXT: length: 0x8
+# CHECK-NEXT: compact encoding: 0x03000000
+# CHECK-NEXT: Entry at offset 0x40:
+# CHECK-NEXT: start: 0x10 _pauthlr_shrinkwrap
+# CHECK-NEXT: length: 0x30
+# CHECK-NEXT: compact encoding: 0x03000000
+# CHECK-EMPTY:
+# CHECK-LABEL: .debug_frame contents:
+# CHECK-EMPTY:
+# CHECK-EMPTY:
+# CHECK-LABEL: .eh_frame contents:
+# CHECK-EMPTY:
+# CHECK-NEXT: 00000000 00000010 00000000 CIE
+# CHECK-NEXT: Format: DWARF32
+# CHECK-NEXT: Version: 1
+# CHECK-NEXT: Augmentation: "zR"
+# CHECK-NEXT: Code alignment factor: 1
+# CHECK-NEXT: Data alignment factor: -8
+# CHECK-NEXT: Return address column: 30
+# CHECK-NEXT: Augmentation data: 10
+# CHECK-EMPTY:
+# CHECK-NEXT: DW_CFA_def_cfa: reg31 +0
+# CHECK-EMPTY:
+# CHECK-NEXT: CFA=reg31
+# CHECK-EMPTY:
+# CHECK-NEXT: 00000014 00000020 00000018 FDE cie=00000000 pc=000000a0...000000a8
+# CHECK-NEXT: Format: DWARF32
+# CHECK-NEXT: DW_CFA_AARCH64_set_ra_state: 1 0
+# CHECK-NEXT: DW_CFA_advance_loc: 4 to 0xa4
+# CHECK-NEXT: DW_CFA_AARCH64_set_ra_state: 0 -4
+# CHECK-NEXT: DW_CFA_nop:
+# CHECK-NEXT: DW_CFA_nop:
+# CHECK-NEXT: DW_CFA_nop:
+# CHECK-NEXT: DW_CFA_nop:
+# CHECK-EMPTY:
+# CHECK-NEXT: 0xa0: CFA=reg31: reg34=1
+# CHECK-NEXT: 0xa4: CFA=reg31: reg34=0
+# CHECK-EMPTY:
+# CHECK-NEXT: 00000038 0000001c 0000003c FDE cie=00000000 pc=000000a0...000000a8
+# CHECK-NEXT: Format: DWARF32
+# CHECK-NEXT: DW_CFA_AARCH64_set_ra_state: 2 0
+# CHECK-NEXT: DW_CFA_advance_loc: 4 to 0xa4
+# CHECK-NEXT: DW_CFA_AARCH64_set_ra_state: 0 -4
+# CHECK-EMPTY:
+# CHECK-NEXT: 0xa0: CFA=reg31: reg34=2
+# CHECK-NEXT: 0xa4: CFA=reg31: reg34=0
+# CHECK-EMPTY:
+# CHECK-NEXT: 00000058 0000002c 0000005c FDE cie=00000000 pc=000000a0...000000d0
+# CHECK-NEXT: Format: DWARF32
+# CHECK-NEXT: DW_CFA_advance_loc: 16 to 0xb0
+# CHECK-NEXT: DW_CFA_def_cfa_offset: +0
+# CHECK-NEXT: DW_CFA_restore: reg29
+# CHECK-NEXT: DW_CFA_restore: reg30
+# CHECK-NEXT: DW_CFA_advance_loc: 8 to 0xb8
+# CHECK-NEXT: DW_CFA_AARCH64_set_ra_state: 0 16
+# CHECK-NEXT: DW_CFA_advance_loc: 12 to 0xc4
+# CHECK-NEXT: DW_CFA_AARCH64_set_ra_state: 2 0
+# CHECK-NEXT: DW_CFA_advance_loc: 8 to 0xcc
+# CHECK-NEXT: DW_CFA_def_cfa_offset: +16
+# CHECK-NEXT: DW_CFA_offset: reg29 -16
+# CHECK-NEXT: DW_CFA_offset: reg30 -8
+# CHECK-NEXT: DW_CFA_nop:
+# CHECK-NEXT: DW_CFA_nop:
+# CHECK-NEXT: DW_CFA_nop:
+# CHECK-EMPTY:
+# CHECK-NEXT: 0xa0: CFA=reg31
+# CHECK-NEXT: 0xb0: CFA=reg31
+# CHECK-NEXT: 0xb8: CFA=reg31: reg34=0
+# CHECK-NEXT: 0xc4: CFA=reg31: reg34=2
+# CHECK-NEXT: 0xcc: CFA=reg31+16: reg29=[CFA-16], reg30=[CFA-8], reg34=2
diff --git a/llvm/test/MC/AArch64/cfi_llvm_set_ra_state.s b/llvm/test/MC/AArch64/cfi_llvm_set_ra_state.s
new file mode 100644
index 0000000000000..cba21103377e5
--- /dev/null
+++ b/llvm/test/MC/AArch64/cfi_llvm_set_ra_state.s
@@ -0,0 +1,31 @@
+# RUN: llvm-mc -triple aarch64-pc-linux-gnu %s -filetype=asm -o - | FileCheck %s --check-prefix=ASM
+
+# RUN: llvm-mc -triple aarch64-pc-linux-gnu %s -filetype=obj -o %t.o
+# RUN: llvm-dwarfdump --eh-frame %t.o | FileCheck %s --check-prefix=DWARF
+# RUN: llvm-readobj --hex-dump=.eh_frame %t.o | FileCheck %s --check-prefix=HEX
+
+ .cfi_startproc
+ .cfi_llvm_set_ra_state 1, 0
+ .cfi_llvm_set_ra_state 2, 0
+ .cfi_llvm_set_ra_state 0, -4
+ .cfi_endproc
+
+# ASM: .cfi_startproc
+# ASM-NEXT: .cfi_llvm_set_ra_state 1, 0
+# ASM-NEXT: .cfi_llvm_set_ra_state 2, 0
+# ASM-NEXT: .cfi_llvm_set_ra_state 0, -4
+# ASM-NEXT: .cfi_endproc
+
+# DWARF: DW_CFA_AARCH64_set_ra_state: 1 0
+# DWARF-NEXT: DW_CFA_AARCH64_set_ra_state: 2 0
+# DWARF-NEXT: DW_CFA_AARCH64_set_ra_state: 0 -4
+
+# Verify the raw encoding:
+#
+# opcode 0x2b, then ULEB128(state), then SLEB128(offset).
+#
+# state=1, offset= 0 => 2b 01 00
+# state=2, offset= 0 => 2b 02 00
+# state=0, offset=-4 => 2b 00 7c
+#
+# HEX: 002b0100 2b02002b 007c
diff --git a/llvm/test/MC/AArch64/directives-case_insensitive.s b/llvm/test/MC/AArch64/directives-case_insensitive.s
index c2bdec73e349e..a9d67a99e65c0 100644
--- a/llvm/test/MC/AArch64/directives-case_insensitive.s
+++ b/llvm/test/MC/AArch64/directives-case_insensitive.s
@@ -33,11 +33,13 @@ fred .REQ x5
.CFI_STARTPROC
.CFI_NEGATE_RA_STATE
.CFI_NEGATE_RA_STATE_WITH_PC
+.CFI_LLVM_SET_RA_STATE 2, 0
.CFI_B_KEY_FRAME
.CFI_ENDPROC
// CHECK: .cfi_startproc
// CHECK: .cfi_negate_ra_state
// CHECK: .cfi_negate_ra_state_with_pc
+// CHECK: .cfi_llvm_set_ra_state 2, 0
// CHECK: .cfi_b_key_frame
// CHECK: .cfi_endproc
diff --git a/llvm/unittests/DebugInfo/DWARF/DWARFDebugFrameTest.cpp b/llvm/unittests/DebugInfo/DWARF/DWARFDebugFrameTest.cpp
index 5b7e90092744c..f225f30de61c8 100644
--- a/llvm/unittests/DebugInfo/DWARF/DWARFDebugFrameTest.cpp
+++ b/llvm/unittests/DebugInfo/DWARF/DWARFDebugFrameTest.cpp
@@ -176,6 +176,7 @@ TEST(DWARFDebugFrame, InvalidCFIOpcodesTest) {
dwarf::DW_CFA_GNU_window_save,
dwarf::DW_CFA_AARCH64_negate_ra_state,
dwarf::DW_CFA_AARCH64_negate_ra_state_with_pc,
+ dwarf::DW_CFA_AARCH64_set_ra_state,
dwarf::DW_CFA_GNU_args_size};
dwarf::CIE TestCIE = createCIE(/*IsDWARF64=*/false,
>From f2df12068d8e9c4c56f17b1faf31dbadfa4118a4 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Tue, 23 Jun 2026 15:27:17 -0700
Subject: [PATCH 04/58] clang-format
---
libunwind/src/DwarfParser.hpp | 3 +--
libunwind/test/ra_sign_state.pass.cpp | 3 +--
llvm/lib/MC/MCAsmStreamer.cpp | 3 ++-
llvm/lib/Target/AArch64/AArch64PointerAuth.cpp | 4 ++--
4 files changed, 6 insertions(+), 7 deletions(-)
diff --git a/libunwind/src/DwarfParser.hpp b/libunwind/src/DwarfParser.hpp
index 4d3a44567d7a6..72c0504bb472f 100644
--- a/libunwind/src/DwarfParser.hpp
+++ b/libunwind/src/DwarfParser.hpp
@@ -874,8 +874,7 @@ bool CFI_Parser<A>::parseFDEInstructions(
results->ptrAuthDiversifier = fdeInfo.pcStart + codeOffset + offset;
_LIBUNWIND_TRACE_DWARF(
"DW_CFA_AARCH64_set_ra_state(state=%" PRId64 ",pc=0x%" PRIx64 ")\n",
- value,
- static_cast<uint64_t>(results->ptrAuthDiversifier));
+ value, static_cast<uint64_t>(results->ptrAuthDiversifier));
} break;
#endif
diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index b5d7866ec8c94..9fc3c30e674fb 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -102,8 +102,7 @@ __attribute__((naked, target("pauth"))) uint64_t check_negate() {
}
#if defined(HAVE_CFI_LLVM_SET_RA_STATE)
-__attribute__((naked))
-uint64_t check_set() {
+__attribute__((naked)) uint64_t check_set() {
asm(".cfi_llvm_set_ra_state 1, 0\n"
"pacibsp\n"
diff --git a/llvm/lib/MC/MCAsmStreamer.cpp b/llvm/lib/MC/MCAsmStreamer.cpp
index 36296a61c3d26..052ae1310c4ad 100644
--- a/llvm/lib/MC/MCAsmStreamer.cpp
+++ b/llvm/lib/MC/MCAsmStreamer.cpp
@@ -398,7 +398,8 @@ class MCAsmStreamer final : public MCAsmBaseStreamer {
void emitCFINegateRAStateWithPC(SMLoc Loc) override;
void emitCFILLVMSetRAState(unsigned State, MCSymbol *PACSym,
SMLoc Loc) override;
- void emitCFILLVMSetRAState(unsigned State, int64_t Offset, SMLoc Loc) override;
+ void emitCFILLVMSetRAState(unsigned State, int64_t Offset,
+ SMLoc Loc) override;
void emitCFIReturnColumn(int64_t Register) override;
void emitCFILLVMRegisterPair(int64_t Register, int64_t R1, int64_t R1Size,
int64_t R2, int64_t R2Size, SMLoc Loc) override;
diff --git a/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp b/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
index 98d13226af30d..242189b92d36b 100644
--- a/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
+++ b/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
@@ -28,8 +28,8 @@ namespace {
/// Control the emission of .cfi_llvm_set_ra_state, which replaces the
/// deprecated .cfi_negate_ra_state_with_pc [1].
///
-/// The latter is fundamentally unable to express some program orders [2], as the
-/// dwarf 'program' reads functions in a linear scan of their addresses to
+/// The latter is fundamentally unable to express some program orders [2], as
+/// the dwarf 'program' reads functions in a linear scan of their addresses to
/// reconstruct the state of the frame, whereas control flow may enter and exit
/// such regions arbitrarily (such as in hot-cold-split, and shrinkwrapped
/// fucntions), and thus the negate-based cfi is unable to encode the address of
>From d4b0c8cc2b851fed0bc91a8a37b3dc27c466d637 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Tue, 23 Jun 2026 16:16:25 -0700
Subject: [PATCH 05/58] bolt (non-)support
---
bolt/lib/Core/BinaryFunction.cpp | 3 +++
1 file changed, 3 insertions(+)
diff --git a/bolt/lib/Core/BinaryFunction.cpp b/bolt/lib/Core/BinaryFunction.cpp
index 0e538fa48907a..b6ffd73de78ac 100644
--- a/bolt/lib/Core/BinaryFunction.cpp
+++ b/bolt/lib/Core/BinaryFunction.cpp
@@ -2834,6 +2834,7 @@ struct CFISnapshot {
case MCCFIInstruction::OpLabel:
case MCCFIInstruction::OpValOffset:
case MCCFIInstruction::OpNegateRAState:
+ case MCCFIInstruction::OpLLVMSetRAState:
reportFatalUsageError("unsupported CFI opcode");
case MCCFIInstruction::OpLLVMRegisterPair:
case MCCFIInstruction::OpLLVMVectorRegisters:
@@ -2979,6 +2980,7 @@ struct CFISnapshotDiff : public CFISnapshot {
case MCCFIInstruction::OpLabel:
case MCCFIInstruction::OpValOffset:
case MCCFIInstruction::OpNegateRAState:
+ case MCCFIInstruction::OpLLVMSetRAState:
reportFatalUsageError("unsupported CFI opcode");
case MCCFIInstruction::OpLLVMRegisterPair:
case MCCFIInstruction::OpLLVMVectorRegisters:
@@ -3134,6 +3136,7 @@ BinaryFunction::unwindCFIState(int32_t FromState, int32_t ToState,
case MCCFIInstruction::OpLabel:
case MCCFIInstruction::OpValOffset:
case MCCFIInstruction::OpNegateRAState:
+ case MCCFIInstruction::OpLLVMSetRAState:
reportFatalUsageError("unsupported CFI opcode");
case MCCFIInstruction::OpLLVMRegisterPair:
case MCCFIInstruction::OpLLVMVectorRegisters:
>From 408cdbc859be5961f1d1a66683d9d513ea554a1f Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Wed, 24 Jun 2026 10:02:34 -0700
Subject: [PATCH 06/58] xfail on stdlib=apple-libc++ &&
target=.*-apple-.*{{<=27.0}}
---
libunwind/test/ra_sign_state.pass.cpp | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index 2b31ef4000386..7e256316e5a17 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -10,6 +10,10 @@
// REQUIRES: target={{aarch64.*}}
// UNSUPPORTED: target={{.*-windows.*}}
+// The libSystem unwinder does not correctly read UNW_AARCH64_RA_SIGN_STATE, at
+// least through OS version 27.0
+// XFAIL: stdlib=apple-libc++ && target={{.*}}-apple-{{.*}}{{11|12|13|14|15|26|27.0}}
+
#undef NDEBUG
#include "support/func_bounds.h"
#include <assert.h>
>From bf97dc7d7d95e55e3fa4f7efabf235ff8bfc024a Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Wed, 24 Jun 2026 10:11:22 -0700
Subject: [PATCH 07/58] HWCAP_PACA checks for getauxval/elf_aux_info platforms
---
libunwind/test/ra_sign_state.pass.cpp | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index 7e256316e5a17..cbeb5c13694de 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -28,6 +28,9 @@
#if defined(__APPLE__)
#include <sys/sysctl.h>
#endif
+#if defined(_LIBUNWIND_HAVE_GETAUXVAL) || defined(_LIBUNWIND_HAVE_ELF_AUX_INFO)
+#include <sys/auxv.h>
+#endif
// Note: This test requires FEAT_PAuth (and is setup to pass on other targets).
@@ -39,6 +42,19 @@ static bool checkHasPAuth() {
return false;
return has_pauth != 0;
}
+#elif defined(_LIBUNWIND_HAVE_GETAUXVAL)
+static bool checkHasPAuth() {
+ constexpr unsigned long hwcap_paca = (1UL << 30);
+ unsigned long hwcap = getauxval(AT_HWCAP);
+ return (hwcap & hwcap_paca) != 0;
+}
+#elif defined(_LIBUNWIND_HAVE_ELF_AUX_INFO)
+static bool checkHasPAuth() {
+ constexpr unsigned long hwcap_paca = (1UL << 30);
+ unsigned long hwcap = 0;
+ elf_aux_info(AT_HWCAP, &hwcap, sizeof(hwcap));
+ return (hwcap & hwcap_paca) != 0;
+}
#else
static bool checkHasPAuth() {
// TODO: Support other platforms.
>From a2bff648464dcbf4802d1436c7c9047717fe6b1f Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Wed, 24 Jun 2026 10:14:47 -0700
Subject: [PATCH 08/58] tell clang-format to go away
---
libunwind/test/ra_sign_state.pass.cpp | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index cbeb5c13694de..88b8425073fea 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -7,6 +7,8 @@
//
//===----------------------------------------------------------------------===//
+// clang-format-off
+
// REQUIRES: target={{aarch64.*}}
// UNSUPPORTED: target={{.*-windows.*}}
@@ -14,6 +16,8 @@
// least through OS version 27.0
// XFAIL: stdlib=apple-libc++ && target={{.*}}-apple-{{.*}}{{11|12|13|14|15|26|27.0}}
+// clang-format-on
+
#undef NDEBUG
#include "support/func_bounds.h"
#include <assert.h>
>From 1531e7d37c62706be171452353dbc0e1ccd02797 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Wed, 24 Jun 2026 10:23:08 -0700
Subject: [PATCH 09/58] really tell clang-format off
---
libunwind/test/ra_sign_state.pass.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index eb392f2ef46d5..6a9b8cbe62d41 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -7,7 +7,7 @@
//
//===----------------------------------------------------------------------===//
-// clang-format-off
+// clang-format off
// REQUIRES: target={{aarch64.*}}
// UNSUPPORTED: target={{.*-windows.*}}
@@ -16,7 +16,7 @@
// least through OS version 27.0
// XFAIL: stdlib=apple-libc++ && target={{.*}}-apple-{{.*}}{{11|12|13|14|15|26|27.0}}
-// clang-format-on
+// clang-format on
#undef NDEBUG
#include "support/func_bounds.h"
>From f4f205e35841a9d61520dda56a1cdccc1422dbbc Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Wed, 24 Jun 2026 10:23:08 -0700
Subject: [PATCH 10/58] really tell clang-format off
---
libunwind/test/ra_sign_state.pass.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index 88b8425073fea..6b8fb3373565d 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -7,7 +7,7 @@
//
//===----------------------------------------------------------------------===//
-// clang-format-off
+// clang-format off
// REQUIRES: target={{aarch64.*}}
// UNSUPPORTED: target={{.*-windows.*}}
@@ -16,7 +16,7 @@
// least through OS version 27.0
// XFAIL: stdlib=apple-libc++ && target={{.*}}-apple-{{.*}}{{11|12|13|14|15|26|27.0}}
-// clang-format-on
+// clang-format on
#undef NDEBUG
#include "support/func_bounds.h"
>From 9665afc0ef4ca276b8af9c57a38778f3dcfcf262 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Wed, 24 Jun 2026 13:36:59 -0700
Subject: [PATCH 11/58] clang-format reflow the big comment
---
.../lib/Target/AArch64/AArch64PointerAuth.cpp | 24 +++++++++----------
1 file changed, 12 insertions(+), 12 deletions(-)
diff --git a/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp b/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
index 60d352d17b33c..a5624ef70c5c7 100644
--- a/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
+++ b/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
@@ -164,17 +164,17 @@ static void emitAUTCFI(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI,
// DWARF CFI is evaluated linearly over the byte stream, not along control
// flow edges. The toggle semantics of this directive therefore cannot
// faithfully represent the signed/unsigned RA state for all possible CFG
- // paths. The added complexity versus DW_CFA_AARCH64_negate_ra_state is that
- // an unwinder must also reconstruct the PC of the PACI[AB]SPPC in order to
- // verify the signed LR, and that address is derived from the location of this
- // directive in the linear CFI stream.
+ // paths. The added complexity versus DW_CFA_AARCH64_negate_ra_state is
+ // that an unwinder must also reconstruct the PC of the PACI[AB]SPPC in
+ // order to verify the signed LR, and that address is derived from the
+ // location of this directive in the linear CFI stream.
//
- // The correct fix is to use DW_CFA_AARCH64_set_ra_state_with_pc, which sets
- // the RA state and signing address absolutely rather than toggling them. An
- // unwinder that supports this directive can reconstruct the correct state on
- // any CFG path, regardless of how many signing/authenticating pairs exist in
- // the function. However, not all unwinders support this directive, so we
- // cannot rely on it exclusively.
+ // The correct fix is to use DW_CFA_AARCH64_set_ra_state_with_pc, which
+ // sets the RA state and signing address absolutely rather than toggling
+ // them. An unwinder that supports this directive can reconstruct the
+ // correct state on any CFG path, regardless of how many
+ // signing/authenticating pairs exist in the function. However, not all
+ // unwinders support this directive, so we cannot rely on it exclusively.
//
// For unwinders that only support DW_CFA_AARCH64_negate_ra_state_with_pc,
// libunwind exploits a loophole: it records the address at the
@@ -185,8 +185,8 @@ static void emitAUTCFI(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI,
// for the signing site, as long as each function has at most one such
// signing location. That invariant holds today because shrinkwrapping
// does not yet hoist or sink PAuth_LR frame code across CFG join/split
- // points; once it does, we must avoid those transformations on platforms that
- // have this limitation.
+ // points; once it does, we must avoid those transformations on platforms
+ // that have this limitation.
//
// https://github.com/ARM-software/abi-aa/issues/327
// https://github.com/ARM-software/abi-aa/pull/346
>From 708273e49151faf9c3e9bc479ae5cde5e618f47d Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Wed, 24 Jun 2026 14:29:14 -0700
Subject: [PATCH 12/58] user-label-prefix extern C symbol
---
libunwind/test/ra_sign_state.pass.cpp | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index 6b8fb3373565d..8ce0e36dd99a4 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -19,6 +19,7 @@
// clang-format on
#undef NDEBUG
+#include "../src/config.h"
#include "support/func_bounds.h"
#include <assert.h>
#include <inttypes.h>
@@ -106,6 +107,7 @@ __attribute__((noinline)) uint64_t check_vanilla() {
}
__attribute__((naked, target("pauth"))) uint64_t check_negate() {
+ // clang-format off
asm(".cfi_negate_ra_state\n"
"pacibsp\n"
@@ -114,7 +116,7 @@ __attribute__((naked, target("pauth"))) uint64_t check_negate() {
".cfi_offset x29, -16\n"
".cfi_offset x30, -8\n"
- "bl _get_main_ra_sign_state\n"
+ "bl " SYMBOL_NAME(get_main_ra_sign_state) "\n"
"ldp x29, x30, [sp], #16\n"
".cfi_def_cfa_offset 0\n"
@@ -123,6 +125,7 @@ __attribute__((naked, target("pauth"))) uint64_t check_negate() {
".cfi_negate_ra_state\n"
"retab");
+ // clang-format on
}
FUNC_ATTR(main_func) int main(int, char **) {
>From 3c882bb09827368856eece7089a9be5bef0e291e Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jroelofs at gmail.com>
Date: Wed, 24 Jun 2026 14:32:29 -0700
Subject: [PATCH 13/58] s/cfi_set_ra_state/cfi_llvm_set_ra_state/
---
llvm/lib/MC/MCDwarf.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/llvm/lib/MC/MCDwarf.cpp b/llvm/lib/MC/MCDwarf.cpp
index 209fcbf056e12..1b9b100f5b284 100644
--- a/llvm/lib/MC/MCDwarf.cpp
+++ b/llvm/lib/MC/MCDwarf.cpp
@@ -1332,7 +1332,7 @@ void MCCFIInstruction::replaceRegister(unsigned FromReg, unsigned ToReg) {
ReplaceReg(F.MaskRegister);
},
[](LLVMSetRAStateFields &) {
- assert(false && ".cfi_set_ra_state does not have registers");
+ assert(false && ".cfi_llvm_set_ra_state does not have registers");
});
std::visit(Visitor, ExtraFields);
}
>From c2046ff78dfb757085ebaa682fda33ccbcbf8dc3 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Wed, 24 Jun 2026 14:36:23 -0700
Subject: [PATCH 14/58] user-label-prefix in check_set
---
libunwind/test/ra_sign_state.pass.cpp | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index e78513f7e7a42..062b3950af2f3 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -130,6 +130,7 @@ __attribute__((naked, target("pauth"))) uint64_t check_negate() {
#if defined(HAVE_CFI_LLVM_SET_RA_STATE)
__attribute__((naked)) uint64_t check_set() {
+ // clang-format off
asm(".cfi_llvm_set_ra_state 1, 0\n"
"pacibsp\n"
@@ -138,7 +139,7 @@ __attribute__((naked)) uint64_t check_set() {
".cfi_offset x29, -16\n"
".cfi_offset x30, -8\n"
- "bl _get_main_ra_sign_state\n"
+ "bl " SYMBOL_NAME(get_main_ra_sign_state) "\n"
"ldp x29, x30, [sp], #16\n"
".cfi_def_cfa_offset 0\n"
@@ -147,6 +148,7 @@ __attribute__((naked)) uint64_t check_set() {
".cfi_llvm_set_ra_state 0, -20\n"
"retab");
+ // clang-format on
}
#endif
>From 44292e03b67205517c27a20b5d658ea642ae71c7 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Wed, 24 Jun 2026 20:24:25 -0700
Subject: [PATCH 15/58] printf debug
premerge testing fails with:
```
-- Testing: 21 tests, 16 workers --
Testing: 0.. 10.. 20.. 30.. 40.. 50.. 60.. 70.. 80.. 90
FAIL: llvm-libunwind-shared.cfg.in :: ra_sign_state.pass.cpp (21 of 21)
******************** TEST 'llvm-libunwind-shared.cfg.in :: ra_sign_state.pass.cpp' FAILED ********************
Exit Code: 252
Command Output (stdout):
--
# COMPILED WITH
/__w/llvm-project/llvm-project/build/./bin/clang++ /__w/llvm-project/llvm-project/libunwind/test/ra_sign_state.pass.cpp --target=aarch64-unknown-linux-gnu -nostdinc++ -I /__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test-suite-install/include -D_LIBUNWIND_HAVE_GETAUXVAL -funwind-tables -std=c++26 -Werror -Wall -Wctad-maybe-unsupported -Wextra -Wshadow -Wundef -Wunused-template -Wno-unused-command-line-argument -Wno-attributes -Wno-pessimizing-move -Wno-noexcept-type -Wno-atomic-alignment -Wno-reserved-module-identifier -Wdeprecated-copy -Wdeprecated-copy-dtor -Wshift-negative-value -Wno-user-defined-literals -Wno-tautological-compare -Wno-stringop-overread -Wsign-compare -Wunused-variable -Wunused-parameter -Wunreachable-code -Wno-unused-local-typedef -Wno-local-type-template-args -Wno-c++11-extensions -Wno-unknown-pragmas -Wno-pass-failed -Wno-mismatched-new-delete -Wno-redundant-move -Wno-self-move -Wno-nullability-completeness -flax-vector-conversions=none -D_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER -Wuser-defined-warnings -L /__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test-suite-install/lib/aarch64-unknown-linux-gnu -Wl,-rpath,/__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test-suite-install/lib/aarch64-unknown-linux-gnu -lunwind -Wl,--export-dynamic -ldl -latomic -o /__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test/Output/ra_sign_state.pass.cpp.dir/t.tmp.exe
# executed command: /__w/llvm-project/llvm-project/build/./bin/clang++ /__w/llvm-project/llvm-project/libunwind/test/ra_sign_state.pass.cpp --target=aarch64-unknown-linux-gnu -nostdinc++ -I /__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test-suite-install/include -D_LIBUNWIND_HAVE_GETAUXVAL -funwind-tables -std=c++26 -Werror -Wall -Wctad-maybe-unsupported -Wextra -Wshadow -Wundef -Wunused-template -Wno-unused-command-line-argument -Wno-attributes -Wno-pessimizing-move -Wno-noexcept-type -Wno-atomic-alignment -Wno-reserved-module-identifier -Wdeprecated-copy -Wdeprecated-copy-dtor -Wshift-negative-value -Wno-user-defined-literals -Wno-tautological-compare -Wno-stringop-overread -Wsign-compare -Wunused-variable -Wunused-parameter -Wunreachable-code -Wno-unused-local-typedef -Wno-local-type-template-args -Wno-c++11-extensions -Wno-unknown-pragmas -Wno-pass-failed -Wno-mismatched-new-delete -Wno-redundant-move -Wno-self-move -Wno-nullability-completeness -flax-vector-conversions=none -D_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER -Wuser-defined-warnings -L /__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test-suite-install/lib/aarch64-unknown-linux-gnu -Wl,-rpath,/__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test-suite-install/lib/aarch64-unknown-linux-gnu -lunwind -Wl,--export-dynamic -ldl -latomic -o /__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test/Output/ra_sign_state.pass.cpp.dir/t.tmp.exe
# note: command had no output on stdout or stderr
# EXECUTED AS
/usr/bin/python3 /__w/llvm-project/llvm-project/libcxx/utils/run.py --execdir /__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test/Output/ra_sign_state.pass.cpp.dir -- /__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test/Output/ra_sign_state.pass.cpp.dir/t.tmp.exe
# executed command: /usr/bin/python3 /__w/llvm-project/llvm-project/libcxx/utils/run.py --execdir /__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test/Output/ra_sign_state.pass.cpp.dir -- /__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test/Output/ra_sign_state.pass.cpp.dir/t.tmp.exe
# note: command had no output on stdout or stderr
# error: command failed with exit status: 252
--
```
https://github.com/llvm/llvm-project/actions/runs/28131005033/job/83306950690?pr=205442
---
libunwind/test/ra_sign_state.pass.cpp | 19 ++++++++++---------
1 file changed, 10 insertions(+), 9 deletions(-)
diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index 062b3950af2f3..cb83a4cfd2937 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -94,19 +94,20 @@ _Unwind_Reason_Code frame_handler(struct _Unwind_Context *ctx, void *arg) {
return _URC_NO_REASON;
}
-__attribute__((noinline)) extern "C" uintptr_t get_main_ra_sign_state() {
+__attribute__((noinline)) extern "C" uintptr_t get_main_ra_sign_state(const char *note) {
+ printf("check: %s\n", note);
uint64_t sign_state = -1;
_Unwind_Backtrace(frame_handler, &sign_state);
- printf("UNW_AARCH64_RA_SIGN_STATE = %" PRIu64 "\n", sign_state);
+ printf("UNW_AARCH64_RA_SIGN_STATE for %s = %" PRIu64 "\n", note, sign_state);
assert((sign_state & 0x3) == sign_state);
return sign_state;
}
-__attribute__((noinline)) uint64_t check_vanilla() {
- return get_main_ra_sign_state();
+__attribute__((noinline)) uint64_t check_vanilla(const char *note) {
+ return get_main_ra_sign_state(note);
}
-__attribute__((naked, target("pauth"))) uint64_t check_negate() {
+__attribute__((naked, target("pauth"))) uint64_t check_negate(const char *note) {
// clang-format off
asm(".cfi_negate_ra_state\n"
"pacibsp\n"
@@ -129,7 +130,7 @@ __attribute__((naked, target("pauth"))) uint64_t check_negate() {
}
#if defined(HAVE_CFI_LLVM_SET_RA_STATE)
-__attribute__((naked)) uint64_t check_set() {
+__attribute__((naked)) uint64_t check_set(const char *note) {
// clang-format off
asm(".cfi_llvm_set_ra_state 1, 0\n"
"pacibsp\n"
@@ -155,7 +156,7 @@ __attribute__((naked)) uint64_t check_set() {
FUNC_ATTR(main_func) int main(int, char **) {
uint64_t ret;
- ret = check_vanilla();
+ ret = check_vanilla("check_vanilla");
#if defined(__PTRAUTH__) || __has_feature(ptrauth_calls)
assert(ret == 1 || ret == 2);
#else
@@ -167,11 +168,11 @@ FUNC_ATTR(main_func) int main(int, char **) {
return 0;
}
- ret = check_negate();
+ ret = check_negate("check_negate");
assert(ret == 1);
#if defined(HAVE_CFI_LLVM_SET_RA_STATE)
- ret = check_set();
+ ret = check_set("check_set");
assert(ret == 1);
#endif
>From a9c26c85267293b5949b7d09792af7f1a556e05e Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Thu, 25 Jun 2026 14:05:02 -0700
Subject: [PATCH 16/58] fix XFAIL regex
---
libunwind/test/ra_sign_state.pass.cpp | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index 8ce0e36dd99a4..e6349a83b583a 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -14,7 +14,8 @@
// The libSystem unwinder does not correctly read UNW_AARCH64_RA_SIGN_STATE, at
// least through OS version 27.0
-// XFAIL: stdlib=apple-libc++ && target={{.*}}-apple-{{.*}}{{11|12|13|14|15|26|27.0}}
+// XFAIL: stdlib=apple-libc++ && target={{.*}}-apple-{{.*}}{{(11|12|13|14|15|26)(\.\d+)?}}
+// XFAIL: stdlib=apple-libc++ && target={{.*}}-apple-{{.*}}27.0
// clang-format on
>From 4a487f5b48fbabcaa3bf4428a3388b35ffe13c12 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Wed, 24 Jun 2026 20:24:25 -0700
Subject: [PATCH 17/58] printf debug
premerge testing fails with:
```
-- Testing: 21 tests, 16 workers --
Testing: 0.. 10.. 20.. 30.. 40.. 50.. 60.. 70.. 80.. 90
FAIL: llvm-libunwind-shared.cfg.in :: ra_sign_state.pass.cpp (21 of 21)
******************** TEST 'llvm-libunwind-shared.cfg.in :: ra_sign_state.pass.cpp' FAILED ********************
Exit Code: 252
Command Output (stdout):
--
# COMPILED WITH
/__w/llvm-project/llvm-project/build/./bin/clang++ /__w/llvm-project/llvm-project/libunwind/test/ra_sign_state.pass.cpp --target=aarch64-unknown-linux-gnu -nostdinc++ -I /__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test-suite-install/include -D_LIBUNWIND_HAVE_GETAUXVAL -funwind-tables -std=c++26 -Werror -Wall -Wctad-maybe-unsupported -Wextra -Wshadow -Wundef -Wunused-template -Wno-unused-command-line-argument -Wno-attributes -Wno-pessimizing-move -Wno-noexcept-type -Wno-atomic-alignment -Wno-reserved-module-identifier -Wdeprecated-copy -Wdeprecated-copy-dtor -Wshift-negative-value -Wno-user-defined-literals -Wno-tautological-compare -Wno-stringop-overread -Wsign-compare -Wunused-variable -Wunused-parameter -Wunreachable-code -Wno-unused-local-typedef -Wno-local-type-template-args -Wno-c++11-extensions -Wno-unknown-pragmas -Wno-pass-failed -Wno-mismatched-new-delete -Wno-redundant-move -Wno-self-move -Wno-nullability-completeness -flax-vector-conversions=none -D_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER -Wuser-defined-warnings -L /__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test-suite-install/lib/aarch64-unknown-linux-gnu -Wl,-rpath,/__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test-suite-install/lib/aarch64-unknown-linux-gnu -lunwind -Wl,--export-dynamic -ldl -latomic -o /__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test/Output/ra_sign_state.pass.cpp.dir/t.tmp.exe
# executed command: /__w/llvm-project/llvm-project/build/./bin/clang++ /__w/llvm-project/llvm-project/libunwind/test/ra_sign_state.pass.cpp --target=aarch64-unknown-linux-gnu -nostdinc++ -I /__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test-suite-install/include -D_LIBUNWIND_HAVE_GETAUXVAL -funwind-tables -std=c++26 -Werror -Wall -Wctad-maybe-unsupported -Wextra -Wshadow -Wundef -Wunused-template -Wno-unused-command-line-argument -Wno-attributes -Wno-pessimizing-move -Wno-noexcept-type -Wno-atomic-alignment -Wno-reserved-module-identifier -Wdeprecated-copy -Wdeprecated-copy-dtor -Wshift-negative-value -Wno-user-defined-literals -Wno-tautological-compare -Wno-stringop-overread -Wsign-compare -Wunused-variable -Wunused-parameter -Wunreachable-code -Wno-unused-local-typedef -Wno-local-type-template-args -Wno-c++11-extensions -Wno-unknown-pragmas -Wno-pass-failed -Wno-mismatched-new-delete -Wno-redundant-move -Wno-self-move -Wno-nullability-completeness -flax-vector-conversions=none -D_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER -Wuser-defined-warnings -L /__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test-suite-install/lib/aarch64-unknown-linux-gnu -Wl,-rpath,/__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test-suite-install/lib/aarch64-unknown-linux-gnu -lunwind -Wl,--export-dynamic -ldl -latomic -o /__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test/Output/ra_sign_state.pass.cpp.dir/t.tmp.exe
# note: command had no output on stdout or stderr
# EXECUTED AS
/usr/bin/python3 /__w/llvm-project/llvm-project/libcxx/utils/run.py --execdir /__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test/Output/ra_sign_state.pass.cpp.dir -- /__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test/Output/ra_sign_state.pass.cpp.dir/t.tmp.exe
# executed command: /usr/bin/python3 /__w/llvm-project/llvm-project/libcxx/utils/run.py --execdir /__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test/Output/ra_sign_state.pass.cpp.dir -- /__w/llvm-project/llvm-project/build/runtimes/runtimes-bins/libunwind/test/Output/ra_sign_state.pass.cpp.dir/t.tmp.exe
# note: command had no output on stdout or stderr
# error: command failed with exit status: 252
--
```
https://github.com/llvm/llvm-project/actions/runs/28131005033/job/83306950690?pr=205442
---
libunwind/test/ra_sign_state.pass.cpp | 15 ++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)
diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index e6349a83b583a..d589a2a787bc0 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -95,19 +95,20 @@ _Unwind_Reason_Code frame_handler(struct _Unwind_Context *ctx, void *arg) {
return _URC_NO_REASON;
}
-__attribute__((noinline)) extern "C" uintptr_t get_main_ra_sign_state() {
+__attribute__((noinline)) extern "C" uintptr_t get_main_ra_sign_state(const char *note) {
+ printf("check: %s\n", note);
uint64_t sign_state = -1;
_Unwind_Backtrace(frame_handler, &sign_state);
- printf("UNW_AARCH64_RA_SIGN_STATE = %" PRIu64 "\n", sign_state);
+ printf("UNW_AARCH64_RA_SIGN_STATE for %s = %" PRIu64 "\n", note, sign_state);
assert((sign_state & 0x3) == sign_state);
return sign_state;
}
-__attribute__((noinline)) uint64_t check_vanilla() {
- return get_main_ra_sign_state();
+__attribute__((noinline)) uint64_t check_vanilla(const char *note) {
+ return get_main_ra_sign_state(note);
}
-__attribute__((naked, target("pauth"))) uint64_t check_negate() {
+__attribute__((naked, target("pauth"))) uint64_t check_negate(const char *note) {
// clang-format off
asm(".cfi_negate_ra_state\n"
"pacibsp\n"
@@ -132,7 +133,7 @@ __attribute__((naked, target("pauth"))) uint64_t check_negate() {
FUNC_ATTR(main_func) int main(int, char **) {
uint64_t ret;
- ret = check_vanilla();
+ ret = check_vanilla("check_vanilla");
#if defined(__PTRAUTH__) || __has_feature(ptrauth_calls)
assert(ret == 1 || ret == 2);
#else
@@ -144,7 +145,7 @@ FUNC_ATTR(main_func) int main(int, char **) {
return 0;
}
- ret = check_negate();
+ ret = check_negate("check_negate");
assert(ret == 1);
printf("success\n");
>From 8354ca738a056975a66d7c61bc1997d55e68e36c Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Thu, 25 Jun 2026 14:17:20 -0700
Subject: [PATCH 18/58] clang-format
---
libunwind/test/ra_sign_state.pass.cpp | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index d589a2a787bc0..9732f85f8a84f 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -95,7 +95,8 @@ _Unwind_Reason_Code frame_handler(struct _Unwind_Context *ctx, void *arg) {
return _URC_NO_REASON;
}
-__attribute__((noinline)) extern "C" uintptr_t get_main_ra_sign_state(const char *note) {
+__attribute__((noinline)) extern "C" uintptr_t
+get_main_ra_sign_state(const char *note) {
printf("check: %s\n", note);
uint64_t sign_state = -1;
_Unwind_Backtrace(frame_handler, &sign_state);
@@ -108,7 +109,8 @@ __attribute__((noinline)) uint64_t check_vanilla(const char *note) {
return get_main_ra_sign_state(note);
}
-__attribute__((naked, target("pauth"))) uint64_t check_negate(const char *note) {
+__attribute__((naked, target("pauth"))) uint64_t
+check_negate(const char *note) {
// clang-format off
asm(".cfi_negate_ra_state\n"
"pacibsp\n"
>From b891ff00eefa771f73248debec9d27f76a582b00 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Thu, 25 Jun 2026 16:09:41 -0700
Subject: [PATCH 19/58] fix .cfi_llvm_set_ra_state 2, Label round-tripping
---
.../AArch64/AsmParser/AArch64AsmParser.cpp | 16 +++++++++---
llvm/test/MC/AArch64/cfi_llvm_set_ra_state.s | 26 ++++++++++++++-----
2 files changed, 33 insertions(+), 9 deletions(-)
diff --git a/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp b/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
index 5cbce8bf9527f..383ea8b1c08c3 100644
--- a/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
+++ b/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
@@ -7762,18 +7762,28 @@ bool AArch64AsmParser::parseDirectiveCFINegateRAStateWithPC() {
/// parseDirectiveCFILLVMSetRAState
/// ::= .cfi_llvm_set_ra_state ra_state, offset
+/// ::= .cfi_llvm_set_ra_state ra_state, pac_sym
bool AArch64AsmParser::parseDirectiveCFILLVMSetRAState() {
int64_t State;
if (getParser().parseAbsoluteExpression(State))
return true;
if (parseToken(AsmToken::Comma, "expected ','"))
return true;
- int64_t Offset;
- if (getParser().parseAbsoluteExpression(Offset))
+ const MCExpr *Expr;
+ SMLoc ExprLoc = getLoc();
+ if (getParser().parseExpression(Expr))
return true;
if (parseEOL())
return true;
- getStreamer().emitCFILLVMSetRAState((unsigned)State, Offset);
+ if (auto *SymRef = dyn_cast<MCSymbolRefExpr>(Expr)) {
+ getStreamer().emitCFILLVMSetRAState(
+ (unsigned)State, const_cast<MCSymbol *>(&SymRef->getSymbol()));
+ } else if (auto *CE = dyn_cast<MCConstantExpr>(Expr)) {
+ getStreamer().emitCFILLVMSetRAState((unsigned)State, CE->getValue());
+ } else {
+ return Error(ExprLoc,
+ "expected an integer offset or a symbol for .cfi_llvm_set_ra_state");
+ }
return false;
}
diff --git a/llvm/test/MC/AArch64/cfi_llvm_set_ra_state.s b/llvm/test/MC/AArch64/cfi_llvm_set_ra_state.s
index cba21103377e5..f7c48cecbec6a 100644
--- a/llvm/test/MC/AArch64/cfi_llvm_set_ra_state.s
+++ b/llvm/test/MC/AArch64/cfi_llvm_set_ra_state.s
@@ -1,6 +1,6 @@
-# RUN: llvm-mc -triple aarch64-pc-linux-gnu %s -filetype=asm -o - | FileCheck %s --check-prefix=ASM
+# RUN: llvm-mc -triple aarch64-pc-linux-gnu -mattr=+pauth-lr %s -filetype=asm -o - | FileCheck %s --check-prefix=ASM
-# RUN: llvm-mc -triple aarch64-pc-linux-gnu %s -filetype=obj -o %t.o
+# RUN: llvm-mc -triple aarch64-pc-linux-gnu -mattr=+pauth-lr %s -filetype=obj -o %t.o
# RUN: llvm-dwarfdump --eh-frame %t.o | FileCheck %s --check-prefix=DWARF
# RUN: llvm-readobj --hex-dump=.eh_frame %t.o | FileCheck %s --check-prefix=HEX
@@ -8,24 +8,38 @@
.cfi_llvm_set_ra_state 1, 0
.cfi_llvm_set_ra_state 2, 0
.cfi_llvm_set_ra_state 0, -4
+ .cfi_llvm_set_ra_state 2, LSigningInstrAfter
+LSigningInstrBefore:
+ nop
+ nop
+LSigningInstrAfter:
+ .cfi_llvm_set_ra_state 2, LSigningInstrBefore
.cfi_endproc
# ASM: .cfi_startproc
# ASM-NEXT: .cfi_llvm_set_ra_state 1, 0
# ASM-NEXT: .cfi_llvm_set_ra_state 2, 0
# ASM-NEXT: .cfi_llvm_set_ra_state 0, -4
+# ASM-NEXT: .cfi_llvm_set_ra_state 2, LSigningInstrAfter
+# ASM: .cfi_llvm_set_ra_state 2, LSigningInstrBefore
# ASM-NEXT: .cfi_endproc
# DWARF: DW_CFA_AARCH64_set_ra_state: 1 0
# DWARF-NEXT: DW_CFA_AARCH64_set_ra_state: 2 0
# DWARF-NEXT: DW_CFA_AARCH64_set_ra_state: 0 -4
+# DWARF-NEXT: DW_CFA_AARCH64_set_ra_state: 2 8
+# DWARF: DW_CFA_AARCH64_set_ra_state: 2 -8
# Verify the raw encoding:
#
# opcode 0x2b, then ULEB128(state), then SLEB128(offset).
#
-# state=1, offset= 0 => 2b 01 00
-# state=2, offset= 0 => 2b 02 00
-# state=0, offset=-4 => 2b 00 7c
+# state=1, offset= 0 => 2b 01 00
+# state=2, offset= 0 => 2b 02 00
+# state=0, offset= -4 => 2b 00 7c
+# state=2, offset= +8 => 2b 02 08
+# (advance_loc 8) => 48
+# state=2, offset= -8 => 2b 02 78
#
-# HEX: 002b0100 2b02002b 007c
+# HEX: 002b0100 2b02002b 007c2b02
+# HEX: 08482b02 78
>From 5bd524cc52403cd29c5f52e09e62a5ccba6004d3 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Thu, 25 Jun 2026 16:10:45 -0700
Subject: [PATCH 20/58] clang-format
---
llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp b/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
index 383ea8b1c08c3..45ca82f475a97 100644
--- a/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
+++ b/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
@@ -7781,8 +7781,9 @@ bool AArch64AsmParser::parseDirectiveCFILLVMSetRAState() {
} else if (auto *CE = dyn_cast<MCConstantExpr>(Expr)) {
getStreamer().emitCFILLVMSetRAState((unsigned)State, CE->getValue());
} else {
- return Error(ExprLoc,
- "expected an integer offset or a symbol for .cfi_llvm_set_ra_state");
+ return Error(
+ ExprLoc,
+ "expected an integer offset or a symbol for .cfi_llvm_set_ra_state");
}
return false;
}
>From a3ae8e496cd5aa42283228506d74f05a5f702405 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Fri, 26 Jun 2026 10:55:35 -0700
Subject: [PATCH 21/58] static
---
libunwind/test/ra_sign_state.pass.cpp | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index 9732f85f8a84f..e25a1c12720c9 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -70,7 +70,8 @@ static bool checkHasPAuth() {
FUNC_BOUNDS_DECL(main_func);
-_Unwind_Reason_Code frame_handler(struct _Unwind_Context *ctx, void *arg) {
+static _Unwind_Reason_Code frame_handler(struct _Unwind_Context *ctx,
+ void *arg) {
uint64_t ra_sign_state =
(uint64_t)_Unwind_GetGR(ctx, UNW_AARCH64_RA_SIGN_STATE);
@@ -105,11 +106,11 @@ get_main_ra_sign_state(const char *note) {
return sign_state;
}
-__attribute__((noinline)) uint64_t check_vanilla(const char *note) {
+__attribute__((noinline)) static uint64_t check_vanilla(const char *note) {
return get_main_ra_sign_state(note);
}
-__attribute__((naked, target("pauth"))) uint64_t
+__attribute__((naked, target("pauth"))) static uint64_t
check_negate(const char *note) {
// clang-format off
asm(".cfi_negate_ra_state\n"
>From 65ac137bf5173e26e1f394a78da0f437a41e08e5 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Fri, 26 Jun 2026 10:56:09 -0700
Subject: [PATCH 22/58] _LIBUNWIND_TARGET_AARCH64_AUTHENTICATED_UNWINDING
---
libunwind/test/ra_sign_state.pass.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index e25a1c12720c9..cea5117e09c61 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -87,7 +87,7 @@ static _Unwind_Reason_Code frame_handler(struct _Unwind_Context *ctx,
return _URC_END_OF_STACK;
}
-#if defined(__PTRAUTH__) || __has_feature(ptrauth_calls)
+#if defined(_LIBUNWIND_TARGET_AARCH64_AUTHENTICATED_UNWINDING)
assert(ra_sign_state == 1);
#else
assert(ra_sign_state == 0);
@@ -137,7 +137,7 @@ FUNC_ATTR(main_func) int main(int, char **) {
uint64_t ret;
ret = check_vanilla("check_vanilla");
-#if defined(__PTRAUTH__) || __has_feature(ptrauth_calls)
+#if defined(_LIBUNWIND_TARGET_AARCH64_AUTHENTICATED_UNWINDING)
assert(ret == 1 || ret == 2);
#else
assert(ret == 0);
>From a6a4939d6e502d466a826c1ac5828237cb3c47bb Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Fri, 26 Jun 2026 10:57:35 -0700
Subject: [PATCH 23/58] ra_sign_state == 2
---
libunwind/test/ra_sign_state.pass.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index cea5117e09c61..2244cddca0786 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -88,7 +88,7 @@ static _Unwind_Reason_Code frame_handler(struct _Unwind_Context *ctx,
}
#if defined(_LIBUNWIND_TARGET_AARCH64_AUTHENTICATED_UNWINDING)
- assert(ra_sign_state == 1);
+ assert(ra_sign_state == 1 || ra_sign_state == 2);
#else
assert(ra_sign_state == 0);
#endif
>From 66dc3ab7a26677d1c976e3c524aa34c6649b707b Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Fri, 26 Jun 2026 11:08:26 -0700
Subject: [PATCH 24/58] rm dead PACSym param
---
llvm/lib/Target/AArch64/AArch64PointerAuth.cpp | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp b/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
index a5624ef70c5c7..0d651b2ff90bd 100644
--- a/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
+++ b/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
@@ -145,7 +145,7 @@ static void emitPACCFI(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI,
}
static void emitAUTCFI(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI,
- bool EmitCFI, MCSymbol *PACSym) {
+ bool EmitCFI) {
if (!EmitCFI)
return;
@@ -334,7 +334,7 @@ void AArch64PointerAuthImpl::authenticateLR(
emitEpiloguePACSymOffsetIntoReg(*TII, MBB, MBBI, DL, PACSym,
AArch64::X15);
- emitAUTCFI(MBB, MBBI, EmitAsyncCFI, PACSym);
+ emitAUTCFI(MBB, MBBI, EmitAsyncCFI);
unsigned AutOpc = UseBKey ? AArch64::AUTIB171615 : AArch64::AUTIA171615;
BuildMI(MBB, MBBI, DL, TII->get(AutOpc))
.setMIFlag(MachineInstr::FrameDestroy);
@@ -351,7 +351,7 @@ void AArch64PointerAuthImpl::authenticateLR(
BuildMI(MBB, MBBI, DL, TII->get(AArch64::PACM))
.setMIFlag(MachineInstr::FrameDestroy);
- emitAUTCFI(MBB, MBBI, EmitAsyncCFI, PACSym);
+ emitAUTCFI(MBB, MBBI, EmitAsyncCFI);
unsigned AutOpc = UseBKey ? AArch64::AUTIB1716 : AArch64::AUTIA1716;
BuildMI(MBB, MBBI, DL, TII->get(AutOpc))
.setMIFlag(MachineInstr::FrameDestroy);
@@ -359,7 +359,7 @@ void AArch64PointerAuthImpl::authenticateLR(
unsigned AutOpc = UseBKey ? AArch64::AUTIB1716 : AArch64::AUTIA1716;
BuildMI(MBB, MBBI, DL, TII->get(AutOpc))
.setMIFlag(MachineInstr::FrameDestroy);
- emitAUTCFI(MBB, MBBI, EmitAsyncCFI, PACSym);
+ emitAUTCFI(MBB, MBBI, EmitAsyncCFI);
}
BuildMI(MBB, MBBI, DL, TII->get(AArch64::ORRXrs), AArch64::LR)
@@ -395,7 +395,7 @@ void AArch64PointerAuthImpl::authenticateLR(
if (MFnI->branchProtectionPAuthLR() && Subtarget->hasPAuthLR()) {
assert(PACSym && "No PAC instruction to refer to");
- emitAUTCFI(MBB, MBBI, EmitAsyncCFI, PACSym);
+ emitAUTCFI(MBB, MBBI, EmitAsyncCFI);
BuildMI(MBB, MBBI, DL,
TII->get(UseBKey ? AArch64::AUTIBSPPCi : AArch64::AUTIASPPCi))
.addSym(PACSym)
@@ -407,13 +407,13 @@ void AArch64PointerAuthImpl::authenticateLR(
BuildMI(MBB, MBBI, DL, TII->get(AArch64::PACM))
.setMIFlag(MachineInstr::FrameDestroy);
- emitAUTCFI(MBB, MBBI, EmitAsyncCFI, PACSym);
+ emitAUTCFI(MBB, MBBI, EmitAsyncCFI);
}
BuildMI(MBB, MBBI, DL,
TII->get(UseBKey ? AArch64::AUTIBSP : AArch64::AUTIASP))
.setMIFlag(MachineInstr::FrameDestroy);
if (!MFnI->branchProtectionPAuthLR())
- emitAUTCFI(MBB, MBBI, EmitAsyncCFI, nullptr);
+ emitAUTCFI(MBB, MBBI, EmitAsyncCFI);
}
if (NeedsWinCFI) {
>From 10458b312a7a9464334787ad7ef1246ca2c70a39 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Sat, 27 Jun 2026 11:06:22 -0700
Subject: [PATCH 25/58] additional printf debug. revert me
---
libunwind/test/ra_sign_state.pass.cpp | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index def4c14f9475f..5a1909be25414 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -72,10 +72,16 @@ FUNC_BOUNDS_DECL(main_func);
static _Unwind_Reason_Code frame_handler(struct _Unwind_Context *ctx,
void *arg) {
+ printf("frame_handler\n");
uint64_t ra_sign_state =
(uint64_t)_Unwind_GetGR(ctx, UNW_AARCH64_RA_SIGN_STATE);
+ printf("ra_sign_state = %llu\n", ra_sign_state);
+
uintptr_t ip = _Unwind_GetIP(ctx);
+
+ printf("ip = 0x%llx\n", ip);
+
if (ip >= (uintptr_t)FUNC_START(main_func) &&
ip < (uintptr_t)FUNC_END(main_func)) {
@@ -158,6 +164,8 @@ __attribute__((naked)) uint64_t check_set(const char *note) {
#endif
FUNC_ATTR(main_func) int main(int, char **) {
+ printf("ra_sign_state.pass.cpp\n");
+
uint64_t ret;
ret = check_vanilla("check_vanilla");
>From ca23e42af4e869a828a6e344d20913ad645fe8ba Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Mon, 29 Jun 2026 10:35:53 -0700
Subject: [PATCH 26/58] fix printf debug
---
libunwind/test/ra_sign_state.pass.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index 5a1909be25414..8d926198ff63c 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -80,7 +80,7 @@ static _Unwind_Reason_Code frame_handler(struct _Unwind_Context *ctx,
uintptr_t ip = _Unwind_GetIP(ctx);
- printf("ip = 0x%llx\n", ip);
+ printf("ip = 0x%lx\n", ip);
if (ip >= (uintptr_t)FUNC_START(main_func) &&
ip < (uintptr_t)FUNC_END(main_func)) {
>From 44a942b49d31c67386c7f4d032d1fec1b85a2e83 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Mon, 29 Jun 2026 12:12:44 -0700
Subject: [PATCH 27/58] more debug print fixing
---
libunwind/test/ra_sign_state.pass.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index 8d926198ff63c..6f8e75a0aff1a 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -76,7 +76,7 @@ static _Unwind_Reason_Code frame_handler(struct _Unwind_Context *ctx,
uint64_t ra_sign_state =
(uint64_t)_Unwind_GetGR(ctx, UNW_AARCH64_RA_SIGN_STATE);
- printf("ra_sign_state = %llu\n", ra_sign_state);
+ printf("ra_sign_state = 0x%" PRIx64 "\n", ra_sign_state);
uintptr_t ip = _Unwind_GetIP(ctx);
>From f88ee0f1a212f11ccb27580f5496163fc11a14d1 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Tue, 30 Jun 2026 11:07:46 -0700
Subject: [PATCH 28/58] s/cfi_llvm_set_ra_state/cfi_set_ra_state/g
---
libunwind/test/CMakeLists.txt | 18 ++--
libunwind/test/ra_sign_state.pass.cpp | 8 +-
llvm/include/llvm/MC/MCDwarf.h | 4 +-
.../CodeGen/AsmPrinter/AsmPrinterDwarf.cpp | 8 +-
llvm/lib/CodeGen/MIRParser/MILexer.cpp | 2 +-
llvm/lib/CodeGen/MIRParser/MILexer.h | 2 +-
llvm/lib/CodeGen/MIRParser/MIParser.cpp | 6 +-
llvm/lib/MC/MCAsmStreamer.cpp | 4 +-
llvm/lib/MC/MCDwarf.cpp | 2 +-
.../lib/Target/AArch64/AArch64PointerAuth.cpp | 8 +-
.../AArch64/AsmParser/AArch64AsmParser.cpp | 8 +-
.../MCTargetDesc/AArch64AsmBackend.cpp | 2 +-
.../AArch64/pauth-lr-tail-call-fpdiff.ll | 96 +++++++++----------
.../AArch64/sign-return-address-pauth-lr.ll | 70 +++++++-------
.../sign-return-address-pauthlr-slh.ll | 8 +-
.../CodeGen/AArch64/sign-return-address.ll | 58 +++++------
.../test/CodeGen/AArch64/swifttail-ptrauth.ll | 36 +++----
...nkwrap.s => cfi_set_ra_state-shrinkwrap.s} | 14 +--
...llvm_set_ra_state.s => cfi_set_ra_state.s} | 20 ++--
.../MC/AArch64/directives-case_insensitive.s | 4 +-
20 files changed, 191 insertions(+), 187 deletions(-)
rename llvm/test/MC/AArch64/{cfi_llvm_set_ra_state-shrinkwrap.s => cfi_set_ra_state-shrinkwrap.s} (94%)
rename llvm/test/MC/AArch64/{cfi_llvm_set_ra_state.s => cfi_set_ra_state.s} (72%)
diff --git a/libunwind/test/CMakeLists.txt b/libunwind/test/CMakeLists.txt
index 5dbfb2d93c7e6..94ccbcc203d2c 100644
--- a/libunwind/test/CMakeLists.txt
+++ b/libunwind/test/CMakeLists.txt
@@ -32,21 +32,21 @@ pythonize_bool(LIBUNWIND_ENABLE_GCS)
pythonize_bool(LIBUNWIND_ENABLE_THREADS)
pythonize_bool(LIBUNWIND_USES_ARM_EHABI)
-file(WRITE "${CMAKE_BINARY_DIR}/check_cfi_llvm_set_ra_state.s" "
+file(WRITE "${CMAKE_BINARY_DIR}/check_cfi_set_ra_state.s" "
.text
- .global _test_cfi_llvm_set_ra_state
-_test_cfi_llvm_set_ra_state:
+ .global _test_cfi_set_ra_state
+_test_cfi_set_ra_state:
.cfi_startproc
- .cfi_llvm_set_ra_state 0, 0
+ .cfi_set_ra_state 0, 0
ret
.cfi_endproc
")
-try_compile(HAVE_CFI_LLVM_SET_RA_STATE
- "${CMAKE_BINARY_DIR}/check_cfi_llvm_set_ra_state"
- SOURCES "${CMAKE_BINARY_DIR}/check_cfi_llvm_set_ra_state.s"
+try_compile(HAVE_CFI_SET_RA_STATE
+ "${CMAKE_BINARY_DIR}/check_cfi_set_ra_state"
+ SOURCES "${CMAKE_BINARY_DIR}/check_cfi_set_ra_state.s"
)
-if(HAVE_CFI_LLVM_SET_RA_STATE)
- add_compile_definitions(HAVE_CFI_LLVM_SET_RA_STATE=1)
+if(HAVE_CFI_SET_RA_STATE)
+ add_compile_definitions(HAVE_CFI_SET_RA_STATE=1)
endif()
set(AUTO_GEN_COMMENT "## Autogenerated by libunwind configuration.\n# Do not edit!")
diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index 6f8e75a0aff1a..23e9850ba499c 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -139,10 +139,10 @@ check_negate(const char *note) {
// clang-format on
}
-#if defined(HAVE_CFI_LLVM_SET_RA_STATE)
+#if defined(HAVE_CFI_SET_RA_STATE)
__attribute__((naked)) uint64_t check_set(const char *note) {
// clang-format off
- asm(".cfi_llvm_set_ra_state 1, 0\n"
+ asm(".cfi_set_ra_state 1, 0\n"
"pacibsp\n"
"stp x29, x30, [sp, #-16]!\n"
@@ -157,7 +157,7 @@ __attribute__((naked)) uint64_t check_set(const char *note) {
".cfi_restore x29\n"
".cfi_restore x30\n"
- ".cfi_llvm_set_ra_state 0, -20\n"
+ ".cfi_set_ra_state 0, -20\n"
"retab");
// clang-format on
}
@@ -183,7 +183,7 @@ FUNC_ATTR(main_func) int main(int, char **) {
ret = check_negate("check_negate");
assert(ret == 1);
-#if defined(HAVE_CFI_LLVM_SET_RA_STATE)
+#if defined(HAVE_CFI_SET_RA_STATE)
ret = check_set("check_set");
assert(ret == 1);
#endif
diff --git a/llvm/include/llvm/MC/MCDwarf.h b/llvm/include/llvm/MC/MCDwarf.h
index c4224f2ecacbc..b570a9659f108 100644
--- a/llvm/include/llvm/MC/MCDwarf.h
+++ b/llvm/include/llvm/MC/MCDwarf.h
@@ -703,7 +703,7 @@ class MCCFIInstruction {
return {OpNegateRAStateWithPC, L, CommonFields{}, Loc};
}
- /// .cfi_llvm_set_ra_state AArch64 set RA sign state,
+ /// .cfi_set_ra_state AArch64 set RA sign state,
// with a symbolic offset to the signing instruction.
static MCCFIInstruction createLLVMSetRAState(MCSymbol *L, unsigned State,
MCSymbol *PACSym = nullptr,
@@ -711,7 +711,7 @@ class MCCFIInstruction {
return {OpLLVMSetRAState, L, LLVMSetRAStateFields{State, PACSym, 0}, Loc};
}
- /// .cfi_llvm_set_ra_state AArch64 set RA sign state,
+ /// .cfi_set_ra_state AArch64 set RA sign state,
/// with a pre-computed factored offset to the signing instruction.
static MCCFIInstruction createLLVMSetRAState(MCSymbol *L, unsigned State,
int64_t Offset, SMLoc Loc = {}) {
diff --git a/llvm/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp b/llvm/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp
index 6dad244ad1cfc..01a1bbabf02a2 100644
--- a/llvm/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp
+++ b/llvm/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp
@@ -239,8 +239,12 @@ void AsmPrinter::emitCFIInstruction(const MCCFIInstruction &Inst) const {
OutStreamer->emitCFINegateRAStateWithPC(Loc);
break;
case MCCFIInstruction::OpLLVMSetRAState: {
- OutStreamer->emitCFILLVMSetRAState(Inst.getRASignState(),
- Inst.getRASignSymbol(), Loc);
+ if (MCSymbol *Symbol = Inst.getRASignSymbol())
+ OutStreamer->emitCFILLVMSetRAState(Inst.getRASignState(),
+ Symbol, Loc);
+ else
+ OutStreamer->emitCFILLVMSetRAState(Inst.getRASignState(),
+ Inst.getRASignOffset(), Loc);
break;
}
case MCCFIInstruction::OpSameValue:
diff --git a/llvm/lib/CodeGen/MIRParser/MILexer.cpp b/llvm/lib/CodeGen/MIRParser/MILexer.cpp
index 958e5a3e682c0..e06384507effb 100644
--- a/llvm/lib/CodeGen/MIRParser/MILexer.cpp
+++ b/llvm/lib/CodeGen/MIRParser/MILexer.cpp
@@ -242,7 +242,7 @@ static MIToken::TokenKind getIdentifierKind(StringRef Identifier) {
MIToken::kw_cfi_aarch64_negate_ra_sign_state)
.Case("negate_ra_sign_state_with_pc",
MIToken::kw_cfi_aarch64_negate_ra_sign_state_with_pc)
- .Case("llvm_set_ra_state", MIToken::kw_cfi_llvm_set_ra_state)
+ .Case("llvm_set_ra_state", MIToken::kw_cfi_set_ra_state)
.Case("llvm_register_pair", MIToken::kw_cfi_llvm_register_pair)
.Case("llvm_vector_registers", MIToken::kw_cfi_llvm_vector_registers)
.Case("llvm_vector_offset", MIToken::kw_cfi_llvm_vector_offset)
diff --git a/llvm/lib/CodeGen/MIRParser/MILexer.h b/llvm/lib/CodeGen/MIRParser/MILexer.h
index 02af892d12ad6..685685a98a43c 100644
--- a/llvm/lib/CodeGen/MIRParser/MILexer.h
+++ b/llvm/lib/CodeGen/MIRParser/MILexer.h
@@ -99,7 +99,7 @@ struct MIToken {
kw_cfi_window_save,
kw_cfi_aarch64_negate_ra_sign_state,
kw_cfi_aarch64_negate_ra_sign_state_with_pc,
- kw_cfi_llvm_set_ra_state,
+ kw_cfi_set_ra_state,
kw_cfi_llvm_register_pair,
kw_cfi_llvm_vector_registers,
kw_cfi_llvm_vector_offset,
diff --git a/llvm/lib/CodeGen/MIRParser/MIParser.cpp b/llvm/lib/CodeGen/MIRParser/MIParser.cpp
index 4d9a8ee4b9cb7..fb858c81c735c 100644
--- a/llvm/lib/CodeGen/MIRParser/MIParser.cpp
+++ b/llvm/lib/CodeGen/MIRParser/MIParser.cpp
@@ -2853,7 +2853,7 @@ bool MIParser::parseCFIOperand(MachineOperand &Dest) {
CFIIndex =
MF.addFrameInst(MCCFIInstruction::createNegateRAStateWithPC(nullptr));
break;
- case MIToken::kw_cfi_llvm_set_ra_state: {
+ case MIToken::kw_cfi_set_ra_state: {
unsigned State;
MCSymbol *PACSym = nullptr;
if (parseCFIUnsigned(State) || expectAndConsume(MIToken::comma))
@@ -2871,7 +2871,7 @@ bool MIParser::parseCFIOperand(MachineOperand &Dest) {
MCCFIInstruction::createLLVMSetRAState(nullptr, State, Offset));
} else {
return error("expected '<mcsymbol ...>' or integer offset for "
- "cfi_llvm_set_ra_state");
+ "cfi_set_ra_state");
}
break;
}
@@ -3320,7 +3320,7 @@ bool MIParser::parseMachineOperand(const unsigned OpCode, const unsigned OpIdx,
case MIToken::kw_cfi_window_save:
case MIToken::kw_cfi_aarch64_negate_ra_sign_state:
case MIToken::kw_cfi_aarch64_negate_ra_sign_state_with_pc:
- case MIToken::kw_cfi_llvm_set_ra_state:
+ case MIToken::kw_cfi_set_ra_state:
case MIToken::kw_cfi_llvm_register_pair:
case MIToken::kw_cfi_llvm_vector_registers:
case MIToken::kw_cfi_llvm_vector_offset:
diff --git a/llvm/lib/MC/MCAsmStreamer.cpp b/llvm/lib/MC/MCAsmStreamer.cpp
index 052ae1310c4ad..af9ff13de1c56 100644
--- a/llvm/lib/MC/MCAsmStreamer.cpp
+++ b/llvm/lib/MC/MCAsmStreamer.cpp
@@ -2290,7 +2290,7 @@ void MCAsmStreamer::emitCFINegateRAStateWithPC(SMLoc Loc) {
void MCAsmStreamer::emitCFILLVMSetRAState(unsigned State, MCSymbol *PACSym,
SMLoc Loc) {
MCStreamer::emitCFILLVMSetRAState(State, PACSym, Loc);
- OS << "\t.cfi_llvm_set_ra_state " << State << ", ";
+ OS << "\t.cfi_set_ra_state " << State << ", ";
if (PACSym)
PACSym->print(OS, MAI);
else
@@ -2301,7 +2301,7 @@ void MCAsmStreamer::emitCFILLVMSetRAState(unsigned State, MCSymbol *PACSym,
void MCAsmStreamer::emitCFILLVMSetRAState(unsigned State, int64_t Offset,
SMLoc Loc) {
MCStreamer::emitCFILLVMSetRAState(State, Offset, Loc);
- OS << "\t.cfi_llvm_set_ra_state " << State << ", " << Offset;
+ OS << "\t.cfi_set_ra_state " << State << ", " << Offset;
EmitEOL();
}
diff --git a/llvm/lib/MC/MCDwarf.cpp b/llvm/lib/MC/MCDwarf.cpp
index 1b9b100f5b284..209fcbf056e12 100644
--- a/llvm/lib/MC/MCDwarf.cpp
+++ b/llvm/lib/MC/MCDwarf.cpp
@@ -1332,7 +1332,7 @@ void MCCFIInstruction::replaceRegister(unsigned FromReg, unsigned ToReg) {
ReplaceReg(F.MaskRegister);
},
[](LLVMSetRAStateFields &) {
- assert(false && ".cfi_llvm_set_ra_state does not have registers");
+ assert(false && ".cfi_set_ra_state does not have registers");
});
std::visit(Visitor, ExtraFields);
}
diff --git a/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp b/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
index 0d651b2ff90bd..9d14367d42be4 100644
--- a/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
+++ b/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
@@ -25,7 +25,7 @@ using namespace llvm::AArch64PAuth;
namespace {
-/// Control the emission of .cfi_llvm_set_ra_state, which replaces the
+/// Control the emission of .cfi_set_ra_state, which replaces the
/// deprecated .cfi_negate_ra_state_with_pc [1].
///
/// The latter is fundamentally unable to express some program orders [2], as
@@ -43,13 +43,13 @@ namespace {
/// 2: https://github.com/ARM-software/abi-aa/issues/327
enum class SetRAStateMode {
Never, // Always use .cfi_negate_ra_state(_with_pc)
- PAuthLR, // Use .cfi_llvm_set_ra_state only for PAuth_LR
- Always, // Use .cfi_llvm_set_ra_state for both PAuth and PAuth_LR
+ PAuthLR, // Use .cfi_set_ra_state only for PAuth_LR
+ Always, // Use .cfi_set_ra_state for both PAuth and PAuth_LR
};
cl::opt<SetRAStateMode> CFILLVMSetRASignStateMode(
"aarch64-cfi-llvm-set-ra-sign-state", cl::init(SetRAStateMode::PAuthLR),
cl::desc(
- "Control emission of .cfi_llvm_set_ra_state for PAC return address "
+ "Control emission of .cfi_set_ra_state for PAC return address "
"signing CFI"),
cl::values(clEnumValN(SetRAStateMode::Never, "never",
"Always use legacy .cfi_negate_ra_state[_with_pc]"),
diff --git a/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp b/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
index 7960e86c397ae..7e4065533b45b 100644
--- a/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
+++ b/llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
@@ -7296,7 +7296,7 @@ bool AArch64AsmParser::ParseDirective(AsmToken DirectiveID) {
parseDirectiveCFINegateRAState();
else if (IDVal == ".cfi_negate_ra_state_with_pc")
parseDirectiveCFINegateRAStateWithPC();
- else if (IDVal == ".cfi_llvm_set_ra_state")
+ else if (IDVal == ".cfi_set_ra_state")
parseDirectiveCFILLVMSetRAState();
else if (IDVal == ".cfi_b_key_frame")
parseDirectiveCFIBKeyFrame();
@@ -7774,8 +7774,8 @@ bool AArch64AsmParser::parseDirectiveCFINegateRAStateWithPC() {
}
/// parseDirectiveCFILLVMSetRAState
-/// ::= .cfi_llvm_set_ra_state ra_state, offset
-/// ::= .cfi_llvm_set_ra_state ra_state, pac_sym
+/// ::= .cfi_set_ra_state ra_state, offset
+/// ::= .cfi_set_ra_state ra_state, pac_sym
bool AArch64AsmParser::parseDirectiveCFILLVMSetRAState() {
int64_t State;
if (getParser().parseAbsoluteExpression(State))
@@ -7796,7 +7796,7 @@ bool AArch64AsmParser::parseDirectiveCFILLVMSetRAState() {
} else {
return Error(
ExprLoc,
- "expected an integer offset or a symbol for .cfi_llvm_set_ra_state");
+ "expected an integer offset or a symbol for .cfi_set_ra_state");
}
return false;
}
diff --git a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64AsmBackend.cpp b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64AsmBackend.cpp
index 8d1125ef4cf14..6e2b30078b0f6 100644
--- a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64AsmBackend.cpp
+++ b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64AsmBackend.cpp
@@ -725,7 +725,7 @@ class DarwinAArch64AsmBackend : public AArch64AsmBackend {
break;
}
case MCCFIInstruction::OpLLVMSetRAState:
- // .cfi_llvm_set_ra_state is not yet supported in Compact Unwind.
+ // .cfi_set_ra_state is not yet supported in Compact Unwind.
return CU::UNWIND_ARM64_MODE_DWARF;
}
}
diff --git a/llvm/test/CodeGen/AArch64/pauth-lr-tail-call-fpdiff.ll b/llvm/test/CodeGen/AArch64/pauth-lr-tail-call-fpdiff.ll
index 429586dc235c1..e1aa437195e90 100644
--- a/llvm/test/CodeGen/AArch64/pauth-lr-tail-call-fpdiff.ll
+++ b/llvm/test/CodeGen/AArch64/pauth-lr-tail-call-fpdiff.ll
@@ -18,16 +18,16 @@ define swifttailcc void @tail_call_fpdiff_a_key(ptr swiftasync %ctx) "branch-pro
; CHECK: // %bb.0:
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp0
+; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp0
; COMPAT-NEXT: .Ltmp0:
; COMPAT-NEXT: hint #25
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp0
+; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp0
; V83A-NEXT: .Ltmp0:
; V83A-NEXT: paciasp
-; V9A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp0
+; V9A-NEXT: .cfi_set_ra_state 2, .Ltmp0
; V9A-NEXT: .Ltmp0:
; V9A-NEXT: paciasppc
@@ -66,18 +66,18 @@ define swifttailcc void @tail_call_fpdiff_a_key(ptr swiftasync %ctx) "branch-pro
; COMPAT-NEXT: adrp x15, .Ltmp0
; COMPAT-NEXT: add x15, x15, :lo12:.Ltmp0
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_llvm_set_ra_state 0, 0
+; COMPAT-NEXT: .cfi_set_ra_state 0, 0
; COMPAT-NEXT: hint #12
; V83A-NEXT: adrp x15, .Ltmp0
; V83A-NEXT: add x15, x15, :lo12:.Ltmp0
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_llvm_set_ra_state 0, 0
+; V83A-NEXT: .cfi_set_ra_state 0, 0
; V83A-NEXT: autia1716
; V9A-NEXT: adrp x15, .Ltmp0
; V9A-NEXT: add x15, x15, :lo12:.Ltmp0
-; V9A-NEXT: .cfi_llvm_set_ra_state 0, 0
+; V9A-NEXT: .cfi_set_ra_state 0, 0
; V9A-NEXT: autia171615
; PAUTH-NEXT: autia1716
@@ -96,16 +96,16 @@ define swifttailcc void @tail_call_fpdiff_b_key(ptr swiftasync %ctx) "branch-pro
; CHECK-NEXT: .cfi_b_key_frame
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp1
+; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp1
; COMPAT-NEXT: .Ltmp1:
; COMPAT-NEXT: hint #27
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp1
+; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp1
; V83A-NEXT: .Ltmp1:
; V83A-NEXT: pacibsp
-; V9A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp1
+; V9A-NEXT: .cfi_set_ra_state 2, .Ltmp1
; V9A-NEXT: .Ltmp1:
; V9A-NEXT: pacibsppc
@@ -144,18 +144,18 @@ define swifttailcc void @tail_call_fpdiff_b_key(ptr swiftasync %ctx) "branch-pro
; COMPAT-NEXT: adrp x15, .Ltmp1
; COMPAT-NEXT: add x15, x15, :lo12:.Ltmp1
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_llvm_set_ra_state 0, 0
+; COMPAT-NEXT: .cfi_set_ra_state 0, 0
; COMPAT-NEXT: hint #14
; V83A-NEXT: adrp x15, .Ltmp1
; V83A-NEXT: add x15, x15, :lo12:.Ltmp1
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_llvm_set_ra_state 0, 0
+; V83A-NEXT: .cfi_set_ra_state 0, 0
; V83A-NEXT: autib1716
; V9A-NEXT: adrp x15, .Ltmp1
; V9A-NEXT: add x15, x15, :lo12:.Ltmp1
-; V9A-NEXT: .cfi_llvm_set_ra_state 0, 0
+; V9A-NEXT: .cfi_set_ra_state 0, 0
; V9A-NEXT: autib171615
; PAUTH-NEXT: autib1716
@@ -173,16 +173,16 @@ define swifttailcc void @tail_call_no_fpdiff_a_key(ptr swiftasync %ctx) "branch-
; CHECK: // %bb.0:
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp2
+; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp2
; COMPAT-NEXT: .Ltmp2:
; COMPAT-NEXT: hint #25
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp2
+; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp2
; V83A-NEXT: .Ltmp2:
; V83A-NEXT: paciasp
-; V9A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp2
+; V9A-NEXT: .cfi_set_ra_state 2, .Ltmp2
; V9A-NEXT: .Ltmp2:
; V9A-NEXT: paciasppc
@@ -209,16 +209,16 @@ define swifttailcc void @tail_call_no_fpdiff_a_key(ptr swiftasync %ctx) "branch-
; COMPAT-NEXT: adrp x16, .Ltmp2
; COMPAT-NEXT: add x16, x16, :lo12:.Ltmp2
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_llvm_set_ra_state 0, 0
+; COMPAT-NEXT: .cfi_set_ra_state 0, 0
; COMPAT-NEXT: hint #29
; V83A-NEXT: adrp x16, .Ltmp2
; V83A-NEXT: add x16, x16, :lo12:.Ltmp2
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_llvm_set_ra_state 0, 0
+; V83A-NEXT: .cfi_set_ra_state 0, 0
; V83A-NEXT: autiasp
-; V9A-NEXT: .cfi_llvm_set_ra_state 0, 0
+; V9A-NEXT: .cfi_set_ra_state 0, 0
; V9A-NEXT: autiasppc .Ltmp2
; PAUTH-NEXT: autiasp
@@ -236,16 +236,16 @@ define swifttailcc void @tail_call_no_fpdiff_b_key(ptr swiftasync %ctx) "branch-
; CHECK-NEXT: .cfi_b_key_frame
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp3
+; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp3
; COMPAT-NEXT: .Ltmp3:
; COMPAT-NEXT: hint #27
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp3
+; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp3
; V83A-NEXT: .Ltmp3:
; V83A-NEXT: pacibsp
-; V9A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp3
+; V9A-NEXT: .cfi_set_ra_state 2, .Ltmp3
; V9A-NEXT: .Ltmp3:
; V9A-NEXT: pacibsppc
@@ -272,16 +272,16 @@ define swifttailcc void @tail_call_no_fpdiff_b_key(ptr swiftasync %ctx) "branch-
; COMPAT-NEXT: adrp x16, .Ltmp3
; COMPAT-NEXT: add x16, x16, :lo12:.Ltmp3
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_llvm_set_ra_state 0, 0
+; COMPAT-NEXT: .cfi_set_ra_state 0, 0
; COMPAT-NEXT: hint #31
; V83A-NEXT: adrp x16, .Ltmp3
; V83A-NEXT: add x16, x16, :lo12:.Ltmp3
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_llvm_set_ra_state 0, 0
+; V83A-NEXT: .cfi_set_ra_state 0, 0
; V83A-NEXT: autibsp
-; V9A-NEXT: .cfi_llvm_set_ra_state 0, 0
+; V9A-NEXT: .cfi_set_ra_state 0, 0
; V9A-NEXT: autibsppc .Ltmp3
; PAUTH-NEXT: autibsp
@@ -298,16 +298,16 @@ define swifttailcc void @indirect_tail_call_fpdiff_a_key(ptr swiftasync %ctx, pt
; CHECK: // %bb.0:
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp4
+; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp4
; COMPAT-NEXT: .Ltmp4:
; COMPAT-NEXT: hint #25
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp4
+; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp4
; V83A-NEXT: .Ltmp4:
; V83A-NEXT: paciasp
-; V9A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp4
+; V9A-NEXT: .cfi_set_ra_state 2, .Ltmp4
; V9A-NEXT: .Ltmp4:
; V9A-NEXT: paciasppc
@@ -347,18 +347,18 @@ define swifttailcc void @indirect_tail_call_fpdiff_a_key(ptr swiftasync %ctx, pt
; COMPAT-NEXT: adrp x15, .Ltmp4
; COMPAT-NEXT: add x15, x15, :lo12:.Ltmp4
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_llvm_set_ra_state 0, 0
+; COMPAT-NEXT: .cfi_set_ra_state 0, 0
; COMPAT-NEXT: hint #12
; V83A-NEXT: adrp x15, .Ltmp4
; V83A-NEXT: add x15, x15, :lo12:.Ltmp4
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_llvm_set_ra_state 0, 0
+; V83A-NEXT: .cfi_set_ra_state 0, 0
; V83A-NEXT: autia1716
; V9A-NEXT: adrp x15, .Ltmp4
; V9A-NEXT: add x15, x15, :lo12:.Ltmp4
-; V9A-NEXT: .cfi_llvm_set_ra_state 0, 0
+; V9A-NEXT: .cfi_set_ra_state 0, 0
; V9A-NEXT: autia171615
; PAUTH-NEXT: autia1716
@@ -377,16 +377,16 @@ define swifttailcc void @indirect_tail_call_fpdiff_b_key(ptr swiftasync %ctx, pt
; CHECK-NEXT: .cfi_b_key_frame
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp5
+; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp5
; COMPAT-NEXT: .Ltmp5:
; COMPAT-NEXT: hint #27
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp5
+; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp5
; V83A-NEXT: .Ltmp5:
; V83A-NEXT: pacibsp
-; V9A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp5
+; V9A-NEXT: .cfi_set_ra_state 2, .Ltmp5
; V9A-NEXT: .Ltmp5:
; V9A-NEXT: pacibsppc
@@ -426,18 +426,18 @@ define swifttailcc void @indirect_tail_call_fpdiff_b_key(ptr swiftasync %ctx, pt
; COMPAT-NEXT: adrp x15, .Ltmp5
; COMPAT-NEXT: add x15, x15, :lo12:.Ltmp5
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_llvm_set_ra_state 0, 0
+; COMPAT-NEXT: .cfi_set_ra_state 0, 0
; COMPAT-NEXT: hint #14
; V83A-NEXT: adrp x15, .Ltmp5
; V83A-NEXT: add x15, x15, :lo12:.Ltmp5
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_llvm_set_ra_state 0, 0
+; V83A-NEXT: .cfi_set_ra_state 0, 0
; V83A-NEXT: autib1716
; V9A-NEXT: adrp x15, .Ltmp5
; V9A-NEXT: add x15, x15, :lo12:.Ltmp5
-; V9A-NEXT: .cfi_llvm_set_ra_state 0, 0
+; V9A-NEXT: .cfi_set_ra_state 0, 0
; V9A-NEXT: autib171615
; PAUTH-NEXT: autib1716
@@ -455,16 +455,16 @@ define swifttailcc void @indirect_tail_call_no_fpdiff_a_key(ptr swiftasync %ctx,
; CHECK: // %bb.0:
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp6
+; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp6
; COMPAT-NEXT: .Ltmp6:
; COMPAT-NEXT: hint #25
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp6
+; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp6
; V83A-NEXT: .Ltmp6:
; V83A-NEXT: paciasp
-; V9A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp6
+; V9A-NEXT: .cfi_set_ra_state 2, .Ltmp6
; V9A-NEXT: .Ltmp6:
; V9A-NEXT: paciasppc
@@ -491,16 +491,16 @@ define swifttailcc void @indirect_tail_call_no_fpdiff_a_key(ptr swiftasync %ctx,
; COMPAT-NEXT: adrp x16, .Ltmp6
; COMPAT-NEXT: add x16, x16, :lo12:.Ltmp6
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_llvm_set_ra_state 0, 0
+; COMPAT-NEXT: .cfi_set_ra_state 0, 0
; COMPAT-NEXT: hint #29
; V83A-NEXT: adrp x16, .Ltmp6
; V83A-NEXT: add x16, x16, :lo12:.Ltmp6
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_llvm_set_ra_state 0, 0
+; V83A-NEXT: .cfi_set_ra_state 0, 0
; V83A-NEXT: autiasp
-; V9A-NEXT: .cfi_llvm_set_ra_state 0, 0
+; V9A-NEXT: .cfi_set_ra_state 0, 0
; V9A-NEXT: autiasppc .Ltmp6
; PAUTH-NEXT: autiasp
@@ -518,16 +518,16 @@ define swifttailcc void @indirect_tail_call_no_fpdiff_b_key(ptr swiftasync %ctx,
; CHECK-NEXT: .cfi_b_key_frame
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp7
+; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp7
; COMPAT-NEXT: .Ltmp7:
; COMPAT-NEXT: hint #27
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp7
+; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp7
; V83A-NEXT: .Ltmp7:
; V83A-NEXT: pacibsp
-; V9A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp7
+; V9A-NEXT: .cfi_set_ra_state 2, .Ltmp7
; V9A-NEXT: .Ltmp7:
; V9A-NEXT: pacibsppc
@@ -554,16 +554,16 @@ define swifttailcc void @indirect_tail_call_no_fpdiff_b_key(ptr swiftasync %ctx,
; COMPAT-NEXT: adrp x16, .Ltmp7
; COMPAT-NEXT: add x16, x16, :lo12:.Ltmp7
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_llvm_set_ra_state 0, 0
+; COMPAT-NEXT: .cfi_set_ra_state 0, 0
; COMPAT-NEXT: hint #31
; V83A-NEXT: adrp x16, .Ltmp7
; V83A-NEXT: add x16, x16, :lo12:.Ltmp7
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_llvm_set_ra_state 0, 0
+; V83A-NEXT: .cfi_set_ra_state 0, 0
; V83A-NEXT: autibsp
-; V9A-NEXT: .cfi_llvm_set_ra_state 0, 0
+; V9A-NEXT: .cfi_set_ra_state 0, 0
; V9A-NEXT: autibsppc .Ltmp7
; PAUTH-NEXT: autibsp
diff --git a/llvm/test/CodeGen/AArch64/sign-return-address-pauth-lr.ll b/llvm/test/CodeGen/AArch64/sign-return-address-pauth-lr.ll
index 2b844efff6456..02bebc85a8f60 100644
--- a/llvm/test/CodeGen/AArch64/sign-return-address-pauth-lr.ll
+++ b/llvm/test/CodeGen/AArch64/sign-return-address-pauth-lr.ll
@@ -89,7 +89,7 @@ define i32 @leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-addr
; COMPAT-LABEL: leaf_sign_all:
; COMPAT: // %bb.0:
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp0
+; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp0
; COMPAT-NEXT: .Ltmp0:
; COMPAT-NEXT: hint #25
; COMPAT-NEXT: adrp x16, .Ltmp0
@@ -101,7 +101,7 @@ define i32 @leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-addr
; V83A-LABEL: leaf_sign_all:
; V83A: // %bb.0:
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp0
+; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp0
; V83A-NEXT: .Ltmp0:
; V83A-NEXT: paciasp
; V83A-NEXT: adrp x16, .Ltmp0
@@ -111,7 +111,7 @@ define i32 @leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-addr
;
; PAUTHLR-LABEL: leaf_sign_all:
; PAUTHLR: // %bb.0:
-; PAUTHLR-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp0
+; PAUTHLR-NEXT: .cfi_set_ra_state 2, .Ltmp0
; PAUTHLR-NEXT: .Ltmp0:
; PAUTHLR-NEXT: paciasppc
; PAUTHLR-NEXT: retaasppc .Ltmp0
@@ -152,7 +152,7 @@ define i64 @leaf_clobbers_lr(i64 %x) "branch-protection-pauth-lr" "sign-return-a
; COMPAT-LABEL: leaf_clobbers_lr:
; COMPAT: // %bb.0:
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp1
+; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp1
; COMPAT-NEXT: .Ltmp1:
; COMPAT-NEXT: hint #25
; COMPAT-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -171,7 +171,7 @@ define i64 @leaf_clobbers_lr(i64 %x) "branch-protection-pauth-lr" "sign-return-a
; V83A-LABEL: leaf_clobbers_lr:
; V83A: // %bb.0:
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp1
+; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp1
; V83A-NEXT: .Ltmp1:
; V83A-NEXT: paciasp
; V83A-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -188,7 +188,7 @@ define i64 @leaf_clobbers_lr(i64 %x) "branch-protection-pauth-lr" "sign-return-a
;
; PAUTHLR-LABEL: leaf_clobbers_lr:
; PAUTHLR: // %bb.0:
-; PAUTHLR-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp1
+; PAUTHLR-NEXT: .cfi_set_ra_state 2, .Ltmp1
; PAUTHLR-NEXT: .Ltmp1:
; PAUTHLR-NEXT: paciasppc
; PAUTHLR-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -260,7 +260,7 @@ define i32 @non_leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-
; COMPAT-LABEL: non_leaf_sign_all:
; COMPAT: // %bb.0:
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp2
+; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp2
; COMPAT-NEXT: .Ltmp2:
; COMPAT-NEXT: hint #25
; COMPAT-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -277,7 +277,7 @@ define i32 @non_leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-
; V83A-LABEL: non_leaf_sign_all:
; V83A: // %bb.0:
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp2
+; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp2
; V83A-NEXT: .Ltmp2:
; V83A-NEXT: paciasp
; V83A-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -292,7 +292,7 @@ define i32 @non_leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-
;
; PAUTHLR-LABEL: non_leaf_sign_all:
; PAUTHLR: // %bb.0:
-; PAUTHLR-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp2
+; PAUTHLR-NEXT: .cfi_set_ra_state 2, .Ltmp2
; PAUTHLR-NEXT: .Ltmp2:
; PAUTHLR-NEXT: paciasppc
; PAUTHLR-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -354,7 +354,7 @@ define i32 @non_leaf_sign_non_leaf(i32 %x) "branch-protection-pauth-lr" "sign-re
; COMPAT-LABEL: non_leaf_sign_non_leaf:
; COMPAT: // %bb.0:
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp3
+; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp3
; COMPAT-NEXT: .Ltmp3:
; COMPAT-NEXT: hint #25
; COMPAT-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -371,7 +371,7 @@ define i32 @non_leaf_sign_non_leaf(i32 %x) "branch-protection-pauth-lr" "sign-re
; V83A-LABEL: non_leaf_sign_non_leaf:
; V83A: // %bb.0:
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp3
+; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp3
; V83A-NEXT: .Ltmp3:
; V83A-NEXT: paciasp
; V83A-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -386,7 +386,7 @@ define i32 @non_leaf_sign_non_leaf(i32 %x) "branch-protection-pauth-lr" "sign-re
;
; PAUTHLR-LABEL: non_leaf_sign_non_leaf:
; PAUTHLR: // %bb.0:
-; PAUTHLR-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp3
+; PAUTHLR-NEXT: .cfi_set_ra_state 2, .Ltmp3
; PAUTHLR-NEXT: .Ltmp3:
; PAUTHLR-NEXT: paciasppc
; PAUTHLR-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -449,7 +449,7 @@ define i32 @non_leaf_scs(i32 %x) "branch-protection-pauth-lr" "sign-return-addre
; CHECK-LABEL: non_leaf_scs:
; CHECK: // %bb.0:
; CHECK-NEXT: hint #39
-; CHECK-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp4
+; CHECK-NEXT: .cfi_set_ra_state 2, .Ltmp4
; CHECK-NEXT: .Ltmp4:
; CHECK-NEXT: paciasp
; CHECK-NEXT: str x30, [x18], #8
@@ -468,7 +468,7 @@ define i32 @non_leaf_scs(i32 %x) "branch-protection-pauth-lr" "sign-return-addre
;
; PAUTHLR-LABEL: non_leaf_scs:
; PAUTHLR: // %bb.0:
-; PAUTHLR-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp4
+; PAUTHLR-NEXT: .cfi_set_ra_state 2, .Ltmp4
; PAUTHLR-NEXT: .Ltmp4:
; PAUTHLR-NEXT: paciasppc
; PAUTHLR-NEXT: str x30, [x18], #8
@@ -525,7 +525,7 @@ define i32 @leaf_sign_all_v83(i32 %x) "branch-protection-pauth-lr" "sign-return-
; CHECK-LABEL: leaf_sign_all_v83:
; CHECK: // %bb.0:
; CHECK-NEXT: hint #39
-; CHECK-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp5
+; CHECK-NEXT: .cfi_set_ra_state 2, .Ltmp5
; CHECK-NEXT: .Ltmp5:
; CHECK-NEXT: paciasp
; CHECK-NEXT: adrp x16, .Ltmp5
@@ -535,7 +535,7 @@ define i32 @leaf_sign_all_v83(i32 %x) "branch-protection-pauth-lr" "sign-return-
;
; PAUTHLR-LABEL: leaf_sign_all_v83:
; PAUTHLR: // %bb.0:
-; PAUTHLR-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp5
+; PAUTHLR-NEXT: .cfi_set_ra_state 2, .Ltmp5
; PAUTHLR-NEXT: .Ltmp5:
; PAUTHLR-NEXT: paciasppc
; PAUTHLR-NEXT: retaasppc .Ltmp5
@@ -566,7 +566,7 @@ define fastcc void @spill_lr_and_tail_call(i64 %x) "branch-protection-pauth-lr"
; COMPAT-LABEL: spill_lr_and_tail_call:
; COMPAT: // %bb.0:
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp6
+; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp6
; COMPAT-NEXT: .Ltmp6:
; COMPAT-NEXT: hint #25
; COMPAT-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -585,7 +585,7 @@ define fastcc void @spill_lr_and_tail_call(i64 %x) "branch-protection-pauth-lr"
; V83A-LABEL: spill_lr_and_tail_call:
; V83A: // %bb.0:
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp6
+; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp6
; V83A-NEXT: .Ltmp6:
; V83A-NEXT: paciasp
; V83A-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -603,7 +603,7 @@ define fastcc void @spill_lr_and_tail_call(i64 %x) "branch-protection-pauth-lr"
;
; PAUTHLR-LABEL: spill_lr_and_tail_call:
; PAUTHLR: // %bb.0:
-; PAUTHLR-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp6
+; PAUTHLR-NEXT: .cfi_set_ra_state 2, .Ltmp6
; PAUTHLR-NEXT: .Ltmp6:
; PAUTHLR-NEXT: paciasppc
; PAUTHLR-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -677,7 +677,7 @@ define i32 @leaf_sign_all_a_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
; COMPAT-LABEL: leaf_sign_all_a_key:
; COMPAT: // %bb.0:
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp7
+; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp7
; COMPAT-NEXT: .Ltmp7:
; COMPAT-NEXT: hint #25
; COMPAT-NEXT: adrp x16, .Ltmp7
@@ -689,7 +689,7 @@ define i32 @leaf_sign_all_a_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
; V83A-LABEL: leaf_sign_all_a_key:
; V83A: // %bb.0:
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp7
+; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp7
; V83A-NEXT: .Ltmp7:
; V83A-NEXT: paciasp
; V83A-NEXT: adrp x16, .Ltmp7
@@ -699,7 +699,7 @@ define i32 @leaf_sign_all_a_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
;
; PAUTHLR-LABEL: leaf_sign_all_a_key:
; PAUTHLR: // %bb.0:
-; PAUTHLR-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp7
+; PAUTHLR-NEXT: .cfi_set_ra_state 2, .Ltmp7
; PAUTHLR-NEXT: .Ltmp7:
; PAUTHLR-NEXT: paciasppc
; PAUTHLR-NEXT: retaasppc .Ltmp7
@@ -741,7 +741,7 @@ define i32 @leaf_sign_all_b_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
; COMPAT: // %bb.0:
; COMPAT-NEXT: .cfi_b_key_frame
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp8
+; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp8
; COMPAT-NEXT: .Ltmp8:
; COMPAT-NEXT: hint #27
; COMPAT-NEXT: adrp x16, .Ltmp8
@@ -754,7 +754,7 @@ define i32 @leaf_sign_all_b_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
; V83A: // %bb.0:
; V83A-NEXT: .cfi_b_key_frame
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp8
+; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp8
; V83A-NEXT: .Ltmp8:
; V83A-NEXT: pacibsp
; V83A-NEXT: adrp x16, .Ltmp8
@@ -765,7 +765,7 @@ define i32 @leaf_sign_all_b_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
; PAUTHLR-LABEL: leaf_sign_all_b_key:
; PAUTHLR: // %bb.0:
; PAUTHLR-NEXT: .cfi_b_key_frame
-; PAUTHLR-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp8
+; PAUTHLR-NEXT: .cfi_set_ra_state 2, .Ltmp8
; PAUTHLR-NEXT: .Ltmp8:
; PAUTHLR-NEXT: pacibsppc
; PAUTHLR-NEXT: retabsppc .Ltmp8
@@ -810,7 +810,7 @@ define i32 @leaf_sign_all_v83_b_key(i32 %x) "branch-protection-pauth-lr" "sign-r
; CHECK: // %bb.0:
; CHECK-NEXT: .cfi_b_key_frame
; CHECK-NEXT: hint #39
-; CHECK-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp9
+; CHECK-NEXT: .cfi_set_ra_state 2, .Ltmp9
; CHECK-NEXT: .Ltmp9:
; CHECK-NEXT: pacibsp
; CHECK-NEXT: adrp x16, .Ltmp9
@@ -821,7 +821,7 @@ define i32 @leaf_sign_all_v83_b_key(i32 %x) "branch-protection-pauth-lr" "sign-r
; PAUTHLR-LABEL: leaf_sign_all_v83_b_key:
; PAUTHLR: // %bb.0:
; PAUTHLR-NEXT: .cfi_b_key_frame
-; PAUTHLR-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp9
+; PAUTHLR-NEXT: .cfi_set_ra_state 2, .Ltmp9
; PAUTHLR-NEXT: .Ltmp9:
; PAUTHLR-NEXT: pacibsppc
; PAUTHLR-NEXT: retabsppc .Ltmp9
@@ -854,7 +854,7 @@ define i32 @leaf_sign_all_a_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
; COMPAT: // %bb.0:
; COMPAT-NEXT: hint #34
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp10
+; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp10
; COMPAT-NEXT: .Ltmp10:
; COMPAT-NEXT: hint #25
; COMPAT-NEXT: adrp x16, .Ltmp10
@@ -867,7 +867,7 @@ define i32 @leaf_sign_all_a_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
; V83A: // %bb.0:
; V83A-NEXT: hint #34
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp10
+; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp10
; V83A-NEXT: .Ltmp10:
; V83A-NEXT: paciasp
; V83A-NEXT: adrp x16, .Ltmp10
@@ -877,7 +877,7 @@ define i32 @leaf_sign_all_a_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
;
; PAUTHLR-LABEL: leaf_sign_all_a_key_bti:
; PAUTHLR: // %bb.0:
-; PAUTHLR-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp10
+; PAUTHLR-NEXT: .cfi_set_ra_state 2, .Ltmp10
; PAUTHLR-NEXT: bti c
; PAUTHLR-NEXT: .Ltmp10:
; PAUTHLR-NEXT: paciasppc
@@ -925,7 +925,7 @@ define i32 @leaf_sign_all_b_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
; COMPAT-NEXT: .cfi_b_key_frame
; COMPAT-NEXT: hint #34
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp11
+; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp11
; COMPAT-NEXT: .Ltmp11:
; COMPAT-NEXT: hint #27
; COMPAT-NEXT: adrp x16, .Ltmp11
@@ -939,7 +939,7 @@ define i32 @leaf_sign_all_b_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
; V83A-NEXT: .cfi_b_key_frame
; V83A-NEXT: hint #34
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp11
+; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp11
; V83A-NEXT: .Ltmp11:
; V83A-NEXT: pacibsp
; V83A-NEXT: adrp x16, .Ltmp11
@@ -950,7 +950,7 @@ define i32 @leaf_sign_all_b_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
; PAUTHLR-LABEL: leaf_sign_all_b_key_bti:
; PAUTHLR: // %bb.0:
; PAUTHLR-NEXT: .cfi_b_key_frame
-; PAUTHLR-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp11
+; PAUTHLR-NEXT: .cfi_set_ra_state 2, .Ltmp11
; PAUTHLR-NEXT: bti c
; PAUTHLR-NEXT: .Ltmp11:
; PAUTHLR-NEXT: pacibsppc
@@ -1001,7 +1001,7 @@ define i32 @leaf_sign_all_v83_b_key_bti(i32 %x) "branch-protection-pauth-lr" "si
; CHECK-NEXT: .cfi_b_key_frame
; CHECK-NEXT: hint #34
; CHECK-NEXT: hint #39
-; CHECK-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp12
+; CHECK-NEXT: .cfi_set_ra_state 2, .Ltmp12
; CHECK-NEXT: .Ltmp12:
; CHECK-NEXT: pacibsp
; CHECK-NEXT: adrp x16, .Ltmp12
@@ -1012,7 +1012,7 @@ define i32 @leaf_sign_all_v83_b_key_bti(i32 %x) "branch-protection-pauth-lr" "si
; PAUTHLR-LABEL: leaf_sign_all_v83_b_key_bti:
; PAUTHLR: // %bb.0:
; PAUTHLR-NEXT: .cfi_b_key_frame
-; PAUTHLR-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp12
+; PAUTHLR-NEXT: .cfi_set_ra_state 2, .Ltmp12
; PAUTHLR-NEXT: bti c
; PAUTHLR-NEXT: .Ltmp12:
; PAUTHLR-NEXT: pacibsppc
diff --git a/llvm/test/CodeGen/AArch64/sign-return-address-pauthlr-slh.ll b/llvm/test/CodeGen/AArch64/sign-return-address-pauthlr-slh.ll
index 07ae21464646e..956f481fb2df7 100644
--- a/llvm/test/CodeGen/AArch64/sign-return-address-pauthlr-slh.ll
+++ b/llvm/test/CodeGen/AArch64/sign-return-address-pauthlr-slh.ll
@@ -10,7 +10,7 @@ define i32 @f() #0 {
; CHECK-NO-PAUTH-NEXT: dsb sy
; CHECK-NO-PAUTH-NEXT: isb
; CHECK-NO-PAUTH-NEXT: hint #39
-; CHECK-NO-PAUTH-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp0
+; CHECK-NO-PAUTH-NEXT: .cfi_set_ra_state 2, .Ltmp0
; CHECK-NO-PAUTH-NEXT: .Ltmp0:
; CHECK-NO-PAUTH-NEXT: hint #25
; CHECK-NO-PAUTH-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -32,7 +32,7 @@ define i32 @f() #0 {
; CHECK-PAUTH-NEXT: dsb sy
; CHECK-PAUTH-NEXT: isb
; CHECK-PAUTH-NEXT: hint #39
-; CHECK-PAUTH-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp0
+; CHECK-PAUTH-NEXT: .cfi_set_ra_state 2, .Ltmp0
; CHECK-PAUTH-NEXT: .Ltmp0:
; CHECK-PAUTH-NEXT: paciasp
; CHECK-PAUTH-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -52,7 +52,7 @@ define i32 @f() #0 {
; CHECK-PAUTHLR: // %bb.0: // %entry
; CHECK-PAUTHLR-NEXT: cmp sp, #0
; CHECK-PAUTHLR-NEXT: csetm x16, ne
-; CHECK-PAUTHLR-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp0
+; CHECK-PAUTHLR-NEXT: .cfi_set_ra_state 2, .Ltmp0
; CHECK-PAUTHLR-NEXT: .Ltmp0:
; CHECK-PAUTHLR-NEXT: paciasppc
; CHECK-PAUTHLR-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -75,7 +75,7 @@ define i32 @f() #0 {
; CHECK-PAUTH-PAUTHLR: // %bb.0: // %entry
; CHECK-PAUTH-PAUTHLR-NEXT: cmp sp, #0
; CHECK-PAUTH-PAUTHLR-NEXT: csetm x16, ne
-; CHECK-PAUTH-PAUTHLR-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp0
+; CHECK-PAUTH-PAUTHLR-NEXT: .cfi_set_ra_state 2, .Ltmp0
; CHECK-PAUTH-PAUTHLR-NEXT: .Ltmp0:
; CHECK-PAUTH-PAUTHLR-NEXT: paciasppc
; CHECK-PAUTH-PAUTHLR-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
diff --git a/llvm/test/CodeGen/AArch64/sign-return-address.ll b/llvm/test/CodeGen/AArch64/sign-return-address.ll
index a13e8284dc64e..e552ba5f845cf 100644
--- a/llvm/test/CodeGen/AArch64/sign-return-address.ll
+++ b/llvm/test/CodeGen/AArch64/sign-return-address.ll
@@ -45,7 +45,7 @@ define i32 @leaf_sign_all(i32 %x) "sign-return-address"="all" {
; DWARFCFI-COMPAT: // %bb.0:
; DWARFCFI-COMPAT-NEXT: hint #25
; DWARFCFI-COMPAT-NEXT: .cfi_negate_ra_state
-; ALWAYS-CFI-COMPAT: .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI-COMPAT: .cfi_set_ra_state 1, 0
; DWARFCFI-COMPAT-NEXT: hint #29
; DWARFCFI-COMPAT-NEXT: ret
;
@@ -54,7 +54,7 @@ define i32 @leaf_sign_all(i32 %x) "sign-return-address"="all" {
; DWARFCFI-V83A: // %bb.0:
; DWARFCFI-V83A-NEXT: paciasp
; DWARFCFI-V83A-NEXT: .cfi_negate_ra_state
-; ALWAYS-CFI-V83A: .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI-V83A: .cfi_set_ra_state 1, 0
; DWARFCFI-V83A-NEXT: retaa
;
; NEGATE-CFI-COMPAT-LABEL: leaf_sign_all:
@@ -106,7 +106,7 @@ define i64 @leaf_clobbers_lr(i64 %x) "sign-return-address"="non-leaf" {
; DWARFCFI-COMPAT: // %bb.0:
; DWARFCFI-COMPAT-NEXT: hint #25
; DWARFCFI-COMPAT-NEXT: .cfi_negate_ra_state
-; ALWAYS-CFI-COMPAT: .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI-COMPAT: .cfi_set_ra_state 1, 0
; DWARFCFI-COMPAT-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
; DWARFCFI-COMPAT-NEXT: .cfi_def_cfa_offset 16
; DWARFCFI-COMPAT-NEXT: .cfi_offset w30, -16
@@ -122,7 +122,7 @@ define i64 @leaf_clobbers_lr(i64 %x) "sign-return-address"="non-leaf" {
; DWARFCFI-V83A: // %bb.0:
; DWARFCFI-V83A-NEXT: paciasp
; DWARFCFI-V83A-NEXT: .cfi_negate_ra_state
-; ALWAYS-CFI-V83A: .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI-V83A: .cfi_set_ra_state 1, 0
; DWARFCFI-V83A-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
; DWARFCFI-V83A-NEXT: .cfi_def_cfa_offset 16
; DWARFCFI-V83A-NEXT: .cfi_offset w30, -16
@@ -212,7 +212,7 @@ define i32 @non_leaf_sign_all(i32 %x) "sign-return-address"="all" {
; DWARFCFI-COMPAT: // %bb.0:
; DWARFCFI-COMPAT-NEXT: hint #25
; DWARFCFI-COMPAT-NEXT: .cfi_negate_ra_state
-; ALWAYS-CFI-COMPAT: .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI-COMPAT: .cfi_set_ra_state 1, 0
; DWARFCFI-COMPAT-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
; DWARFCFI-COMPAT-NEXT: .cfi_def_cfa_offset 16
; DWARFCFI-COMPAT-NEXT: .cfi_offset w30, -16
@@ -226,7 +226,7 @@ define i32 @non_leaf_sign_all(i32 %x) "sign-return-address"="all" {
; DWARFCFI-V83A: // %bb.0:
; DWARFCFI-V83A-NEXT: paciasp
; DWARFCFI-V83A-NEXT: .cfi_negate_ra_state
-; ALWAYS-CFI-V83A: .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI-V83A: .cfi_set_ra_state 1, 0
; DWARFCFI-V83A-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
; DWARFCFI-V83A-NEXT: .cfi_def_cfa_offset 16
; DWARFCFI-V83A-NEXT: .cfi_offset w30, -16
@@ -304,7 +304,7 @@ define i32 @non_leaf_sign_non_leaf(i32 %x) "sign-return-address"="non-leaf" {
; DWARFCFI-COMPAT: // %bb.0:
; DWARFCFI-COMPAT-NEXT: hint #25
; DWARFCFI-COMPAT-NEXT: .cfi_negate_ra_state
-; ALWAYS-CFI-COMPAT: .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI-COMPAT: .cfi_set_ra_state 1, 0
; DWARFCFI-COMPAT-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
; DWARFCFI-COMPAT-NEXT: .cfi_def_cfa_offset 16
; DWARFCFI-COMPAT-NEXT: .cfi_offset w30, -16
@@ -318,7 +318,7 @@ define i32 @non_leaf_sign_non_leaf(i32 %x) "sign-return-address"="non-leaf" {
; DWARFCFI-V83A: // %bb.0:
; DWARFCFI-V83A-NEXT: paciasp
; DWARFCFI-V83A-NEXT: .cfi_negate_ra_state
-; ALWAYS-CFI-V83A: .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI-V83A: .cfi_set_ra_state 1, 0
; DWARFCFI-V83A-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
; DWARFCFI-V83A-NEXT: .cfi_def_cfa_offset 16
; DWARFCFI-V83A-NEXT: .cfi_offset w30, -16
@@ -397,7 +397,7 @@ define i32 @non_leaf_scs(i32 %x) "sign-return-address"="non-leaf" shadowcallstac
; DWARFCFI: // %bb.0:
; DWARFCFI-NEXT: paciasp
; DWARFCFI-NEXT: .cfi_negate_ra_state
-; ALWAYS-CFI: .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI: .cfi_set_ra_state 1, 0
; DWARFCFI-NEXT: str x30, [x18], #8
; DWARFCFI-NEXT: .cfi_escape 0x16, 0x12, 0x02, 0x82, 0x78 //
; DWARFCFI-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -461,7 +461,7 @@ define void @shrink_wrap_sign_non_leaf(i32 %x, i32 %cond) "sign-return-address"=
; DWARFCFI-COMPAT-NEXT: // %bb.1: // %if.then
; DWARFCFI-COMPAT-NEXT: hint #25
; DWARFCFI-COMPAT-NEXT: .cfi_negate_ra_state
-; ALWAYS-CFI-COMPAT: .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI-COMPAT: .cfi_set_ra_state 1, 0
; DWARFCFI-COMPAT-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
; DWARFCFI-COMPAT-NEXT: .cfi_def_cfa_offset 16
; DWARFCFI-COMPAT-NEXT: .cfi_offset w30, -16
@@ -471,7 +471,7 @@ define void @shrink_wrap_sign_non_leaf(i32 %x, i32 %cond) "sign-return-address"=
; DWARFCFI-COMPAT-NEXT: .cfi_restore w30
; DWARFCFI-COMPAT-NEXT: hint #29
; DWARFCFI-COMPAT-NEXT: .cfi_negate_ra_state
-; ALWAYS-CFI-COMPAT: .cfi_llvm_set_ra_state 0, 0
+; ALWAYS-CFI-COMPAT: .cfi_set_ra_state 0, 0
; DWARFCFI-COMPAT-NEXT: .LBB8_2: // %exit
; DWARFCFI-COMPAT-NEXT: adrp x8, var
; DWARFCFI-COMPAT-NEXT: mov w9, #42 // =0x2a
@@ -485,7 +485,7 @@ define void @shrink_wrap_sign_non_leaf(i32 %x, i32 %cond) "sign-return-address"=
; DWARFCFI-V83A-NEXT: // %bb.1: // %if.then
; DWARFCFI-V83A-NEXT: paciasp
; DWARFCFI-V83A-NEXT: .cfi_negate_ra_state
-; ALWAYS-CFI-V83A: .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI-V83A: .cfi_set_ra_state 1, 0
; DWARFCFI-V83A-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
; DWARFCFI-V83A-NEXT: .cfi_def_cfa_offset 16
; DWARFCFI-V83A-NEXT: .cfi_offset w30, -16
@@ -495,7 +495,7 @@ define void @shrink_wrap_sign_non_leaf(i32 %x, i32 %cond) "sign-return-address"=
; DWARFCFI-V83A-NEXT: .cfi_restore w30
; DWARFCFI-V83A-NEXT: autiasp
; DWARFCFI-V83A-NEXT: .cfi_negate_ra_state
-; ALWAYS-CFI-V83A: .cfi_llvm_set_ra_state 0, 0
+; ALWAYS-CFI-V83A: .cfi_set_ra_state 0, 0
; DWARFCFI-V83A-NEXT: .LBB8_2: // %exit
; DWARFCFI-V83A-NEXT: adrp x8, var
; DWARFCFI-V83A-NEXT: mov w9, #42 // =0x2a
@@ -612,7 +612,7 @@ define void @shrink_wrap_sign_all(i32 %x, i32 %cond) "sign-return-address"="all"
; DWARFCFI-COMPAT: // %bb.0: // %entry
; DWARFCFI-COMPAT-NEXT: hint #25
; DWARFCFI-COMPAT-NEXT: .cfi_negate_ra_state
-; ALWAYS-CFI-COMPAT: .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI-COMPAT: .cfi_set_ra_state 1, 0
; DWARFCFI-COMPAT-NEXT: cbnz w1, .LBB9_2
; DWARFCFI-COMPAT-NEXT: // %bb.1: // %if.then
; DWARFCFI-COMPAT-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -628,7 +628,7 @@ define void @shrink_wrap_sign_all(i32 %x, i32 %cond) "sign-return-address"="all"
; DWARFCFI-COMPAT-NEXT: str x9, [x8, :lo12:var]
; DWARFCFI-COMPAT-NEXT: hint #29
; DWARFCFI-COMPAT-NEXT: .cfi_negate_ra_state
-; ALWAYS-CFI-COMPAT: .cfi_llvm_set_ra_state 0, 0
+; ALWAYS-CFI-COMPAT: .cfi_set_ra_state 0, 0
; DWARFCFI-COMPAT-NEXT: ret
;
; DWARFCFI-V83A-LABEL: shrink_wrap_sign_all:
@@ -636,7 +636,7 @@ define void @shrink_wrap_sign_all(i32 %x, i32 %cond) "sign-return-address"="all"
; DWARFCFI-V83A: // %bb.0: // %entry
; DWARFCFI-V83A-NEXT: paciasp
; DWARFCFI-V83A-NEXT: .cfi_negate_ra_state
-; ALWAYS-CFI-V83A: .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI-V83A: .cfi_set_ra_state 1, 0
; DWARFCFI-V83A-NEXT: cbnz w1, .LBB9_2
; DWARFCFI-V83A-NEXT: // %bb.1: // %if.then
; DWARFCFI-V83A-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -758,7 +758,7 @@ define i32 @leaf_sign_all_v83(i32 %x) "sign-return-address"="all" "target-featur
; DWARFCFI: // %bb.0:
; DWARFCFI-NEXT: paciasp
; DWARFCFI-NEXT: .cfi_negate_ra_state
-; ALWAYS-CFI: .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI: .cfi_set_ra_state 1, 0
; DWARFCFI-NEXT: retaa
;
; NEGATE-CFI-LABEL: leaf_sign_all_v83:
@@ -791,7 +791,7 @@ define fastcc void @spill_lr_and_tail_call(i64 %x) "sign-return-address"="all" {
; DWARFCFI-COMPAT: // %bb.0:
; DWARFCFI-COMPAT-NEXT: hint #25
; DWARFCFI-COMPAT-NEXT: .cfi_negate_ra_state
-; ALWAYS-CFI-COMPAT: .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI-COMPAT: .cfi_set_ra_state 1, 0
; DWARFCFI-COMPAT-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
; DWARFCFI-COMPAT-NEXT: .cfi_def_cfa_offset 16
; DWARFCFI-COMPAT-NEXT: .cfi_offset w30, -16
@@ -807,7 +807,7 @@ define fastcc void @spill_lr_and_tail_call(i64 %x) "sign-return-address"="all" {
; DWARFCFI-V83A: // %bb.0:
; DWARFCFI-V83A-NEXT: paciasp
; DWARFCFI-V83A-NEXT: .cfi_negate_ra_state
-; ALWAYS-CFI-V83A: .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI-V83A: .cfi_set_ra_state 1, 0
; DWARFCFI-V83A-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
; DWARFCFI-V83A-NEXT: .cfi_def_cfa_offset 16
; DWARFCFI-V83A-NEXT: .cfi_offset w30, -16
@@ -898,7 +898,7 @@ define i32 @leaf_sign_all_a_key(i32 %x) "sign-return-address"="all" "sign-return
; DWARFCFI-COMPAT: // %bb.0:
; DWARFCFI-COMPAT-NEXT: hint #25
; DWARFCFI-COMPAT-NEXT: .cfi_negate_ra_state
-; ALWAYS-CFI-COMPAT: .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI-COMPAT: .cfi_set_ra_state 1, 0
; DWARFCFI-COMPAT-NEXT: hint #29
; DWARFCFI-COMPAT-NEXT: ret
;
@@ -907,7 +907,7 @@ define i32 @leaf_sign_all_a_key(i32 %x) "sign-return-address"="all" "sign-return
; DWARFCFI-V83A: // %bb.0:
; DWARFCFI-V83A-NEXT: paciasp
; DWARFCFI-V83A-NEXT: .cfi_negate_ra_state
-; ALWAYS-CFI-V83A: .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI-V83A: .cfi_set_ra_state 1, 0
; DWARFCFI-V83A-NEXT: retaa
;
; NEGATE-CFI-COMPAT-LABEL: leaf_sign_all_a_key:
@@ -960,7 +960,7 @@ define i32 @leaf_sign_all_b_key(i32 %x) "sign-return-address"="all" "sign-return
; DWARFCFI-COMPAT-NEXT: .cfi_b_key_frame
; DWARFCFI-COMPAT-NEXT: hint #27
; DWARFCFI-COMPAT-NEXT: .cfi_negate_ra_state
-; ALWAYS-CFI-COMPAT: .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI-COMPAT: .cfi_set_ra_state 1, 0
; DWARFCFI-COMPAT-NEXT: hint #31
; DWARFCFI-COMPAT-NEXT: ret
;
@@ -970,7 +970,7 @@ define i32 @leaf_sign_all_b_key(i32 %x) "sign-return-address"="all" "sign-return
; DWARFCFI-V83A-NEXT: .cfi_b_key_frame
; DWARFCFI-V83A-NEXT: pacibsp
; DWARFCFI-V83A-NEXT: .cfi_negate_ra_state
-; ALWAYS-CFI-V83A: .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI-V83A: .cfi_set_ra_state 1, 0
; DWARFCFI-V83A-NEXT: retab
;
; NEGATE-CFI-COMPAT-LABEL: leaf_sign_all_b_key:
@@ -1025,7 +1025,7 @@ define i32 @leaf_sign_all_v83_b_key(i32 %x) "sign-return-address"="all" "target-
; DWARFCFI-NEXT: .cfi_b_key_frame
; DWARFCFI-NEXT: pacibsp
; DWARFCFI-NEXT: .cfi_negate_ra_state
-; ALWAYS-CFI: .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI: .cfi_set_ra_state 1, 0
; DWARFCFI-NEXT: retab
;
; NEGATE-CFI-LABEL: leaf_sign_all_v83_b_key:
@@ -1058,7 +1058,7 @@ define i32 @leaf_sign_all_a_key_bti(i32 %x) "sign-return-address"="all" "sign-re
; DWARFCFI-COMPAT: // %bb.0:
; DWARFCFI-COMPAT-NEXT: hint #25
; DWARFCFI-COMPAT-NEXT: .cfi_negate_ra_state
-; ALWAYS-CFI-COMPAT: .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI-COMPAT: .cfi_set_ra_state 1, 0
; DWARFCFI-COMPAT-NEXT: hint #29
; DWARFCFI-COMPAT-NEXT: ret
;
@@ -1067,7 +1067,7 @@ define i32 @leaf_sign_all_a_key_bti(i32 %x) "sign-return-address"="all" "sign-re
; DWARFCFI-V83A: // %bb.0:
; DWARFCFI-V83A-NEXT: paciasp
; DWARFCFI-V83A-NEXT: .cfi_negate_ra_state
-; ALWAYS-CFI-V83A: .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI-V83A: .cfi_set_ra_state 1, 0
; DWARFCFI-V83A-NEXT: retaa
;
; NEGATE-CFI-COMPAT-LABEL: leaf_sign_all_a_key_bti:
@@ -1121,7 +1121,7 @@ define i32 @leaf_sign_all_b_key_bti(i32 %x) "sign-return-address"="all" "sign-re
; DWARFCFI-COMPAT-NEXT: .cfi_b_key_frame
; DWARFCFI-COMPAT-NEXT: hint #27
; DWARFCFI-COMPAT-NEXT: .cfi_negate_ra_state
-; ALWAYS-CFI-COMPAT: .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI-COMPAT: .cfi_set_ra_state 1, 0
; DWARFCFI-COMPAT-NEXT: hint #31
; DWARFCFI-COMPAT-NEXT: ret
;
@@ -1131,7 +1131,7 @@ define i32 @leaf_sign_all_b_key_bti(i32 %x) "sign-return-address"="all" "sign-re
; DWARFCFI-V83A-NEXT: .cfi_b_key_frame
; DWARFCFI-V83A-NEXT: pacibsp
; DWARFCFI-V83A-NEXT: .cfi_negate_ra_state
-; ALWAYS-CFI-V83A: .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI-V83A: .cfi_set_ra_state 1, 0
; DWARFCFI-V83A-NEXT: retab
;
; NEGATE-CFI-COMPAT-LABEL: leaf_sign_all_b_key_bti:
@@ -1187,7 +1187,7 @@ define i32 @leaf_sign_all_v83_b_key_bti(i32 %x) "sign-return-address"="all" "tar
; DWARFCFI-NEXT: .cfi_b_key_frame
; DWARFCFI-NEXT: pacibsp
; DWARFCFI-NEXT: .cfi_negate_ra_state
-; ALWAYS-CFI: .cfi_llvm_set_ra_state 1, 0
+; ALWAYS-CFI: .cfi_set_ra_state 1, 0
; DWARFCFI-NEXT: retab
;
; NEGATE-CFI-LABEL: leaf_sign_all_v83_b_key_bti:
diff --git a/llvm/test/CodeGen/AArch64/swifttail-ptrauth.ll b/llvm/test/CodeGen/AArch64/swifttail-ptrauth.ll
index 6c099bae66c81..3f5a435a8c3a0 100644
--- a/llvm/test/CodeGen/AArch64/swifttail-ptrauth.ll
+++ b/llvm/test/CodeGen/AArch64/swifttail-ptrauth.ll
@@ -20,16 +20,16 @@ define swifttailcc void @caller_to0_from0() "branch-protection-pauth-lr" "sign-r
; CHECK: // %bb.0:
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp0
+; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp0
; COMPAT-NEXT: .Ltmp0:
; COMPAT-NEXT: hint #25
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp0
+; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp0
; V83A-NEXT: .Ltmp0:
; V83A-NEXT: paciasp
-; V9A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp0
+; V9A-NEXT: .cfi_set_ra_state 2, .Ltmp0
; V9A-NEXT: .Ltmp0:
; V9A-NEXT: paciasppc
@@ -51,16 +51,16 @@ define swifttailcc void @caller_to0_from0() "branch-protection-pauth-lr" "sign-r
; COMPAT-NEXT: adrp x16, .Ltmp0
; COMPAT-NEXT: add x16, x16, :lo12:.Ltmp0
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_llvm_set_ra_state 0, 0
+; COMPAT-NEXT: .cfi_set_ra_state 0, 0
; COMPAT-NEXT: hint #29
; V83A-NEXT: adrp x16, .Ltmp0
; V83A-NEXT: add x16, x16, :lo12:.Ltmp0
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_llvm_set_ra_state 0, 0
+; V83A-NEXT: .cfi_set_ra_state 0, 0
; V83A-NEXT: autiasp
-; V9A-NEXT: .cfi_llvm_set_ra_state 0, 0
+; V9A-NEXT: .cfi_set_ra_state 0, 0
; V9A-NEXT: autiasppc .Ltmp0
; PAUTH-NEXT: autiasp
@@ -83,16 +83,16 @@ define swifttailcc void @caller_to0_from8([8 x i64], i64) "branch-protection-pau
; CHECK: // %bb.0:
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp1
+; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp1
; COMPAT-NEXT: .Ltmp1:
; COMPAT-NEXT: hint #25
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp1
+; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp1
; V83A-NEXT: .Ltmp1:
; V83A-NEXT: paciasp
-; V9A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp1
+; V9A-NEXT: .cfi_set_ra_state 2, .Ltmp1
; V9A-NEXT: .Ltmp1:
; V9A-NEXT: paciasppc
@@ -115,16 +115,16 @@ define swifttailcc void @caller_to0_from8([8 x i64], i64) "branch-protection-pau
; COMPAT-NEXT: adrp x16, .Ltmp1
; COMPAT-NEXT: add x16, x16, :lo12:.Ltmp1
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_llvm_set_ra_state 0, 0
+; COMPAT-NEXT: .cfi_set_ra_state 0, 0
; COMPAT-NEXT: hint #29
; V83A-NEXT: adrp x16, .Ltmp1
; V83A-NEXT: add x16, x16, :lo12:.Ltmp1
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_llvm_set_ra_state 0, 0
+; V83A-NEXT: .cfi_set_ra_state 0, 0
; V83A-NEXT: autiasp
-; V9A-NEXT: .cfi_llvm_set_ra_state 0, 0
+; V9A-NEXT: .cfi_set_ra_state 0, 0
; V9A-NEXT: autiasppc .Ltmp1
; PAUTH-NEXT: autiasp
@@ -143,16 +143,16 @@ define swifttailcc void @caller_to8_from0() "branch-protection-pauth-lr" "sign-r
; CHECK: // %bb.0:
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp2
+; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp2
; COMPAT-NEXT: .Ltmp2:
; COMPAT-NEXT: hint #25
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp2
+; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp2
; V83A-NEXT: .Ltmp2:
; V83A-NEXT: paciasp
-; V9A-NEXT: .cfi_llvm_set_ra_state 2, .Ltmp2
+; V9A-NEXT: .cfi_set_ra_state 2, .Ltmp2
; V9A-NEXT: .Ltmp2:
; V9A-NEXT: paciasppc
@@ -178,18 +178,18 @@ define swifttailcc void @caller_to8_from0() "branch-protection-pauth-lr" "sign-r
; COMPAT-NEXT: adrp x15, .Ltmp2
; COMPAT-NEXT: add x15, x15, :lo12:.Ltmp2
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_llvm_set_ra_state 0, 0
+; COMPAT-NEXT: .cfi_set_ra_state 0, 0
; COMPAT-NEXT: hint #12
; V83A-NEXT: adrp x15, .Ltmp2
; V83A-NEXT: add x15, x15, :lo12:.Ltmp2
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_llvm_set_ra_state 0, 0
+; V83A-NEXT: .cfi_set_ra_state 0, 0
; V83A-NEXT: autia1716
; V9A-NEXT: adrp x15, .Ltmp2
; V9A-NEXT: add x15, x15, :lo12:.Ltmp2
-; V9A-NEXT: .cfi_llvm_set_ra_state 0, 0
+; V9A-NEXT: .cfi_set_ra_state 0, 0
; V9A-NEXT: autia171615
; PAUTH-NEXT: autia1716
diff --git a/llvm/test/MC/AArch64/cfi_llvm_set_ra_state-shrinkwrap.s b/llvm/test/MC/AArch64/cfi_set_ra_state-shrinkwrap.s
similarity index 94%
rename from llvm/test/MC/AArch64/cfi_llvm_set_ra_state-shrinkwrap.s
rename to llvm/test/MC/AArch64/cfi_set_ra_state-shrinkwrap.s
index d75c6a164a06d..67c12461c9fd6 100644
--- a/llvm/test/MC/AArch64/cfi_llvm_set_ra_state-shrinkwrap.s
+++ b/llvm/test/MC/AArch64/cfi_set_ra_state-shrinkwrap.s
@@ -5,23 +5,23 @@
.globl _pauth
_pauth:
.cfi_startproc
- .cfi_llvm_set_ra_state 1, 0
+ .cfi_set_ra_state 1, 0
pacibsp
- .cfi_llvm_set_ra_state 0, -4
+ .cfi_set_ra_state 0, -4
retab
.cfi_endproc
-# Vanilla ptrauth-returns=pauth-lr frame, with .cfi_llvm_set_ra_state instead of
+# Vanilla ptrauth-returns=pauth-lr frame, with .cfi_set_ra_state instead of
# the deprecated .cfi_negate_ra_state_with_pc
.globl _pauthlr
_pauthlr:
.cfi_startproc
- .cfi_llvm_set_ra_state 2, 0
+ .cfi_set_ra_state 2, 0
pacibsppc
- .cfi_llvm_set_ra_state 0, -4
+ .cfi_set_ra_state 0, -4
retabsppc _pauthlr
.cfi_endproc
@@ -44,14 +44,14 @@ LBB1:
adrp x16, LBB0 at PAGE
add x16, x16, LBB0 at PAGEOFF
- .cfi_llvm_set_ra_state 0, 16
+ .cfi_set_ra_state 0, 16
autibsppcr x16
mov w0, #42
ret
LBB0:
- .cfi_llvm_set_ra_state 2, 0
+ .cfi_set_ra_state 2, 0
pacibsppc
stp x29, x30, [sp, #-16]!
diff --git a/llvm/test/MC/AArch64/cfi_llvm_set_ra_state.s b/llvm/test/MC/AArch64/cfi_set_ra_state.s
similarity index 72%
rename from llvm/test/MC/AArch64/cfi_llvm_set_ra_state.s
rename to llvm/test/MC/AArch64/cfi_set_ra_state.s
index f7c48cecbec6a..f42a2f4cbb2bb 100644
--- a/llvm/test/MC/AArch64/cfi_llvm_set_ra_state.s
+++ b/llvm/test/MC/AArch64/cfi_set_ra_state.s
@@ -5,23 +5,23 @@
# RUN: llvm-readobj --hex-dump=.eh_frame %t.o | FileCheck %s --check-prefix=HEX
.cfi_startproc
- .cfi_llvm_set_ra_state 1, 0
- .cfi_llvm_set_ra_state 2, 0
- .cfi_llvm_set_ra_state 0, -4
- .cfi_llvm_set_ra_state 2, LSigningInstrAfter
+ .cfi_set_ra_state 1, 0
+ .cfi_set_ra_state 2, 0
+ .cfi_set_ra_state 0, -4
+ .cfi_set_ra_state 2, LSigningInstrAfter
LSigningInstrBefore:
nop
nop
LSigningInstrAfter:
- .cfi_llvm_set_ra_state 2, LSigningInstrBefore
+ .cfi_set_ra_state 2, LSigningInstrBefore
.cfi_endproc
# ASM: .cfi_startproc
-# ASM-NEXT: .cfi_llvm_set_ra_state 1, 0
-# ASM-NEXT: .cfi_llvm_set_ra_state 2, 0
-# ASM-NEXT: .cfi_llvm_set_ra_state 0, -4
-# ASM-NEXT: .cfi_llvm_set_ra_state 2, LSigningInstrAfter
-# ASM: .cfi_llvm_set_ra_state 2, LSigningInstrBefore
+# ASM-NEXT: .cfi_set_ra_state 1, 0
+# ASM-NEXT: .cfi_set_ra_state 2, 0
+# ASM-NEXT: .cfi_set_ra_state 0, -4
+# ASM-NEXT: .cfi_set_ra_state 2, LSigningInstrAfter
+# ASM: .cfi_set_ra_state 2, LSigningInstrBefore
# ASM-NEXT: .cfi_endproc
# DWARF: DW_CFA_AARCH64_set_ra_state: 1 0
diff --git a/llvm/test/MC/AArch64/directives-case_insensitive.s b/llvm/test/MC/AArch64/directives-case_insensitive.s
index a9d67a99e65c0..88f70521543f9 100644
--- a/llvm/test/MC/AArch64/directives-case_insensitive.s
+++ b/llvm/test/MC/AArch64/directives-case_insensitive.s
@@ -33,13 +33,13 @@ fred .REQ x5
.CFI_STARTPROC
.CFI_NEGATE_RA_STATE
.CFI_NEGATE_RA_STATE_WITH_PC
-.CFI_LLVM_SET_RA_STATE 2, 0
+.CFI_SET_RA_STATE 2, 0
.CFI_B_KEY_FRAME
.CFI_ENDPROC
// CHECK: .cfi_startproc
// CHECK: .cfi_negate_ra_state
// CHECK: .cfi_negate_ra_state_with_pc
-// CHECK: .cfi_llvm_set_ra_state 2, 0
+// CHECK: .cfi_set_ra_state 2, 0
// CHECK: .cfi_b_key_frame
// CHECK: .cfi_endproc
>From a8f9de296f863fa6a68aad937cdc52f7839adc97 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Tue, 30 Jun 2026 11:09:14 -0700
Subject: [PATCH 29/58] unreachable
---
llvm/lib/MC/MCDwarf.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/llvm/lib/MC/MCDwarf.cpp b/llvm/lib/MC/MCDwarf.cpp
index 209fcbf056e12..b06ab36d1d66d 100644
--- a/llvm/lib/MC/MCDwarf.cpp
+++ b/llvm/lib/MC/MCDwarf.cpp
@@ -1332,7 +1332,7 @@ void MCCFIInstruction::replaceRegister(unsigned FromReg, unsigned ToReg) {
ReplaceReg(F.MaskRegister);
},
[](LLVMSetRAStateFields &) {
- assert(false && ".cfi_set_ra_state does not have registers");
+ llvm_unreachable(".cfi_set_ra_state does not have registers");
});
std::visit(Visitor, ExtraFields);
}
>From 76a4edba1e9b63368a3141eb25225dd73f8ad60b Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Tue, 30 Jun 2026 12:18:54 -0700
Subject: [PATCH 30/58] fix RA sign state detection
---
libunwind/src/DwarfInstructions.hpp | 45 ++++++++++++-----------------
1 file changed, 18 insertions(+), 27 deletions(-)
diff --git a/libunwind/src/DwarfInstructions.hpp b/libunwind/src/DwarfInstructions.hpp
index 0133b2dd330e7..83cceb7eb0cb1 100644
--- a/libunwind/src/DwarfInstructions.hpp
+++ b/libunwind/src/DwarfInstructions.hpp
@@ -76,10 +76,14 @@ class DwarfInstructions {
__builtin_unreachable();
}
#if defined(_LIBUNWIND_TARGET_AARCH64)
- static bool isReturnAddressSigned(A &addressSpace, R registers, pint_t cfa,
- PrologInfo &prolog);
- static bool isReturnAddressSignedWithPC(A &addressSpace, R registers,
- pint_t cfa, PrologInfo &prolog);
+ enum RASignStatus {
+ RANotSigned = 0,
+ RASigned = 1,
+ RASignedWithPC = 2,
+ };
+ static RASignStatus getReturnAddressSignStatus(A &addressSpace, R registers,
+ pint_t cfa,
+ PrologInfo &prolog);
#endif
};
@@ -185,7 +189,8 @@ v128 DwarfInstructions<A, R>::getSavedVectorRegister(
}
#if defined(_LIBUNWIND_TARGET_AARCH64)
template <typename A, typename R>
-bool DwarfInstructions<A, R>::isReturnAddressSigned(A &addressSpace,
+DwarfInstructions<A, R>::RASignStatus
+DwarfInstructions<A, R>::getReturnAddressSignStatus(A &addressSpace,
R registers, pint_t cfa,
PrologInfo &prolog) {
pint_t raSignState;
@@ -195,24 +200,9 @@ bool DwarfInstructions<A, R>::isReturnAddressSigned(A &addressSpace,
else
raSignState = getSavedRegister(addressSpace, registers, cfa, regloc);
- // Only bit[0] is meaningful.
- return raSignState & 0x01;
-}
-
-template <typename A, typename R>
-bool DwarfInstructions<A, R>::isReturnAddressSignedWithPC(A &addressSpace,
- R registers,
- pint_t cfa,
- PrologInfo &prolog) {
- pint_t raSignState;
- auto regloc = prolog.savedRegisters[UNW_AARCH64_RA_SIGN_STATE];
- if (regloc.location == CFI_Parser<A>::kRegisterUnused)
- raSignState = static_cast<pint_t>(regloc.value);
- else
- raSignState = getSavedRegister(addressSpace, registers, cfa, regloc);
-
- // Only bit[1] is meaningful.
- return raSignState & 0x02;
+ // bits[1:0] describe how RA is signed.
+ assert((raSignState & 0x3) != 3 && "unexpected RA sign state");
+ return static_cast<RASignStatus>(raSignState & 0x3);
}
#endif
@@ -325,8 +315,9 @@ int DwarfInstructions<A, R>::stepWithDwarf(
// return address needs to be authenticated before the return address is
// restored. autia1716 is used instead of autia as autia1716 assembles
// to a NOP on pre-v8.3a architectures.
- if ((R::getArch() == REGISTERS_ARM64) &&
- isReturnAddressSigned(addressSpace, registers, cfa, prolog) &&
+ RASignStatus RAState =
+ getReturnAddressSignStatus(addressSpace, registers, cfa, prolog);
+ if ((R::getArch() == REGISTERS_ARM64) && RAState != RANotSigned &&
returnAddress != 0) {
#if !defined(_LIBUNWIND_IS_NATIVE_ONLY)
return UNW_ECROSSRASIGNING;
@@ -337,9 +328,9 @@ int DwarfInstructions<A, R>::stepWithDwarf(
// We use the hint versions of the authentication instructions below to
// ensure they're assembled by the compiler even for targets with no
// FEAT_PAuth/FEAT_PAuth_LR support.
- if (isReturnAddressSignedWithPC(addressSpace, registers, cfa, prolog)) {
+ if (RAState == RASignedWithPC) {
register unsigned long long x15 __asm("x15") =
- prolog.ptrAuthDiversifier;
+ prolog.ptrAuthDiversifier;
if (cieInfo.addressesSignedWithBKey) {
asm("hint 0x27\n\t" // pacm
"hint 0xe"
>From a9324dd801af66e395e05986f81923cd534ef43a Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Tue, 30 Jun 2026 12:39:43 -0700
Subject: [PATCH 31/58] clang-format
---
llvm/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp | 3 +--
llvm/lib/Target/AArch64/AArch64PointerAuth.cpp | 5 ++---
2 files changed, 3 insertions(+), 5 deletions(-)
diff --git a/llvm/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp b/llvm/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp
index 01a1bbabf02a2..b0de5f563ac29 100644
--- a/llvm/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp
+++ b/llvm/lib/CodeGen/AsmPrinter/AsmPrinterDwarf.cpp
@@ -240,8 +240,7 @@ void AsmPrinter::emitCFIInstruction(const MCCFIInstruction &Inst) const {
break;
case MCCFIInstruction::OpLLVMSetRAState: {
if (MCSymbol *Symbol = Inst.getRASignSymbol())
- OutStreamer->emitCFILLVMSetRAState(Inst.getRASignState(),
- Symbol, Loc);
+ OutStreamer->emitCFILLVMSetRAState(Inst.getRASignState(), Symbol, Loc);
else
OutStreamer->emitCFILLVMSetRAState(Inst.getRASignState(),
Inst.getRASignOffset(), Loc);
diff --git a/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp b/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
index 9d14367d42be4..e345bd168a5b7 100644
--- a/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
+++ b/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
@@ -48,9 +48,8 @@ enum class SetRAStateMode {
};
cl::opt<SetRAStateMode> CFILLVMSetRASignStateMode(
"aarch64-cfi-llvm-set-ra-sign-state", cl::init(SetRAStateMode::PAuthLR),
- cl::desc(
- "Control emission of .cfi_set_ra_state for PAC return address "
- "signing CFI"),
+ cl::desc("Control emission of .cfi_set_ra_state for PAC return address "
+ "signing CFI"),
cl::values(clEnumValN(SetRAStateMode::Never, "never",
"Always use legacy .cfi_negate_ra_state[_with_pc]"),
clEnumValN(SetRAStateMode::PAuthLR, "pauth-lr",
>From 8b15f9954d3c73854a60d7a062c519ded338883c Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Tue, 30 Jun 2026 12:41:27 -0700
Subject: [PATCH 32/58] typename
---
libunwind/src/DwarfInstructions.hpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libunwind/src/DwarfInstructions.hpp b/libunwind/src/DwarfInstructions.hpp
index 83cceb7eb0cb1..3f000921554c6 100644
--- a/libunwind/src/DwarfInstructions.hpp
+++ b/libunwind/src/DwarfInstructions.hpp
@@ -189,7 +189,7 @@ v128 DwarfInstructions<A, R>::getSavedVectorRegister(
}
#if defined(_LIBUNWIND_TARGET_AARCH64)
template <typename A, typename R>
-DwarfInstructions<A, R>::RASignStatus
+typename DwarfInstructions<A, R>::RASignStatus
DwarfInstructions<A, R>::getReturnAddressSignStatus(A &addressSpace,
R registers, pint_t cfa,
PrologInfo &prolog) {
>From 046c9e6d4e16ab5ef7352d061d703507e2264ac0 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Wed, 1 Jul 2026 09:29:17 -0700
Subject: [PATCH 33/58] clang-format
---
libunwind/src/DwarfInstructions.hpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libunwind/src/DwarfInstructions.hpp b/libunwind/src/DwarfInstructions.hpp
index 3f000921554c6..267ee6ab4693d 100644
--- a/libunwind/src/DwarfInstructions.hpp
+++ b/libunwind/src/DwarfInstructions.hpp
@@ -330,7 +330,7 @@ int DwarfInstructions<A, R>::stepWithDwarf(
// FEAT_PAuth/FEAT_PAuth_LR support.
if (RAState == RASignedWithPC) {
register unsigned long long x15 __asm("x15") =
- prolog.ptrAuthDiversifier;
+ prolog.ptrAuthDiversifier;
if (cieInfo.addressesSignedWithBKey) {
asm("hint 0x27\n\t" // pacm
"hint 0xe"
>From f8b6bbe0c5b9cf7ba65d3697bfbb4c6fd8f9ab90 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Thu, 2 Jul 2026 13:05:03 -0700
Subject: [PATCH 34/58] relax ra sign state checks on
!_LIBUNWIND_TARGET_AARCH64_AUTHENTICATED_UNWINDING
---
libunwind/test/ra_sign_state.pass.cpp | 4 ----
1 file changed, 4 deletions(-)
diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index 2244cddca0786..9649ffc6afa5b 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -89,8 +89,6 @@ static _Unwind_Reason_Code frame_handler(struct _Unwind_Context *ctx,
#if defined(_LIBUNWIND_TARGET_AARCH64_AUTHENTICATED_UNWINDING)
assert(ra_sign_state == 1 || ra_sign_state == 2);
-#else
- assert(ra_sign_state == 0);
#endif
return _URC_NO_REASON;
@@ -139,8 +137,6 @@ FUNC_ATTR(main_func) int main(int, char **) {
ret = check_vanilla("check_vanilla");
#if defined(_LIBUNWIND_TARGET_AARCH64_AUTHENTICATED_UNWINDING)
assert(ret == 1 || ret == 2);
-#else
- assert(ret == 0);
#endif
if (!checkHasPAuth()) {
>From 0ee9034303e03388440b807b147e8f04c3bb977e Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Thu, 2 Jul 2026 13:12:32 -0700
Subject: [PATCH 35/58] streamline printf debug
---
libunwind/test/ra_sign_state.pass.cpp | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)
diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index 9649ffc6afa5b..0db48abd5151c 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -76,6 +76,10 @@ static _Unwind_Reason_Code frame_handler(struct _Unwind_Context *ctx,
(uint64_t)_Unwind_GetGR(ctx, UNW_AARCH64_RA_SIGN_STATE);
uintptr_t ip = _Unwind_GetIP(ctx);
+
+ printf("UNW_AARCH64_RA_SIGN_STATE @ 0x%" PRIx64 " = %" PRIu64 "\n", ip,
+ ra_sign_state);
+
if (ip >= (uintptr_t)FUNC_START(main_func) &&
ip < (uintptr_t)FUNC_END(main_func)) {
@@ -94,22 +98,18 @@ static _Unwind_Reason_Code frame_handler(struct _Unwind_Context *ctx,
return _URC_NO_REASON;
}
-__attribute__((noinline)) extern "C" uintptr_t
-get_main_ra_sign_state(const char *note) {
- printf("check: %s\n", note);
+__attribute__((noinline)) extern "C" uintptr_t get_main_ra_sign_state() {
uint64_t sign_state = -1;
_Unwind_Backtrace(frame_handler, &sign_state);
- printf("UNW_AARCH64_RA_SIGN_STATE for %s = %" PRIu64 "\n", note, sign_state);
assert((sign_state & 0x3) == sign_state);
return sign_state;
}
-__attribute__((noinline)) static uint64_t check_vanilla(const char *note) {
- return get_main_ra_sign_state(note);
+__attribute__((noinline)) static uint64_t check_vanilla() {
+ return get_main_ra_sign_state();
}
-__attribute__((naked, target("pauth"))) static uint64_t
-check_negate(const char *note) {
+__attribute__((naked, target("pauth"))) static uint64_t check_negate() {
// clang-format off
asm(".cfi_negate_ra_state\n"
"pacibsp\n"
@@ -134,7 +134,7 @@ check_negate(const char *note) {
FUNC_ATTR(main_func) int main(int, char **) {
uint64_t ret;
- ret = check_vanilla("check_vanilla");
+ ret = check_vanilla();
#if defined(_LIBUNWIND_TARGET_AARCH64_AUTHENTICATED_UNWINDING)
assert(ret == 1 || ret == 2);
#endif
@@ -144,7 +144,7 @@ FUNC_ATTR(main_func) int main(int, char **) {
return 0;
}
- ret = check_negate("check_negate");
+ ret = check_negate();
assert(ret == 1);
printf("success\n");
>From 408a3beb61645b529a375a1ac61df67726548f4d Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Thu, 2 Jul 2026 15:55:15 -0700
Subject: [PATCH 36/58] PRIxPTR
---
libunwind/test/ra_sign_state.pass.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index 0db48abd5151c..13159131ee619 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -77,7 +77,7 @@ static _Unwind_Reason_Code frame_handler(struct _Unwind_Context *ctx,
uintptr_t ip = _Unwind_GetIP(ctx);
- printf("UNW_AARCH64_RA_SIGN_STATE @ 0x%" PRIx64 " = %" PRIu64 "\n", ip,
+ printf("UNW_AARCH64_RA_SIGN_STATE @ 0x%" PRIxPTR " = %" PRIu64 "\n", ip,
ra_sign_state);
if (ip >= (uintptr_t)FUNC_START(main_func) &&
>From b7ac51e9554fb94b7e3978a6fa303101a5c142fc Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Thu, 2 Jul 2026 15:55:15 -0700
Subject: [PATCH 37/58] PRIxPTR
---
libunwind/test/ra_sign_state.pass.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index 5a15e39c7bdb2..9a5230a588cd9 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -80,7 +80,7 @@ static _Unwind_Reason_Code frame_handler(struct _Unwind_Context *ctx,
uintptr_t ip = _Unwind_GetIP(ctx);
- printf("UNW_AARCH64_RA_SIGN_STATE @ 0x%" PRIx64 " = %" PRIu64 "\n", ip,
+ printf("UNW_AARCH64_RA_SIGN_STATE @ 0x%" PRIxPTR " = %" PRIu64 "\n", ip,
ra_sign_state);
if (ip >= (uintptr_t)FUNC_START(main_func) &&
>From 832270f1217ff48242761f1d551d57a887c2b29e Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Mon, 6 Jul 2026 16:23:05 -0700
Subject: [PATCH 38/58] s/createLLVMSetRAState/createSetRAState/g
---
llvm/include/llvm/CodeGen/CFIInstBuilder.h | 3 +--
llvm/include/llvm/MC/MCDwarf.h | 10 +++++-----
llvm/lib/CodeGen/MIRParser/MIParser.cpp | 4 ++--
llvm/lib/MC/MCStreamer.cpp | 4 ++--
4 files changed, 10 insertions(+), 11 deletions(-)
diff --git a/llvm/include/llvm/CodeGen/CFIInstBuilder.h b/llvm/include/llvm/CodeGen/CFIInstBuilder.h
index 414fee4b38a77..fa64ab6d6c23f 100644
--- a/llvm/include/llvm/CodeGen/CFIInstBuilder.h
+++ b/llvm/include/llvm/CodeGen/CFIInstBuilder.h
@@ -89,8 +89,7 @@ class CFIInstBuilder {
}
void buildSetRAState(unsigned State, MCSymbol *PACSym) const {
- insertCFIInst(
- MCCFIInstruction::createLLVMSetRAState(nullptr, State, PACSym));
+ insertCFIInst(MCCFIInstruction::createSetRAState(nullptr, State, PACSym));
}
void buildRegister(MCRegister Reg1, MCRegister Reg2) const {
diff --git a/llvm/include/llvm/MC/MCDwarf.h b/llvm/include/llvm/MC/MCDwarf.h
index b570a9659f108..efb32acd919e2 100644
--- a/llvm/include/llvm/MC/MCDwarf.h
+++ b/llvm/include/llvm/MC/MCDwarf.h
@@ -705,16 +705,16 @@ class MCCFIInstruction {
/// .cfi_set_ra_state AArch64 set RA sign state,
// with a symbolic offset to the signing instruction.
- static MCCFIInstruction createLLVMSetRAState(MCSymbol *L, unsigned State,
- MCSymbol *PACSym = nullptr,
- SMLoc Loc = {}) {
+ static MCCFIInstruction createSetRAState(MCSymbol *L, unsigned State,
+ MCSymbol *PACSym = nullptr,
+ SMLoc Loc = {}) {
return {OpLLVMSetRAState, L, LLVMSetRAStateFields{State, PACSym, 0}, Loc};
}
/// .cfi_set_ra_state AArch64 set RA sign state,
/// with a pre-computed factored offset to the signing instruction.
- static MCCFIInstruction createLLVMSetRAState(MCSymbol *L, unsigned State,
- int64_t Offset, SMLoc Loc = {}) {
+ static MCCFIInstruction createSetRAState(MCSymbol *L, unsigned State,
+ int64_t Offset, SMLoc Loc = {}) {
return {OpLLVMSetRAState, L, LLVMSetRAStateFields{State, nullptr, Offset},
Loc};
}
diff --git a/llvm/lib/CodeGen/MIRParser/MIParser.cpp b/llvm/lib/CodeGen/MIRParser/MIParser.cpp
index fb858c81c735c..0c2c31247ebb8 100644
--- a/llvm/lib/CodeGen/MIRParser/MIParser.cpp
+++ b/llvm/lib/CodeGen/MIRParser/MIParser.cpp
@@ -2862,13 +2862,13 @@ bool MIParser::parseCFIOperand(MachineOperand &Dest) {
PACSym = getOrCreateMCSymbol(Token.stringValue());
lex();
CFIIndex = MF.addFrameInst(
- MCCFIInstruction::createLLVMSetRAState(nullptr, State, PACSym));
+ MCCFIInstruction::createSetRAState(nullptr, State, PACSym));
} else if (Token.is(MIToken::IntegerLiteral)) {
int Offset;
if (parseCFIOffset(Offset))
return true;
CFIIndex = MF.addFrameInst(
- MCCFIInstruction::createLLVMSetRAState(nullptr, State, Offset));
+ MCCFIInstruction::createSetRAState(nullptr, State, Offset));
} else {
return error("expected '<mcsymbol ...>' or integer offset for "
"cfi_set_ra_state");
diff --git a/llvm/lib/MC/MCStreamer.cpp b/llvm/lib/MC/MCStreamer.cpp
index 7ca8658f53afc..cf1ae4373b195 100644
--- a/llvm/lib/MC/MCStreamer.cpp
+++ b/llvm/lib/MC/MCStreamer.cpp
@@ -752,7 +752,7 @@ void MCStreamer::emitCFILLVMSetRAState(unsigned State, MCSymbol *PACSym,
SMLoc Loc) {
MCSymbol *Label = emitCFILabel();
MCCFIInstruction Instruction =
- MCCFIInstruction::createLLVMSetRAState(Label, State, PACSym, Loc);
+ MCCFIInstruction::createSetRAState(Label, State, PACSym, Loc);
MCDwarfFrameInfo *CurFrame = getCurrentDwarfFrameInfo();
if (!CurFrame)
return;
@@ -763,7 +763,7 @@ void MCStreamer::emitCFILLVMSetRAState(unsigned State, int64_t Offset,
SMLoc Loc) {
MCSymbol *Label = emitCFILabel();
MCCFIInstruction Instruction =
- MCCFIInstruction::createLLVMSetRAState(Label, State, Offset, Loc);
+ MCCFIInstruction::createSetRAState(Label, State, Offset, Loc);
MCDwarfFrameInfo *CurFrame = getCurrentDwarfFrameInfo();
if (!CurFrame)
return;
>From 9bc821a1b56d91f07f939d097f2b7c19773459a1 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Mon, 6 Jul 2026 16:25:38 -0700
Subject: [PATCH 39/58] comment -> var names
---
.../llvm/DebugInfo/DWARF/LowLevel/DWARFCFIProgram.h | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/llvm/include/llvm/DebugInfo/DWARF/LowLevel/DWARFCFIProgram.h b/llvm/include/llvm/DebugInfo/DWARF/LowLevel/DWARFCFIProgram.h
index 6e4aca5c0a8fb..529cbcb2a88bf 100644
--- a/llvm/include/llvm/DebugInfo/DWARF/LowLevel/DWARFCFIProgram.h
+++ b/llvm/include/llvm/DebugInfo/DWARF/LowLevel/DWARFCFIProgram.h
@@ -123,10 +123,9 @@ class CFIProgram {
addInstruction(Opcode);
break;
case DW_CFA_AARCH64_set_ra_state: {
- // Operands: ULEB128 ra_state, SLEB128 offset
- uint64_t Op1 = Data.getULEB128(C);
- uint64_t Op2 = (uint64_t)Data.getSLEB128(C);
- addInstruction(Opcode, Op1, Op2);
+ uint64_t RAState = Data.getULEB128(C);
+ uint64_t FactoredOffset = (uint64_t)Data.getSLEB128(C);
+ addInstruction(Opcode, RAState, FactoredOffset);
break;
}
case DW_CFA_set_loc:
>From 8af03bbbb3f1fd62c44b7bc43ebe6e91834c543e Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Mon, 6 Jul 2026 16:27:03 -0700
Subject: [PATCH 40/58] clarify that zero offset's are okay
---
llvm/include/llvm/MC/MCDwarf.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/llvm/include/llvm/MC/MCDwarf.h b/llvm/include/llvm/MC/MCDwarf.h
index efb32acd919e2..3534a4f349331 100644
--- a/llvm/include/llvm/MC/MCDwarf.h
+++ b/llvm/include/llvm/MC/MCDwarf.h
@@ -601,10 +601,10 @@ class MCCFIInstruction {
/// or DW_AARCH64_RA_SIGNED_SP_PC).
unsigned State;
/// Symbol pointing to the signing instruction.
- /// Precisely one of \p PACSym xor \p Offset should be non-zero.
+ /// Precisely one of \p PACSym xor \p Offset should be set.
MCSymbol *PACSym;
/// Factored offset to the signing instruction.
- /// Precisely one of \p PACSym xor \p Offset should be non-zero.
+ /// Precisely one of \p PACSym xor \p Offset should be set.
int64_t Offset;
};
>From 9d748a462296e8fcd0d06f7be9f6f601ebaaa0f5 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Mon, 6 Jul 2026 16:28:25 -0700
Subject: [PATCH 41/58] clarify pronoun
---
llvm/lib/Target/AArch64/AArch64PointerAuth.cpp | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp b/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
index e345bd168a5b7..718a135285636 100644
--- a/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
+++ b/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
@@ -37,7 +37,8 @@ namespace {
///
/// Since .cfi_negate_ra_state is still sufficient for describing
/// ptrauth-returns=pauth, we default to using the new CFI only for PAuth_LR, as
-/// it is a smaller encoding than DW_CFA_AARCH64_set_ra_state.
+/// DW_CFA_AARCH64_negate_ra_state has a smaller encoding than
+/// DW_CFA_AARCH64_set_ra_state.
///
/// 1: https://github.com/ARM-software/abi-aa/pull/346
/// 2: https://github.com/ARM-software/abi-aa/issues/327
>From 9fe6ee2cef1093ab8a0d5be2844a9362f1ca8f0e Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Tue, 7 Jul 2026 14:09:43 -0700
Subject: [PATCH 42/58] refactor emitPACCFI into decoratePACWithCFI. NFC
---
.../lib/Target/AArch64/AArch64PointerAuth.cpp | 59 +++++++++++++------
1 file changed, 41 insertions(+), 18 deletions(-)
diff --git a/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp b/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
index 718a135285636..a2b2753a9d04a 100644
--- a/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
+++ b/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
@@ -110,10 +110,18 @@ static void emitEpiloguePACSymOffsetIntoReg(const TargetInstrInfo &TII,
.setMIFlag(MachineInstr::FrameDestroy);
}
-static void emitPACCFI(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI,
- bool EmitCFI, MCSymbol *PACSym) {
- if (!EmitCFI)
+// Wrap a given PAC instruction in CFI that describes it.
+// Depending on the type of CFI required, we may need to emit the directive
+// either before or after the instruction, so that unwinders can correctly
+// interpret the location of the signing instruction.
+template <typename BuildPACMIFn>
+static void decoratePACWithCFI(MachineBasicBlock &MBB,
+ MachineBasicBlock::iterator MBBI, bool EmitCFI,
+ BuildPACMIFn BuildPACMI) {
+ if (!EmitCFI) {
+ BuildPACMI();
return;
+ }
auto &MF = *MBB.getParent();
auto &MFnI = *MF.getInfo<AArch64FunctionInfo>();
@@ -123,21 +131,36 @@ static void emitPACCFI(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI,
if (MFnI.branchProtectionPAuthLR()) {
switch (CFILLVMSetRASignStateMode) {
case SetRAStateMode::Never:
+ // .cfi_negate_ra_state_with_pc always comes before the paci[ab]sppc,
+ // since the unwinder uses the location of the CFI itself to derive the
+ // address of the signing instruction.
CFIBuilder.buildNegateRAStateWithPC();
+ BuildPACMI();
break;
case SetRAStateMode::PAuthLR:
- case SetRAStateMode::Always:
+ case SetRAStateMode::Always: {
+ MCSymbol *PACSym = MFnI.getSigningInstrLabel();
assert(PACSym && "No PAC instruction to refer to");
CFIBuilder.buildSetRAState(2, PACSym);
+ BuildPACMI();
break;
}
- } else if (!TT.isOSBinFormatMachO()) {
+ }
+ } else {
switch (CFILLVMSetRASignStateMode) {
case SetRAStateMode::Never:
case SetRAStateMode::PAuthLR:
- CFIBuilder.buildNegateRAState();
+ // .cfi_negate_ra_state always comes after the paci[ab]sp, following the
+ // normal conventions for DWARF CFI opcodes, which describe how to
+ // recover the current register state, given the PC of an instruction
+ // that has not yet retired.
+ BuildPACMI();
+ if (!TT.isOSBinFormatMachO()) {
+ CFIBuilder.buildNegateRAState();
+ }
break;
case SetRAStateMode::Always:
+ BuildPACMI();
CFIBuilder.buildSetRAState(1, nullptr);
break;
}
@@ -236,23 +259,23 @@ void AArch64PointerAuthImpl::signLR(MachineFunction &MF,
// No SEH opcode for this one; it doesn't materialize into an
// instruction on Windows.
if (MFnI.branchProtectionPAuthLR() && Subtarget->hasPAuthLR()) {
- emitPACCFI(MBB, MBBI, EmitCFI, MFnI.getSigningInstrLabel());
- BuildMI(MBB, MBBI, DL,
- TII->get(UseBKey ? AArch64::PACIBSPPC : AArch64::PACIASPPC))
- .setMIFlag(MachineInstr::FrameSetup)
- ->setPreInstrSymbol(MF, MFnI.getSigningInstrLabel());
+ decoratePACWithCFI(MBB, MBBI, EmitCFI, [&](){
+ BuildMI(MBB, MBBI, DL,
+ TII->get(UseBKey ? AArch64::PACIBSPPC : AArch64::PACIASPPC))
+ .setMIFlag(MachineInstr::FrameSetup)
+ ->setPreInstrSymbol(MF, MFnI.getSigningInstrLabel());
+ });
} else {
if (MFnI.branchProtectionPAuthLR()) {
BuildMI(MBB, MBBI, DL, TII->get(AArch64::PACM))
.setMIFlag(MachineInstr::FrameSetup);
- emitPACCFI(MBB, MBBI, EmitCFI, MFnI.getSigningInstrLabel());
}
- BuildMI(MBB, MBBI, DL,
- TII->get(UseBKey ? AArch64::PACIBSP : AArch64::PACIASP))
- .setMIFlag(MachineInstr::FrameSetup)
- ->setPreInstrSymbol(MF, MFnI.getSigningInstrLabel());
- if (!MFnI.branchProtectionPAuthLR())
- emitPACCFI(MBB, MBBI, EmitCFI, nullptr);
+ decoratePACWithCFI(MBB, MBBI, EmitCFI, [&](){
+ BuildMI(MBB, MBBI, DL,
+ TII->get(UseBKey ? AArch64::PACIBSP : AArch64::PACIASP))
+ .setMIFlag(MachineInstr::FrameSetup)
+ ->setPreInstrSymbol(MF, MFnI.getSigningInstrLabel());
+ });
}
if (!EmitCFI && NeedsWinCFI) {
>From 4daa788cd43f98db90c3522eb6732a3ddf2cbf81 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Tue, 7 Jul 2026 14:45:59 -0700
Subject: [PATCH 43/58] move .cfi_set_ra_state _after_ the paci[ab]sppc
---
.../lib/Target/AArch64/AArch64PointerAuth.cpp | 17 ++---
.../AArch64/pauth-lr-tail-call-fpdiff.ll | 48 ++++++-------
.../sign-return-address-pauth-lr-mir.ll | 68 +++++++++---------
.../AArch64/sign-return-address-pauth-lr.ll | 70 +++++++++----------
.../sign-return-address-pauthlr-slh.ll | 8 +--
.../test/CodeGen/AArch64/swifttail-ptrauth.ll | 18 ++---
.../MC/AArch64/cfi_set_ra_state-shrinkwrap.s | 10 +--
7 files changed, 120 insertions(+), 119 deletions(-)
diff --git a/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp b/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
index a2b2753a9d04a..3f79eb7bbe7f4 100644
--- a/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
+++ b/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
@@ -111,9 +111,17 @@ static void emitEpiloguePACSymOffsetIntoReg(const TargetInstrInfo &TII,
}
// Wrap a given PAC instruction in CFI that describes it.
+//
// Depending on the type of CFI required, we may need to emit the directive
// either before or after the instruction, so that unwinders can correctly
// interpret the location of the signing instruction.
+//
+// As a general rule, CFI opcodes describe the actions needed to recover the
+// register state leading up to a not-yet-retired instruction, with one
+// exception: .cfi_negate_ra_state_with_pc always comes before the paci[ab]sppc,
+// since the unwinder uses the location of the CFI itself to derive the address
+// of the signing instruction [1].
+// 1: https://github.com/llvm/llvm-project/pull/137795#issuecomment-2838779129
template <typename BuildPACMIFn>
static void decoratePACWithCFI(MachineBasicBlock &MBB,
MachineBasicBlock::iterator MBBI, bool EmitCFI,
@@ -131,18 +139,15 @@ static void decoratePACWithCFI(MachineBasicBlock &MBB,
if (MFnI.branchProtectionPAuthLR()) {
switch (CFILLVMSetRASignStateMode) {
case SetRAStateMode::Never:
- // .cfi_negate_ra_state_with_pc always comes before the paci[ab]sppc,
- // since the unwinder uses the location of the CFI itself to derive the
- // address of the signing instruction.
CFIBuilder.buildNegateRAStateWithPC();
BuildPACMI();
break;
case SetRAStateMode::PAuthLR:
case SetRAStateMode::Always: {
+ BuildPACMI();
MCSymbol *PACSym = MFnI.getSigningInstrLabel();
assert(PACSym && "No PAC instruction to refer to");
CFIBuilder.buildSetRAState(2, PACSym);
- BuildPACMI();
break;
}
}
@@ -150,10 +155,6 @@ static void decoratePACWithCFI(MachineBasicBlock &MBB,
switch (CFILLVMSetRASignStateMode) {
case SetRAStateMode::Never:
case SetRAStateMode::PAuthLR:
- // .cfi_negate_ra_state always comes after the paci[ab]sp, following the
- // normal conventions for DWARF CFI opcodes, which describe how to
- // recover the current register state, given the PC of an instruction
- // that has not yet retired.
BuildPACMI();
if (!TT.isOSBinFormatMachO()) {
CFIBuilder.buildNegateRAState();
diff --git a/llvm/test/CodeGen/AArch64/pauth-lr-tail-call-fpdiff.ll b/llvm/test/CodeGen/AArch64/pauth-lr-tail-call-fpdiff.ll
index e1aa437195e90..758220afb0260 100644
--- a/llvm/test/CodeGen/AArch64/pauth-lr-tail-call-fpdiff.ll
+++ b/llvm/test/CodeGen/AArch64/pauth-lr-tail-call-fpdiff.ll
@@ -18,18 +18,18 @@ define swifttailcc void @tail_call_fpdiff_a_key(ptr swiftasync %ctx) "branch-pro
; CHECK: // %bb.0:
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp0
; COMPAT-NEXT: .Ltmp0:
; COMPAT-NEXT: hint #25
+; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp0
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp0
; V83A-NEXT: .Ltmp0:
; V83A-NEXT: paciasp
+; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp0
-; V9A-NEXT: .cfi_set_ra_state 2, .Ltmp0
; V9A-NEXT: .Ltmp0:
; V9A-NEXT: paciasppc
+; V9A-NEXT: .cfi_set_ra_state 2, .Ltmp0
; PAUTH-NEXT: paciasp
; PAUTH-NEXT: .cfi_negate_ra_state
@@ -96,18 +96,18 @@ define swifttailcc void @tail_call_fpdiff_b_key(ptr swiftasync %ctx) "branch-pro
; CHECK-NEXT: .cfi_b_key_frame
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp1
; COMPAT-NEXT: .Ltmp1:
; COMPAT-NEXT: hint #27
+; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp1
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp1
; V83A-NEXT: .Ltmp1:
; V83A-NEXT: pacibsp
+; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp1
-; V9A-NEXT: .cfi_set_ra_state 2, .Ltmp1
; V9A-NEXT: .Ltmp1:
; V9A-NEXT: pacibsppc
+; V9A-NEXT: .cfi_set_ra_state 2, .Ltmp1
; PAUTH-NEXT: pacibsp
; PAUTH-NEXT: .cfi_negate_ra_state
@@ -173,18 +173,18 @@ define swifttailcc void @tail_call_no_fpdiff_a_key(ptr swiftasync %ctx) "branch-
; CHECK: // %bb.0:
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp2
; COMPAT-NEXT: .Ltmp2:
; COMPAT-NEXT: hint #25
+; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp2
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp2
; V83A-NEXT: .Ltmp2:
; V83A-NEXT: paciasp
+; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp2
-; V9A-NEXT: .cfi_set_ra_state 2, .Ltmp2
; V9A-NEXT: .Ltmp2:
; V9A-NEXT: paciasppc
+; V9A-NEXT: .cfi_set_ra_state 2, .Ltmp2
; PAUTH-NEXT: paciasp
; PAUTH-NEXT: .cfi_negate_ra_state
@@ -236,18 +236,18 @@ define swifttailcc void @tail_call_no_fpdiff_b_key(ptr swiftasync %ctx) "branch-
; CHECK-NEXT: .cfi_b_key_frame
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp3
; COMPAT-NEXT: .Ltmp3:
; COMPAT-NEXT: hint #27
+; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp3
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp3
; V83A-NEXT: .Ltmp3:
; V83A-NEXT: pacibsp
+; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp3
-; V9A-NEXT: .cfi_set_ra_state 2, .Ltmp3
; V9A-NEXT: .Ltmp3:
; V9A-NEXT: pacibsppc
+; V9A-NEXT: .cfi_set_ra_state 2, .Ltmp3
; PAUTH-NEXT: pacibsp
; PAUTH-NEXT: .cfi_negate_ra_state
@@ -298,18 +298,18 @@ define swifttailcc void @indirect_tail_call_fpdiff_a_key(ptr swiftasync %ctx, pt
; CHECK: // %bb.0:
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp4
; COMPAT-NEXT: .Ltmp4:
; COMPAT-NEXT: hint #25
+; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp4
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp4
; V83A-NEXT: .Ltmp4:
; V83A-NEXT: paciasp
+; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp4
-; V9A-NEXT: .cfi_set_ra_state 2, .Ltmp4
; V9A-NEXT: .Ltmp4:
; V9A-NEXT: paciasppc
+; V9A-NEXT: .cfi_set_ra_state 2, .Ltmp4
; PAUTH-NEXT: paciasp
; PAUTH-NEXT: .cfi_negate_ra_state
@@ -377,18 +377,18 @@ define swifttailcc void @indirect_tail_call_fpdiff_b_key(ptr swiftasync %ctx, pt
; CHECK-NEXT: .cfi_b_key_frame
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp5
; COMPAT-NEXT: .Ltmp5:
; COMPAT-NEXT: hint #27
+; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp5
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp5
; V83A-NEXT: .Ltmp5:
; V83A-NEXT: pacibsp
+; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp5
-; V9A-NEXT: .cfi_set_ra_state 2, .Ltmp5
; V9A-NEXT: .Ltmp5:
; V9A-NEXT: pacibsppc
+; V9A-NEXT: .cfi_set_ra_state 2, .Ltmp5
; PAUTH-NEXT: pacibsp
; PAUTH-NEXT: .cfi_negate_ra_state
@@ -455,18 +455,18 @@ define swifttailcc void @indirect_tail_call_no_fpdiff_a_key(ptr swiftasync %ctx,
; CHECK: // %bb.0:
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp6
; COMPAT-NEXT: .Ltmp6:
; COMPAT-NEXT: hint #25
+; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp6
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp6
; V83A-NEXT: .Ltmp6:
; V83A-NEXT: paciasp
+; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp6
-; V9A-NEXT: .cfi_set_ra_state 2, .Ltmp6
; V9A-NEXT: .Ltmp6:
; V9A-NEXT: paciasppc
+; V9A-NEXT: .cfi_set_ra_state 2, .Ltmp6
; PAUTH-NEXT: paciasp
; PAUTH-NEXT: .cfi_negate_ra_state
@@ -518,18 +518,18 @@ define swifttailcc void @indirect_tail_call_no_fpdiff_b_key(ptr swiftasync %ctx,
; CHECK-NEXT: .cfi_b_key_frame
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp7
; COMPAT-NEXT: .Ltmp7:
; COMPAT-NEXT: hint #27
+; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp7
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp7
; V83A-NEXT: .Ltmp7:
; V83A-NEXT: pacibsp
+; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp7
-; V9A-NEXT: .cfi_set_ra_state 2, .Ltmp7
; V9A-NEXT: .Ltmp7:
; V9A-NEXT: pacibsppc
+; V9A-NEXT: .cfi_set_ra_state 2, .Ltmp7
; PAUTH-NEXT: pacibsp
; PAUTH-NEXT: .cfi_negate_ra_state
diff --git a/llvm/test/CodeGen/AArch64/sign-return-address-pauth-lr-mir.ll b/llvm/test/CodeGen/AArch64/sign-return-address-pauth-lr-mir.ll
index 684c8565cd8b4..d975350b1e9e6 100644
--- a/llvm/test/CodeGen/AArch64/sign-return-address-pauth-lr-mir.ll
+++ b/llvm/test/CodeGen/AArch64/sign-return-address-pauth-lr-mir.ll
@@ -57,8 +57,8 @@ define i32 @leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-addr
; COMPAT-MIR-NEXT: liveins: $w0
; COMPAT-MIR-NEXT: {{ $}}
; COMPAT-MIR-NEXT: frame-setup PACM
- ; COMPAT-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; COMPAT-MIR-NEXT: frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+ ; COMPAT-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; COMPAT-MIR-NEXT: $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
; COMPAT-MIR-NEXT: $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
; COMPAT-MIR-NEXT: frame-destroy PACM
@@ -70,8 +70,8 @@ define i32 @leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-addr
; V83A-MIR-NEXT: liveins: $w0
; V83A-MIR-NEXT: {{ $}}
; V83A-MIR-NEXT: frame-setup PACM
- ; V83A-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; V83A-MIR-NEXT: frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+ ; V83A-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; V83A-MIR-NEXT: $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
; V83A-MIR-NEXT: $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
; V83A-MIR-NEXT: frame-destroy PACM
@@ -81,8 +81,8 @@ define i32 @leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-addr
; PAUTHLR-MIR: bb.0 (%ir-block.0):
; PAUTHLR-MIR-NEXT: liveins: $w0
; PAUTHLR-MIR-NEXT: {{ $}}
- ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; PAUTHLR-MIR-NEXT: frame-setup PACIASPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+ ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; PAUTHLR-MIR-NEXT: frame-destroy RETAASPPCi <mcsymbol >, implicit $lr, implicit $sp, implicit-def $lr, implicit killed $lr, implicit $sp
ret i32 %x
}
@@ -93,8 +93,8 @@ define i64 @leaf_clobbers_lr(i64 %x) "branch-protection-pauth-lr" "sign-return-a
; COMPAT-MIR-NEXT: liveins: $x0, $lr
; COMPAT-MIR-NEXT: {{ $}}
; COMPAT-MIR-NEXT: frame-setup PACM
- ; COMPAT-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; COMPAT-MIR-NEXT: frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+ ; COMPAT-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; COMPAT-MIR-NEXT: early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
; COMPAT-MIR-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16
; COMPAT-MIR-NEXT: frame-setup CFI_INSTRUCTION offset $w30, -16
@@ -111,8 +111,8 @@ define i64 @leaf_clobbers_lr(i64 %x) "branch-protection-pauth-lr" "sign-return-a
; V83A-MIR-NEXT: liveins: $x0, $lr
; V83A-MIR-NEXT: {{ $}}
; V83A-MIR-NEXT: frame-setup PACM
- ; V83A-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; V83A-MIR-NEXT: frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+ ; V83A-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; V83A-MIR-NEXT: early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
; V83A-MIR-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16
; V83A-MIR-NEXT: frame-setup CFI_INSTRUCTION offset $w30, -16
@@ -127,8 +127,8 @@ define i64 @leaf_clobbers_lr(i64 %x) "branch-protection-pauth-lr" "sign-return-a
; PAUTHLR-MIR: bb.0 (%ir-block.0):
; PAUTHLR-MIR-NEXT: liveins: $x0, $lr
; PAUTHLR-MIR-NEXT: {{ $}}
- ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; PAUTHLR-MIR-NEXT: frame-setup PACIASPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+ ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; PAUTHLR-MIR-NEXT: early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16
; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION offset $w30, -16
@@ -147,8 +147,8 @@ define i32 @non_leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-
; COMPAT-MIR-NEXT: liveins: $w0, $lr
; COMPAT-MIR-NEXT: {{ $}}
; COMPAT-MIR-NEXT: frame-setup PACM
- ; COMPAT-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; COMPAT-MIR-NEXT: frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+ ; COMPAT-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; COMPAT-MIR-NEXT: early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
; COMPAT-MIR-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16
; COMPAT-MIR-NEXT: frame-setup CFI_INSTRUCTION offset $w30, -16
@@ -165,8 +165,8 @@ define i32 @non_leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-
; V83A-MIR-NEXT: liveins: $w0, $lr
; V83A-MIR-NEXT: {{ $}}
; V83A-MIR-NEXT: frame-setup PACM
- ; V83A-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; V83A-MIR-NEXT: frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+ ; V83A-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; V83A-MIR-NEXT: early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
; V83A-MIR-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16
; V83A-MIR-NEXT: frame-setup CFI_INSTRUCTION offset $w30, -16
@@ -181,8 +181,8 @@ define i32 @non_leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-
; PAUTHLR-MIR: bb.0 (%ir-block.0):
; PAUTHLR-MIR-NEXT: liveins: $w0, $lr
; PAUTHLR-MIR-NEXT: {{ $}}
- ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; PAUTHLR-MIR-NEXT: frame-setup PACIASPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+ ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; PAUTHLR-MIR-NEXT: early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16
; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION offset $w30, -16
@@ -199,8 +199,8 @@ define i32 @non_leaf_sign_non_leaf(i32 %x) "branch-protection-pauth-lr" "sign-re
; COMPAT-MIR-NEXT: liveins: $w0, $lr
; COMPAT-MIR-NEXT: {{ $}}
; COMPAT-MIR-NEXT: frame-setup PACM
- ; COMPAT-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; COMPAT-MIR-NEXT: frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+ ; COMPAT-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; COMPAT-MIR-NEXT: early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
; COMPAT-MIR-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16
; COMPAT-MIR-NEXT: frame-setup CFI_INSTRUCTION offset $w30, -16
@@ -217,8 +217,8 @@ define i32 @non_leaf_sign_non_leaf(i32 %x) "branch-protection-pauth-lr" "sign-re
; V83A-MIR-NEXT: liveins: $w0, $lr
; V83A-MIR-NEXT: {{ $}}
; V83A-MIR-NEXT: frame-setup PACM
- ; V83A-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; V83A-MIR-NEXT: frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+ ; V83A-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; V83A-MIR-NEXT: early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
; V83A-MIR-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16
; V83A-MIR-NEXT: frame-setup CFI_INSTRUCTION offset $w30, -16
@@ -233,8 +233,8 @@ define i32 @non_leaf_sign_non_leaf(i32 %x) "branch-protection-pauth-lr" "sign-re
; PAUTHLR-MIR: bb.0 (%ir-block.0):
; PAUTHLR-MIR-NEXT: liveins: $w0, $lr
; PAUTHLR-MIR-NEXT: {{ $}}
- ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; PAUTHLR-MIR-NEXT: frame-setup PACIASPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+ ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; PAUTHLR-MIR-NEXT: early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16
; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION offset $w30, -16
@@ -251,8 +251,8 @@ define i32 @non_leaf_scs(i32 %x) "branch-protection-pauth-lr" "sign-return-addre
; CHECK-MIR-NEXT: liveins: $w0, $lr, $x18
; CHECK-MIR-NEXT: {{ $}}
; CHECK-MIR-NEXT: frame-setup PACM
- ; CHECK-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; CHECK-MIR-NEXT: frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+ ; CHECK-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; CHECK-MIR-NEXT: early-clobber $x18 = frame-setup STRXpost $lr, $x18, 8
; CHECK-MIR-NEXT: frame-setup CFI_INSTRUCTION escape 0x16, 0x12, 0x02, 0x82, 0x78
; CHECK-MIR-NEXT: early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
@@ -271,8 +271,8 @@ define i32 @non_leaf_scs(i32 %x) "branch-protection-pauth-lr" "sign-return-addre
; PAUTHLR-MIR: bb.0 (%ir-block.0):
; PAUTHLR-MIR-NEXT: liveins: $w0, $lr, $x18
; PAUTHLR-MIR-NEXT: {{ $}}
- ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; PAUTHLR-MIR-NEXT: frame-setup PACIASPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+ ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; PAUTHLR-MIR-NEXT: early-clobber $x18 = frame-setup STRXpost $lr, $x18, 8
; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION escape 0x16, 0x12, 0x02, 0x82, 0x78
; PAUTHLR-MIR-NEXT: early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
@@ -293,8 +293,8 @@ define i32 @leaf_sign_all_v83(i32 %x) "branch-protection-pauth-lr" "sign-return-
; CHECK-MIR-NEXT: liveins: $w0
; CHECK-MIR-NEXT: {{ $}}
; CHECK-MIR-NEXT: frame-setup PACM
- ; CHECK-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; CHECK-MIR-NEXT: frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+ ; CHECK-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; CHECK-MIR-NEXT: $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
; CHECK-MIR-NEXT: $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
; CHECK-MIR-NEXT: frame-destroy PACM
@@ -304,8 +304,8 @@ define i32 @leaf_sign_all_v83(i32 %x) "branch-protection-pauth-lr" "sign-return-
; PAUTHLR-MIR: bb.0 (%ir-block.0):
; PAUTHLR-MIR-NEXT: liveins: $w0
; PAUTHLR-MIR-NEXT: {{ $}}
- ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; PAUTHLR-MIR-NEXT: frame-setup PACIASPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+ ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; PAUTHLR-MIR-NEXT: frame-destroy RETAASPPCi <mcsymbol >, implicit $lr, implicit $sp, implicit-def $lr, implicit killed $lr, implicit $sp
ret i32 %x
}
@@ -318,8 +318,8 @@ define fastcc void @spill_lr_and_tail_call(i64 %x) "branch-protection-pauth-lr"
; CHECK-MIR-NEXT: liveins: $x0, $lr
; CHECK-MIR-NEXT: {{ $}}
; CHECK-MIR-NEXT: frame-setup PACM
- ; CHECK-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; CHECK-MIR-NEXT: frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+ ; CHECK-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; CHECK-MIR-NEXT: early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
; CHECK-MIR-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16
; CHECK-MIR-NEXT: frame-setup CFI_INSTRUCTION offset $w30, -16
@@ -335,8 +335,8 @@ define fastcc void @spill_lr_and_tail_call(i64 %x) "branch-protection-pauth-lr"
; PAUTHLR-MIR: bb.0 (%ir-block.0):
; PAUTHLR-MIR-NEXT: liveins: $x0, $lr
; PAUTHLR-MIR-NEXT: {{ $}}
- ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; PAUTHLR-MIR-NEXT: frame-setup PACIASPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+ ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; PAUTHLR-MIR-NEXT: early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)
; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16
; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION offset $w30, -16
@@ -355,8 +355,8 @@ define i32 @leaf_sign_all_a_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
; COMPAT-MIR-NEXT: liveins: $w0
; COMPAT-MIR-NEXT: {{ $}}
; COMPAT-MIR-NEXT: frame-setup PACM
- ; COMPAT-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; COMPAT-MIR-NEXT: frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+ ; COMPAT-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; COMPAT-MIR-NEXT: $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
; COMPAT-MIR-NEXT: $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
; COMPAT-MIR-NEXT: frame-destroy PACM
@@ -368,8 +368,8 @@ define i32 @leaf_sign_all_a_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
; V83A-MIR-NEXT: liveins: $w0
; V83A-MIR-NEXT: {{ $}}
; V83A-MIR-NEXT: frame-setup PACM
- ; V83A-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; V83A-MIR-NEXT: frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+ ; V83A-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; V83A-MIR-NEXT: $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
; V83A-MIR-NEXT: $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
; V83A-MIR-NEXT: frame-destroy PACM
@@ -379,8 +379,8 @@ define i32 @leaf_sign_all_a_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
; PAUTHLR-MIR: bb.0 (%ir-block.0):
; PAUTHLR-MIR-NEXT: liveins: $w0
; PAUTHLR-MIR-NEXT: {{ $}}
- ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; PAUTHLR-MIR-NEXT: frame-setup PACIASPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+ ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; PAUTHLR-MIR-NEXT: frame-destroy RETAASPPCi <mcsymbol >, implicit $lr, implicit $sp, implicit-def $lr, implicit killed $lr, implicit $sp
ret i32 %x
}
@@ -392,8 +392,8 @@ define i32 @leaf_sign_all_b_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
; COMPAT-MIR-NEXT: {{ $}}
; COMPAT-MIR-NEXT: frame-setup EMITBKEY
; COMPAT-MIR-NEXT: frame-setup PACM
- ; COMPAT-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; COMPAT-MIR-NEXT: frame-setup PACIBSP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+ ; COMPAT-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; COMPAT-MIR-NEXT: $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
; COMPAT-MIR-NEXT: $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
; COMPAT-MIR-NEXT: frame-destroy PACM
@@ -406,8 +406,8 @@ define i32 @leaf_sign_all_b_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
; V83A-MIR-NEXT: {{ $}}
; V83A-MIR-NEXT: frame-setup EMITBKEY
; V83A-MIR-NEXT: frame-setup PACM
- ; V83A-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; V83A-MIR-NEXT: frame-setup PACIBSP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+ ; V83A-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; V83A-MIR-NEXT: $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
; V83A-MIR-NEXT: $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
; V83A-MIR-NEXT: frame-destroy PACM
@@ -418,8 +418,8 @@ define i32 @leaf_sign_all_b_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
; PAUTHLR-MIR-NEXT: liveins: $w0
; PAUTHLR-MIR-NEXT: {{ $}}
; PAUTHLR-MIR-NEXT: frame-setup EMITBKEY
- ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; PAUTHLR-MIR-NEXT: frame-setup PACIBSPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+ ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; PAUTHLR-MIR-NEXT: frame-destroy RETABSPPCi <mcsymbol >, implicit $lr, implicit $sp, implicit-def $lr, implicit killed $lr, implicit $sp
ret i32 %x
}
@@ -431,8 +431,8 @@ define i32 @leaf_sign_all_v83_b_key(i32 %x) "branch-protection-pauth-lr" "sign-r
; CHECK-MIR-NEXT: {{ $}}
; CHECK-MIR-NEXT: frame-setup EMITBKEY
; CHECK-MIR-NEXT: frame-setup PACM
- ; CHECK-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; CHECK-MIR-NEXT: frame-setup PACIBSP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+ ; CHECK-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; CHECK-MIR-NEXT: $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
; CHECK-MIR-NEXT: $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
; CHECK-MIR-NEXT: frame-destroy PACM
@@ -443,8 +443,8 @@ define i32 @leaf_sign_all_v83_b_key(i32 %x) "branch-protection-pauth-lr" "sign-r
; PAUTHLR-MIR-NEXT: liveins: $w0
; PAUTHLR-MIR-NEXT: {{ $}}
; PAUTHLR-MIR-NEXT: frame-setup EMITBKEY
- ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; PAUTHLR-MIR-NEXT: frame-setup PACIBSPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+ ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; PAUTHLR-MIR-NEXT: frame-destroy RETABSPPCi <mcsymbol >, implicit $lr, implicit $sp, implicit-def $lr, implicit killed $lr, implicit $sp
ret i32 %x
}
@@ -455,8 +455,8 @@ define i32 @leaf_sign_all_a_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
; COMPAT-MIR-NEXT: liveins: $w0
; COMPAT-MIR-NEXT: {{ $}}
; COMPAT-MIR-NEXT: frame-setup PACM
- ; COMPAT-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; COMPAT-MIR-NEXT: frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+ ; COMPAT-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; COMPAT-MIR-NEXT: $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
; COMPAT-MIR-NEXT: $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
; COMPAT-MIR-NEXT: frame-destroy PACM
@@ -468,8 +468,8 @@ define i32 @leaf_sign_all_a_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
; V83A-MIR-NEXT: liveins: $w0
; V83A-MIR-NEXT: {{ $}}
; V83A-MIR-NEXT: frame-setup PACM
- ; V83A-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; V83A-MIR-NEXT: frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+ ; V83A-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; V83A-MIR-NEXT: $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
; V83A-MIR-NEXT: $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
; V83A-MIR-NEXT: frame-destroy PACM
@@ -479,8 +479,8 @@ define i32 @leaf_sign_all_a_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
; PAUTHLR-MIR: bb.0 (%ir-block.0):
; PAUTHLR-MIR-NEXT: liveins: $w0
; PAUTHLR-MIR-NEXT: {{ $}}
- ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; PAUTHLR-MIR-NEXT: frame-setup PACIASPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+ ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; PAUTHLR-MIR-NEXT: frame-destroy RETAASPPCi <mcsymbol >, implicit $lr, implicit $sp, implicit-def $lr, implicit killed $lr, implicit $sp
ret i32 %x
}
@@ -492,8 +492,8 @@ define i32 @leaf_sign_all_b_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
; COMPAT-MIR-NEXT: {{ $}}
; COMPAT-MIR-NEXT: frame-setup EMITBKEY
; COMPAT-MIR-NEXT: frame-setup PACM
- ; COMPAT-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; COMPAT-MIR-NEXT: frame-setup PACIBSP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+ ; COMPAT-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; COMPAT-MIR-NEXT: $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
; COMPAT-MIR-NEXT: $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
; COMPAT-MIR-NEXT: frame-destroy PACM
@@ -506,8 +506,8 @@ define i32 @leaf_sign_all_b_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
; V83A-MIR-NEXT: {{ $}}
; V83A-MIR-NEXT: frame-setup EMITBKEY
; V83A-MIR-NEXT: frame-setup PACM
- ; V83A-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; V83A-MIR-NEXT: frame-setup PACIBSP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+ ; V83A-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; V83A-MIR-NEXT: $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
; V83A-MIR-NEXT: $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
; V83A-MIR-NEXT: frame-destroy PACM
@@ -518,8 +518,8 @@ define i32 @leaf_sign_all_b_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
; PAUTHLR-MIR-NEXT: liveins: $w0
; PAUTHLR-MIR-NEXT: {{ $}}
; PAUTHLR-MIR-NEXT: frame-setup EMITBKEY
- ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; PAUTHLR-MIR-NEXT: frame-setup PACIBSPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+ ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; PAUTHLR-MIR-NEXT: frame-destroy RETABSPPCi <mcsymbol >, implicit $lr, implicit $sp, implicit-def $lr, implicit killed $lr, implicit $sp
ret i32 %x
}
@@ -531,8 +531,8 @@ define i32 @leaf_sign_all_v83_b_key_bti(i32 %x) "branch-protection-pauth-lr" "si
; CHECK-MIR-NEXT: {{ $}}
; CHECK-MIR-NEXT: frame-setup EMITBKEY
; CHECK-MIR-NEXT: frame-setup PACM
- ; CHECK-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; CHECK-MIR-NEXT: frame-setup PACIBSP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+ ; CHECK-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; CHECK-MIR-NEXT: $x16 = frame-destroy ADRP target-flags(aarch64-page) <mcsymbol >
; CHECK-MIR-NEXT: $x16 = frame-destroy ADDXri $x16, target-flags(aarch64-pageoff, aarch64-nc) <mcsymbol >, 0
; CHECK-MIR-NEXT: frame-destroy PACM
@@ -543,8 +543,8 @@ define i32 @leaf_sign_all_v83_b_key_bti(i32 %x) "branch-protection-pauth-lr" "si
; PAUTHLR-MIR-NEXT: liveins: $w0
; PAUTHLR-MIR-NEXT: {{ $}}
; PAUTHLR-MIR-NEXT: frame-setup EMITBKEY
- ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; PAUTHLR-MIR-NEXT: frame-setup PACIBSPPC implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+ ; PAUTHLR-MIR-NEXT: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
; PAUTHLR-MIR-NEXT: frame-destroy RETABSPPCi <mcsymbol >, implicit $lr, implicit $sp, implicit-def $lr, implicit killed $lr, implicit $sp
ret i32 %x
}
diff --git a/llvm/test/CodeGen/AArch64/sign-return-address-pauth-lr.ll b/llvm/test/CodeGen/AArch64/sign-return-address-pauth-lr.ll
index 02bebc85a8f60..b0051a9a26f0d 100644
--- a/llvm/test/CodeGen/AArch64/sign-return-address-pauth-lr.ll
+++ b/llvm/test/CodeGen/AArch64/sign-return-address-pauth-lr.ll
@@ -89,9 +89,9 @@ define i32 @leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-addr
; COMPAT-LABEL: leaf_sign_all:
; COMPAT: // %bb.0:
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp0
; COMPAT-NEXT: .Ltmp0:
; COMPAT-NEXT: hint #25
+; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp0
; COMPAT-NEXT: adrp x16, .Ltmp0
; COMPAT-NEXT: add x16, x16, :lo12:.Ltmp0
; COMPAT-NEXT: hint #39
@@ -101,9 +101,9 @@ define i32 @leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-addr
; V83A-LABEL: leaf_sign_all:
; V83A: // %bb.0:
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp0
; V83A-NEXT: .Ltmp0:
; V83A-NEXT: paciasp
+; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp0
; V83A-NEXT: adrp x16, .Ltmp0
; V83A-NEXT: add x16, x16, :lo12:.Ltmp0
; V83A-NEXT: hint #39
@@ -111,9 +111,9 @@ define i32 @leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-addr
;
; PAUTHLR-LABEL: leaf_sign_all:
; PAUTHLR: // %bb.0:
-; PAUTHLR-NEXT: .cfi_set_ra_state 2, .Ltmp0
; PAUTHLR-NEXT: .Ltmp0:
; PAUTHLR-NEXT: paciasppc
+; PAUTHLR-NEXT: .cfi_set_ra_state 2, .Ltmp0
; PAUTHLR-NEXT: retaasppc .Ltmp0
;
; NEGATE-COMPAT-LABEL: leaf_sign_all:
@@ -152,9 +152,9 @@ define i64 @leaf_clobbers_lr(i64 %x) "branch-protection-pauth-lr" "sign-return-a
; COMPAT-LABEL: leaf_clobbers_lr:
; COMPAT: // %bb.0:
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp1
; COMPAT-NEXT: .Ltmp1:
; COMPAT-NEXT: hint #25
+; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp1
; COMPAT-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
; COMPAT-NEXT: .cfi_def_cfa_offset 16
; COMPAT-NEXT: .cfi_offset w30, -16
@@ -171,9 +171,9 @@ define i64 @leaf_clobbers_lr(i64 %x) "branch-protection-pauth-lr" "sign-return-a
; V83A-LABEL: leaf_clobbers_lr:
; V83A: // %bb.0:
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp1
; V83A-NEXT: .Ltmp1:
; V83A-NEXT: paciasp
+; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp1
; V83A-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
; V83A-NEXT: .cfi_def_cfa_offset 16
; V83A-NEXT: .cfi_offset w30, -16
@@ -188,9 +188,9 @@ define i64 @leaf_clobbers_lr(i64 %x) "branch-protection-pauth-lr" "sign-return-a
;
; PAUTHLR-LABEL: leaf_clobbers_lr:
; PAUTHLR: // %bb.0:
-; PAUTHLR-NEXT: .cfi_set_ra_state 2, .Ltmp1
; PAUTHLR-NEXT: .Ltmp1:
; PAUTHLR-NEXT: paciasppc
+; PAUTHLR-NEXT: .cfi_set_ra_state 2, .Ltmp1
; PAUTHLR-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
; PAUTHLR-NEXT: .cfi_def_cfa_offset 16
; PAUTHLR-NEXT: .cfi_offset w30, -16
@@ -260,9 +260,9 @@ define i32 @non_leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-
; COMPAT-LABEL: non_leaf_sign_all:
; COMPAT: // %bb.0:
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp2
; COMPAT-NEXT: .Ltmp2:
; COMPAT-NEXT: hint #25
+; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp2
; COMPAT-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
; COMPAT-NEXT: .cfi_def_cfa_offset 16
; COMPAT-NEXT: .cfi_offset w30, -16
@@ -277,9 +277,9 @@ define i32 @non_leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-
; V83A-LABEL: non_leaf_sign_all:
; V83A: // %bb.0:
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp2
; V83A-NEXT: .Ltmp2:
; V83A-NEXT: paciasp
+; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp2
; V83A-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
; V83A-NEXT: .cfi_def_cfa_offset 16
; V83A-NEXT: .cfi_offset w30, -16
@@ -292,9 +292,9 @@ define i32 @non_leaf_sign_all(i32 %x) "branch-protection-pauth-lr" "sign-return-
;
; PAUTHLR-LABEL: non_leaf_sign_all:
; PAUTHLR: // %bb.0:
-; PAUTHLR-NEXT: .cfi_set_ra_state 2, .Ltmp2
; PAUTHLR-NEXT: .Ltmp2:
; PAUTHLR-NEXT: paciasppc
+; PAUTHLR-NEXT: .cfi_set_ra_state 2, .Ltmp2
; PAUTHLR-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
; PAUTHLR-NEXT: .cfi_def_cfa_offset 16
; PAUTHLR-NEXT: .cfi_offset w30, -16
@@ -354,9 +354,9 @@ define i32 @non_leaf_sign_non_leaf(i32 %x) "branch-protection-pauth-lr" "sign-re
; COMPAT-LABEL: non_leaf_sign_non_leaf:
; COMPAT: // %bb.0:
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp3
; COMPAT-NEXT: .Ltmp3:
; COMPAT-NEXT: hint #25
+; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp3
; COMPAT-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
; COMPAT-NEXT: .cfi_def_cfa_offset 16
; COMPAT-NEXT: .cfi_offset w30, -16
@@ -371,9 +371,9 @@ define i32 @non_leaf_sign_non_leaf(i32 %x) "branch-protection-pauth-lr" "sign-re
; V83A-LABEL: non_leaf_sign_non_leaf:
; V83A: // %bb.0:
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp3
; V83A-NEXT: .Ltmp3:
; V83A-NEXT: paciasp
+; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp3
; V83A-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
; V83A-NEXT: .cfi_def_cfa_offset 16
; V83A-NEXT: .cfi_offset w30, -16
@@ -386,9 +386,9 @@ define i32 @non_leaf_sign_non_leaf(i32 %x) "branch-protection-pauth-lr" "sign-re
;
; PAUTHLR-LABEL: non_leaf_sign_non_leaf:
; PAUTHLR: // %bb.0:
-; PAUTHLR-NEXT: .cfi_set_ra_state 2, .Ltmp3
; PAUTHLR-NEXT: .Ltmp3:
; PAUTHLR-NEXT: paciasppc
+; PAUTHLR-NEXT: .cfi_set_ra_state 2, .Ltmp3
; PAUTHLR-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
; PAUTHLR-NEXT: .cfi_def_cfa_offset 16
; PAUTHLR-NEXT: .cfi_offset w30, -16
@@ -449,9 +449,9 @@ define i32 @non_leaf_scs(i32 %x) "branch-protection-pauth-lr" "sign-return-addre
; CHECK-LABEL: non_leaf_scs:
; CHECK: // %bb.0:
; CHECK-NEXT: hint #39
-; CHECK-NEXT: .cfi_set_ra_state 2, .Ltmp4
; CHECK-NEXT: .Ltmp4:
; CHECK-NEXT: paciasp
+; CHECK-NEXT: .cfi_set_ra_state 2, .Ltmp4
; CHECK-NEXT: str x30, [x18], #8
; CHECK-NEXT: .cfi_escape 0x16, 0x12, 0x02, 0x82, 0x78 //
; CHECK-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -468,9 +468,9 @@ define i32 @non_leaf_scs(i32 %x) "branch-protection-pauth-lr" "sign-return-addre
;
; PAUTHLR-LABEL: non_leaf_scs:
; PAUTHLR: // %bb.0:
-; PAUTHLR-NEXT: .cfi_set_ra_state 2, .Ltmp4
; PAUTHLR-NEXT: .Ltmp4:
; PAUTHLR-NEXT: paciasppc
+; PAUTHLR-NEXT: .cfi_set_ra_state 2, .Ltmp4
; PAUTHLR-NEXT: str x30, [x18], #8
; PAUTHLR-NEXT: .cfi_escape 0x16, 0x12, 0x02, 0x82, 0x78 //
; PAUTHLR-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
@@ -525,9 +525,9 @@ define i32 @leaf_sign_all_v83(i32 %x) "branch-protection-pauth-lr" "sign-return-
; CHECK-LABEL: leaf_sign_all_v83:
; CHECK: // %bb.0:
; CHECK-NEXT: hint #39
-; CHECK-NEXT: .cfi_set_ra_state 2, .Ltmp5
; CHECK-NEXT: .Ltmp5:
; CHECK-NEXT: paciasp
+; CHECK-NEXT: .cfi_set_ra_state 2, .Ltmp5
; CHECK-NEXT: adrp x16, .Ltmp5
; CHECK-NEXT: add x16, x16, :lo12:.Ltmp5
; CHECK-NEXT: hint #39
@@ -535,9 +535,9 @@ define i32 @leaf_sign_all_v83(i32 %x) "branch-protection-pauth-lr" "sign-return-
;
; PAUTHLR-LABEL: leaf_sign_all_v83:
; PAUTHLR: // %bb.0:
-; PAUTHLR-NEXT: .cfi_set_ra_state 2, .Ltmp5
; PAUTHLR-NEXT: .Ltmp5:
; PAUTHLR-NEXT: paciasppc
+; PAUTHLR-NEXT: .cfi_set_ra_state 2, .Ltmp5
; PAUTHLR-NEXT: retaasppc .Ltmp5
;
; NEGATE-CHECK-LABEL: leaf_sign_all_v83:
@@ -566,9 +566,9 @@ define fastcc void @spill_lr_and_tail_call(i64 %x) "branch-protection-pauth-lr"
; COMPAT-LABEL: spill_lr_and_tail_call:
; COMPAT: // %bb.0:
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp6
; COMPAT-NEXT: .Ltmp6:
; COMPAT-NEXT: hint #25
+; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp6
; COMPAT-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
; COMPAT-NEXT: .cfi_def_cfa_offset 16
; COMPAT-NEXT: .cfi_offset w30, -16
@@ -585,9 +585,9 @@ define fastcc void @spill_lr_and_tail_call(i64 %x) "branch-protection-pauth-lr"
; V83A-LABEL: spill_lr_and_tail_call:
; V83A: // %bb.0:
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp6
; V83A-NEXT: .Ltmp6:
; V83A-NEXT: paciasp
+; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp6
; V83A-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
; V83A-NEXT: .cfi_def_cfa_offset 16
; V83A-NEXT: .cfi_offset w30, -16
@@ -603,9 +603,9 @@ define fastcc void @spill_lr_and_tail_call(i64 %x) "branch-protection-pauth-lr"
;
; PAUTHLR-LABEL: spill_lr_and_tail_call:
; PAUTHLR: // %bb.0:
-; PAUTHLR-NEXT: .cfi_set_ra_state 2, .Ltmp6
; PAUTHLR-NEXT: .Ltmp6:
; PAUTHLR-NEXT: paciasppc
+; PAUTHLR-NEXT: .cfi_set_ra_state 2, .Ltmp6
; PAUTHLR-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
; PAUTHLR-NEXT: .cfi_def_cfa_offset 16
; PAUTHLR-NEXT: .cfi_offset w30, -16
@@ -677,9 +677,9 @@ define i32 @leaf_sign_all_a_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
; COMPAT-LABEL: leaf_sign_all_a_key:
; COMPAT: // %bb.0:
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp7
; COMPAT-NEXT: .Ltmp7:
; COMPAT-NEXT: hint #25
+; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp7
; COMPAT-NEXT: adrp x16, .Ltmp7
; COMPAT-NEXT: add x16, x16, :lo12:.Ltmp7
; COMPAT-NEXT: hint #39
@@ -689,9 +689,9 @@ define i32 @leaf_sign_all_a_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
; V83A-LABEL: leaf_sign_all_a_key:
; V83A: // %bb.0:
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp7
; V83A-NEXT: .Ltmp7:
; V83A-NEXT: paciasp
+; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp7
; V83A-NEXT: adrp x16, .Ltmp7
; V83A-NEXT: add x16, x16, :lo12:.Ltmp7
; V83A-NEXT: hint #39
@@ -699,9 +699,9 @@ define i32 @leaf_sign_all_a_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
;
; PAUTHLR-LABEL: leaf_sign_all_a_key:
; PAUTHLR: // %bb.0:
-; PAUTHLR-NEXT: .cfi_set_ra_state 2, .Ltmp7
; PAUTHLR-NEXT: .Ltmp7:
; PAUTHLR-NEXT: paciasppc
+; PAUTHLR-NEXT: .cfi_set_ra_state 2, .Ltmp7
; PAUTHLR-NEXT: retaasppc .Ltmp7
;
; NEGATE-COMPAT-LABEL: leaf_sign_all_a_key:
@@ -741,9 +741,9 @@ define i32 @leaf_sign_all_b_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
; COMPAT: // %bb.0:
; COMPAT-NEXT: .cfi_b_key_frame
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp8
; COMPAT-NEXT: .Ltmp8:
; COMPAT-NEXT: hint #27
+; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp8
; COMPAT-NEXT: adrp x16, .Ltmp8
; COMPAT-NEXT: add x16, x16, :lo12:.Ltmp8
; COMPAT-NEXT: hint #39
@@ -754,9 +754,9 @@ define i32 @leaf_sign_all_b_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
; V83A: // %bb.0:
; V83A-NEXT: .cfi_b_key_frame
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp8
; V83A-NEXT: .Ltmp8:
; V83A-NEXT: pacibsp
+; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp8
; V83A-NEXT: adrp x16, .Ltmp8
; V83A-NEXT: add x16, x16, :lo12:.Ltmp8
; V83A-NEXT: hint #39
@@ -765,9 +765,9 @@ define i32 @leaf_sign_all_b_key(i32 %x) "branch-protection-pauth-lr" "sign-retur
; PAUTHLR-LABEL: leaf_sign_all_b_key:
; PAUTHLR: // %bb.0:
; PAUTHLR-NEXT: .cfi_b_key_frame
-; PAUTHLR-NEXT: .cfi_set_ra_state 2, .Ltmp8
; PAUTHLR-NEXT: .Ltmp8:
; PAUTHLR-NEXT: pacibsppc
+; PAUTHLR-NEXT: .cfi_set_ra_state 2, .Ltmp8
; PAUTHLR-NEXT: retabsppc .Ltmp8
;
; NEGATE-COMPAT-LABEL: leaf_sign_all_b_key:
@@ -810,9 +810,9 @@ define i32 @leaf_sign_all_v83_b_key(i32 %x) "branch-protection-pauth-lr" "sign-r
; CHECK: // %bb.0:
; CHECK-NEXT: .cfi_b_key_frame
; CHECK-NEXT: hint #39
-; CHECK-NEXT: .cfi_set_ra_state 2, .Ltmp9
; CHECK-NEXT: .Ltmp9:
; CHECK-NEXT: pacibsp
+; CHECK-NEXT: .cfi_set_ra_state 2, .Ltmp9
; CHECK-NEXT: adrp x16, .Ltmp9
; CHECK-NEXT: add x16, x16, :lo12:.Ltmp9
; CHECK-NEXT: hint #39
@@ -821,9 +821,9 @@ define i32 @leaf_sign_all_v83_b_key(i32 %x) "branch-protection-pauth-lr" "sign-r
; PAUTHLR-LABEL: leaf_sign_all_v83_b_key:
; PAUTHLR: // %bb.0:
; PAUTHLR-NEXT: .cfi_b_key_frame
-; PAUTHLR-NEXT: .cfi_set_ra_state 2, .Ltmp9
; PAUTHLR-NEXT: .Ltmp9:
; PAUTHLR-NEXT: pacibsppc
+; PAUTHLR-NEXT: .cfi_set_ra_state 2, .Ltmp9
; PAUTHLR-NEXT: retabsppc .Ltmp9
;
; NEGATE-CHECK-LABEL: leaf_sign_all_v83_b_key:
@@ -854,9 +854,9 @@ define i32 @leaf_sign_all_a_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
; COMPAT: // %bb.0:
; COMPAT-NEXT: hint #34
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp10
; COMPAT-NEXT: .Ltmp10:
; COMPAT-NEXT: hint #25
+; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp10
; COMPAT-NEXT: adrp x16, .Ltmp10
; COMPAT-NEXT: add x16, x16, :lo12:.Ltmp10
; COMPAT-NEXT: hint #39
@@ -867,9 +867,9 @@ define i32 @leaf_sign_all_a_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
; V83A: // %bb.0:
; V83A-NEXT: hint #34
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp10
; V83A-NEXT: .Ltmp10:
; V83A-NEXT: paciasp
+; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp10
; V83A-NEXT: adrp x16, .Ltmp10
; V83A-NEXT: add x16, x16, :lo12:.Ltmp10
; V83A-NEXT: hint #39
@@ -877,10 +877,10 @@ define i32 @leaf_sign_all_a_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
;
; PAUTHLR-LABEL: leaf_sign_all_a_key_bti:
; PAUTHLR: // %bb.0:
-; PAUTHLR-NEXT: .cfi_set_ra_state 2, .Ltmp10
; PAUTHLR-NEXT: bti c
; PAUTHLR-NEXT: .Ltmp10:
; PAUTHLR-NEXT: paciasppc
+; PAUTHLR-NEXT: .cfi_set_ra_state 2, .Ltmp10
; PAUTHLR-NEXT: retaasppc .Ltmp10
;
; NEGATE-COMPAT-LABEL: leaf_sign_all_a_key_bti:
@@ -925,9 +925,9 @@ define i32 @leaf_sign_all_b_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
; COMPAT-NEXT: .cfi_b_key_frame
; COMPAT-NEXT: hint #34
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp11
; COMPAT-NEXT: .Ltmp11:
; COMPAT-NEXT: hint #27
+; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp11
; COMPAT-NEXT: adrp x16, .Ltmp11
; COMPAT-NEXT: add x16, x16, :lo12:.Ltmp11
; COMPAT-NEXT: hint #39
@@ -939,9 +939,9 @@ define i32 @leaf_sign_all_b_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
; V83A-NEXT: .cfi_b_key_frame
; V83A-NEXT: hint #34
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp11
; V83A-NEXT: .Ltmp11:
; V83A-NEXT: pacibsp
+; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp11
; V83A-NEXT: adrp x16, .Ltmp11
; V83A-NEXT: add x16, x16, :lo12:.Ltmp11
; V83A-NEXT: hint #39
@@ -950,10 +950,10 @@ define i32 @leaf_sign_all_b_key_bti(i32 %x) "branch-protection-pauth-lr" "sign-r
; PAUTHLR-LABEL: leaf_sign_all_b_key_bti:
; PAUTHLR: // %bb.0:
; PAUTHLR-NEXT: .cfi_b_key_frame
-; PAUTHLR-NEXT: .cfi_set_ra_state 2, .Ltmp11
; PAUTHLR-NEXT: bti c
; PAUTHLR-NEXT: .Ltmp11:
; PAUTHLR-NEXT: pacibsppc
+; PAUTHLR-NEXT: .cfi_set_ra_state 2, .Ltmp11
; PAUTHLR-NEXT: retabsppc .Ltmp11
;
; NEGATE-COMPAT-LABEL: leaf_sign_all_b_key_bti:
@@ -1001,9 +1001,9 @@ define i32 @leaf_sign_all_v83_b_key_bti(i32 %x) "branch-protection-pauth-lr" "si
; CHECK-NEXT: .cfi_b_key_frame
; CHECK-NEXT: hint #34
; CHECK-NEXT: hint #39
-; CHECK-NEXT: .cfi_set_ra_state 2, .Ltmp12
; CHECK-NEXT: .Ltmp12:
; CHECK-NEXT: pacibsp
+; CHECK-NEXT: .cfi_set_ra_state 2, .Ltmp12
; CHECK-NEXT: adrp x16, .Ltmp12
; CHECK-NEXT: add x16, x16, :lo12:.Ltmp12
; CHECK-NEXT: hint #39
@@ -1012,10 +1012,10 @@ define i32 @leaf_sign_all_v83_b_key_bti(i32 %x) "branch-protection-pauth-lr" "si
; PAUTHLR-LABEL: leaf_sign_all_v83_b_key_bti:
; PAUTHLR: // %bb.0:
; PAUTHLR-NEXT: .cfi_b_key_frame
-; PAUTHLR-NEXT: .cfi_set_ra_state 2, .Ltmp12
; PAUTHLR-NEXT: bti c
; PAUTHLR-NEXT: .Ltmp12:
; PAUTHLR-NEXT: pacibsppc
+; PAUTHLR-NEXT: .cfi_set_ra_state 2, .Ltmp12
; PAUTHLR-NEXT: retabsppc .Ltmp12
;
; NEGATE-CHECK-LABEL: leaf_sign_all_v83_b_key_bti:
diff --git a/llvm/test/CodeGen/AArch64/sign-return-address-pauthlr-slh.ll b/llvm/test/CodeGen/AArch64/sign-return-address-pauthlr-slh.ll
index 956f481fb2df7..fa3ebf3474291 100644
--- a/llvm/test/CodeGen/AArch64/sign-return-address-pauthlr-slh.ll
+++ b/llvm/test/CodeGen/AArch64/sign-return-address-pauthlr-slh.ll
@@ -10,9 +10,9 @@ define i32 @f() #0 {
; CHECK-NO-PAUTH-NEXT: dsb sy
; CHECK-NO-PAUTH-NEXT: isb
; CHECK-NO-PAUTH-NEXT: hint #39
-; CHECK-NO-PAUTH-NEXT: .cfi_set_ra_state 2, .Ltmp0
; CHECK-NO-PAUTH-NEXT: .Ltmp0:
; CHECK-NO-PAUTH-NEXT: hint #25
+; CHECK-NO-PAUTH-NEXT: .cfi_set_ra_state 2, .Ltmp0
; CHECK-NO-PAUTH-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
; CHECK-NO-PAUTH-NEXT: .cfi_def_cfa_offset 16
; CHECK-NO-PAUTH-NEXT: .cfi_offset w30, -16
@@ -32,9 +32,9 @@ define i32 @f() #0 {
; CHECK-PAUTH-NEXT: dsb sy
; CHECK-PAUTH-NEXT: isb
; CHECK-PAUTH-NEXT: hint #39
-; CHECK-PAUTH-NEXT: .cfi_set_ra_state 2, .Ltmp0
; CHECK-PAUTH-NEXT: .Ltmp0:
; CHECK-PAUTH-NEXT: paciasp
+; CHECK-PAUTH-NEXT: .cfi_set_ra_state 2, .Ltmp0
; CHECK-PAUTH-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
; CHECK-PAUTH-NEXT: .cfi_def_cfa_offset 16
; CHECK-PAUTH-NEXT: .cfi_offset w30, -16
@@ -52,9 +52,9 @@ define i32 @f() #0 {
; CHECK-PAUTHLR: // %bb.0: // %entry
; CHECK-PAUTHLR-NEXT: cmp sp, #0
; CHECK-PAUTHLR-NEXT: csetm x16, ne
-; CHECK-PAUTHLR-NEXT: .cfi_set_ra_state 2, .Ltmp0
; CHECK-PAUTHLR-NEXT: .Ltmp0:
; CHECK-PAUTHLR-NEXT: paciasppc
+; CHECK-PAUTHLR-NEXT: .cfi_set_ra_state 2, .Ltmp0
; CHECK-PAUTHLR-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
; CHECK-PAUTHLR-NEXT: .cfi_def_cfa_offset 16
; CHECK-PAUTHLR-NEXT: .cfi_offset w30, -16
@@ -75,9 +75,9 @@ define i32 @f() #0 {
; CHECK-PAUTH-PAUTHLR: // %bb.0: // %entry
; CHECK-PAUTH-PAUTHLR-NEXT: cmp sp, #0
; CHECK-PAUTH-PAUTHLR-NEXT: csetm x16, ne
-; CHECK-PAUTH-PAUTHLR-NEXT: .cfi_set_ra_state 2, .Ltmp0
; CHECK-PAUTH-PAUTHLR-NEXT: .Ltmp0:
; CHECK-PAUTH-PAUTHLR-NEXT: paciasppc
+; CHECK-PAUTH-PAUTHLR-NEXT: .cfi_set_ra_state 2, .Ltmp0
; CHECK-PAUTH-PAUTHLR-NEXT: str x30, [sp, #-16]! // 8-byte Folded Spill
; CHECK-PAUTH-PAUTHLR-NEXT: .cfi_def_cfa_offset 16
; CHECK-PAUTH-PAUTHLR-NEXT: .cfi_offset w30, -16
diff --git a/llvm/test/CodeGen/AArch64/swifttail-ptrauth.ll b/llvm/test/CodeGen/AArch64/swifttail-ptrauth.ll
index 3f5a435a8c3a0..bd67746d7f96f 100644
--- a/llvm/test/CodeGen/AArch64/swifttail-ptrauth.ll
+++ b/llvm/test/CodeGen/AArch64/swifttail-ptrauth.ll
@@ -20,18 +20,18 @@ define swifttailcc void @caller_to0_from0() "branch-protection-pauth-lr" "sign-r
; CHECK: // %bb.0:
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp0
; COMPAT-NEXT: .Ltmp0:
; COMPAT-NEXT: hint #25
+; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp0
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp0
; V83A-NEXT: .Ltmp0:
; V83A-NEXT: paciasp
+; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp0
-; V9A-NEXT: .cfi_set_ra_state 2, .Ltmp0
; V9A-NEXT: .Ltmp0:
; V9A-NEXT: paciasppc
+; V9A-NEXT: .cfi_set_ra_state 2, .Ltmp0
; PAUTH-NEXT: paciasp
; PAUTH-NEXT: .cfi_negate_ra_state
@@ -83,18 +83,18 @@ define swifttailcc void @caller_to0_from8([8 x i64], i64) "branch-protection-pau
; CHECK: // %bb.0:
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp1
; COMPAT-NEXT: .Ltmp1:
; COMPAT-NEXT: hint #25
+; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp1
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp1
; V83A-NEXT: .Ltmp1:
; V83A-NEXT: paciasp
+; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp1
-; V9A-NEXT: .cfi_set_ra_state 2, .Ltmp1
; V9A-NEXT: .Ltmp1:
; V9A-NEXT: paciasppc
+; V9A-NEXT: .cfi_set_ra_state 2, .Ltmp1
; PAUTH-NEXT: paciasp
; PAUTH-NEXT: .cfi_negate_ra_state
@@ -143,18 +143,18 @@ define swifttailcc void @caller_to8_from0() "branch-protection-pauth-lr" "sign-r
; CHECK: // %bb.0:
; COMPAT-NEXT: hint #39
-; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp2
; COMPAT-NEXT: .Ltmp2:
; COMPAT-NEXT: hint #25
+; COMPAT-NEXT: .cfi_set_ra_state 2, .Ltmp2
; V83A-NEXT: hint #39
-; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp2
; V83A-NEXT: .Ltmp2:
; V83A-NEXT: paciasp
+; V83A-NEXT: .cfi_set_ra_state 2, .Ltmp2
-; V9A-NEXT: .cfi_set_ra_state 2, .Ltmp2
; V9A-NEXT: .Ltmp2:
; V9A-NEXT: paciasppc
+; V9A-NEXT: .cfi_set_ra_state 2, .Ltmp2
; PAUTH-NEXT: paciasp
; PAUTH-NEXT: .cfi_negate_ra_state
diff --git a/llvm/test/MC/AArch64/cfi_set_ra_state-shrinkwrap.s b/llvm/test/MC/AArch64/cfi_set_ra_state-shrinkwrap.s
index 67c12461c9fd6..49354febaf538 100644
--- a/llvm/test/MC/AArch64/cfi_set_ra_state-shrinkwrap.s
+++ b/llvm/test/MC/AArch64/cfi_set_ra_state-shrinkwrap.s
@@ -51,8 +51,8 @@ LBB1:
ret
LBB0:
- .cfi_set_ra_state 2, 0
pacibsppc
+ .cfi_set_ra_state 2, LBB0
stp x29, x30, [sp, #-16]!
.cfi_def_cfa_offset 16
@@ -125,9 +125,9 @@ LBB0:
# CHECK-NEXT: DW_CFA_restore: reg30
# CHECK-NEXT: DW_CFA_advance_loc: 8 to 0xb8
# CHECK-NEXT: DW_CFA_AARCH64_set_ra_state: 0 16
-# CHECK-NEXT: DW_CFA_advance_loc: 12 to 0xc4
-# CHECK-NEXT: DW_CFA_AARCH64_set_ra_state: 2 0
-# CHECK-NEXT: DW_CFA_advance_loc: 8 to 0xcc
+# CHECK-NEXT: DW_CFA_advance_loc: 16 to 0xc8
+# CHECK-NEXT: DW_CFA_AARCH64_set_ra_state: 2 -4
+# CHECK-NEXT: DW_CFA_advance_loc: 4 to 0xcc
# CHECK-NEXT: DW_CFA_def_cfa_offset: +16
# CHECK-NEXT: DW_CFA_offset: reg29 -16
# CHECK-NEXT: DW_CFA_offset: reg30 -8
@@ -138,5 +138,5 @@ LBB0:
# CHECK-NEXT: 0xa0: CFA=reg31
# CHECK-NEXT: 0xb0: CFA=reg31
# CHECK-NEXT: 0xb8: CFA=reg31: reg34=0
-# CHECK-NEXT: 0xc4: CFA=reg31: reg34=2
+# CHECK-NEXT: 0xc8: CFA=reg31: reg34=2
# CHECK-NEXT: 0xcc: CFA=reg31+16: reg29=[CFA-16], reg30=[CFA-8], reg34=2
>From 863fbf8679d613ab5234a60255501dc76fa95d5d Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Thu, 9 Jul 2026 15:59:28 -0700
Subject: [PATCH 44/58] fixup the mir test broken in
4daa788cd43f98db90c3522eb6732a3ddf2cbf81
---
llvm/test/CodeGen/MIR/AArch64/return-address-signing.mir | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/llvm/test/CodeGen/MIR/AArch64/return-address-signing.mir b/llvm/test/CodeGen/MIR/AArch64/return-address-signing.mir
index 8048a4680e5bc..049a2ef013c2f 100644
--- a/llvm/test/CodeGen/MIR/AArch64/return-address-signing.mir
+++ b/llvm/test/CodeGen/MIR/AArch64/return-address-signing.mir
@@ -59,8 +59,8 @@ tracksRegLiveness: true
frameInfo:
maxCallFrameSize: 0
#CHECK: frame-setup PACM
-#CHECK: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
#CHECK: frame-setup PACIASP implicit-def $lr, implicit $lr, implicit $sp, pre-instr-symbol <mcsymbol >
+#CHECK: frame-setup CFI_INSTRUCTION llvm_set_ra_state 2, <mcsymbol >
#CHECK: frame-destroy PACM
#CHECK: frame-destroy AUTIASP implicit-def $lr, implicit $lr, implicit $sp
body: |
>From b2536fa4155010029aedbce2b19c43b5b17d02de Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Fri, 10 Jul 2026 09:35:37 -0700
Subject: [PATCH 45/58] .cfi_set_ra_state must move UNW_AARCH64_RA_SIGN_STATE
to kRegisterIsPseudo
---
libunwind/src/DwarfParser.hpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/libunwind/src/DwarfParser.hpp b/libunwind/src/DwarfParser.hpp
index 72c0504bb472f..1a4a4d43ec1f9 100644
--- a/libunwind/src/DwarfParser.hpp
+++ b/libunwind/src/DwarfParser.hpp
@@ -869,8 +869,8 @@ bool CFI_Parser<A>::parseFDEInstructions(
}
offset = addressSpace.getSLEB128(p, instructionsEnd) *
cieInfo.codeAlignFactor;
- results->setRegisterValue(UNW_AARCH64_RA_SIGN_STATE, value,
- initialState);
+ results->setRegister(UNW_AARCH64_RA_SIGN_STATE, kRegisterIsPseudo,
+ value, initialState);
results->ptrAuthDiversifier = fdeInfo.pcStart + codeOffset + offset;
_LIBUNWIND_TRACE_DWARF(
"DW_CFA_AARCH64_set_ra_state(state=%" PRId64 ",pc=0x%" PRIx64 ")\n",
>From fa800820398ca09d63061e8f742d837bd6e19725 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Fri, 10 Jul 2026 13:49:50 -0700
Subject: [PATCH 46/58] stdout -> stderr
I suspect stdout is buffered by glibc, and being swallowed by the test harness.
---
libunwind/test/ra_sign_state.pass.cpp | 20 +++++++++++++-------
1 file changed, 13 insertions(+), 7 deletions(-)
diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index 9a5230a588cd9..24813d1625541 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -22,6 +22,7 @@
#undef NDEBUG
#include "../src/config.h"
#include "support/func_bounds.h"
+
#include <assert.h>
#include <inttypes.h>
#include <libunwind.h>
@@ -72,16 +73,16 @@ FUNC_BOUNDS_DECL(main_func);
static _Unwind_Reason_Code frame_handler(struct _Unwind_Context *ctx,
void *arg) {
- printf("frame_handler\n");
+ fprintf(stderr, "frame_handler\n");
uint64_t ra_sign_state =
(uint64_t)_Unwind_GetGR(ctx, UNW_AARCH64_RA_SIGN_STATE);
- printf("ra_sign_state = 0x%" PRIx64 "\n", ra_sign_state);
+ fprintf(stderr, "ra_sign_state = 0x%" PRIx64 "\n", ra_sign_state);
uintptr_t ip = _Unwind_GetIP(ctx);
- printf("UNW_AARCH64_RA_SIGN_STATE @ 0x%" PRIxPTR " = %" PRIu64 "\n", ip,
- ra_sign_state);
+ fprintf(stderr, "UNW_AARCH64_RA_SIGN_STATE @ 0x%" PRIxPTR " = %" PRIu64 "\n",
+ ip, ra_sign_state);
if (ip >= (uintptr_t)FUNC_START(main_func) &&
ip < (uintptr_t)FUNC_END(main_func)) {
@@ -104,6 +105,8 @@ static _Unwind_Reason_Code frame_handler(struct _Unwind_Context *ctx,
__attribute__((noinline)) extern "C" uintptr_t get_main_ra_sign_state() {
uint64_t sign_state = -1;
_Unwind_Backtrace(frame_handler, &sign_state);
+ fprintf(stderr, "get_main_ra_sign_state: sign_state = 0x%" PRIx64 "\n",
+ sign_state);
assert((sign_state & 0x3) == sign_state);
return sign_state;
}
@@ -159,28 +162,31 @@ __attribute__((naked)) uint64_t check_set() {
#endif
FUNC_ATTR(main_func) int main(int, char **) {
- printf("ra_sign_state.pass.cpp\n");
+ fprintf(stderr, "ra_sign_state.pass.cpp\n");
uint64_t ret;
ret = check_vanilla();
+ fprintf(stderr, "check_vanilla: ret = 0x%" PRIx64 "\n", ret);
#if defined(_LIBUNWIND_TARGET_AARCH64_AUTHENTICATED_UNWINDING)
assert(ret == 1 || ret == 2);
#endif
if (!checkHasPAuth()) {
- printf("target does not have FEAT_PAuth\n");
+ fprintf(stderr, "target does not have FEAT_PAuth\n");
return 0;
}
ret = check_negate();
+ fprintf(stderr, "check_negate: ret = 0x%" PRIx64 "\n", ret);
assert(ret == 1);
#if defined(HAVE_CFI_SET_RA_STATE)
ret = check_set();
+ fprintf(stderr, "check_set: ret = 0x%" PRIx64 "\n", ret);
assert(ret == 1);
#endif
- printf("success\n");
+ fprintf(stderr, "success\n");
return 0;
}
>From b2c53fdfd09dac61a4a43b8135435d54acb606af Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Fri, 10 Jul 2026 13:59:06 -0700
Subject: [PATCH 47/58] clang-format
---
llvm/lib/Target/AArch64/AArch64PointerAuth.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp b/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
index 3f79eb7bbe7f4..c5d3d7af6ee61 100644
--- a/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
+++ b/llvm/lib/Target/AArch64/AArch64PointerAuth.cpp
@@ -260,7 +260,7 @@ void AArch64PointerAuthImpl::signLR(MachineFunction &MF,
// No SEH opcode for this one; it doesn't materialize into an
// instruction on Windows.
if (MFnI.branchProtectionPAuthLR() && Subtarget->hasPAuthLR()) {
- decoratePACWithCFI(MBB, MBBI, EmitCFI, [&](){
+ decoratePACWithCFI(MBB, MBBI, EmitCFI, [&]() {
BuildMI(MBB, MBBI, DL,
TII->get(UseBKey ? AArch64::PACIBSPPC : AArch64::PACIASPPC))
.setMIFlag(MachineInstr::FrameSetup)
@@ -271,7 +271,7 @@ void AArch64PointerAuthImpl::signLR(MachineFunction &MF,
BuildMI(MBB, MBBI, DL, TII->get(AArch64::PACM))
.setMIFlag(MachineInstr::FrameSetup);
}
- decoratePACWithCFI(MBB, MBBI, EmitCFI, [&](){
+ decoratePACWithCFI(MBB, MBBI, EmitCFI, [&]() {
BuildMI(MBB, MBBI, DL,
TII->get(UseBKey ? AArch64::PACIBSP : AArch64::PACIASP))
.setMIFlag(MachineInstr::FrameSetup)
>From 9a79c201d3dae8d09c905c78cc26527a323b0b08 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Fri, 10 Jul 2026 14:13:51 -0700
Subject: [PATCH 48/58] fix -DHAVE_CFI_SET_RA_STATE detection + lit passthrough
---
libunwind/test/CMakeLists.txt | 7 ++++---
libunwind/test/configs/apple-libunwind-system.cfg.in | 7 ++++++-
libunwind/test/configs/llvm-libunwind-merged.cfg.in | 3 +++
libunwind/test/configs/llvm-libunwind-shared.cfg.in | 3 +++
libunwind/test/configs/llvm-libunwind-static.cfg.in | 3 +++
5 files changed, 19 insertions(+), 4 deletions(-)
diff --git a/libunwind/test/CMakeLists.txt b/libunwind/test/CMakeLists.txt
index 94ccbcc203d2c..01f2cefff1b90 100644
--- a/libunwind/test/CMakeLists.txt
+++ b/libunwind/test/CMakeLists.txt
@@ -41,13 +41,14 @@ _test_cfi_set_ra_state:
ret
.cfi_endproc
")
+set(_previous_CMAKE_TRY_COMPILE_TARGET_TYPE ${CMAKE_TRY_COMPILE_TARGET_TYPE})
+set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
try_compile(HAVE_CFI_SET_RA_STATE
"${CMAKE_BINARY_DIR}/check_cfi_set_ra_state"
SOURCES "${CMAKE_BINARY_DIR}/check_cfi_set_ra_state.s"
)
-if(HAVE_CFI_SET_RA_STATE)
- add_compile_definitions(HAVE_CFI_SET_RA_STATE=1)
-endif()
+set(CMAKE_TRY_COMPILE_TARGET_TYPE ${_previous_CMAKE_TRY_COMPILE_TARGET_TYPE})
+pythonize_bool(HAVE_CFI_SET_RA_STATE)
set(AUTO_GEN_COMMENT "## Autogenerated by libunwind configuration.\n# Do not edit!")
set(SERIALIZED_LIT_PARAMS "# Lit parameters serialized here for llvm-lit to pick them up\n")
diff --git a/libunwind/test/configs/apple-libunwind-system.cfg.in b/libunwind/test/configs/apple-libunwind-system.cfg.in
index 252448a756be9..2349ca394b58b 100644
--- a/libunwind/test/configs/apple-libunwind-system.cfg.in
+++ b/libunwind/test/configs/apple-libunwind-system.cfg.in
@@ -12,8 +12,13 @@ lit_config.load_config(config, '@CMAKE_CURRENT_BINARY_DIR@/cmake-bridge.cfg')
config.substitutions.append(('%{flags}',
'-isysroot {}'.format('@CMAKE_OSX_SYSROOT@') if '@CMAKE_OSX_SYSROOT@' else ''
))
+
+compile_flags = ['-nostdinc++', '-I', '%{include}']
+if @HAVE_CFI_SET_RA_STATE@:
+ compile_flags.append('-DHAVE_CFI_SET_RA_STATE')
+
config.substitutions.append(('%{compile_flags}',
- '-nostdinc++ -I %{include}'
+ ' '.join(compile_flags)
))
config.substitutions.append(('%{link_flags}',
'-nostdlib++ -L %{lib} -lc++ -lunwind'
diff --git a/libunwind/test/configs/llvm-libunwind-merged.cfg.in b/libunwind/test/configs/llvm-libunwind-merged.cfg.in
index 1ae1b515bff4d..231849f5c4e56 100644
--- a/libunwind/test/configs/llvm-libunwind-merged.cfg.in
+++ b/libunwind/test/configs/llvm-libunwind-merged.cfg.in
@@ -20,6 +20,9 @@ if @LIBUNWIND_ENABLE_CET@:
if @LIBUNWIND_ENABLE_GCS@:
compile_flags.append('-mbranch-protection=standard')
+if @HAVE_CFI_SET_RA_STATE@:
+ compile_flags.append('-DHAVE_CFI_SET_RA_STATE')
+
# On ELF platforms, link tests with -Wl,--export-dynamic if supported by the linker.
if len('@CMAKE_EXE_EXPORTS_CXX_FLAG@'):
link_flags.append('@CMAKE_EXE_EXPORTS_CXX_FLAG@')
diff --git a/libunwind/test/configs/llvm-libunwind-shared.cfg.in b/libunwind/test/configs/llvm-libunwind-shared.cfg.in
index 84af348a5c6cb..0a7a24eb08c5e 100644
--- a/libunwind/test/configs/llvm-libunwind-shared.cfg.in
+++ b/libunwind/test/configs/llvm-libunwind-shared.cfg.in
@@ -19,6 +19,9 @@ if @LIBUNWIND_ENABLE_CET@:
if @LIBUNWIND_ENABLE_GCS@:
compile_flags.append('-mbranch-protection=standard')
+if @HAVE_CFI_SET_RA_STATE@:
+ compile_flags.append('-DHAVE_CFI_SET_RA_STATE')
+
# On ELF platforms, link tests with -Wl,--export-dynamic if supported by the linker.
if len('@CMAKE_EXE_EXPORTS_CXX_FLAG@'):
link_flags.append('@CMAKE_EXE_EXPORTS_CXX_FLAG@')
diff --git a/libunwind/test/configs/llvm-libunwind-static.cfg.in b/libunwind/test/configs/llvm-libunwind-static.cfg.in
index 7e1fb5395c57a..f831c74948579 100644
--- a/libunwind/test/configs/llvm-libunwind-static.cfg.in
+++ b/libunwind/test/configs/llvm-libunwind-static.cfg.in
@@ -22,6 +22,9 @@ if @LIBUNWIND_ENABLE_CET@:
if @LIBUNWIND_ENABLE_GCS@:
compile_flags.append('-mbranch-protection=standard')
+if @HAVE_CFI_SET_RA_STATE@:
+ compile_flags.append('-DHAVE_CFI_SET_RA_STATE')
+
# On ELF platforms, link tests with -Wl,--export-dynamic if supported by the linker.
if len('@CMAKE_EXE_EXPORTS_CXX_FLAG@'):
link_flags.append('@CMAKE_EXE_EXPORTS_CXX_FLAG@')
>From 21949147917d5d9b6f3323e6e9ba3c33784f625e Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Fri, 10 Jul 2026 14:52:54 -0700
Subject: [PATCH 49/58] add missing target("pauth")
---
libunwind/test/ra_sign_state.pass.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index 24813d1625541..09c8327201b46 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -138,7 +138,7 @@ __attribute__((naked, target("pauth"))) static uint64_t check_negate() {
}
#if defined(HAVE_CFI_SET_RA_STATE)
-__attribute__((naked)) uint64_t check_set() {
+__attribute__((naked, target("pauth"))) uint64_t check_set() {
// clang-format off
asm(".cfi_set_ra_state 1, 0\n"
"pacibsp\n"
>From 17084f0695dc7d0b5f6af44f0729930ebf08129d Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Fri, 10 Jul 2026 16:45:18 -0700
Subject: [PATCH 50/58] CI-driven-development: spray in logging, so we can
printf debug. revert me
---
libunwind/src/DwarfInstructions.hpp | 21 ++++++++++++++++
libunwind/src/UnwindCursor.hpp | 37 ++++++++++++++++++++++++++++-
libunwind/src/config.h | 9 +++++++
3 files changed, 66 insertions(+), 1 deletion(-)
diff --git a/libunwind/src/DwarfInstructions.hpp b/libunwind/src/DwarfInstructions.hpp
index 267ee6ab4693d..9dd8998d8fbb5 100644
--- a/libunwind/src/DwarfInstructions.hpp
+++ b/libunwind/src/DwarfInstructions.hpp
@@ -200,6 +200,12 @@ DwarfInstructions<A, R>::getReturnAddressSignStatus(A &addressSpace,
else
raSignState = getSavedRegister(addressSpace, registers, cfa, regloc);
+ _LIBUNWIND_TRACE_DWARF(
+ "getReturnAddressSignStatus: regloc.location=%d, regloc.value=0x%" PRIx64
+ ", raSignState=0x%" PRIx64 "\n",
+ static_cast<int>(regloc.location), static_cast<uint64_t>(regloc.value),
+ static_cast<uint64_t>(raSignState));
+
// bits[1:0] describe how RA is signed.
assert((raSignState & 0x3) != 3 && "unexpected RA sign state");
return static_cast<RASignStatus>(raSignState & 0x3);
@@ -220,6 +226,12 @@ int DwarfInstructions<A, R>::stepWithDwarf(
// get pointer to cfa (architecture specific)
pint_t cfa = getCFA(addressSpace, prolog, registers);
+ _LIBUNWIND_TRACE_DWARF(
+ "stepWithDwarf: pc=0x%" PRIx64 ", fdeStart=0x%" PRIx64
+ ", cfa=0x%" PRIx64 ", returnAddressRegister=%d\n",
+ static_cast<uint64_t>(pc), static_cast<uint64_t>(fdeStart),
+ static_cast<uint64_t>(cfa), cieInfo.returnAddressRegister);
+
(void)stage2;
// __unw_step_stage2 is not used for cross unwinding, so we use
// __aarch64__ rather than LIBUNWIND_TARGET_AARCH64 to make sure we are
@@ -317,6 +329,12 @@ int DwarfInstructions<A, R>::stepWithDwarf(
// to a NOP on pre-v8.3a architectures.
RASignStatus RAState =
getReturnAddressSignStatus(addressSpace, registers, cfa, prolog);
+ _LIBUNWIND_TRACE_DWARF(
+ "stepWithDwarf: RAState=%d, returnAddress=0x%" PRIx64
+ ", addressesSignedWithBKey=%d, ptrAuthDiversifier=0x%" PRIx64 "\n",
+ static_cast<int>(RAState), static_cast<uint64_t>(returnAddress),
+ cieInfo.addressesSignedWithBKey,
+ static_cast<uint64_t>(prolog.ptrAuthDiversifier));
if ((R::getArch() == REGISTERS_ARM64) && RAState != RANotSigned &&
returnAddress != 0) {
#if !defined(_LIBUNWIND_IS_NATIVE_ONLY)
@@ -349,6 +367,9 @@ int DwarfInstructions<A, R>::stepWithDwarf(
asm("hint 0xc" : "+r"(x17) : "r"(x16)); // autia1716
}
returnAddress = x17;
+ _LIBUNWIND_TRACE_DWARF(
+ "stepWithDwarf: authenticated returnAddress=0x%" PRIx64 "\n",
+ static_cast<uint64_t>(returnAddress));
#endif
}
#endif
diff --git a/libunwind/src/UnwindCursor.hpp b/libunwind/src/UnwindCursor.hpp
index ff92c9e0a844a..cfa3c16997ae7 100644
--- a/libunwind/src/UnwindCursor.hpp
+++ b/libunwind/src/UnwindCursor.hpp
@@ -1765,17 +1765,38 @@ bool UnwindCursor<A, R>::getInfoFromDwarfSection(
typename CFI_Parser<A>::CIE_Info cieInfo;
bool foundFDE = false;
bool foundInCache = false;
+ _LIBUNWIND_TRACE_DWARF(
+ "getInfoFromDwarfSection: pc=0x%" PRIx64 ", dwarf_section=0x%" PRIx64
+ ", dwarf_section_length=0x%" PRIx64
+ ", fdeSectionOffsetHint=0x%" PRIx32 "\n",
+ static_cast<uint64_t>(pc), static_cast<uint64_t>(sects.dwarf_section),
+ static_cast<uint64_t>(sects.dwarf_section_length),
+ fdeSectionOffsetHint);
+#if defined(_LIBUNWIND_SUPPORT_DWARF_INDEX)
+ _LIBUNWIND_TRACE_DWARF(
+ "getInfoFromDwarfSection: dwarf_index_section=0x%" PRIx64
+ ", dwarf_index_section_length=0x%" PRIx64 "\n",
+ static_cast<uint64_t>(sects.dwarf_index_section),
+ static_cast<uint64_t>(sects.dwarf_index_section_length));
+#endif
// If compact encoding table gave offset into dwarf section, go directly there
if (fdeSectionOffsetHint != 0) {
foundFDE = CFI_Parser<A>::template findFDE<R>(
_addressSpace, pc, sects.dwarf_section, sects.dwarf_section_length,
sects.dwarf_section + fdeSectionOffsetHint, &fdeInfo, &cieInfo);
+ _LIBUNWIND_TRACE_DWARF(
+ "getInfoFromDwarfSection: findFDE via offset hint -> foundFDE=%d\n",
+ foundFDE);
}
#if defined(_LIBUNWIND_SUPPORT_DWARF_INDEX)
if (!foundFDE && (sects.dwarf_index_section != 0)) {
foundFDE = EHHeaderParser<A>::template findFDE<R>(
_addressSpace, pc, sects.dwarf_index_section,
(uint32_t)sects.dwarf_index_section_length, &fdeInfo, &cieInfo);
+ _LIBUNWIND_TRACE_DWARF(
+ "getInfoFromDwarfSection: EHHeaderParser::findFDE via "
+ ".eh_frame_hdr -> foundFDE=%d\n",
+ foundFDE);
}
#endif
if (!foundFDE) {
@@ -1787,6 +1808,9 @@ bool UnwindCursor<A, R>::getInfoFromDwarfSection(
_addressSpace, pc, sects.dwarf_section, sects.dwarf_section_length,
cachedFDE, &fdeInfo, &cieInfo);
foundInCache = foundFDE;
+ _LIBUNWIND_TRACE_DWARF(
+ "getInfoFromDwarfSection: findFDE via FDE cache -> foundFDE=%d\n",
+ foundFDE);
}
}
if (!foundFDE) {
@@ -1794,8 +1818,17 @@ bool UnwindCursor<A, R>::getInfoFromDwarfSection(
foundFDE = CFI_Parser<A>::template findFDE<R>(
_addressSpace, pc, sects.dwarf_section, sects.dwarf_section_length, 0,
&fdeInfo, &cieInfo);
+ _LIBUNWIND_TRACE_DWARF(
+ "getInfoFromDwarfSection: findFDE via full scan -> foundFDE=%d\n",
+ foundFDE);
}
if (foundFDE) {
+ _LIBUNWIND_TRACE_DWARF(
+ "getInfoFromDwarfSection: fdeStart=0x%" PRIx64 ", pcStart=0x%" PRIx64
+ ", pcEnd=0x%" PRIx64 "\n",
+ static_cast<uint64_t>(fdeInfo.fdeStart),
+ static_cast<uint64_t>(fdeInfo.pcStart),
+ static_cast<uint64_t>(fdeInfo.pcEnd));
if (getInfoFromFdeCie(fdeInfo, cieInfo, pc, sects.dso_base)) {
// Add to cache (to make next lookup faster) if we had no hint
// and there was no index.
@@ -1809,7 +1842,9 @@ bool UnwindCursor<A, R>::getInfoFromDwarfSection(
return true;
}
}
- //_LIBUNWIND_DEBUG_LOG("can't find/use FDE for pc=0x%llX", (uint64_t)pc);
+ _LIBUNWIND_TRACE_DWARF(
+ "getInfoFromDwarfSection: can't find/use FDE for pc=0x%" PRIx64 "\n",
+ static_cast<uint64_t>(pc));
return false;
}
#endif // defined(_LIBUNWIND_SUPPORT_DWARF_UNWIND)
diff --git a/libunwind/src/config.h b/libunwind/src/config.h
index f017403fa2234..316c518e4f9c5 100644
--- a/libunwind/src/config.h
+++ b/libunwind/src/config.h
@@ -195,6 +195,7 @@
#endif
// Macros that define away in non-Debug builds
+#if 0
#ifdef NDEBUG
#define _LIBUNWIND_DEBUG_LOG(msg, ...)
#define _LIBUNWIND_TRACE_API(msg, ...)
@@ -231,6 +232,14 @@
fprintf(stderr, __VA_ARGS__); \
} while (0)
#endif
+#else // TODO: revert -- force-enabled tracing
+ #define _LIBUNWIND_DEBUG_LOG(msg, ...) _LIBUNWIND_LOG(msg, __VA_ARGS__)
+ #define _LIBUNWIND_TRACE_API(msg, ...) _LIBUNWIND_LOG(msg, __VA_ARGS__)
+ #define _LIBUNWIND_TRACING_UNWINDING (1)
+ #define _LIBUNWIND_TRACING_DWARF (1)
+ #define _LIBUNWIND_TRACE_UNWINDING(msg, ...) _LIBUNWIND_LOG(msg, __VA_ARGS__)
+ #define _LIBUNWIND_TRACE_DWARF(...) fprintf(stderr, __VA_ARGS__)
+#endif // TODO: revert
#ifdef __cplusplus
// Used to fit UnwindCursor and Registers_xxx types against unw_context_t /
>From 79f0efd85de29f4e26e2275902bc36d16cd3acf8 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Fri, 10 Jul 2026 17:03:16 -0700
Subject: [PATCH 51/58] forward decls for the printf hack. revert me
---
libunwind/src/config.h | 18 +++++++++---------
1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/libunwind/src/config.h b/libunwind/src/config.h
index 316c518e4f9c5..ab0b530afcc52 100644
--- a/libunwind/src/config.h
+++ b/libunwind/src/config.h
@@ -195,6 +195,15 @@
#endif
// Macros that define away in non-Debug builds
+#ifdef __cplusplus
+extern "C" {
+#endif
+extern bool logAPIs(void);
+extern bool logUnwinding(void);
+extern bool logDWARF(void);
+#ifdef __cplusplus
+}
+#endif
#if 0
#ifdef NDEBUG
#define _LIBUNWIND_DEBUG_LOG(msg, ...)
@@ -204,15 +213,6 @@
#define _LIBUNWIND_TRACE_UNWINDING(msg, ...)
#define _LIBUNWIND_TRACE_DWARF(...)
#else
- #ifdef __cplusplus
- extern "C" {
- #endif
- extern bool logAPIs(void);
- extern bool logUnwinding(void);
- extern bool logDWARF(void);
- #ifdef __cplusplus
- }
- #endif
#define _LIBUNWIND_DEBUG_LOG(msg, ...) _LIBUNWIND_LOG(msg, __VA_ARGS__)
#define _LIBUNWIND_TRACE_API(msg, ...) \
do { \
>From 8b2ae4bef47d91199f948bff02f2dc2e69be66b6 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Fri, 10 Jul 2026 17:08:28 -0700
Subject: [PATCH 52/58] clang-format: revert me
---
libunwind/src/UnwindCursor.hpp | 18 ++++++++----------
libunwind/src/config.h | 24 ++++++++++++------------
2 files changed, 20 insertions(+), 22 deletions(-)
diff --git a/libunwind/src/UnwindCursor.hpp b/libunwind/src/UnwindCursor.hpp
index cfa3c16997ae7..3e5fc4c5bbc0e 100644
--- a/libunwind/src/UnwindCursor.hpp
+++ b/libunwind/src/UnwindCursor.hpp
@@ -1767,11 +1767,10 @@ bool UnwindCursor<A, R>::getInfoFromDwarfSection(
bool foundInCache = false;
_LIBUNWIND_TRACE_DWARF(
"getInfoFromDwarfSection: pc=0x%" PRIx64 ", dwarf_section=0x%" PRIx64
- ", dwarf_section_length=0x%" PRIx64
- ", fdeSectionOffsetHint=0x%" PRIx32 "\n",
+ ", dwarf_section_length=0x%" PRIx64 ", fdeSectionOffsetHint=0x%" PRIx32
+ "\n",
static_cast<uint64_t>(pc), static_cast<uint64_t>(sects.dwarf_section),
- static_cast<uint64_t>(sects.dwarf_section_length),
- fdeSectionOffsetHint);
+ static_cast<uint64_t>(sects.dwarf_section_length), fdeSectionOffsetHint);
#if defined(_LIBUNWIND_SUPPORT_DWARF_INDEX)
_LIBUNWIND_TRACE_DWARF(
"getInfoFromDwarfSection: dwarf_index_section=0x%" PRIx64
@@ -1823,12 +1822,11 @@ bool UnwindCursor<A, R>::getInfoFromDwarfSection(
foundFDE);
}
if (foundFDE) {
- _LIBUNWIND_TRACE_DWARF(
- "getInfoFromDwarfSection: fdeStart=0x%" PRIx64 ", pcStart=0x%" PRIx64
- ", pcEnd=0x%" PRIx64 "\n",
- static_cast<uint64_t>(fdeInfo.fdeStart),
- static_cast<uint64_t>(fdeInfo.pcStart),
- static_cast<uint64_t>(fdeInfo.pcEnd));
+ _LIBUNWIND_TRACE_DWARF("getInfoFromDwarfSection: fdeStart=0x%" PRIx64
+ ", pcStart=0x%" PRIx64 ", pcEnd=0x%" PRIx64 "\n",
+ static_cast<uint64_t>(fdeInfo.fdeStart),
+ static_cast<uint64_t>(fdeInfo.pcStart),
+ static_cast<uint64_t>(fdeInfo.pcEnd));
if (getInfoFromFdeCie(fdeInfo, cieInfo, pc, sects.dso_base)) {
// Add to cache (to make next lookup faster) if we had no hint
// and there was no index.
diff --git a/libunwind/src/config.h b/libunwind/src/config.h
index ab0b530afcc52..34860b427bf99 100644
--- a/libunwind/src/config.h
+++ b/libunwind/src/config.h
@@ -213,12 +213,12 @@ extern bool logDWARF(void);
#define _LIBUNWIND_TRACE_UNWINDING(msg, ...)
#define _LIBUNWIND_TRACE_DWARF(...)
#else
- #define _LIBUNWIND_DEBUG_LOG(msg, ...) _LIBUNWIND_LOG(msg, __VA_ARGS__)
- #define _LIBUNWIND_TRACE_API(msg, ...) \
- do { \
- if (logAPIs()) \
- _LIBUNWIND_LOG(msg, __VA_ARGS__); \
- } while (0)
+#define _LIBUNWIND_DEBUG_LOG(msg, ...) _LIBUNWIND_LOG(msg, __VA_ARGS__)
+#define _LIBUNWIND_TRACE_API(msg, ...) \
+ do { \
+ if (logAPIs()) \
+ _LIBUNWIND_LOG(msg, __VA_ARGS__); \
+ } while (0)
#define _LIBUNWIND_TRACING_UNWINDING logUnwinding()
#define _LIBUNWIND_TRACING_DWARF logDWARF()
#define _LIBUNWIND_TRACE_UNWINDING(msg, ...) \
@@ -233,12 +233,12 @@ extern bool logDWARF(void);
} while (0)
#endif
#else // TODO: revert -- force-enabled tracing
- #define _LIBUNWIND_DEBUG_LOG(msg, ...) _LIBUNWIND_LOG(msg, __VA_ARGS__)
- #define _LIBUNWIND_TRACE_API(msg, ...) _LIBUNWIND_LOG(msg, __VA_ARGS__)
- #define _LIBUNWIND_TRACING_UNWINDING (1)
- #define _LIBUNWIND_TRACING_DWARF (1)
- #define _LIBUNWIND_TRACE_UNWINDING(msg, ...) _LIBUNWIND_LOG(msg, __VA_ARGS__)
- #define _LIBUNWIND_TRACE_DWARF(...) fprintf(stderr, __VA_ARGS__)
+#define _LIBUNWIND_DEBUG_LOG(msg, ...) _LIBUNWIND_LOG(msg, __VA_ARGS__)
+#define _LIBUNWIND_TRACE_API(msg, ...) _LIBUNWIND_LOG(msg, __VA_ARGS__)
+#define _LIBUNWIND_TRACING_UNWINDING (1)
+#define _LIBUNWIND_TRACING_DWARF (1)
+#define _LIBUNWIND_TRACE_UNWINDING(msg, ...) _LIBUNWIND_LOG(msg, __VA_ARGS__)
+#define _LIBUNWIND_TRACE_DWARF(...) fprintf(stderr, __VA_ARGS__)
#endif // TODO: revert
#ifdef __cplusplus
>From 39d841b60216bb4acb589d93fa93fe76b5dc25e4 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Fri, 10 Jul 2026 17:13:44 -0700
Subject: [PATCH 53/58] moar clang format: revert me
---
libunwind/src/config.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/libunwind/src/config.h b/libunwind/src/config.h
index 34860b427bf99..1f40ddd0eb554 100644
--- a/libunwind/src/config.h
+++ b/libunwind/src/config.h
@@ -219,7 +219,7 @@ extern bool logDWARF(void);
if (logAPIs()) \
_LIBUNWIND_LOG(msg, __VA_ARGS__); \
} while (0)
- #define _LIBUNWIND_TRACING_UNWINDING logUnwinding()
+#define _LIBUNWIND_TRACING_UNWINDING logUnwinding()
#define _LIBUNWIND_TRACING_DWARF logDWARF()
#define _LIBUNWIND_TRACE_UNWINDING(msg, ...) \
do { \
>From 0e15f4edd6d5eee2c6fa2547cb5e019421a04a4d Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Fri, 10 Jul 2026 17:18:56 -0700
Subject: [PATCH 54/58] even moar clang-format. sigh. revert me
---
libunwind/src/config.h | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/libunwind/src/config.h b/libunwind/src/config.h
index 1f40ddd0eb554..c38ac3aff4616 100644
--- a/libunwind/src/config.h
+++ b/libunwind/src/config.h
@@ -220,12 +220,12 @@ extern bool logDWARF(void);
_LIBUNWIND_LOG(msg, __VA_ARGS__); \
} while (0)
#define _LIBUNWIND_TRACING_UNWINDING logUnwinding()
- #define _LIBUNWIND_TRACING_DWARF logDWARF()
- #define _LIBUNWIND_TRACE_UNWINDING(msg, ...) \
- do { \
- if (logUnwinding()) \
- _LIBUNWIND_LOG(msg, __VA_ARGS__); \
- } while (0)
+#define _LIBUNWIND_TRACING_DWARF logDWARF()
+#define _LIBUNWIND_TRACE_UNWINDING(msg, ...) \
+ do { \
+ if (logUnwinding()) \
+ _LIBUNWIND_LOG(msg, __VA_ARGS__); \
+ } while (0)
#define _LIBUNWIND_TRACE_DWARF(...) \
do { \
if (logDWARF()) \
>From e83aba3d3a89c58849b5a7630693c048c971c990 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Fri, 10 Jul 2026 17:38:38 -0700
Subject: [PATCH 55/58] make premerge ci only run check-unwind
---
.ci/monolithic-linux.sh | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/.ci/monolithic-linux.sh b/.ci/monolithic-linux.sh
index 29b0bdbd0e37b..1a1cf1e541199 100755
--- a/.ci/monolithic-linux.sh
+++ b/.ci/monolithic-linux.sh
@@ -29,6 +29,13 @@ runtime_targets="${4}"
runtime_targets_needs_reconfig="${5}"
enable_cir="${6}"
+# TODO: temporary hack to cause premerge ci to only do check-unwind, to save me some round trip time.
+projects=""
+targets=""
+runtimes="libunwind"
+runtime_targets="check-unwind"
+runtime_targets_needs_reconfig=""
+
lit_args="-v --xunit-xml-output ${BUILD_DIR}/test-results.xml --use-unique-output-file-name --timeout=1200 --time-tests --succinct"
runtime_cmake_args=()
>From b5f9d5f51152efe08c1b47469b29ec68aae44ed9 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Fri, 10 Jul 2026 17:52:09 -0700
Subject: [PATCH 56/58] increase the lit output limit. revert me
---
.ci/monolithic-linux.sh | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.ci/monolithic-linux.sh b/.ci/monolithic-linux.sh
index 1a1cf1e541199..1dd0cc80d3396 100755
--- a/.ci/monolithic-linux.sh
+++ b/.ci/monolithic-linux.sh
@@ -36,7 +36,7 @@ runtimes="libunwind"
runtime_targets="check-unwind"
runtime_targets_needs_reconfig=""
-lit_args="-v --xunit-xml-output ${BUILD_DIR}/test-results.xml --use-unique-output-file-name --timeout=1200 --time-tests --succinct"
+lit_args="-v --xunit-xml-output ${BUILD_DIR}/test-results.xml --use-unique-output-file-name --timeout=1200 --time-tests --succinct -D output_limit=1000000"
runtime_cmake_args=()
if [[ " ${runtime_targets} " == *" check-libclc "* ]]; then
>From 6c920b0e18a7e753074498f2475144087c96b2f8 Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Fri, 10 Jul 2026 18:13:26 -0700
Subject: [PATCH 57/58] .cfi_b_key_frame on non-apple
---
libunwind/test/ra_sign_state.pass.cpp | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/libunwind/test/ra_sign_state.pass.cpp b/libunwind/test/ra_sign_state.pass.cpp
index 09c8327201b46..b965506a346f5 100644
--- a/libunwind/test/ra_sign_state.pass.cpp
+++ b/libunwind/test/ra_sign_state.pass.cpp
@@ -117,7 +117,11 @@ __attribute__((noinline)) static uint64_t check_vanilla() {
__attribute__((naked, target("pauth"))) static uint64_t check_negate() {
// clang-format off
- asm(".cfi_negate_ra_state\n"
+ asm(
+#if !defined(__APPLE__)
+ ".cfi_b_key_frame\n"
+#endif
+ ".cfi_negate_ra_state\n"
"pacibsp\n"
"stp x29, x30, [sp, #-16]!\n"
@@ -140,7 +144,11 @@ __attribute__((naked, target("pauth"))) static uint64_t check_negate() {
#if defined(HAVE_CFI_SET_RA_STATE)
__attribute__((naked, target("pauth"))) uint64_t check_set() {
// clang-format off
- asm(".cfi_set_ra_state 1, 0\n"
+ asm(
+#if !defined(__APPLE__)
+ ".cfi_b_key_frame\n"
+#endif
+ ".cfi_set_ra_state 1, 0\n"
"pacibsp\n"
"stp x29, x30, [sp, #-16]!\n"
>From 50343dc34109175d3fea171851df89f09b11a4cc Mon Sep 17 00:00:00 2001
From: Jon Roelofs <jonathan_roelofs at apple.com>
Date: Fri, 10 Jul 2026 18:27:01 -0700
Subject: [PATCH 58/58] revert 17084f0695dc 79f0efd85de2 8b2ae4bef47d
39d841b60216 0e15f4edd6d5 e83aba3d3a89 b5f9d5f51152
---
.ci/monolithic-linux.sh | 9 +----
libunwind/src/DwarfInstructions.hpp | 21 ------------
libunwind/src/UnwindCursor.hpp | 35 +------------------
libunwind/src/config.h | 53 ++++++++++++-----------------
4 files changed, 24 insertions(+), 94 deletions(-)
diff --git a/.ci/monolithic-linux.sh b/.ci/monolithic-linux.sh
index 1dd0cc80d3396..29b0bdbd0e37b 100755
--- a/.ci/monolithic-linux.sh
+++ b/.ci/monolithic-linux.sh
@@ -29,14 +29,7 @@ runtime_targets="${4}"
runtime_targets_needs_reconfig="${5}"
enable_cir="${6}"
-# TODO: temporary hack to cause premerge ci to only do check-unwind, to save me some round trip time.
-projects=""
-targets=""
-runtimes="libunwind"
-runtime_targets="check-unwind"
-runtime_targets_needs_reconfig=""
-
-lit_args="-v --xunit-xml-output ${BUILD_DIR}/test-results.xml --use-unique-output-file-name --timeout=1200 --time-tests --succinct -D output_limit=1000000"
+lit_args="-v --xunit-xml-output ${BUILD_DIR}/test-results.xml --use-unique-output-file-name --timeout=1200 --time-tests --succinct"
runtime_cmake_args=()
if [[ " ${runtime_targets} " == *" check-libclc "* ]]; then
diff --git a/libunwind/src/DwarfInstructions.hpp b/libunwind/src/DwarfInstructions.hpp
index 9dd8998d8fbb5..267ee6ab4693d 100644
--- a/libunwind/src/DwarfInstructions.hpp
+++ b/libunwind/src/DwarfInstructions.hpp
@@ -200,12 +200,6 @@ DwarfInstructions<A, R>::getReturnAddressSignStatus(A &addressSpace,
else
raSignState = getSavedRegister(addressSpace, registers, cfa, regloc);
- _LIBUNWIND_TRACE_DWARF(
- "getReturnAddressSignStatus: regloc.location=%d, regloc.value=0x%" PRIx64
- ", raSignState=0x%" PRIx64 "\n",
- static_cast<int>(regloc.location), static_cast<uint64_t>(regloc.value),
- static_cast<uint64_t>(raSignState));
-
// bits[1:0] describe how RA is signed.
assert((raSignState & 0x3) != 3 && "unexpected RA sign state");
return static_cast<RASignStatus>(raSignState & 0x3);
@@ -226,12 +220,6 @@ int DwarfInstructions<A, R>::stepWithDwarf(
// get pointer to cfa (architecture specific)
pint_t cfa = getCFA(addressSpace, prolog, registers);
- _LIBUNWIND_TRACE_DWARF(
- "stepWithDwarf: pc=0x%" PRIx64 ", fdeStart=0x%" PRIx64
- ", cfa=0x%" PRIx64 ", returnAddressRegister=%d\n",
- static_cast<uint64_t>(pc), static_cast<uint64_t>(fdeStart),
- static_cast<uint64_t>(cfa), cieInfo.returnAddressRegister);
-
(void)stage2;
// __unw_step_stage2 is not used for cross unwinding, so we use
// __aarch64__ rather than LIBUNWIND_TARGET_AARCH64 to make sure we are
@@ -329,12 +317,6 @@ int DwarfInstructions<A, R>::stepWithDwarf(
// to a NOP on pre-v8.3a architectures.
RASignStatus RAState =
getReturnAddressSignStatus(addressSpace, registers, cfa, prolog);
- _LIBUNWIND_TRACE_DWARF(
- "stepWithDwarf: RAState=%d, returnAddress=0x%" PRIx64
- ", addressesSignedWithBKey=%d, ptrAuthDiversifier=0x%" PRIx64 "\n",
- static_cast<int>(RAState), static_cast<uint64_t>(returnAddress),
- cieInfo.addressesSignedWithBKey,
- static_cast<uint64_t>(prolog.ptrAuthDiversifier));
if ((R::getArch() == REGISTERS_ARM64) && RAState != RANotSigned &&
returnAddress != 0) {
#if !defined(_LIBUNWIND_IS_NATIVE_ONLY)
@@ -367,9 +349,6 @@ int DwarfInstructions<A, R>::stepWithDwarf(
asm("hint 0xc" : "+r"(x17) : "r"(x16)); // autia1716
}
returnAddress = x17;
- _LIBUNWIND_TRACE_DWARF(
- "stepWithDwarf: authenticated returnAddress=0x%" PRIx64 "\n",
- static_cast<uint64_t>(returnAddress));
#endif
}
#endif
diff --git a/libunwind/src/UnwindCursor.hpp b/libunwind/src/UnwindCursor.hpp
index 3e5fc4c5bbc0e..ff92c9e0a844a 100644
--- a/libunwind/src/UnwindCursor.hpp
+++ b/libunwind/src/UnwindCursor.hpp
@@ -1765,37 +1765,17 @@ bool UnwindCursor<A, R>::getInfoFromDwarfSection(
typename CFI_Parser<A>::CIE_Info cieInfo;
bool foundFDE = false;
bool foundInCache = false;
- _LIBUNWIND_TRACE_DWARF(
- "getInfoFromDwarfSection: pc=0x%" PRIx64 ", dwarf_section=0x%" PRIx64
- ", dwarf_section_length=0x%" PRIx64 ", fdeSectionOffsetHint=0x%" PRIx32
- "\n",
- static_cast<uint64_t>(pc), static_cast<uint64_t>(sects.dwarf_section),
- static_cast<uint64_t>(sects.dwarf_section_length), fdeSectionOffsetHint);
-#if defined(_LIBUNWIND_SUPPORT_DWARF_INDEX)
- _LIBUNWIND_TRACE_DWARF(
- "getInfoFromDwarfSection: dwarf_index_section=0x%" PRIx64
- ", dwarf_index_section_length=0x%" PRIx64 "\n",
- static_cast<uint64_t>(sects.dwarf_index_section),
- static_cast<uint64_t>(sects.dwarf_index_section_length));
-#endif
// If compact encoding table gave offset into dwarf section, go directly there
if (fdeSectionOffsetHint != 0) {
foundFDE = CFI_Parser<A>::template findFDE<R>(
_addressSpace, pc, sects.dwarf_section, sects.dwarf_section_length,
sects.dwarf_section + fdeSectionOffsetHint, &fdeInfo, &cieInfo);
- _LIBUNWIND_TRACE_DWARF(
- "getInfoFromDwarfSection: findFDE via offset hint -> foundFDE=%d\n",
- foundFDE);
}
#if defined(_LIBUNWIND_SUPPORT_DWARF_INDEX)
if (!foundFDE && (sects.dwarf_index_section != 0)) {
foundFDE = EHHeaderParser<A>::template findFDE<R>(
_addressSpace, pc, sects.dwarf_index_section,
(uint32_t)sects.dwarf_index_section_length, &fdeInfo, &cieInfo);
- _LIBUNWIND_TRACE_DWARF(
- "getInfoFromDwarfSection: EHHeaderParser::findFDE via "
- ".eh_frame_hdr -> foundFDE=%d\n",
- foundFDE);
}
#endif
if (!foundFDE) {
@@ -1807,9 +1787,6 @@ bool UnwindCursor<A, R>::getInfoFromDwarfSection(
_addressSpace, pc, sects.dwarf_section, sects.dwarf_section_length,
cachedFDE, &fdeInfo, &cieInfo);
foundInCache = foundFDE;
- _LIBUNWIND_TRACE_DWARF(
- "getInfoFromDwarfSection: findFDE via FDE cache -> foundFDE=%d\n",
- foundFDE);
}
}
if (!foundFDE) {
@@ -1817,16 +1794,8 @@ bool UnwindCursor<A, R>::getInfoFromDwarfSection(
foundFDE = CFI_Parser<A>::template findFDE<R>(
_addressSpace, pc, sects.dwarf_section, sects.dwarf_section_length, 0,
&fdeInfo, &cieInfo);
- _LIBUNWIND_TRACE_DWARF(
- "getInfoFromDwarfSection: findFDE via full scan -> foundFDE=%d\n",
- foundFDE);
}
if (foundFDE) {
- _LIBUNWIND_TRACE_DWARF("getInfoFromDwarfSection: fdeStart=0x%" PRIx64
- ", pcStart=0x%" PRIx64 ", pcEnd=0x%" PRIx64 "\n",
- static_cast<uint64_t>(fdeInfo.fdeStart),
- static_cast<uint64_t>(fdeInfo.pcStart),
- static_cast<uint64_t>(fdeInfo.pcEnd));
if (getInfoFromFdeCie(fdeInfo, cieInfo, pc, sects.dso_base)) {
// Add to cache (to make next lookup faster) if we had no hint
// and there was no index.
@@ -1840,9 +1809,7 @@ bool UnwindCursor<A, R>::getInfoFromDwarfSection(
return true;
}
}
- _LIBUNWIND_TRACE_DWARF(
- "getInfoFromDwarfSection: can't find/use FDE for pc=0x%" PRIx64 "\n",
- static_cast<uint64_t>(pc));
+ //_LIBUNWIND_DEBUG_LOG("can't find/use FDE for pc=0x%llX", (uint64_t)pc);
return false;
}
#endif // defined(_LIBUNWIND_SUPPORT_DWARF_UNWIND)
diff --git a/libunwind/src/config.h b/libunwind/src/config.h
index c38ac3aff4616..f017403fa2234 100644
--- a/libunwind/src/config.h
+++ b/libunwind/src/config.h
@@ -195,16 +195,6 @@
#endif
// Macros that define away in non-Debug builds
-#ifdef __cplusplus
-extern "C" {
-#endif
-extern bool logAPIs(void);
-extern bool logUnwinding(void);
-extern bool logDWARF(void);
-#ifdef __cplusplus
-}
-#endif
-#if 0
#ifdef NDEBUG
#define _LIBUNWIND_DEBUG_LOG(msg, ...)
#define _LIBUNWIND_TRACE_API(msg, ...)
@@ -213,33 +203,34 @@ extern bool logDWARF(void);
#define _LIBUNWIND_TRACE_UNWINDING(msg, ...)
#define _LIBUNWIND_TRACE_DWARF(...)
#else
-#define _LIBUNWIND_DEBUG_LOG(msg, ...) _LIBUNWIND_LOG(msg, __VA_ARGS__)
-#define _LIBUNWIND_TRACE_API(msg, ...) \
- do { \
- if (logAPIs()) \
- _LIBUNWIND_LOG(msg, __VA_ARGS__); \
- } while (0)
-#define _LIBUNWIND_TRACING_UNWINDING logUnwinding()
-#define _LIBUNWIND_TRACING_DWARF logDWARF()
-#define _LIBUNWIND_TRACE_UNWINDING(msg, ...) \
- do { \
- if (logUnwinding()) \
- _LIBUNWIND_LOG(msg, __VA_ARGS__); \
- } while (0)
+ #ifdef __cplusplus
+ extern "C" {
+ #endif
+ extern bool logAPIs(void);
+ extern bool logUnwinding(void);
+ extern bool logDWARF(void);
+ #ifdef __cplusplus
+ }
+ #endif
+ #define _LIBUNWIND_DEBUG_LOG(msg, ...) _LIBUNWIND_LOG(msg, __VA_ARGS__)
+ #define _LIBUNWIND_TRACE_API(msg, ...) \
+ do { \
+ if (logAPIs()) \
+ _LIBUNWIND_LOG(msg, __VA_ARGS__); \
+ } while (0)
+ #define _LIBUNWIND_TRACING_UNWINDING logUnwinding()
+ #define _LIBUNWIND_TRACING_DWARF logDWARF()
+ #define _LIBUNWIND_TRACE_UNWINDING(msg, ...) \
+ do { \
+ if (logUnwinding()) \
+ _LIBUNWIND_LOG(msg, __VA_ARGS__); \
+ } while (0)
#define _LIBUNWIND_TRACE_DWARF(...) \
do { \
if (logDWARF()) \
fprintf(stderr, __VA_ARGS__); \
} while (0)
#endif
-#else // TODO: revert -- force-enabled tracing
-#define _LIBUNWIND_DEBUG_LOG(msg, ...) _LIBUNWIND_LOG(msg, __VA_ARGS__)
-#define _LIBUNWIND_TRACE_API(msg, ...) _LIBUNWIND_LOG(msg, __VA_ARGS__)
-#define _LIBUNWIND_TRACING_UNWINDING (1)
-#define _LIBUNWIND_TRACING_DWARF (1)
-#define _LIBUNWIND_TRACE_UNWINDING(msg, ...) _LIBUNWIND_LOG(msg, __VA_ARGS__)
-#define _LIBUNWIND_TRACE_DWARF(...) fprintf(stderr, __VA_ARGS__)
-#endif // TODO: revert
#ifdef __cplusplus
// Used to fit UnwindCursor and Registers_xxx types against unw_context_t /
More information about the cfe-commits
mailing list