summaryrefslogtreecommitdiffstats
path: root/contrib/llvm/patches/patch-r262262-clang-r199034-sparc.diff
blob: 6eb98df99cce883cde4c8d2e166fab7bbe56677c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
Pull in r199034 from upstream clang trunk (by Jakob Stoklund Olesen):

  MIPS and SPARC assemblers both take the -KPIC flag.

Introduced here: http://svnweb.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