From edaa444bda3fdfdf03a25ccbce4aa040bb6cccd0 Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Sat, 23 Nov 2013 16:40:57 +0000 Subject: [PATCH] Don't use the gcc driver for assembling. Clang knows how to use the gnu assembler directly from doing so on linux and hurd. The existing support worked out of the box on cygwin and mingw and I was able to bootstrap clang with it in both systems (with pending patches for the new mingw abi, but that is independent of the assembler). llvm-svn: 195554 --- clang/lib/Driver/ToolChains.cpp | 2 +- clang/lib/Driver/Tools.cpp | 5 ----- clang/lib/Driver/Tools.h | 11 ----------- clang/test/Driver/bindings.c | 2 +- clang/test/Driver/gcc_forward.c | 15 ++------------- clang/test/Driver/target.c | 6 ------ clang/test/Driver/unknown-gcc-arch.c | 16 ++++++++-------- 7 files changed, 12 insertions(+), 45 deletions(-) diff --git a/clang/lib/Driver/ToolChains.cpp b/clang/lib/Driver/ToolChains.cpp index e5528f0a646b..8888ba138d2b 100644 --- a/clang/lib/Driver/ToolChains.cpp +++ b/clang/lib/Driver/ToolChains.cpp @@ -1594,7 +1594,7 @@ Tool *Generic_GCC::getTool(Action::ActionClass AC) const { } Tool *Generic_GCC::buildAssembler() const { - return new tools::gcc::Assemble(*this); + return new tools::gnutools::Assemble(*this); } Tool *Generic_GCC::buildLinker() const { diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index bf35463066d7..2742332d6685 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -4285,11 +4285,6 @@ void gcc::Compile::RenderExtraToolArgs(const JobAction &JA, } } -void gcc::Assemble::RenderExtraToolArgs(const JobAction &JA, - ArgStringList &CmdArgs) const { - CmdArgs.push_back("-c"); -} - void gcc::Link::RenderExtraToolArgs(const JobAction &JA, ArgStringList &CmdArgs) const { // The types are (hopefully) good enough. diff --git a/clang/lib/Driver/Tools.h b/clang/lib/Driver/Tools.h index d5b2848c9b01..260b8c7ccce6 100644 --- a/clang/lib/Driver/Tools.h +++ b/clang/lib/Driver/Tools.h @@ -163,17 +163,6 @@ namespace gcc { llvm::opt::ArgStringList &CmdArgs) const; }; - class LLVM_LIBRARY_VISIBILITY Assemble : public Common { - public: - Assemble(const ToolChain &TC) : Common("gcc::Assemble", - "assembler (via gcc)", TC) {} - - virtual bool hasIntegratedCPP() const { return false; } - - virtual void RenderExtraToolArgs(const JobAction &JA, - llvm::opt::ArgStringList &CmdArgs) const; - }; - class LLVM_LIBRARY_VISIBILITY Link : public Common { public: Link(const ToolChain &TC) : Common("gcc::Link", diff --git a/clang/test/Driver/bindings.c b/clang/test/Driver/bindings.c index d25fc8f8afd6..174a2650e5db 100644 --- a/clang/test/Driver/bindings.c +++ b/clang/test/Driver/bindings.c @@ -1,7 +1,7 @@ // Basic binding. // RUN: %clang -target i386-unknown-unknown -ccc-print-bindings %s 2>&1 | FileCheck %s --check-prefix=CHECK01 // CHECK01: "clang", inputs: ["{{.*}}bindings.c"], output: "{{.*}}.s" -// CHECK01: "gcc::Assemble", inputs: ["{{.*}}.s"], output: "{{.*}}.o" +// CHECK01: "GNU::Assemble", inputs: ["{{.*}}.s"], output: "{{.*}}.o" // CHECK01: "gcc::Link", inputs: ["{{.*}}.o"], output: "a.out" // Clang control options diff --git a/clang/test/Driver/gcc_forward.c b/clang/test/Driver/gcc_forward.c index b9933d7fb376..3bc413193f16 100644 --- a/clang/test/Driver/gcc_forward.c +++ b/clang/test/Driver/gcc_forward.c @@ -13,19 +13,8 @@ // CHECK: "-Wall" "-Wdocumentation" // CHECK: "-o" "{{[^"]+}}.s" // -// gcc-as -// CHECK: gcc{{[^"]*}}" -// CHECK-NOT: "-mlinker-version=10" -// CHECK-NOT: "-Xclang" -// CHECK-NOT: "foo-bar" -// CHECK-NOT: "-Wall" -// CHECK-NOT: "-Wdocumentation" -// CHECK: -march -// CHECK-NOT: "-mlinker-version=10" -// CHECK-NOT: "-Xclang" -// CHECK-NOT: "foo-bar" -// CHECK-NOT: "-Wall" -// CHECK-NOT: "-Wdocumentation" +// gnu-as +// CHECK: as{{[^"]*}}" // CHECK: "-o" "{{[^"]+}}.o" // // gcc-ld diff --git a/clang/test/Driver/target.c b/clang/test/Driver/target.c index b400f990fb1b..a46ba16296a7 100644 --- a/clang/test/Driver/target.c +++ b/clang/test/Driver/target.c @@ -4,12 +4,6 @@ // Ensure we get a crazy triple here as we asked for one. // CHECK: Target: unknown-unknown-unknown // -// Also, ensure we don't blindly hand our target selection logic down to GCC. -// CHECK: "{{.*gcc(\.[Ee][Xx][Ee])?}}" -// CHECK-NOT: "-target" -// CHECK-NOT: "unknown-unknown-unknown" -// CHECK: "-x" "assembler" -// // Also check that the legacy spelling works. // RUN: %clang -no-canonical-prefixes -target unknown-unknown-unknown -c %s \ // RUN: -o %t.o -### 2>&1 | FileCheck %s diff --git a/clang/test/Driver/unknown-gcc-arch.c b/clang/test/Driver/unknown-gcc-arch.c index dcd17d4f467a..b03944c6a7bf 100644 --- a/clang/test/Driver/unknown-gcc-arch.c +++ b/clang/test/Driver/unknown-gcc-arch.c @@ -1,32 +1,32 @@ // RUN: %clang -target x86_64-unknown-unknown -c -x assembler %s -### 2>&1 \ // RUN: | FileCheck -check-prefix=X86_64 %s -// X86_64: {{.*gcc.*-m64}} +// X86_64: {{.*as.*--64}} // RUN: %clang -target x86_64-unknown-unknown -c -x assembler %s -### -m32 2>&1 \ // RUN: | FileCheck -check-prefix=X86_64-M32 %s -// X86_64-M32: {{.*gcc.*-m32}} +// X86_64-M32: {{.*as.*--32}} // RUN: %clang -target i386-unknown-unknown -c -x assembler %s -### 2>&1 \ // RUN: | FileCheck -check-prefix=I386 %s -// I386: {{.*gcc.*-m32}} +// I386: {{.*as.*--32}} // RUN: %clang -target i386-unknown-unknown -c -x assembler %s -### -m64 2>&1 \ // RUN: | FileCheck -check-prefix=I386-M64 %s -// I386-M64: {{.*gcc.*-m64}} +// I386-M64: {{.*as.*--64}} // RUN: %clang -target powerpc64-unknown-unknown -c -x assembler %s -### 2>&1 \ // RUN: | FileCheck -check-prefix=PPC64 %s -// PPC64: {{.*gcc.*-m64}} +// PPC64: {{.*as.*-a64}} // RUN: %clang -target powerpc64-unknown-unknown -c -x assembler %s -### -m32 2>&1 \ // RUN: | FileCheck -check-prefix=PPC64-M32 %s -// PPC64-M32: {{.*gcc.*-m32}} +// PPC64-M32: {{.*as.*-a32}} // RUN: %clang -target powerpc-unknown-unknown -c -x assembler %s -### 2>&1 \ // RUN: | FileCheck -check-prefix=PPC %s -// PPC: {{.*gcc.*-m32}} +// PPC: {{.*as.*-a32}} // RUN: %clang -target powerpc-unknown-unknown -c -x assembler %s -### -m64 2>&1 \ // RUN: | FileCheck -check-prefix=PPC-M64 %s -// PPC-M64: {{.*gcc.*-m64}} +// PPC-M64: {{.*as.*-a64}}