Added initial support for small sections on Mips.
Added gp_rel relocations to support addressing small section contents.
Added command line to specify small section threshold in bytes.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@53869 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Target/Mips/MipsSubtarget.cpp b/lib/Target/Mips/MipsSubtarget.cpp
index 3424388..bc87e4b 100644
--- a/lib/Target/Mips/MipsSubtarget.cpp
+++ b/lib/Target/Mips/MipsSubtarget.cpp
@@ -22,6 +22,9 @@
               cl::desc("Disable code for SVR4-style dynamic objects"));
 cl::opt<bool> AbsoluteCall("enable-mips-absolute-call", cl::Hidden,
               cl::desc("Enable absolute call within abicall"));
+cl::opt<unsigned> SSThreshold("mips-ssection-threshold", cl::Hidden,
+              cl::desc("Small data and bss section threshold size (default=8)"),
+              cl::init(8));
 
 MipsSubtarget::MipsSubtarget(const TargetMachine &TM, const Module &M, 
                              const std::string &FS, bool little) : 
@@ -35,6 +38,9 @@
   ParseSubtargetFeatures(FS, CPU);
   const std::string& TT = M.getTargetTriple();
 
+  // Small section size threshold
+  SSectionThreshold = SSThreshold;
+
   // Is the target system Linux ?
   if (TT.find("linux") == std::string::npos)
     IsLinux = false;