From 3d7da810e4a6e1ade2c0d649f17f8aa820248765 Mon Sep 17 00:00:00 2001 From: Brad Smith Date: Thu, 28 Apr 2022 00:17:48 -0400 Subject: [PATCH] [Driver][Solaris] -r: imply -nostdlib like GCC Similar to D116843 for Gnu.cpp Reviewed By: MaskRay Differential Revision: https://reviews.llvm.org/D124356 --- clang/lib/Driver/ToolChains/Solaris.cpp | 12 ++++++++---- clang/test/Driver/solaris-ld.c | 10 ++++++++++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/clang/lib/Driver/ToolChains/Solaris.cpp b/clang/lib/Driver/ToolChains/Solaris.cpp index 2d40598..c75375a 100644 --- a/clang/lib/Driver/ToolChains/Solaris.cpp +++ b/clang/lib/Driver/ToolChains/Solaris.cpp @@ -84,7 +84,8 @@ void solaris::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(getToolChain().GetFilePath("crt1.o"))); @@ -124,7 +125,8 @@ void solaris::Linker::ConstructJob(Compilation &C, const JobAction &JA, bool NeedsSanitizerDeps = addSanitizerRuntimes(getToolChain(), Args, CmdArgs); AddLinkerInputs(getToolChain(), Inputs, Args, CmdArgs, JA); - if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs)) { + if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nodefaultlibs, + options::OPT_r)) { if (getToolChain().ShouldLinkCXXStdlib(Args)) getToolChain().AddCXXStdlibLibArgs(Args, CmdArgs); if (Args.hasArg(options::OPT_fstack_protector) || @@ -161,11 +163,13 @@ void solaris::Linker::ConstructJob(Compilation &C, const JobAction &JA, } } - if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles)) { + if (!Args.hasArg(options::OPT_nostdlib, options::OPT_nostartfiles, + options::OPT_r)) { CmdArgs.push_back( Args.MakeArgString(getToolChain().GetFilePath("crtend.o"))); + CmdArgs.push_back( + Args.MakeArgString(getToolChain().GetFilePath("crtn.o"))); } - CmdArgs.push_back(Args.MakeArgString(getToolChain().GetFilePath("crtn.o"))); getToolChain().addProfileRTLibs(Args, CmdArgs); diff --git a/clang/test/Driver/solaris-ld.c b/clang/test/Driver/solaris-ld.c index d40e5da..57b2b1b 100644 --- a/clang/test/Driver/solaris-ld.c +++ b/clang/test/Driver/solaris-ld.c @@ -108,3 +108,13 @@ // CHECK-SPARC32-SHARED-SAME: "-lc" // CHECK-SPARC32-SHARED-NOT: "-lgcc" // CHECK-SPARC32-SHARED-NOT: "-lm" + +// -r suppresses default -l and crt*.o, values-*.o like -nostdlib. +// RUN: %clang -no-canonical-prefixes %s -### -o %t.o \ +// RUN: --target=sparc-sun-solaris2.11 -r 2>&1 \ +// RUN: | FileCheck %s --check-prefix=CHECK-RELOCATABLE +// CHECK-RELOCATABLE: "-L +// CHECK-RELOCATABLE: "-r" +// CHECK-RELOCATABLE-NOT: "-l +// CHECK-RELOCATABLE-NOT: {{.*}}crt{{[^.]+}}.o +// CHECK-RELOCATABLE-NOT: {{.*}}values-{{[^.]+}}.o -- 2.7.4