forked from OSchip/llvm-project
Driver/Darwin: When invoking the linker, automatically pass -object_path_lto so
that the linker has a place to put the temporary object file and can leave it around (for the driver to clean up). This is important so that the object file references in the debug info are preserved for possible use by dsymutil. - <rdar://problem/8294279> executable has no debug symbols when compiled with LTO llvm-svn: 133543
This commit is contained in:
parent
8f1fe5b5c3
commit
ef889c7c9b
|
@ -2907,6 +2907,17 @@ void darwin::Link::AddLinkArgs(Compilation &C,
|
|||
CmdArgs.push_back("-demangle");
|
||||
}
|
||||
|
||||
// If we are using LTO, then automatically create a temporary file path for
|
||||
// the linker to use, so that it's lifetime will extend past a possible
|
||||
// dsymutil step.
|
||||
if (Version[0] >= 100 && D.IsUsingLTO(Args)) {
|
||||
const char *TmpPath = C.getArgs().MakeArgString(
|
||||
D.GetTemporaryPath(types::getTypeTempSuffix(types::TY_Object)));
|
||||
C.addTempFile(TmpPath);
|
||||
CmdArgs.push_back("-object_path_lto");
|
||||
CmdArgs.push_back(TmpPath);
|
||||
}
|
||||
|
||||
// Derived from the "link" spec.
|
||||
Args.AddAllArgs(CmdArgs, options::OPT_static);
|
||||
if (!Args.hasArg(options::OPT_static))
|
||||
|
|
|
@ -92,3 +92,11 @@
|
|||
// LINK_OLDER_NODEMANGLE: {{ld(.exe)?"}}
|
||||
// LINK_OLDER_NODEMANGLE-NOT: "-demangle"
|
||||
// LINK_OLDER_NODEMANGLE: "-lSystem"
|
||||
|
||||
// RUN: %clang -ccc-host-triple x86_64-apple-darwin10 -### %t.o \
|
||||
// RUN: -mlinker-version=101 -flto 2> %t.log
|
||||
// RUN: cat %t.log
|
||||
// RUN: FileCheck -check-prefix=LINK_OBJECT_LTO_PATH %s < %t.log
|
||||
//
|
||||
// LINK_OBJECT_LTO_PATH: {{ld(.exe)?"}}
|
||||
// LINK_OBJECT_LTO_PATH: "-object_path_lto"
|
||||
|
|
Loading…
Reference in New Issue