summaryrefslogtreecommitdiffstats
path: root/contrib/llvm/patches/patch-r262262-clang-r199034-sparc.diff
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/llvm/patches/patch-r262262-clang-r199034-sparc.diff')
-rw-r--r--contrib/llvm/patches/patch-r262262-clang-r199034-sparc.diff81
1 files changed, 81 insertions, 0 deletions
diff --git a/contrib/llvm/patches/patch-r262262-clang-r199034-sparc.diff b/contrib/llvm/patches/patch-r262262-clang-r199034-sparc.diff
new file mode 100644
index 0000000..8043e1f
--- /dev/null
+++ b/contrib/llvm/patches/patch-r262262-clang-r199034-sparc.diff
@@ -0,0 +1,81 @@
+Pull in r199034 from upstream clang trunk (by Jakob Stoklund Olesen):
+
+ MIPS and SPARC assemblers both take the -KPIC flag.
+
+Introduced here: http://svn.freebsd.org/changeset/base/262262
+
+Index: tools/clang/lib/Driver/Tools.cpp
+===================================================================
+--- tools/clang/lib/Driver/Tools.cpp
++++ tools/clang/lib/Driver/Tools.cpp
+@@ -6207,6 +6207,7 @@ void gnutools::Assemble::ConstructJob(Compilation
+ const ArgList &Args,
+ const char *LinkingOutput) const {
+ ArgStringList CmdArgs;
++ bool NeedsKPIC = false;
+
+ // Add --32/--64 to make sure we get the format we want.
+ // This is incomplete
+@@ -6229,9 +6230,11 @@ void gnutools::Assemble::ConstructJob(Compilation
+ } else if (getToolChain().getArch() == llvm::Triple::sparc) {
+ CmdArgs.push_back("-32");
+ CmdArgs.push_back("-Av8plusa");
++ NeedsKPIC = true;
+ } else if (getToolChain().getArch() == llvm::Triple::sparcv9) {
+ CmdArgs.push_back("-64");
+ CmdArgs.push_back("-Av9a");
++ NeedsKPIC = true;
+ } else if (getToolChain().getArch() == llvm::Triple::arm) {
+ StringRef MArch = getToolChain().getArchName();
+ if (MArch == "armv7" || MArch == "armv7a" || MArch == "armv7-a")
+@@ -6291,6 +6294,15 @@ void gnutools::Assemble::ConstructJob(Compilation
+ CmdArgs.push_back(Args.MakeArgString("-mmsa"));
+ }
+
++ NeedsKPIC = true;
++ } else if (getToolChain().getArch() == llvm::Triple::systemz) {
++ // Always pass an -march option, since our default of z10 is later
++ // than the GNU assembler's default.
++ StringRef CPUName = getSystemZTargetCPU(Args);
++ CmdArgs.push_back(Args.MakeArgString("-march=" + CPUName));
++ }
++
++ if (NeedsKPIC) {
+ Arg *LastPICArg = Args.getLastArg(options::OPT_fPIC, options::OPT_fno_PIC,
+ options::OPT_fpic, options::OPT_fno_pic,
+ options::OPT_fPIE, options::OPT_fno_PIE,
+@@ -6302,11 +6314,6 @@ void gnutools::Assemble::ConstructJob(Compilation
+ LastPICArg->getOption().matches(options::OPT_fpie))) {
+ CmdArgs.push_back("-KPIC");
+ }
+- } else if (getToolChain().getArch() == llvm::Triple::systemz) {
+- // Always pass an -march option, since our default of z10 is later
+- // than the GNU assembler's default.
+- StringRef CPUName = getSystemZTargetCPU(Args);
+- CmdArgs.push_back(Args.MakeArgString("-march=" + CPUName));
+ }
+
+ Args.AddAllArgValues(CmdArgs, options::OPT_Wa_COMMA,
+Index: tools/clang/test/Driver/linux-as.c
+===================================================================
+--- tools/clang/test/Driver/linux-as.c
++++ tools/clang/test/Driver/linux-as.c
+@@ -66,8 +66,18 @@
+ // CHECK-SPARCV9: as
+ // CHECK-SPARCV9: -64
+ // CHECK-SPARCV9: -Av9a
++// CHECK-SPARCV9-NOT: -KPIC
+ // CHECK-SPARCV9: -o
+ //
++// RUN: %clang -target sparc64-linux -mcpu=invalid-cpu -### \
++// RUN: -no-integrated-as -fpic -c %s 2>&1 \
++// RUN: | FileCheck -check-prefix=CHECK-SPARCV9PIC %s
++// CHECK-SPARCV9PIC: as
++// CHECK-SPARCV9PIC: -64
++// CHECK-SPARCV9PIC: -Av9a
++// CHECK-SPARCV9PIC: -KPIC
++// CHECK-SPARCV9PIC: -o
++//
+ // RUN: %clang -target sparc-linux -mcpu=invalid-cpu -### \
+ // RUN: -no-integrated-as -c %s 2>&1 \
+ // RUN: | FileCheck -check-prefix=CHECK-SPARCV8 %s
OpenPOWER on IntegriCloud