From 3a7905b2aac4931b1981193bf99ca915fe474139 Mon Sep 17 00:00:00 2001 From: Martin Storsjo Date: Fri, 29 Jun 2018 06:08:25 +0000 Subject: [PATCH] [COFF] Add an LLD specific option -debug:symbtab With this set, we retain the symbol table, but skip the actual debug information. This is meant to be used by the MinGW frontend. Differential Revision: https://reviews.llvm.org/D48745 llvm-svn: 335946 --- lld/COFF/Config.h | 1 + lld/COFF/Driver.cpp | 1 + lld/COFF/Options.td | 1 + lld/COFF/Writer.cpp | 2 +- lld/test/COFF/sort-debug.test | 13 +++++++++++++ lld/test/COFF/symtab.test | 2 ++ 6 files changed, 19 insertions(+), 1 deletion(-) diff --git a/lld/COFF/Config.h b/lld/COFF/Config.h index 3ccccb6..43dc758 100644 --- a/lld/COFF/Config.h +++ b/lld/COFF/Config.h @@ -98,6 +98,7 @@ struct Configuration { bool Debug = false; bool DebugDwarf = false; bool DebugGHashes = false; + bool DebugSymtab = false; bool ShowTiming = false; unsigned DebugTypes = static_cast(DebugType::None); std::vector NatvisFiles; diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp index ecfa258b..b6019ff 100644 --- a/lld/COFF/Driver.cpp +++ b/lld/COFF/Driver.cpp @@ -1217,6 +1217,7 @@ void LinkerDriver::link(ArrayRef ArgsArr) { !Config->DLL && Args.hasFlag(OPT_tsaware, OPT_tsaware_no, true); Config->DebugDwarf = Args.hasArg(OPT_debug_dwarf); Config->DebugGHashes = Args.hasArg(OPT_debug_ghash); + Config->DebugSymtab = Args.hasArg(OPT_debug_symtab); Config->MapFile = getMapFile(Args); diff --git a/lld/COFF/Options.td b/lld/COFF/Options.td index 9051b0b..83aa890f 100644 --- a/lld/COFF/Options.td +++ b/lld/COFF/Options.td @@ -139,6 +139,7 @@ def help_q : Flag<["/?", "-?"], "">, Alias; // LLD extensions def debug_ghash : F<"debug:ghash">; def debug_dwarf : F<"debug:dwarf">; +def debug_symtab : F<"debug:symtab">; def export_all_symbols : F<"export-all-symbols">; def kill_at : F<"kill-at">; def lldmingw : F<"lldmingw">; diff --git a/lld/COFF/Writer.cpp b/lld/COFF/Writer.cpp index a9950e4..c6e17ee 100644 --- a/lld/COFF/Writer.cpp +++ b/lld/COFF/Writer.cpp @@ -665,7 +665,7 @@ void Writer::createSymbolAndStringTable() { Sec->setStringTableOff(addEntryToStringTable(Sec->Name)); } - if (Config->DebugDwarf) { + if (Config->DebugDwarf || Config->DebugSymtab) { for (ObjFile *File : ObjFile::Instances) { for (Symbol *B : File->getSymbols()) { auto *D = dyn_cast_or_null(B); diff --git a/lld/test/COFF/sort-debug.test b/lld/test/COFF/sort-debug.test index 3bad013..e11b8b4 100644 --- a/lld/test/COFF/sort-debug.test +++ b/lld/test/COFF/sort-debug.test @@ -1,6 +1,12 @@ # RUN: yaml2obj < %s > %t.obj # RUN: lld-link /debug /out:%t.exe /entry:main %t.obj # RUN: llvm-readobj -sections %t.exe | FileCheck %s +# RUN: lld-link /debug:dwarf /out:%t.exe /entry:main %t.obj +# RUN: llvm-readobj -sections %t.exe | FileCheck %s +# RUN: lld-link /out:%t.exe /entry:main %t.obj +# RUN: llvm-readobj -sections %t.exe | FileCheck -check-prefix=NODEBUG %s +# RUN: lld-link /debug:symtab /out:%t.exe /entry:main %t.obj +# RUN: llvm-readobj -sections %t.exe | FileCheck -check-prefix=NODEBUG %s # CHECK: Name: .text # CHECK: Name: .debug_abbrev @@ -10,6 +16,13 @@ # CHECK: Name: .debug_pubtypes # CHECK: Name: .reloc +# NODEBUG: Name: .text +# NODEBUG-NOT: Name: .debug_abbrev +# NODEBUG-NOT: Name: .debug_info +# NODEBUG-NOT: Name: .debug_line +# NODEBUG-NOT: Name: .debug_pubnames +# NODEBUG-NOT: Name: .debug_pubtypes +# NODEBUG: Name: .reloc --- !COFF header: diff --git a/lld/test/COFF/symtab.test b/lld/test/COFF/symtab.test index 49302d7..bedcd2f 100644 --- a/lld/test/COFF/symtab.test +++ b/lld/test/COFF/symtab.test @@ -3,6 +3,8 @@ # RUN: llvm-readobj -symbols %t.exe | FileCheck %s # RUN: lld-link /debug:dwarf /opt:noref /out:%t.exe /entry:main %t.obj %p/Inputs/std64.lib # RUN: llvm-readobj -symbols %t.exe | FileCheck %s +# RUN: lld-link /debug:symtab /opt:noref /out:%t.exe /entry:main %t.obj %p/Inputs/std64.lib +# RUN: llvm-readobj -symbols %t.exe | FileCheck %s # RUN: lld-link /debug /out:%t.exe /entry:main %t.obj %p/Inputs/std64.lib # RUN: llvm-readobj -symbols %t.exe | FileCheck -check-prefix=NO %s -- 2.7.4