diff options
author | Brad Smith <brad@comstyle.com> | 2022-05-02 00:26:41 -0400 |
---|---|---|
committer | Tom Stellard <tstellar@redhat.com> | 2022-05-18 19:56:45 -0700 |
commit | 9827a185b611b33b7735458e024eab7a0646bc40 (patch) | |
tree | ed5e1ef1187b5dc338fa8e5c94715560d232ff1e | |
parent | 087082a828ffc833ec5b54caadd5ba86af811dae (diff) | |
download | llvm-9827a185b611b33b7735458e024eab7a0646bc40.tar.gz |
[Driver][Ananas] -r: imply -nostdlib like GCC
Similar to D116843 for Gnu.cpp
Reviewed By: zhmu, MaskRay
Differential Revision: https://reviews.llvm.org/D124729
(cherry picked from commit a132e527f25164268e08ebc63b043bbce8a043ed)
-rw-r--r-- | clang/lib/Driver/ToolChains/Ananas.cpp | 14 | ||||
-rw-r--r-- | clang/test/Driver/ananas.c | 7 |
2 files changed, 16 insertions, 5 deletions
diff --git a/clang/lib/Driver/ToolChains/Ananas.cpp b/clang/lib/Driver/ToolChains/Ananas.cpp index be1476a7636c..40f9e56b38e9 100644 --- a/clang/lib/Driver/ToolChains/Ananas.cpp +++ b/clang/lib/Driver/ToolChains/Ananas.cpp @@ -85,7 +85,8 @@ void ananas::Linker::ConstructJob(Compilation &C, const JobAction &JA, assert(Output.isNothing() && "Invalid output."); } - if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles)) { + if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles, + options::OPT_r)) { if (!Args.hasArg(options::OPT_shared)) { CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crt0.o"))); } @@ -111,12 +112,15 @@ void ananas::Linker::ConstructJob(Compilation &C, const JobAction &JA, AddLinkerInputs(ToolChain, Inputs, Args, CmdArgs, JA); - if (ToolChain.ShouldLinkCXXStdlib(Args)) - ToolChain.AddCXXStdlibLibArgs(Args, CmdArgs); - if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs)) + if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs, + options::OPT_r)) { + if (ToolChain.ShouldLinkCXXStdlib(Args)) + ToolChain.AddCXXStdlibLibArgs(Args, CmdArgs); CmdArgs.push_back("-lc"); + } - if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles)) { + if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles, + options::OPT_r)) { if (Args.hasArg(options::OPT_shared) || Args.hasArg(options::OPT_pie)) CmdArgs.push_back(Args.MakeArgString(ToolChain.GetFilePath("crtendS.o"))); else diff --git a/clang/test/Driver/ananas.c b/clang/test/Driver/ananas.c index 4edc2a10941c..bd36fae6f424 100644 --- a/clang/test/Driver/ananas.c +++ b/clang/test/Driver/ananas.c @@ -15,3 +15,10 @@ // CHECK-SHARED: crtbeginS.o // CHECK-SHARED: crtendS.o // CHECK-SHARED: crtn.o + +// -r suppresses default -l and crt*.o like -nostdlib. +// RUN: %clang %s -### -o %t.o --target=x86_64-unknown-ananas -r 2>&1 \ +// RUN: | FileCheck %s --check-prefix=CHECK-RELOCATABLE +// CHECK-RELOCATABLE: "-r" +// CHECK-RELOCATABLE-NOT: "-l +// CHECK-RELOCATABLE-NOT: {{.*}}crt{{[^.]+}}.o |