Update in response to feedback from Chris:

- Use enums instead of magic numbers.

- Rework algorithm to use the bytes size from the target to determine when to
  emit stack protectors.

- Get rid of "propolice" in any comments.

- Renamed an option to its expanded form.

- Other miscellanenous changes.

More changes will come after this.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@58723 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/LLVMTargetMachine.cpp b/lib/CodeGen/LLVMTargetMachine.cpp
index e1dd463..fee70b0 100644
--- a/lib/CodeGen/LLVMTargetMachine.cpp
+++ b/lib/CodeGen/LLVMTargetMachine.cpp
@@ -61,9 +61,17 @@
   cl::desc("Enable the experimental \"fast\" instruction selector"));
 
 // Enable stack protectors.
-static cl::opt<int>
-EnableStackProtector("enable-stack-protector", cl::init(0),
-                     cl::desc("Use ProPolice as a stack protection method."));
+static cl::opt<SSP::StackProtectorLevel>
+EnableStackProtector("enable-stack-protector",
+                     cl::desc("Stack canary protection level: (default: off)"),
+                     cl::init(SSP::OFF),
+                     cl::values(clEnumValN(SSP::ALL,  "all",
+                                         "All functions get stack protectors."),
+                                clEnumValN(SSP::SOME, "some",
+                         "Only functions requiring stack protectors get them."),
+                                clEnumValN(SSP::OFF,  "off",
+                                          "No functions get stack protectors."),
+                                clEnumValEnd));
 
 FileModel::Model
 LLVMTargetMachine::addPassesToEmitFile(PassManagerBase &PM,
@@ -170,7 +178,8 @@
   if (!Fast)
     PM.add(createCodeGenPreparePass(getTargetLowering()));
 
-  PM.add(createStackProtectorPass(EnableStackProtector));
+  if (EnableStackProtector != SSP::OFF)
+    PM.add(createStackProtectorPass(EnableStackProtector, getTargetLowering()));
 
   if (PrintISelInput)
     PM.add(createPrintFunctionPass("\n\n"