- Rename stackprotector_{prologue,epilogue} to stackprotector_{create,check}.
authorBill Wendling <isanbard@gmail.com>
Thu, 6 Nov 2008 07:23:03 +0000 (07:23 +0000)
committerBill Wendling <isanbard@gmail.com>
Thu, 6 Nov 2008 07:23:03 +0000 (07:23 +0000)
- 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

include/llvm/CodeGen/MachineFrameInfo.h
include/llvm/Intrinsics.td
lib/CodeGen/PrologEpilogInserter.cpp
lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp
lib/CodeGen/StackProtector.cpp

index 2741664972604414fd0582f0db70c80fe42eefe5..4190bcd9a36c3d26a644056dda21e29c92f69599 100644 (file)
@@ -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.
   ///
index 8d5bc5cc83867935d57b5dfab94c9241e329b4b1..690d4a6a47c32a7391c44823e546fd7b9679573e 100644 (file)
@@ -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 --------------------===//
 //
index e118dd2449ff31a00677904b7e18538b3bd3325a..64529372c402d0566d289296811bf7951264af9e 100644 (file)
@@ -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
index 267ae36908655ebe2dcbb10c89adfe3764ae95f7..a0c30ff6c756fd517a3f7fa6b3b361eee4200991 100644 (file)
@@ -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();
index eaf52f691c6363df0efb0f21a32ac4287c9cc954..318be93b40d88d79d3095ed2881fa8521ac613aa 100644 (file)
@@ -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);