Author: Nick Desaulniers Date: 2022-10-24T12:30:44-07:00 New Revision: e3bb359aacddb5e0266e219f33d27b642089fd53
URL: https://github.com/llvm/llvm-project/commit/e3bb359aacddb5e0266e219f33d27b642089fd53 DIFF: https://github.com/llvm/llvm-project/commit/e3bb359aacddb5e0266e219f33d27b642089fd53.diff LOG: [clang][Toolchains][Gnu] pass -g through to assembler We've been working around this for a long time in the Linux kernel; we bend over backwards to continue to support CC=clang (w/ -fno-integrated-as) for architectures where clang can't yet be used to assemble the kernel's assembler sources. Supporting debug info for the combination of CC=clang w/ GNU binutils as "GAS" has been painful. Fix this in clang so that we can work towards dropping complexity in the Linux kernel's build system, Kbuild, for supporting this combination of tools. GAS added support for -g in 2004 2.16 release via commit 329e276daf98 ("Add support for a -g switch to GAS") Reviewed By: MaskRay Differential Revision: https://reviews.llvm.org/D136309 Added: Modified: clang/lib/Driver/ToolChains/Gnu.cpp clang/test/Driver/as-options.s clang/test/Driver/gcc_forward.c Removed: ################################################################################ diff --git a/clang/lib/Driver/ToolChains/Gnu.cpp b/clang/lib/Driver/ToolChains/Gnu.cpp index f717ca3ed849..9a172dbd057e 100644 --- a/clang/lib/Driver/ToolChains/Gnu.cpp +++ b/clang/lib/Driver/ToolChains/Gnu.cpp @@ -969,6 +969,10 @@ void tools::gnutools::Assembler::ConstructJob(Compilation &C, for (const auto &II : Inputs) CmdArgs.push_back(II.getFilename()); + if (Arg *A = Args.getLastArg(options::OPT_g_Flag, options::OPT_gN_Group)) + if (!A->getOption().matches(options::OPT_g0)) + Args.AddLastArg(CmdArgs, options::OPT_g_Flag); + const char *Exec = Args.MakeArgString(getToolChain().GetProgramPath(DefaultAssembler)); C.addCommand(std::make_unique<Command>(JA, *this, diff --git a/clang/test/Driver/as-options.s b/clang/test/Driver/as-options.s index 64269683ec34..f76b213eeba7 100644 --- a/clang/test/Driver/as-options.s +++ b/clang/test/Driver/as-options.s @@ -116,3 +116,13 @@ // RUN: %clang -mrelax-all -fno-integrated-as -x c++ %s -S -o /dev/null 2>&1 \ // RUN: | FileCheck --check-prefix=WARN --allow-empty %s // WARN: unused + +// Test that -g is passed through to GAS. +// RUN: %clang --target=aarch64-linux-gnu -fno-integrated-as -g %s -### 2>&1 | \ +// RUN: FileCheck --check-prefix=DEBUG %s +// RUN: %clang --target=aarch64-linux-gnu -fno-integrated-as -g0 -g %s -### 2>&1 | \ +// RUN: FileCheck --check-prefix=DEBUG %s +// DEBUG: "-g" +// RUN: %clang --target=aarch64-linux-gnu -fno-integrated-as -g -g0 %s -### 2>&1 | \ +// RUN: FileCheck --check-prefix=NODEBUG %s +// NODEBUG-NOT: "-g" diff --git a/clang/test/Driver/gcc_forward.c b/clang/test/Driver/gcc_forward.c index 9e512d134b3e..491750f5eedf 100644 --- a/clang/test/Driver/gcc_forward.c +++ b/clang/test/Driver/gcc_forward.c @@ -34,9 +34,3 @@ // CHECK-NOT: "-Wall" // CHECK-NOT: "-Wdocumentation" // CHECK: "-o" "a.out" - -// Check that we're not forwarding -g options to the assembler -// RUN: %clang -g -target x86_64-unknown-linux-gnu -no-integrated-as -c %s -### 2>&1 \ -// RUN: | FileCheck --check-prefix=CHECK-ASM %s -// CHECK-ASM: as -// CHECK-ASM-NOT: "-g" _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits