diff options
| -rw-r--r-- | lld/COFF/Config.h | 1 | ||||
| -rw-r--r-- | lld/COFF/Driver.cpp | 1 | ||||
| -rw-r--r-- | lld/COFF/Options.td | 1 | ||||
| -rw-r--r-- | lld/COFF/Writer.cpp | 2 | ||||
| -rw-r--r-- | lld/test/COFF/sort-debug.test | 13 | ||||
| -rw-r--r-- | lld/test/COFF/symtab.test | 2 |
6 files changed, 19 insertions, 1 deletions
diff --git a/lld/COFF/Config.h b/lld/COFF/Config.h index 3ccccb61e7b..43dc75883e9 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<unsigned>(DebugType::None); std::vector<std::string> NatvisFiles; diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp index ecfa258bce7..b6019ffec95 100644 --- a/lld/COFF/Driver.cpp +++ b/lld/COFF/Driver.cpp @@ -1217,6 +1217,7 @@ void LinkerDriver::link(ArrayRef<const char *> 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 9051b0ba039..83aa890fe4c 100644 --- a/lld/COFF/Options.td +++ b/lld/COFF/Options.td @@ -139,6 +139,7 @@ def help_q : Flag<["/?", "-?"], "">, Alias<help>; // 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 a9950e4cc85..c6e17eea115 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<Defined>(B); diff --git a/lld/test/COFF/sort-debug.test b/lld/test/COFF/sort-debug.test index 3bad013a309..e11b8b48a7f 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 49302d74821..bedcd2f601a 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 |

