mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
- Rename stackprotector_{prologue,epilogue} to stackprotector_{create,check}.
- Get rid of "HasStackProtector" in MachineFrameInfo. - Modify intrinsics to tell which are doing what with memory. llvm-svn: 58799
This commit is contained in:
parent
dafb062ef6
commit
b6e2d60e7a
@ -150,9 +150,6 @@ class MachineFrameInfo {
|
||||
/// only valid during and after prolog/epilog code insertion.
|
||||
bool HasCalls;
|
||||
|
||||
/// HasStackProtector - Set to true if this function has stack protectors.
|
||||
bool HasStackProtector;
|
||||
|
||||
/// StackProtectorIdx - The frame index for the stack protector.
|
||||
int StackProtectorIdx;
|
||||
|
||||
@ -186,7 +183,6 @@ public:
|
||||
HasVarSizedObjects = false;
|
||||
FrameAddressTaken = false;
|
||||
HasCalls = false;
|
||||
HasStackProtector = false;
|
||||
StackProtectorIdx = -1;
|
||||
MaxCallFrameSize = 0;
|
||||
MMI = 0;
|
||||
@ -203,11 +199,6 @@ public:
|
||||
///
|
||||
bool hasVarSizedObjects() const { return HasVarSizedObjects; }
|
||||
|
||||
/// hasStackProtector - Return true if the function has a stack protector.
|
||||
///
|
||||
bool hasStackProtector() const { return HasStackProtector; }
|
||||
void setStackProtector(bool T) { HasStackProtector = T; }
|
||||
|
||||
/// getStackProtectorIndex/setStackProtectorIndex - Return the index for the
|
||||
/// stack protector object.
|
||||
///
|
||||
|
@ -176,9 +176,12 @@ def int_pcmarker : Intrinsic<[llvm_void_ty, llvm_i32_ty]>;
|
||||
|
||||
def int_readcyclecounter : Intrinsic<[llvm_i64_ty]>;
|
||||
|
||||
// Stack protector intrinsics.
|
||||
def int_stackprotector_prologue : Intrinsic<[llvm_void_ty, llvm_ptr_ty]>;
|
||||
def int_stackprotector_epilogue : Intrinsic<[llvm_ptr_ty]>;
|
||||
// Stack Protector Intrinsics - The stackprotector_create writes the stack guard
|
||||
// to the correct place on the stack frame. The stackprotector_check reads back
|
||||
// the stack guard that the stackprotector_create stored.
|
||||
def int_stackprotector_create : Intrinsic<[llvm_void_ty, llvm_ptr_ty],
|
||||
[IntrWriteMem]>;
|
||||
def int_stackprotector_check : Intrinsic<[llvm_ptr_ty], [IntrReadMem]>;
|
||||
|
||||
//===------------------- Standard C Library Intrinsics --------------------===//
|
||||
//
|
||||
|
@ -408,7 +408,7 @@ void PEI::calculateFrameObjectOffsets(MachineFunction &Fn) {
|
||||
|
||||
// Make sure that the stack protector comes before the local variables on the
|
||||
// stack.
|
||||
if (FFI->hasStackProtector()) {
|
||||
if (FFI->getStackProtectorIndex() >= 0) {
|
||||
int FI = FFI->getStackProtectorIndex();
|
||||
|
||||
// If stack grows down, we need to add size of find the lowest
|
||||
|
@ -3795,7 +3795,7 @@ SelectionDAGLowering::visitIntrinsicCall(CallInst &I, unsigned Intrinsic) {
|
||||
DAG.setRoot(DAG.getNode(ISD::STACKRESTORE, MVT::Other, getRoot(), Tmp));
|
||||
return 0;
|
||||
}
|
||||
case Intrinsic::stackprotector_prologue: {
|
||||
case Intrinsic::stackprotector_create: {
|
||||
// Emit code into the DAG to store the stack guard onto the stack.
|
||||
MachineFunction &MF = DAG.getMachineFunction();
|
||||
MachineFrameInfo *MFI = MF.getFrameInfo();
|
||||
@ -3809,8 +3809,6 @@ SelectionDAGLowering::visitIntrinsicCall(CallInst &I, unsigned Intrinsic) {
|
||||
unsigned Align =
|
||||
TLI.getTargetData()->getPrefTypeAlignment(PtrTy.getTypeForMVT());
|
||||
int FI = MFI->CreateStackObject(PtrTy.getSizeInBits() / 8, Align);
|
||||
|
||||
MFI->setStackProtector(true);
|
||||
MFI->setStackProtectorIndex(FI);
|
||||
|
||||
SDValue FIN = DAG.getFrameIndex(FI, PtrTy);
|
||||
@ -3823,7 +3821,7 @@ SelectionDAGLowering::visitIntrinsicCall(CallInst &I, unsigned Intrinsic) {
|
||||
DAG.setRoot(Result);
|
||||
return 0;
|
||||
}
|
||||
case Intrinsic::stackprotector_epilogue: {
|
||||
case Intrinsic::stackprotector_check: {
|
||||
// Emit code into the DAG to retrieve the stack guard off of the stack.
|
||||
MachineFunction &MF = DAG.getMachineFunction();
|
||||
MachineFrameInfo *MFI = MF.getFrameInfo();
|
||||
|
@ -118,7 +118,7 @@ bool StackProtector::InsertStackProtectors() {
|
||||
Constant *StackGuardVar = M->getOrInsertGlobal("__stack_chk_guard", GuardTy);
|
||||
LoadInst *LI = new LoadInst(StackGuardVar, "StackGuard", false, InsertPt);
|
||||
CallInst::
|
||||
Create(Intrinsic::getDeclaration(M, Intrinsic::stackprotector_prologue),
|
||||
Create(Intrinsic::getDeclaration(M, Intrinsic::stackprotector_create),
|
||||
LI, "", InsertPt);
|
||||
|
||||
// Create the basic block to jump to when the guard check fails.
|
||||
@ -163,7 +163,7 @@ bool StackProtector::InsertStackProtectors() {
|
||||
// Generate the stack protector instructions in the old basic block.
|
||||
LoadInst *LI1 = new LoadInst(StackGuardVar, "", false, BB);
|
||||
CallInst *CI = CallInst::
|
||||
Create(Intrinsic::getDeclaration(M, Intrinsic::stackprotector_epilogue),
|
||||
Create(Intrinsic::getDeclaration(M, Intrinsic::stackprotector_check),
|
||||
"", BB);
|
||||
ICmpInst *Cmp = new ICmpInst(CmpInst::ICMP_EQ, CI, LI1, "", BB);
|
||||
BranchInst::Create(NewBB, FailBB, Cmp, BB);
|
||||
|
Loading…
x
Reference in New Issue
Block a user