Teach the driver on Linux to respect -nodefaultlibs.

Patch from Andrew C. Morrow.

llvm-svn: 156771
This commit is contained in:
Chandler Carruth 2012-05-14 18:31:18 +00:00
parent 31ee64d9dc
commit 94a3201179
2 changed files with 25 additions and 14 deletions

View File

@ -5313,7 +5313,9 @@ void linuxtools::Link::ConstructJob(Compilation &C, const JobAction &JA,
AddLinkerInputs(ToolChain, Inputs, Args, CmdArgs);
if (D.CCCIsCXX && !Args.hasArg(options::OPT_nostdlib)) {
if (D.CCCIsCXX &&
!Args.hasArg(options::OPT_nostdlib) &&
!Args.hasArg(options::OPT_nodefaultlibs)) {
bool OnlyLibstdcxxStatic = Args.hasArg(options::OPT_static_libstdcxx) &&
!Args.hasArg(options::OPT_static);
if (OnlyLibstdcxxStatic)
@ -5328,22 +5330,23 @@ void linuxtools::Link::ConstructJob(Compilation &C, const JobAction &JA,
addAsanRTLinux(getToolChain(), Args, CmdArgs);
if (!Args.hasArg(options::OPT_nostdlib)) {
if (Args.hasArg(options::OPT_static))
CmdArgs.push_back("--start-group");
if (!Args.hasArg(options::OPT_nodefaultlibs)) {
if (Args.hasArg(options::OPT_static))
CmdArgs.push_back("--start-group");
AddLibgcc(ToolChain.getTriple(), D, CmdArgs, Args);
if (Args.hasArg(options::OPT_pthread) ||
Args.hasArg(options::OPT_pthreads))
CmdArgs.push_back("-lpthread");
CmdArgs.push_back("-lc");
if (Args.hasArg(options::OPT_static))
CmdArgs.push_back("--end-group");
else
AddLibgcc(ToolChain.getTriple(), D, CmdArgs, Args);
if (Args.hasArg(options::OPT_pthread) ||
Args.hasArg(options::OPT_pthreads))
CmdArgs.push_back("-lpthread");
CmdArgs.push_back("-lc");
if (Args.hasArg(options::OPT_static))
CmdArgs.push_back("--end-group");
else
AddLibgcc(ToolChain.getTriple(), D, CmdArgs, Args);
}
if (!Args.hasArg(options::OPT_nostartfiles)) {
const char *crtend;

View File

@ -0,0 +1,8 @@
// RUN: %clang -target i686-pc-linux-gnu -### -nodefaultlibs %s 2> %t
// RUN: FileCheck < %t %s
//
// CHECK-NOT: start-group
// CHECK-NOT: -lgcc
// CHECK-NOT: -lc
// CHECK: crtbegin
// CHECK: crtend