about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJan-Erik Rediger <janerik@fnordig.de>2016-07-21 11:24:35 +0200
committerJan-Erik Rediger <janerik@fnordig.de>2016-07-29 10:29:44 +0200
commitdc7076b52e2464a703de7d87fa6c60b8fc98ada9 (patch)
tree14ca8b5e5b4382e3c4de567e921b39d778d8ff62
parent2c92756dde884bbfa5efef9b4cbd846882a7d46e (diff)
downloadrust-dc7076b52e2464a703de7d87fa6c60b8fc98ada9.tar.gz
rust-dc7076b52e2464a703de7d87fa6c60b8fc98ada9.zip
[LLVM-3.9] Pass correct relocation model flag
-rwxr-xr-xconfigure5
-rw-r--r--mk/platform.mk9
2 files changed, 13 insertions, 1 deletions
diff --git a/configure b/configure
index d2ec457a1c8..af29ef3d39c 100755
--- a/configure
+++ b/configure
@@ -1020,6 +1020,11 @@ then
             err "bad LLVM version: $LLVM_VERSION, need >=3.7"
             ;;
     esac
+
+    if "$CFG_LLVM_ROOT/bin/llvm-mc" -help | grep "-relocation-model"; then
+        CFG_LLVM_MC_HAS_RELOCATION_MODEL=1
+        putvar CFG_LLVM_MC_HAS_RELOCATION_MODEL
+    fi
 fi
 
 # Even when the user overrides the choice of CC, still try to detect
diff --git a/mk/platform.mk b/mk/platform.mk
index c2644621c57..d601cab7221 100644
--- a/mk/platform.mk
+++ b/mk/platform.mk
@@ -221,12 +221,19 @@ define CFG_MAKE_TOOLCHAIN
     LLVM_MC_RELOCATION_MODEL="default"
   endif
 
+  # LLVM changed this flag in 3.9
+  ifdef CFG_LLVM_MC_HAS_RELOCATION_MODEL
+    LLVM_MC_RELOC_FLAG := -relocation-model=$$(LLVM_MC_RELOCATION_MODEL)
+  else
+    LLVM_MC_RELOC_FLAG := -position-independent
+  endif
+
   # We're using llvm-mc as our assembler because it supports
   # .cfi pseudo-ops on mac
   CFG_ASSEMBLE_$(1)=$$(CPP_$(1)) -E $$(2) | \
                     $$(LLVM_MC_$$(CFG_BUILD)) \
                     -assemble \
-                    -relocation-model=$$(LLVM_MC_RELOCATION_MODEL) \
+                    $$(LLVM_MC_RELOC_FLAG) \
                     -filetype=obj \
                     -triple=$(1) \
                     -o=$$(1)