diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2014-02-28 01:55:21 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2014-02-28 01:55:21 +0000 |
commit | cc126271f851de92bcef439e54e92ec63eccc8a6 (patch) | |
tree | 64fc52af63a6af48702668409628f4a3bb0350b4 | |
parent | 2868a736f88e50063264c41e3cd87c927c0c7ab8 (diff) | |
download | bcm5719-llvm-cc126271f851de92bcef439e54e92ec63eccc8a6.tar.gz bcm5719-llvm-cc126271f851de92bcef439e54e92ec63eccc8a6.zip |
Add support for OpenBSD SPARC assembler.
Patch by Brad Smith.
llvm-svn: 202462
-rw-r--r-- | clang/lib/Driver/Tools.cpp | 39 | ||||
-rw-r--r-- | clang/test/Driver/openbsd.c | 6 |
2 files changed, 38 insertions, 7 deletions
diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index 58c2578114f..50ad7e65eb3 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -5600,16 +5600,33 @@ void openbsd::Assemble::ConstructJob(Compilation &C, const JobAction &JA, const ArgList &Args, const char *LinkingOutput) const { ArgStringList CmdArgs; + bool NeedsKPIC = false; - // When building 32-bit code on OpenBSD/amd64, we have to explicitly - // instruct as in the base system to assemble 32-bit code. - if (getToolChain().getArch() == llvm::Triple::x86) + switch (getToolChain().getArch()) { + case llvm::Triple::x86: + // When building 32-bit code on OpenBSD/amd64, we have to explicitly + // instruct as in the base system to assemble 32-bit code. CmdArgs.push_back("--32"); - else if (getToolChain().getArch() == llvm::Triple::ppc) { + break; + + case llvm::Triple::ppc: CmdArgs.push_back("-mppc"); CmdArgs.push_back("-many"); - } else if (getToolChain().getArch() == llvm::Triple::mips64 || - getToolChain().getArch() == llvm::Triple::mips64el) { + break; + + case llvm::Triple::sparc: + CmdArgs.push_back("-32"); + NeedsKPIC = true; + break; + + case llvm::Triple::sparcv9: + CmdArgs.push_back("-64"); + CmdArgs.push_back("-Av9a"); + NeedsKPIC = true; + break; + + case llvm::Triple::mips64: + case llvm::Triple::mips64el: { StringRef CPUName; StringRef ABIName; getMipsCPUAndABI(Args, getToolChain().getTriple(), CPUName, ABIName); @@ -5622,9 +5639,17 @@ void openbsd::Assemble::ConstructJob(Compilation &C, const JobAction &JA, else CmdArgs.push_back("-EL"); - addAssemblerKPIC(Args, CmdArgs); + NeedsKPIC = true; + break; + } + + default: + break; } + if (NeedsKPIC) + addAssemblerKPIC(Args, CmdArgs); + Args.AddAllArgValues(CmdArgs, options::OPT_Wa_COMMA, options::OPT_Xassembler); diff --git a/clang/test/Driver/openbsd.c b/clang/test/Driver/openbsd.c index ef02b07d29e..5fe27f3678b 100644 --- a/clang/test/Driver/openbsd.c +++ b/clang/test/Driver/openbsd.c @@ -39,6 +39,10 @@ // RUN: | FileCheck -check-prefix=CHECK-AMD64-M32 %s // RUN: %clang -target powerpc-unknown-openbsd -### -no-integrated-as -c %s 2>&1 \ // RUN: | FileCheck -check-prefix=CHECK-POWERPC %s +// RUN: %clang -target sparc-unknown-openbsd -### -no-integrated-as -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK-SPARC %s +// RUN: %clang -target sparc64-unknown-openbsd -### -no-integrated-as -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK-SPARC64 %s // RUN: %clang -target mips64-unknown-openbsd -### -no-integrated-as -c %s 2>&1 \ // RUN: | FileCheck -check-prefix=CHECK-MIPS64 %s // RUN: %clang -target mips64-unknown-openbsd -fPIC -### -no-integrated-as -c %s 2>&1 \ @@ -49,6 +53,8 @@ // RUN: | FileCheck -check-prefix=CHECK-MIPS64EL-PIC %s // CHECK-AMD64-M32: as{{.*}}" "--32" // CHECK-POWERPC: as{{.*}}" "-mppc" "-many" +// CHECK-SPARC: as{{.*}}" "-32" +// CHECK-SPARC64: as{{.*}}" "-64" "-Av9a" // CHECK-MIPS64: as{{.*}}" "-mabi" "64" "-EB" // CHECK-MIPS64-PIC: as{{.*}}" "-mabi" "64" "-EB" "-KPIC" // CHECK-MIPS64EL: as{{.*}}" "-mabi" "64" "-EL" |