]> granicus.if.org Git - clang/commitdiff
Driver/Darwin: When invoking the linker, automatically pass -object_path_lto so
authorDaniel Dunbar <daniel@zuster.org>
Tue, 21 Jun 2011 20:55:11 +0000 (20:55 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Tue, 21 Jun 2011 20:55:11 +0000 (20:55 +0000)
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

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@133543 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Driver/Tools.cpp
test/Driver/darwin-ld.c

index b3cef73e5269a1f2b0ba50b757e1621b38857b1b..41efccfb93a7dff452ae7c85c257911c0c38732e 100644 (file)
@@ -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))
index f6ea829570cb081c399bfb9b0949c171a03d5ccd..a87de540360e229946407e8d6295f2adbfc76d9f 100644 (file)
 // 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"