mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-18 19:16:43 +00:00
[lld/COFF] Add /dwodir to enable DWARF fission with LTO
This patch added /dwodir to lld/COFF which is equivalent to lld/ELF option -plugin-opt=dwo_dir=. This option tells LTO backend to create dwo directory and files and all dwo files will be in it. Otherwise all dwarf sections will be embeded into image even if -gsplit-dwarf is specified when using LTO. Reviewed By: MaskRay Differential Revision: https://reviews.llvm.org/D154070
This commit is contained in:
parent
b43375bb81
commit
2a631a8fed
@ -203,6 +203,9 @@ struct Configuration {
|
||||
StringRef manifestUIAccess = "'false'";
|
||||
StringRef manifestFile;
|
||||
|
||||
// used for /dwodir
|
||||
StringRef dwoDir;
|
||||
|
||||
// Used for /aligncomm.
|
||||
std::map<std::string, int> alignComm;
|
||||
|
||||
|
@ -1910,6 +1910,9 @@ void LinkerDriver::linkerMain(ArrayRef<const char *> argsArr) {
|
||||
fatal("/manifestinput: requires /manifest:embed");
|
||||
}
|
||||
|
||||
// Handle /dwodir
|
||||
config->dwoDir = args.getLastArgValue(OPT_dwodir);
|
||||
|
||||
config->thinLTOEmitImportsFiles = args.hasArg(OPT_thinlto_emit_imports_files);
|
||||
config->thinLTOIndexOnly = args.hasArg(OPT_thinlto_index_only) ||
|
||||
args.hasArg(OPT_thinlto_index_only_arg);
|
||||
|
@ -84,6 +84,7 @@ lto::Config BitcodeCompiler::createConfig() {
|
||||
c.DisableVerify = true;
|
||||
#endif
|
||||
c.DiagHandler = diagnosticHandler;
|
||||
c.DwoDir = ctx.config.dwoDir.str();
|
||||
c.OptLevel = ctx.config.ltoo;
|
||||
c.CPU = getCPUStr();
|
||||
c.MAttrs = getMAttrs();
|
||||
|
@ -42,6 +42,8 @@ def color_diagnostics_eq: Joined<["--"], "color-diagnostics=">,
|
||||
def defaultlib : P<"defaultlib", "Add the library to the list of input files">;
|
||||
def delayload : P<"delayload", "Delay loaded DLL name">;
|
||||
def diasdkdir : P<"diasdkdir", "Set the location of the DIA SDK">;
|
||||
def dwodir : P<"dwodir",
|
||||
"Directory to store .dwo files when LTO and debug fission are used">;
|
||||
def entry : P<"entry", "Name of entry point symbol">;
|
||||
def errorlimit : P<"errorlimit",
|
||||
"Maximum number of errors to emit before stopping (0 = no limit)">;
|
||||
|
18
lld/test/COFF/lto-debug-fission.ll
Normal file
18
lld/test/COFF/lto-debug-fission.ll
Normal file
@ -0,0 +1,18 @@
|
||||
; REQUIRES: x86
|
||||
|
||||
; RUN: opt %s -o %t1.o
|
||||
; RUN: rm -rf %t.dir
|
||||
|
||||
; Test to ensure that -dwodir:$DIR creates .dwo files under $DIR
|
||||
; RUN: lld-link -dwodir:%t.dir -noentry -dll %t1.o -out:%t.dll
|
||||
; RUN: llvm-readobj -h %t.dir/0.dwo | FileCheck %s
|
||||
|
||||
; CHECK: Format: COFF-x86-64
|
||||
|
||||
target datalayout = "e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
|
||||
target triple = "x86_64-unknown-windows-msvc"
|
||||
|
||||
define void @f() {
|
||||
entry:
|
||||
ret void
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user