[lld] r369559 - [lld-link] implement -lto-obj-path

Bob Haarman via llvm-commits llvm-commits at lists.llvm.org
Wed Aug 21 11:24:59 PDT 2019


Author: inglorion
Date: Wed Aug 21 11:24:59 2019
New Revision: 369559

URL: http://llvm.org/viewvc/llvm-project?rev=369559&view=rev
Log:
[lld-link] implement -lto-obj-path

Summary:
This adds the -lto-obj-path option to lld-link. This can be
used to specify a path at which to write a native object file for
the full LTO part when using LTO unit splitting.

Reviewers: ruiu, tejohnson, pcc, rnk

Reviewed By: ruiu, rnk

Subscribers: mehdi_amini, steven_wu, dexonsmith, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D65964

Added:
    lld/trunk/test/COFF/lto-obj-path.ll
Modified:
    lld/trunk/COFF/Config.h
    lld/trunk/COFF/Driver.cpp
    lld/trunk/COFF/LTO.cpp
    lld/trunk/COFF/Options.td

Modified: lld/trunk/COFF/Config.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/Config.h?rev=369559&r1=369558&r2=369559&view=diff
==============================================================================
--- lld/trunk/COFF/Config.h (original)
+++ lld/trunk/COFF/Config.h Wed Aug 21 11:24:59 2019
@@ -190,6 +190,9 @@ struct Configuration {
   // Used for /thinlto-object-suffix-replace:
   std::pair<llvm::StringRef, llvm::StringRef> thinLTOObjectSuffixReplace;
 
+  // Used for /lto-obj-path:
+  llvm::StringRef ltoObjPath;
+
   uint64_t align = 4096;
   uint64_t imageBase = -1;
   uint64_t fileAlign = 512;

Modified: lld/trunk/COFF/Driver.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/Driver.cpp?rev=369559&r1=369558&r2=369559&view=diff
==============================================================================
--- lld/trunk/COFF/Driver.cpp (original)
+++ lld/trunk/COFF/Driver.cpp Wed Aug 21 11:24:59 2019
@@ -1475,6 +1475,7 @@ void LinkerDriver::link(ArrayRef<const c
       getOldNewOptions(args, OPT_thinlto_prefix_replace);
   config->thinLTOObjectSuffixReplace =
       getOldNewOptions(args, OPT_thinlto_object_suffix_replace);
+  config->ltoObjPath = args.getLastArgValue(OPT_lto_obj_path);
   // Handle miscellaneous boolean flags.
   config->allowBind = args.hasFlag(OPT_allowbind, OPT_allowbind_no, true);
   config->allowIsolation =

Modified: lld/trunk/COFF/LTO.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/LTO.cpp?rev=369559&r1=369558&r2=369559&view=diff
==============================================================================
--- lld/trunk/COFF/LTO.cpp (original)
+++ lld/trunk/COFF/LTO.cpp Wed Aug 21 11:24:59 2019
@@ -177,6 +177,8 @@ std::vector<StringRef> BitcodeCompiler::
   // files. After that, we exit from linker and ThinLTO backend runs in a
   // distributed environment.
   if (config->thinLTOIndexOnly) {
+    if (!config->ltoObjPath.empty())
+      saveBuffer(buf[0], config->ltoObjPath);
     if (indexFile)
       indexFile->close();
     return {};

Modified: lld/trunk/COFF/Options.td
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/Options.td?rev=369559&r1=369558&r2=369559&view=diff
==============================================================================
--- lld/trunk/COFF/Options.td (original)
+++ lld/trunk/COFF/Options.td Wed Aug 21 11:24:59 2019
@@ -191,6 +191,9 @@ def thinlto_object_suffix_replace : P<
 def thinlto_prefix_replace: P<
     "thinlto-prefix-replace",
     "'old;new' replace old prefix with new prefix in ThinLTO outputs">;
+def lto_obj_path : P<
+    "lto-obj-path",
+    "output native object for merged LTO unit to this path">;
 def dash_dash_version : Flag<["--"], "version">,
   HelpText<"Print version information">;
 defm threads: B<"threads",

Added: lld/trunk/test/COFF/lto-obj-path.ll
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/lto-obj-path.ll?rev=369559&view=auto
==============================================================================
--- lld/trunk/test/COFF/lto-obj-path.ll (added)
+++ lld/trunk/test/COFF/lto-obj-path.ll Wed Aug 21 11:24:59 2019
@@ -0,0 +1,25 @@
+; REQUIRES: x86
+
+; Test to ensure that thinlto-index-only with lto-obj-path creates
+; the native object file.
+; RUN: opt -module-summary %s -o %t1.obj
+; RUN: opt -module-summary %p/Inputs/thinlto.ll -o %t2.obj
+; RUN: rm -f %t4.obj
+; RUN: lld-link -thinlto-index-only -lto-obj-path:%t4.obj -out:t3.exe \
+; RUN:     -entry:main %t1.obj %t2.obj
+; RUN: llvm-readobj -h %t4.obj | FileCheck %s
+; RUN: llvm-nm %t4.obj 2>&1 | FileCheck %s -check-prefix=SYMBOLS
+; RUN: llvm-nm %t4.obj 2>&1 | count 1
+
+; CHECK: Format: COFF-x86-64
+; SYMBOLS: @feat.00
+
+target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-pc-windows-msvc19.0.24215"
+
+declare void @g(...)
+
+define void @main() {
+  call void (...) @g()
+  ret void
+}




More information about the llvm-commits mailing list