mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-22 10:42:39 +01:00
[ARM][AArch64] SLSHardening: make non-comdat thunks possible
Linker scripts might not handle COMDAT sections. SLSHardeing adds new section for each __llvm_slsblr_thunk_xN. This new option allows the generation of the thunks into the normal text section to handle these exceptional cases. ,comdat or ,noncomdat can be added to harden-sls to control the codegen. -mharden-sls=[all|retbr|blr],nocomdat. Reviewed By: kristof.beyls Differential Revision: https://reviews.llvm.org/D100546
This commit is contained in:
parent
b69d892627
commit
00169a8661
@ -27,7 +27,8 @@ template <typename Derived> class ThunkInserter {
|
|||||||
protected:
|
protected:
|
||||||
bool InsertedThunks;
|
bool InsertedThunks;
|
||||||
void doInitialization(Module &M) {}
|
void doInitialization(Module &M) {}
|
||||||
void createThunkFunction(MachineModuleInfo &MMI, StringRef Name);
|
void createThunkFunction(MachineModuleInfo &MMI, StringRef Name,
|
||||||
|
bool Comdat = true);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void init(Module &M) {
|
void init(Module &M) {
|
||||||
@ -40,17 +41,21 @@ public:
|
|||||||
|
|
||||||
template <typename Derived>
|
template <typename Derived>
|
||||||
void ThunkInserter<Derived>::createThunkFunction(MachineModuleInfo &MMI,
|
void ThunkInserter<Derived>::createThunkFunction(MachineModuleInfo &MMI,
|
||||||
StringRef Name) {
|
StringRef Name, bool Comdat) {
|
||||||
assert(Name.startswith(getDerived().getThunkPrefix()) &&
|
assert(Name.startswith(getDerived().getThunkPrefix()) &&
|
||||||
"Created a thunk with an unexpected prefix!");
|
"Created a thunk with an unexpected prefix!");
|
||||||
|
|
||||||
Module &M = const_cast<Module &>(*MMI.getModule());
|
Module &M = const_cast<Module &>(*MMI.getModule());
|
||||||
LLVMContext &Ctx = M.getContext();
|
LLVMContext &Ctx = M.getContext();
|
||||||
auto Type = FunctionType::get(Type::getVoidTy(Ctx), false);
|
auto Type = FunctionType::get(Type::getVoidTy(Ctx), false);
|
||||||
Function *F =
|
Function *F = Function::Create(Type,
|
||||||
Function::Create(Type, GlobalValue::LinkOnceODRLinkage, Name, &M);
|
Comdat ? GlobalValue::LinkOnceODRLinkage
|
||||||
F->setVisibility(GlobalValue::HiddenVisibility);
|
: GlobalValue::InternalLinkage,
|
||||||
F->setComdat(M.getOrInsertComdat(Name));
|
Name, &M);
|
||||||
|
if (Comdat) {
|
||||||
|
F->setVisibility(GlobalValue::HiddenVisibility);
|
||||||
|
F->setComdat(M.getOrInsertComdat(Name));
|
||||||
|
}
|
||||||
|
|
||||||
// Add Attributes so that we don't create a frame, unwind information, or
|
// Add Attributes so that we don't create a frame, unwind information, or
|
||||||
// inline.
|
// inline.
|
||||||
|
@ -523,6 +523,9 @@ def FeatureHardenSlsRetBr : SubtargetFeature<"harden-sls-retbr",
|
|||||||
def FeatureHardenSlsBlr : SubtargetFeature<"harden-sls-blr",
|
def FeatureHardenSlsBlr : SubtargetFeature<"harden-sls-blr",
|
||||||
"HardenSlsBlr", "true",
|
"HardenSlsBlr", "true",
|
||||||
"Harden against straight line speculation across BLR instructions">;
|
"Harden against straight line speculation across BLR instructions">;
|
||||||
|
def FeatureHardenSlsNoComdat : SubtargetFeature<"harden-sls-nocomdat",
|
||||||
|
"HardenSlsNoComdat", "true",
|
||||||
|
"Generate thunk code for SLS mitigation in the normal text section">;
|
||||||
|
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
// AArch64 Processors supported.
|
// AArch64 Processors supported.
|
||||||
|
@ -186,12 +186,16 @@ namespace {
|
|||||||
struct SLSBLRThunkInserter : ThunkInserter<SLSBLRThunkInserter> {
|
struct SLSBLRThunkInserter : ThunkInserter<SLSBLRThunkInserter> {
|
||||||
const char *getThunkPrefix() { return SLSBLRNamePrefix; }
|
const char *getThunkPrefix() { return SLSBLRNamePrefix; }
|
||||||
bool mayUseThunk(const MachineFunction &MF) {
|
bool mayUseThunk(const MachineFunction &MF) {
|
||||||
|
ComdatThunks &= !MF.getSubtarget<AArch64Subtarget>().hardenSlsNoComdat();
|
||||||
// FIXME: This could also check if there are any BLRs in the function
|
// FIXME: This could also check if there are any BLRs in the function
|
||||||
// to more accurately reflect if a thunk will be needed.
|
// to more accurately reflect if a thunk will be needed.
|
||||||
return MF.getSubtarget<AArch64Subtarget>().hardenSlsBlr();
|
return MF.getSubtarget<AArch64Subtarget>().hardenSlsBlr();
|
||||||
}
|
}
|
||||||
void insertThunks(MachineModuleInfo &MMI);
|
void insertThunks(MachineModuleInfo &MMI);
|
||||||
void populateThunk(MachineFunction &MF);
|
void populateThunk(MachineFunction &MF);
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool ComdatThunks = true;
|
||||||
};
|
};
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
@ -200,7 +204,7 @@ void SLSBLRThunkInserter::insertThunks(MachineModuleInfo &MMI) {
|
|||||||
// based on which registers are actually used in BLR instructions in this
|
// based on which registers are actually used in BLR instructions in this
|
||||||
// function. But would that be a worthwhile optimization?
|
// function. But would that be a worthwhile optimization?
|
||||||
for (auto T : SLSBLRThunks)
|
for (auto T : SLSBLRThunks)
|
||||||
createThunkFunction(MMI, T.Name);
|
createThunkFunction(MMI, T.Name, ComdatThunks);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SLSBLRThunkInserter::populateThunk(MachineFunction &MF) {
|
void SLSBLRThunkInserter::populateThunk(MachineFunction &MF) {
|
||||||
|
@ -241,6 +241,7 @@ protected:
|
|||||||
bool AllowTaggedGlobals = false;
|
bool AllowTaggedGlobals = false;
|
||||||
bool HardenSlsRetBr = false;
|
bool HardenSlsRetBr = false;
|
||||||
bool HardenSlsBlr = false;
|
bool HardenSlsBlr = false;
|
||||||
|
bool HardenSlsNoComdat = false;
|
||||||
uint8_t MaxInterleaveFactor = 2;
|
uint8_t MaxInterleaveFactor = 2;
|
||||||
uint8_t VectorInsertExtractBaseCost = 3;
|
uint8_t VectorInsertExtractBaseCost = 3;
|
||||||
uint16_t CacheLineSize = 0;
|
uint16_t CacheLineSize = 0;
|
||||||
@ -399,6 +400,7 @@ public:
|
|||||||
|
|
||||||
bool hardenSlsRetBr() const { return HardenSlsRetBr; }
|
bool hardenSlsRetBr() const { return HardenSlsRetBr; }
|
||||||
bool hardenSlsBlr() const { return HardenSlsBlr; }
|
bool hardenSlsBlr() const { return HardenSlsBlr; }
|
||||||
|
bool hardenSlsNoComdat() const { return HardenSlsNoComdat; }
|
||||||
|
|
||||||
bool useEL1ForTP() const { return UseEL1ForTP; }
|
bool useEL1ForTP() const { return UseEL1ForTP; }
|
||||||
bool useEL2ForTP() const { return UseEL2ForTP; }
|
bool useEL2ForTP() const { return UseEL2ForTP; }
|
||||||
|
@ -573,8 +573,9 @@ def FeatureHardenSlsRetBr : SubtargetFeature<"harden-sls-retbr",
|
|||||||
def FeatureHardenSlsBlr : SubtargetFeature<"harden-sls-blr",
|
def FeatureHardenSlsBlr : SubtargetFeature<"harden-sls-blr",
|
||||||
"HardenSlsBlr", "true",
|
"HardenSlsBlr", "true",
|
||||||
"Harden against straight line speculation across indirect calls">;
|
"Harden against straight line speculation across indirect calls">;
|
||||||
|
def FeatureHardenSlsNoComdat : SubtargetFeature<"harden-sls-nocomdat",
|
||||||
|
"HardenSlsNoComdat", "true",
|
||||||
|
"Generate thunk code for SLS mitigation in the normal text section">;
|
||||||
|
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
// ARM Processor subtarget features.
|
// ARM Processor subtarget features.
|
||||||
|
@ -165,12 +165,16 @@ namespace {
|
|||||||
struct SLSBLRThunkInserter : ThunkInserter<SLSBLRThunkInserter> {
|
struct SLSBLRThunkInserter : ThunkInserter<SLSBLRThunkInserter> {
|
||||||
const char *getThunkPrefix() { return SLSBLRNamePrefix; }
|
const char *getThunkPrefix() { return SLSBLRNamePrefix; }
|
||||||
bool mayUseThunk(const MachineFunction &MF) {
|
bool mayUseThunk(const MachineFunction &MF) {
|
||||||
|
ComdatThunks &= !MF.getSubtarget<ARMSubtarget>().hardenSlsNoComdat();
|
||||||
// FIXME: This could also check if there are any indirect calls in the
|
// FIXME: This could also check if there are any indirect calls in the
|
||||||
// function to more accurately reflect if a thunk will be needed.
|
// function to more accurately reflect if a thunk will be needed.
|
||||||
return MF.getSubtarget<ARMSubtarget>().hardenSlsBlr();
|
return MF.getSubtarget<ARMSubtarget>().hardenSlsBlr();
|
||||||
}
|
}
|
||||||
void insertThunks(MachineModuleInfo &MMI);
|
void insertThunks(MachineModuleInfo &MMI);
|
||||||
void populateThunk(MachineFunction &MF);
|
void populateThunk(MachineFunction &MF);
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool ComdatThunks = true;
|
||||||
};
|
};
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
@ -179,7 +183,7 @@ void SLSBLRThunkInserter::insertThunks(MachineModuleInfo &MMI) {
|
|||||||
// based on which registers are actually used in indirect calls in this
|
// based on which registers are actually used in indirect calls in this
|
||||||
// function. But would that be a worthwhile optimization?
|
// function. But would that be a worthwhile optimization?
|
||||||
for (auto T : SLSBLRThunks)
|
for (auto T : SLSBLRThunks)
|
||||||
createThunkFunction(MMI, T.Name);
|
createThunkFunction(MMI, T.Name, ComdatThunks);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SLSBLRThunkInserter::populateThunk(MachineFunction &MF) {
|
void SLSBLRThunkInserter::populateThunk(MachineFunction &MF) {
|
||||||
|
@ -475,6 +475,9 @@ protected:
|
|||||||
/// Harden against Straight Line Speculation for indirect calls.
|
/// Harden against Straight Line Speculation for indirect calls.
|
||||||
bool HardenSlsBlr = false;
|
bool HardenSlsBlr = false;
|
||||||
|
|
||||||
|
/// Generate thunk code for SLS mitigation in the normal text section.
|
||||||
|
bool HardenSlsNoComdat = false;
|
||||||
|
|
||||||
/// stackAlignment - The minimum alignment known to hold of the stack frame on
|
/// stackAlignment - The minimum alignment known to hold of the stack frame on
|
||||||
/// entry to the function and which must be maintained by every function.
|
/// entry to the function and which must be maintained by every function.
|
||||||
Align stackAlignment = Align(4);
|
Align stackAlignment = Align(4);
|
||||||
@ -931,6 +934,7 @@ public:
|
|||||||
|
|
||||||
bool hardenSlsRetBr() const { return HardenSlsRetBr; }
|
bool hardenSlsRetBr() const { return HardenSlsRetBr; }
|
||||||
bool hardenSlsBlr() const { return HardenSlsBlr; }
|
bool hardenSlsBlr() const { return HardenSlsBlr; }
|
||||||
|
bool hardenSlsNoComdat() const { return HardenSlsNoComdat; }
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace llvm
|
} // end namespace llvm
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
; RUN: llc -mattr=harden-sls-retbr,harden-sls-blr -verify-machineinstrs -mtriple=aarch64-none-linux-gnu < %s | FileCheck %s --check-prefixes=CHECK,HARDEN,ISBDSB,ISBDSBDAGISEL
|
; RUN: llc -mattr=harden-sls-retbr,harden-sls-blr -verify-machineinstrs -mtriple=aarch64-none-linux-gnu < %s | FileCheck %s --check-prefixes=CHECK,HARDEN,HARDEN-COMDAT,ISBDSB,ISBDSBDAGISEL
|
||||||
|
; RUN: llc -mattr=harden-sls-retbr,harden-sls-blr,harden-sls-nocomdat -verify-machineinstrs -mtriple=aarch64-none-linux-gnu < %s | FileCheck %s --check-prefixes=CHECK,HARDEN,HARDEN-COMDAT-OFF,ISBDSB,ISBDSBDAGISEL
|
||||||
; RUN: llc -mattr=harden-sls-retbr,harden-sls-blr -mattr=+sb -verify-machineinstrs -mtriple=aarch64-none-linux-gnu < %s | FileCheck %s --check-prefixes=CHECK,HARDEN,SB,SBDAGISEL
|
; RUN: llc -mattr=harden-sls-retbr,harden-sls-blr -mattr=+sb -verify-machineinstrs -mtriple=aarch64-none-linux-gnu < %s | FileCheck %s --check-prefixes=CHECK,HARDEN,SB,SBDAGISEL
|
||||||
|
; RUN: llc -global-isel -global-isel-abort=0 -mattr=harden-sls-retbr,harden-sls-blr -verify-machineinstrs -mtriple=aarch64-none-linux-gnu < %s | FileCheck %s --check-prefixes=CHECK,HARDEN,HARDEN-COMDAT,ISBDSB
|
||||||
; RUN: llc -verify-machineinstrs -mtriple=aarch64-none-linux-gnu < %s | FileCheck %s --check-prefixes=CHECK,NOHARDEN
|
; RUN: llc -verify-machineinstrs -mtriple=aarch64-none-linux-gnu < %s | FileCheck %s --check-prefixes=CHECK,NOHARDEN
|
||||||
; RUN: llc -global-isel -global-isel-abort=0 -mattr=harden-sls-retbr,harden-sls-blr -verify-machineinstrs -mtriple=aarch64-none-linux-gnu < %s | FileCheck %s --check-prefixes=CHECK,HARDEN,ISBDSB
|
; RUN: llc -global-isel -global-isel-abort=0 -mattr=harden-sls-retbr,harden-sls-blr,harden-sls-nocomdat -verify-machineinstrs -mtriple=aarch64-none-linux-gnu < %s | FileCheck %s --check-prefixes=CHECK,HARDEN,HARDEN-COMDAT-OFF,ISBDSB
|
||||||
; RUN: llc -global-isel -global-isel-abort=0 -mattr=harden-sls-retbr,harden-sls-blr -mattr=+sb -verify-machineinstrs -mtriple=aarch64-none-linux-gnu < %s | FileCheck %s --check-prefixes=CHECK,HARDEN,SB
|
; RUN: llc -global-isel -global-isel-abort=0 -mattr=harden-sls-retbr,harden-sls-blr -mattr=+sb -verify-machineinstrs -mtriple=aarch64-none-linux-gnu < %s | FileCheck %s --check-prefixes=CHECK,HARDEN,SB
|
||||||
|
|
||||||
; Function Attrs: norecurse nounwind readnone
|
; Function Attrs: norecurse nounwind readnone
|
||||||
@ -210,6 +212,14 @@ entry:
|
|||||||
; SB-NEXT: dsb sy
|
; SB-NEXT: dsb sy
|
||||||
; SB-NEXT: isb
|
; SB-NEXT: isb
|
||||||
; HARDEN-NEXT: .Lfunc_end
|
; HARDEN-NEXT: .Lfunc_end
|
||||||
|
; HARDEN-COMDAT: .section .text.__llvm_slsblr_thunk_x19
|
||||||
|
; HARDEN-COMDAT: .hidden __llvm_slsblr_thunk_x19
|
||||||
|
; HARDEN-COMDAT: .weak __llvm_slsblr_thunk_x19
|
||||||
|
; HARDEN-COMDAT: .type __llvm_slsblr_thunk_x19,@function
|
||||||
|
; HARDEN-COMDAT-OFF-NOT: .section .text.__llvm_slsblr_thunk_x19
|
||||||
|
; HARDEN-COMDAT-OFF-NOT: .hidden __llvm_slsblr_thunk_x19
|
||||||
|
; HARDEN-COMDAT-OFF-NOT: .weak __llvm_slsblr_thunk_x19
|
||||||
|
; HARDEN-COMDAT-OFF: .type __llvm_slsblr_thunk_x19,@function
|
||||||
; HARDEN-label: __llvm_slsblr_thunk_x19:
|
; HARDEN-label: __llvm_slsblr_thunk_x19:
|
||||||
; HARDEN: mov x16, x19
|
; HARDEN: mov x16, x19
|
||||||
; HARDEN: br x16
|
; HARDEN: br x16
|
||||||
|
@ -1,15 +1,23 @@
|
|||||||
; RUN: llc -mattr=harden-sls-retbr -mattr=harden-sls-blr -verify-machineinstrs -mtriple=armv8-linux-gnueabi < %s | FileCheck %s --check-prefixes=CHECK,ARM,HARDEN,ISBDSB -dump-input-context=100
|
; RUN: llc -mattr=harden-sls-retbr -mattr=harden-sls-blr -verify-machineinstrs -mtriple=armv8-linux-gnueabi < %s | FileCheck %s --check-prefixes=CHECK,ARM,HARDEN,HARDEN-COMDAT,ISBDSB -dump-input-context=100
|
||||||
; RUN: llc -mattr=harden-sls-retbr -mattr=harden-sls-blr -verify-machineinstrs -mtriple=thumbv8-linux-gnueabi < %s | FileCheck %s --check-prefixes=CHECK,THUMB,HARDENTHUMB,HARDEN,ISBDSB -dump-input-context=100
|
; RUN: llc -mattr=harden-sls-retbr -mattr=harden-sls-blr -verify-machineinstrs -mtriple=thumbv8-linux-gnueabi < %s | FileCheck %s --check-prefixes=CHECK,THUMB,HARDENTHUMB,HARDEN,HARDEN-COMDAT,ISBDSB -dump-input-context=100
|
||||||
; RUN: llc -mattr=harden-sls-retbr -mattr=harden-sls-blr -mattr=+sb -verify-machineinstrs -mtriple=armv8-linux-gnueabi < %s | FileCheck %s --check-prefixes=CHECK,ARM,HARDEN,SB -dump-input-context=100
|
; RUN: llc -mattr=harden-sls-retbr -mattr=harden-sls-blr -mattr=+sb -verify-machineinstrs -mtriple=armv8-linux-gnueabi < %s | FileCheck %s --check-prefixes=CHECK,ARM,HARDEN,HARDEN-COMDAT,SB -dump-input-context=100
|
||||||
; RUN: llc -mattr=harden-sls-retbr -mattr=harden-sls-blr -mattr=+sb -verify-machineinstrs -mtriple=thumbv8-linux-gnueabi < %s | FileCheck %s --check-prefixes=CHECK,THUMB,HARDENTHUMB,HARDEN,SB -dump-input-context=100
|
; RUN: llc -mattr=harden-sls-retbr -mattr=harden-sls-blr -mattr=+sb -verify-machineinstrs -mtriple=thumbv8-linux-gnueabi < %s | FileCheck %s --check-prefixes=CHECK,THUMB,HARDENTHUMB,HARDEN,HARDEN-COMDAT,SB -dump-input-context=100
|
||||||
|
; RUN: llc -mattr=harden-sls-retbr -mattr=harden-sls-blr -mattr=harden-sls-nocomdat -verify-machineinstrs -mtriple=armv8-linux-gnueabi < %s | FileCheck %s --check-prefixes=CHECK,ARM,HARDEN,HARDEN-COMDAT-OFF,ISBDSB -dump-input-context=100
|
||||||
|
; RUN: llc -mattr=harden-sls-retbr -mattr=harden-sls-blr -mattr=harden-sls-nocomdat -verify-machineinstrs -mtriple=thumbv8-linux-gnueabi < %s | FileCheck %s --check-prefixes=CHECK,THUMB,HARDENTHUMB,HARDEN,HARDEN-COMDAT-OFF,ISBDSB -dump-input-context=100
|
||||||
|
; RUN: llc -mattr=harden-sls-retbr -mattr=harden-sls-blr -mattr=harden-sls-nocomdat -mattr=+sb -verify-machineinstrs -mtriple=armv8-linux-gnueabi < %s | FileCheck %s --check-prefixes=CHECK,ARM,HARDEN,HARDEN-COMDAT-OFF,SB -dump-input-context=100
|
||||||
|
; RUN: llc -mattr=harden-sls-retbr -mattr=harden-sls-blr -mattr=harden-sls-nocomdat -mattr=+sb -verify-machineinstrs -mtriple=thumbv8-linux-gnueabi < %s | FileCheck %s --check-prefixes=CHECK,THUMB,HARDENTHUMB,HARDEN,HARDEN-COMDAT-OFF,SB -dump-input-context=100
|
||||||
; RUN: llc -verify-machineinstrs -mtriple=armv8-linux-gnueabi < %s | FileCheck %s --check-prefixes=CHECK,ARM,NOHARDENARM -dump-input-context=100
|
; RUN: llc -verify-machineinstrs -mtriple=armv8-linux-gnueabi < %s | FileCheck %s --check-prefixes=CHECK,ARM,NOHARDENARM -dump-input-context=100
|
||||||
; RUN: llc -verify-machineinstrs -mtriple=thumbv8-linux-gnueabi < %s | FileCheck %s --check-prefixes=CHECK,THUMB,NOHARDENTHUMB
|
; RUN: llc -verify-machineinstrs -mtriple=thumbv8-linux-gnueabi < %s | FileCheck %s --check-prefixes=CHECK,THUMB,NOHARDENTHUMB
|
||||||
; RUN: llc -global-isel -global-isel-abort=0 -mattr=harden-sls-retbr -mattr=harden-sls-blr -verify-machineinstrs -mtriple=armv8-linux-gnueabi < %s | FileCheck %s --check-prefixes=CHECK,ARM,HARDEN,ISBDSB
|
; RUN: llc -global-isel -global-isel-abort=0 -mattr=harden-sls-retbr -mattr=harden-sls-blr -verify-machineinstrs -mtriple=armv8-linux-gnueabi < %s | FileCheck %s --check-prefixes=CHECK,ARM,HARDEN,HARDEN-COMDAT,ISBDSB
|
||||||
; RUN: llc -global-isel -global-isel-abort=0 -mattr=harden-sls-retbr -mattr=harden-sls-blr -verify-machineinstrs -mtriple=thumbv8-linux-gnueabi < %s | FileCheck %s --check-prefixes=CHECK,THUMB,HARDENTHUMB,HARDEN,ISBDSB
|
; RUN: llc -global-isel -global-isel-abort=0 -mattr=harden-sls-retbr -mattr=harden-sls-blr -verify-machineinstrs -mtriple=thumbv8-linux-gnueabi < %s | FileCheck %s --check-prefixes=CHECK,THUMB,HARDENTHUMB,HARDEN,HARDEN-COMDAT,ISBDSB
|
||||||
|
; RUN: llc -global-isel -global-isel-abort=0 -mattr=harden-sls-retbr -mattr=harden-sls-nocomdat -mattr=harden-sls-blr -verify-machineinstrs -mtriple=armv8-linux-gnueabi < %s | FileCheck %s --check-prefixes=CHECK,ARM,HARDEN,HARDEN-COMDAT-OFF,ISBDSB
|
||||||
|
; RUN: llc -global-isel -global-isel-abort=0 -mattr=harden-sls-retbr -mattr=harden-sls-nocomdat -mattr=harden-sls-blr -verify-machineinstrs -mtriple=thumbv8-linux-gnueabi < %s | FileCheck %s --check-prefixes=CHECK,THUMB,HARDENTHUMB,HARDEN,HARDEN-COMDAT-OFF,ISBDSB
|
||||||
; RUN: llc -global-isel -global-isel-abort=0 -mattr=harden-sls-retbr -mattr=harden-sls-blr -mattr=+sb -verify-machineinstrs -mtriple=armv8-linux-gnueabi < %s | FileCheck %s --check-prefixes=CHECK,ARM,HARDEN,SB
|
; RUN: llc -global-isel -global-isel-abort=0 -mattr=harden-sls-retbr -mattr=harden-sls-blr -mattr=+sb -verify-machineinstrs -mtriple=armv8-linux-gnueabi < %s | FileCheck %s --check-prefixes=CHECK,ARM,HARDEN,SB
|
||||||
; RUN: llc -global-isel -global-isel-abort=0 -mattr=harden-sls-retbr -mattr=harden-sls-blr -mattr=+sb -verify-machineinstrs -mtriple=thumbv8-linux-gnueabi < %s | FileCheck %s --check-prefixes=CHECK,THUMB,HARDENTHUMB,HARDEN,SB
|
; RUN: llc -global-isel -global-isel-abort=0 -mattr=harden-sls-retbr -mattr=harden-sls-blr -mattr=+sb -verify-machineinstrs -mtriple=thumbv8-linux-gnueabi < %s | FileCheck %s --check-prefixes=CHECK,THUMB,HARDENTHUMB,HARDEN,SB
|
||||||
; RUN: llc -fast-isel -mattr=harden-sls-retbr -mattr=harden-sls-blr -verify-machineinstrs -mtriple=armv8-linux-gnueabi < %s | FileCheck %s --check-prefixes=CHECK,ARM,HARDEN,ISBDSB
|
; RUN: llc -fast-isel -mattr=harden-sls-retbr -mattr=harden-sls-blr -verify-machineinstrs -mtriple=armv8-linux-gnueabi < %s | FileCheck %s --check-prefixes=CHECK,ARM,HARDEN,HARDEN-COMDAT,ISBDSB
|
||||||
; RUN: llc -fast-isel -mattr=harden-sls-retbr -mattr=harden-sls-blr -verify-machineinstrs -mtriple=thumbv8-linux-gnueabi < %s | FileCheck %s --check-prefixes=CHECK,THUMB,HARDENTHUMB,HARDEN,ISBDSB
|
; RUN: llc -fast-isel -mattr=harden-sls-retbr -mattr=harden-sls-blr -verify-machineinstrs -mtriple=thumbv8-linux-gnueabi < %s | FileCheck %s --check-prefixes=CHECK,THUMB,HARDENTHUMB,HARDEN,HARDEN-COMDAT,ISBDSB
|
||||||
|
; RUN: llc -fast-isel -mattr=harden-sls-retbr -mattr=harden-sls-blr -mattr=harden-sls-nocomdat -verify-machineinstrs -mtriple=armv8-linux-gnueabi < %s | FileCheck %s --check-prefixes=CHECK,ARM,HARDEN,HARDEN-COMDAT-OFF,ISBDSB
|
||||||
|
; RUN: llc -fast-isel -mattr=harden-sls-retbr -mattr=harden-sls-blr -mattr=harden-sls-nocomdat -verify-machineinstrs -mtriple=thumbv8-linux-gnueabi < %s | FileCheck %s --check-prefixes=CHECK,THUMB,HARDENTHUMB,HARDEN,HARDEN-COMDAT-OFF,ISBDSB
|
||||||
; RUN: llc -fast-isel -mattr=harden-sls-retbr -mattr=harden-sls-blr -mattr=+sb -verify-machineinstrs -mtriple=armv8-linux-gnueabi < %s | FileCheck %s --check-prefixes=CHECK,ARM,HARDEN,SB
|
; RUN: llc -fast-isel -mattr=harden-sls-retbr -mattr=harden-sls-blr -mattr=+sb -verify-machineinstrs -mtriple=armv8-linux-gnueabi < %s | FileCheck %s --check-prefixes=CHECK,ARM,HARDEN,SB
|
||||||
; RUN: llc -fast-isel -mattr=harden-sls-retbr -mattr=harden-sls-blr -mattr=+sb -verify-machineinstrs -mtriple=thumbv8-linux-gnueabi < %s | FileCheck %s --check-prefixes=CHECK,THUMB,HARDENTHUMB,HARDEN,SB
|
; RUN: llc -fast-isel -mattr=harden-sls-retbr -mattr=harden-sls-blr -mattr=+sb -verify-machineinstrs -mtriple=thumbv8-linux-gnueabi < %s | FileCheck %s --check-prefixes=CHECK,THUMB,HARDENTHUMB,HARDEN,SB
|
||||||
|
|
||||||
@ -235,6 +243,14 @@ entry:
|
|||||||
; CHECK: .Lfunc_end
|
; CHECK: .Lfunc_end
|
||||||
}
|
}
|
||||||
|
|
||||||
|
; HARDEN-COMDAT: .section {{.text.__llvm_slsblr_thunk_(arm|thumb)_r5}}
|
||||||
|
; HARDEN-COMDAT: .hidden {{__llvm_slsblr_thunk_(arm|thumb)_r5}}
|
||||||
|
; HARDEN-COMDAT: .weak {{__llvm_slsblr_thunk_(arm|thumb)_r5}}
|
||||||
|
; HARDEN-COMDAT: .type {{__llvm_slsblr_thunk_(arm|thumb)_r5}},%function
|
||||||
|
; HARDEN-COMDAT-OFF-NOT: .section {{.text.__llvm_slsblr_thunk_(arm|thumb)_r5}}
|
||||||
|
; HARDEN-COMDAT-OFF-NOT: .hidden {{__llvm_slsblr_thunk_(arm|thumb)_r5}}
|
||||||
|
; HARDEN-COMDAT-OFF-NOT: .weak {{__llvm_slsblr_thunk_(arm|thumb)_r5}}
|
||||||
|
; HARDEN-COMDAT-OFF: .type {{__llvm_slsblr_thunk_(arm|thumb)_r5}},%function
|
||||||
; HARDEN-label: {{__llvm_slsblr_thunk_(arm|thumb)_r5}}:
|
; HARDEN-label: {{__llvm_slsblr_thunk_(arm|thumb)_r5}}:
|
||||||
; HARDEN: bx r5
|
; HARDEN: bx r5
|
||||||
; ISBDSB-NEXT: dsb sy
|
; ISBDSB-NEXT: dsb sy
|
||||||
|
Loading…
Reference in New Issue
Block a user