[lld] r263055 - [lto] Add beginning of -save-temps option.
Sean Silva via llvm-commits
llvm-commits at lists.llvm.org
Wed Mar 9 12:01:09 PST 2016
Author: silvas
Date: Wed Mar 9 14:01:08 2016
New Revision: 263055
URL: http://llvm.org/viewvc/llvm-project?rev=263055&view=rev
Log:
[lto] Add beginning of -save-temps option.
Summary:
This is useful for debugging issues with LTO.
The option follows the analogous option in ld64 and the gold plugin (per
Rafael's suggestion).
For starters, this only dumps the combined bitcode file.
In a future patch I will add dumping for the .o file.
The naming of the output follows ld64's convention which is slightly more
consistent IMO (consistent `.lto.<extension>` for all the files).
Reviewers: rafael, ruiu
Subscribers: joker.eph, Bigcheese, llvm-commits
Differential Revision: http://reviews.llvm.org/D18006
Added:
lld/trunk/test/ELF/lto/Inputs/save-temps.ll
lld/trunk/test/ELF/lto/save-temps.ll
Modified:
lld/trunk/ELF/Config.h
lld/trunk/ELF/Driver.cpp
lld/trunk/ELF/Options.td
lld/trunk/ELF/SymbolTable.cpp
Modified: lld/trunk/ELF/Config.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Config.h?rev=263055&r1=263054&r2=263055&view=diff
==============================================================================
--- lld/trunk/ELF/Config.h (original)
+++ lld/trunk/ELF/Config.h Wed Mar 9 14:01:08 2016
@@ -69,6 +69,7 @@ struct Configuration {
bool NoinhibitExec;
bool PrintGcSections;
bool Relocatable;
+ bool SaveTemps;
bool Shared;
bool Static = false;
bool StripAll;
Modified: lld/trunk/ELF/Driver.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Driver.cpp?rev=263055&r1=263054&r2=263055&view=diff
==============================================================================
--- lld/trunk/ELF/Driver.cpp (original)
+++ lld/trunk/ELF/Driver.cpp Wed Mar 9 14:01:08 2016
@@ -239,6 +239,7 @@ void LinkerDriver::readConfigs(opt::Inpu
Config->NoinhibitExec = Args.hasArg(OPT_noinhibit_exec);
Config->PrintGcSections = Args.hasArg(OPT_print_gc_sections);
Config->Relocatable = Args.hasArg(OPT_relocatable);
+ Config->SaveTemps = Args.hasArg(OPT_save_temps);
Config->Shared = Args.hasArg(OPT_shared);
Config->StripAll = Args.hasArg(OPT_strip_all);
Config->Verbose = Args.hasArg(OPT_verbose);
Modified: lld/trunk/ELF/Options.td
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Options.td?rev=263055&r1=263054&r2=263055&view=diff
==============================================================================
--- lld/trunk/ELF/Options.td (original)
+++ lld/trunk/ELF/Options.td Wed Mar 9 14:01:08 2016
@@ -182,3 +182,6 @@ def G : Separate<["-"], "G">;
// Aliases for ignored options
def alias_version_script_version_script : Joined<["--"], "version-script=">, Alias<version_script>;
+
+// Debugging options
+def save_temps : Flag<["-"], "save-temps">;
Modified: lld/trunk/ELF/SymbolTable.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/SymbolTable.cpp?rev=263055&r1=263054&r2=263055&view=diff
==============================================================================
--- lld/trunk/ELF/SymbolTable.cpp (original)
+++ lld/trunk/ELF/SymbolTable.cpp Wed Mar 9 14:01:08 2016
@@ -147,6 +147,13 @@ static void addBitcodeFile(IRMover &Move
Mover.move(std::move(M), Keep, [](GlobalValue &, IRMover::ValueAdder) {});
}
+static void saveBCFile(std::string Path, Module &M) {
+ std::error_code EC;
+ raw_fd_ostream OS(Path, EC, sys::fs::OpenFlags::F_None);
+ check(EC);
+ WriteBitcodeToFile(&M, OS, /* ShouldPreserveUseListOrder */ true);
+}
+
// Merge all the bitcode files we have seen, codegen the result and return
// the resulting ObjectFile.
template <class ELFT>
@@ -156,6 +163,8 @@ ObjectFile<ELFT> *SymbolTable<ELFT>::cre
IRMover Mover(Combined);
for (const std::unique_ptr<BitcodeFile> &F : BitcodeFiles)
addBitcodeFile(Mover, *F, Context);
+ if (Config->SaveTemps)
+ saveBCFile(Config->OutputFile.str() + ".lto.bc", Combined);
std::unique_ptr<InputFile> F = codegen(Combined);
ObjectFiles.emplace_back(cast<ObjectFile<ELFT>>(F.release()));
return &*ObjectFiles.back();
Added: lld/trunk/test/ELF/lto/Inputs/save-temps.ll
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/lto/Inputs/save-temps.ll?rev=263055&view=auto
==============================================================================
--- lld/trunk/test/ELF/lto/Inputs/save-temps.ll (added)
+++ lld/trunk/test/ELF/lto/Inputs/save-temps.ll Wed Mar 9 14:01:08 2016
@@ -0,0 +1,6 @@
+target triple = "x86_64-unknown-linux-gnu"
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+
+define void @bar() {
+ ret void
+}
Added: lld/trunk/test/ELF/lto/save-temps.ll
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/lto/save-temps.ll?rev=263055&view=auto
==============================================================================
--- lld/trunk/test/ELF/lto/save-temps.ll (added)
+++ lld/trunk/test/ELF/lto/save-temps.ll Wed Mar 9 14:01:08 2016
@@ -0,0 +1,17 @@
+; REQUIRES: x86
+; RUN: rm -f %t.so %t.so.lto.bc
+; RUN: llvm-as %s -o %t.o
+; RUN: llvm-as %p/Inputs/save-temps.ll -o %t2.o
+; RUN: ld.lld -shared -m elf_x86_64 %t.o %t2.o -o %t.so -save-temps
+; RUN: llvm-nm %t.so | FileCheck %s
+; RUN: llvm-nm %t.so.lto.bc | FileCheck %s
+
+target triple = "x86_64-unknown-linux-gnu"
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+
+define void @foo() {
+ ret void
+}
+
+; CHECK-DAG: T bar
+; CHECK-DAG: T foo
More information about the llvm-commits
mailing list