about summary refs log tree commit diff
path: root/src/rustllvm/PassWrapper.cpp
diff options
context:
space:
mode:
authorAmit Aryeh Levy <amit@amitlevy.com>2017-04-25 20:05:51 -0400
committerAmit Aryeh Levy <amit@amitlevy.com>2017-04-26 16:25:14 -0400
commit32b92669e4ec83005eff2641b092f25be09373b8 (patch)
tree5eca497d01aefde890278f554e28f9e00165b548 /src/rustllvm/PassWrapper.cpp
parentb0a4074c5e87d24ff630f6aa456a64698bff3ed2 (diff)
downloadrust-32b92669e4ec83005eff2641b092f25be09373b8.tar.gz
rust-32b92669e4ec83005eff2641b092f25be09373b8.zip
Add RWPI/ROPI relocation model support
Adds support for using LLVM 4's ROPI and RWPI relocation models for ARM
Diffstat (limited to 'src/rustllvm/PassWrapper.cpp')
-rw-r--r--src/rustllvm/PassWrapper.cpp19
1 files changed, 15 insertions, 4 deletions
diff --git a/src/rustllvm/PassWrapper.cpp b/src/rustllvm/PassWrapper.cpp
index c410a6b1349..1e19e28e78a 100644
--- a/src/rustllvm/PassWrapper.cpp
+++ b/src/rustllvm/PassWrapper.cpp
@@ -290,7 +290,7 @@ extern "C" void LLVMRustPrintTargetFeatures(LLVMTargetMachineRef) {
 
 extern "C" LLVMTargetMachineRef LLVMRustCreateTargetMachine(
     const char *TripleStr, const char *CPU, const char *Feature,
-    LLVMRustCodeModel RustCM, LLVMRelocMode Reloc,
+    LLVMRustCodeModel RustCM, int Reloc,
     LLVMRustCodeGenOptLevel RustOptLevel, bool UseSoftFloat,
     bool PositionIndependentExecutable, bool FunctionSections,
     bool DataSections) {
@@ -304,15 +304,26 @@ extern "C" LLVMTargetMachineRef LLVMRustCreateTargetMachine(
   auto OptLevel = fromRust(RustOptLevel);
 
   switch (Reloc) {
-  case LLVMRelocStatic:
+  case 1:
     RM = Reloc::Static;
     break;
-  case LLVMRelocPIC:
+  case 2:
     RM = Reloc::PIC_;
     break;
-  case LLVMRelocDynamicNoPic:
+  case 3:
     RM = Reloc::DynamicNoPIC;
     break;
+#if LLVM_VERSION_GE(4, 0)
+  case 4:
+    RM = Reloc::ROPI;
+    break;
+  case 5:
+    RM = Reloc::RWPI;
+    break;
+  case 6:
+    RM = Reloc::ROPI_RWPI;
+    break;
+#endif
   default:
 #if LLVM_VERSION_LE(3, 8)
     RM = Reloc::Default;