diff options
author | Bill Wendling <isanbard@gmail.com> | 2008-11-06 07:23:03 +0000 |
---|---|---|
committer | Bill Wendling <isanbard@gmail.com> | 2008-11-06 07:23:03 +0000 |
commit | 4c3a1d8d2be313f1b322f680801fec262a2480c6 (patch) | |
tree | 7bb989e12013577856ddb7f7b6e39f6b3aa534f1 | |
parent | e11eb620efa50e99b1a5dd94e8b63840c32d587b (diff) |
- Rename stackprotector_{prologue,epilogue} to stackprotector_{create,check}.
- Get rid of "HasStackProtector" in MachineFrameInfo.
- Modify intrinsics to tell which are doing what with memory.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@58799 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | include/llvm/CodeGen/MachineFrameInfo.h | 9 | ||||
-rw-r--r-- | include/llvm/Intrinsics.td | 9 | ||||
-rw-r--r-- | lib/CodeGen/PrologEpilogInserter.cpp | 2 | ||||
-rw-r--r-- | lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp | 6 | ||||
-rw-r--r-- | lib/CodeGen/StackProtector.cpp | 4 |
5 files changed, 11 insertions, 19 deletions
diff --git a/include/llvm/CodeGen/MachineFrameInfo.h b/include/llvm/CodeGen/MachineFrameInfo.h index 2741664972..4190bcd9a3 100644 --- a/include/llvm/CodeGen/MachineFrameInfo.h +++ b/include/llvm/CodeGen/MachineFrameInfo.h @@ -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. /// diff --git a/include/llvm/Intrinsics.td b/include/llvm/Intrinsics.td index 8d5bc5cc83..690d4a6a47 100644 --- a/include/llvm/Intrinsics.td +++ b/include/llvm/Intrinsics.td @@ -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 --------------------===// // diff --git a/lib/CodeGen/PrologEpilogInserter.cpp b/lib/CodeGen/PrologEpilogInserter.cpp index e118dd2449..64529372c4 100644 --- a/lib/CodeGen/PrologEpilogInserter.cpp +++ b/lib/CodeGen/PrologEpilogInserter.cpp @@ -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 diff --git a/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp b/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp index 267ae36908..a0c30ff6c7 100644 --- a/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp +++ b/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp @@ -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(); diff --git a/lib/CodeGen/StackProtector.cpp b/lib/CodeGen/StackProtector.cpp index eaf52f691c..318be93b40 100644 --- a/lib/CodeGen/StackProtector.cpp +++ b/lib/CodeGen/StackProtector.cpp @@ -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); |