Skip to content

Commit

Permalink
[clang][Toolchains][Gnu] pass -g through to assembler
Browse files Browse the repository at this point in the history
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
  • Loading branch information
nickdesaulniers committed Oct 24, 2022
1 parent 1edc51b commit e3bb359
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 6 deletions.
4 changes: 4 additions & 0 deletions clang/lib/Driver/ToolChains/Gnu.cpp
Expand Up @@ -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,
Expand Down
10 changes: 10 additions & 0 deletions clang/test/Driver/as-options.s
Expand Up @@ -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"
6 changes: 0 additions & 6 deletions clang/test/Driver/gcc_forward.c
Expand Up @@ -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"

0 comments on commit e3bb359

Please sign in to comment.