[llvm-branch-commits] [llvm] c74b427 - [llvm-symbolizer] Switch to using native symbolizer by default on Windows

Amy Huang via llvm-branch-commits llvm-branch-commits at lists.llvm.org
Mon Nov 23 16:01:18 PST 2020


Author: Amy Huang
Date: 2020-11-23T15:57:08-08:00
New Revision: c74b427cb2a90309ee0c29df21ad1ca26390263c

URL: https://github.com/llvm/llvm-project/commit/c74b427cb2a90309ee0c29df21ad1ca26390263c
DIFF: https://github.com/llvm/llvm-project/commit/c74b427cb2a90309ee0c29df21ad1ca26390263c.diff

LOG: [llvm-symbolizer] Switch to using native symbolizer by default on Windows

llvm-symbolizer used to use the DIA SDK for symbolization on
Windows; this patch switches to using native symbolization, which was
implemented recently.

Users can still make the symbolizer use DIA by adding the `-dia` flag
in the LLVM_SYMBOLIZER_OPTS environment variable.

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

Added: 
    

Modified: 
    lld/test/COFF/symbolizer-inline.s
    llvm/docs/CommandGuide/llvm-symbolizer.rst
    llvm/include/llvm/DebugInfo/Symbolize/Symbolize.h
    llvm/lib/DebugInfo/Symbolize/Symbolize.cpp
    llvm/test/tools/llvm-symbolizer/pdb/pdb-columns.test
    llvm/test/tools/llvm-symbolizer/pdb/pdb.test
    llvm/tools/llvm-symbolizer/Opts.td
    llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp

Removed: 
    


################################################################################
diff  --git a/lld/test/COFF/symbolizer-inline.s b/lld/test/COFF/symbolizer-inline.s
index c0db693f784c..9a032f999866 100644
--- a/lld/test/COFF/symbolizer-inline.s
+++ b/lld/test/COFF/symbolizer-inline.s
@@ -1,7 +1,7 @@
 # REQUIRES: x86
 # RUN: llvm-mc -filetype=obj %s -o %t.obj -triple x86_64-windows-msvc
 # RUN: lld-link -entry:main -nodefaultlib %t.obj -out:%t.exe -pdb:%t.pdb -debug
-# RUN: llvm-symbolizer --obj=%t.exe --use-native-pdb-reader --relative-address \
+# RUN: llvm-symbolizer --obj=%t.exe --relative-address \
 # RUN:   0x1014 0x1018 0x101c 0x1023 0x1024 | FileCheck %s
 
 # Compiled from this cpp code, with modifications to add extra inline line and 

diff  --git a/llvm/docs/CommandGuide/llvm-symbolizer.rst b/llvm/docs/CommandGuide/llvm-symbolizer.rst
index c5d094f9552d..f2a8d8ef6801 100644
--- a/llvm/docs/CommandGuide/llvm-symbolizer.rst
+++ b/llvm/docs/CommandGuide/llvm-symbolizer.rst
@@ -354,6 +354,14 @@ OPTIONS
 
   Read command-line options from response file `<FILE>`.
 
+WINDOWS/PDB SPECIFIC OPTIONS
+-----------------------------
+
+.. option:: --dia
+
+  Use the Windows DIA SDK for symbolization. If the DIA SDK is not found,
+  llvm-symbolizer will fall back to the native implementation.
+
 MACH-O SPECIFIC OPTIONS
 -----------------------
 

diff  --git a/llvm/include/llvm/DebugInfo/Symbolize/Symbolize.h b/llvm/include/llvm/DebugInfo/Symbolize/Symbolize.h
index 085e4bb4ccb8..1c8fa11660af 100644
--- a/llvm/include/llvm/DebugInfo/Symbolize/Symbolize.h
+++ b/llvm/include/llvm/DebugInfo/Symbolize/Symbolize.h
@@ -43,7 +43,7 @@ class LLVMSymbolizer {
     bool Demangle = true;
     bool RelativeAddresses = false;
     bool UntagAddresses = false;
-    bool UseNativePDBReader = false;
+    bool UseDIA = false;
     std::string DefaultArch;
     std::vector<std::string> DsymHints;
     std::string FallbackDebugPath;

diff  --git a/llvm/lib/DebugInfo/Symbolize/Symbolize.cpp b/llvm/lib/DebugInfo/Symbolize/Symbolize.cpp
index 383e2c0d3054..3eb84a141b81 100644
--- a/llvm/lib/DebugInfo/Symbolize/Symbolize.cpp
+++ b/llvm/lib/DebugInfo/Symbolize/Symbolize.cpp
@@ -557,11 +557,8 @@ LLVMSymbolizer::getOrCreateModuleInfo(const std::string &ModuleName) {
       using namespace pdb;
       std::unique_ptr<IPDBSession> Session;
 
-      PDB_ReaderType ReaderType = PDB_ReaderType::Native;
-#if LLVM_ENABLE_DIA_SDK
-      if (!Opts.UseNativePDBReader)
-        ReaderType = PDB_ReaderType::DIA;
-#endif
+      PDB_ReaderType ReaderType =
+          Opts.UseDIA ? PDB_ReaderType::DIA : PDB_ReaderType::Native;
       if (auto Err = loadDataForEXE(ReaderType, Objects.first->getFileName(),
                                     Session)) {
         Modules.emplace(ModuleName, std::unique_ptr<SymbolizableModule>());

diff  --git a/llvm/test/tools/llvm-symbolizer/pdb/pdb-columns.test b/llvm/test/tools/llvm-symbolizer/pdb/pdb-columns.test
index 425d58d4d46f..a564847ef94e 100644
--- a/llvm/test/tools/llvm-symbolizer/pdb/pdb-columns.test
+++ b/llvm/test/tools/llvm-symbolizer/pdb/pdb-columns.test
@@ -8,8 +8,6 @@ RUN: echo 0x140006C40 >> %t.input
 RUN: echo 0x140006C70 >> %t.input
 RUN:    llvm-symbolizer -obj="%p/Inputs/test-columns.exe" < %t.input \
 RUN:    | FileCheck %s
-RUN:    llvm-symbolizer -obj="%p/Inputs/test-columns.exe" -use-native-pdb-reader < %t.input \
-RUN:    | FileCheck %s
 
 This tests that the symbolizer outputs column info when it is present in the pdb.
 

diff  --git a/llvm/test/tools/llvm-symbolizer/pdb/pdb.test b/llvm/test/tools/llvm-symbolizer/pdb/pdb.test
index d9e42416ad56..46a1ae9814e6 100644
--- a/llvm/test/tools/llvm-symbolizer/pdb/pdb.test
+++ b/llvm/test/tools/llvm-symbolizer/pdb/pdb.test
@@ -6,17 +6,18 @@ RUN: echo 0x4013D0 >> %t.input
 RUN: echo 0x4013E0 >> %t.input
 RUN: echo 0x4013F0 >> %t.input
 RUN: echo 0x401420 >> %t.input
-RUN: llvm-symbolizer -obj="%p/Inputs/test.exe" < %t.input \
+RUN: llvm-symbolizer --obj="%p/Inputs/test.exe" < %t.input \
 RUN:    | FileCheck %s
 RUN: llvm-symbolizer --obj="%p/Inputs/test.exe" --no-demangle < %t.input \
 RUN:    | FileCheck %s --check-prefix=CHECK-NO-DEMANGLE
 
-Test with native pdb reader.
-RUN: llvm-symbolizer -use-native-pdb-reader -obj="%p/Inputs/test.exe" < %t.input \
+; Check that -dia works
+RUN: llvm-symbolizer --dia --obj="%p/Inputs/test.exe" < %t.input \
 RUN:    | FileCheck %s
-RUN: llvm-symbolizer --use-native-pdb-reader --obj="%p/Inputs/test.exe" --no-demangle < %t.input \
+RUN: llvm-symbolizer --dia --obj="%p/Inputs/test.exe" --no-demangle < %t.input \
 RUN:    | FileCheck %s --check-prefix=CHECK-NO-DEMANGLE
 
+
 Subtract ImageBase from all the offsets and run the test again with
 --relative-address.
 
@@ -24,10 +25,6 @@ RUN: %python -c 'import sys;print("\n".join([hex(int(x, 16) - 0x400000) for x in
 RUN:    | llvm-symbolizer --obj="%p/Inputs/test.exe" --no-demangle --relative-address \
 RUN:    | FileCheck %s --check-prefix=CHECK-NO-DEMANGLE
 
-RUN: %python -c 'import sys;print("\n".join([hex(int(x, 16) - 0x400000) for x in sys.stdin]))' < %t.input \
-RUN:    | llvm-symbolizer --use-native-pdb-reader --obj="%p/Inputs/test.exe" --no-demangle --relative-address \
-RUN:    | FileCheck %s --check-prefix=CHECK-NO-DEMANGLE
-
 CHECK: foo(void)
 CHECK-NEXT: test.cpp:10
 CHECK: {{^private_symbol$}}

diff  --git a/llvm/tools/llvm-symbolizer/Opts.td b/llvm/tools/llvm-symbolizer/Opts.td
index e8def4ff9a6a..ac23639f130e 100644
--- a/llvm/tools/llvm-symbolizer/Opts.td
+++ b/llvm/tools/llvm-symbolizer/Opts.td
@@ -41,7 +41,7 @@ defm print_source_context_lines : Eq<"print-source-context-lines", "Print N line
 def relative_address : F<"relative-address", "Interpret addresses as addresses relative to the image base">;
 def relativenames : F<"relativenames", "Strip the compilation directory from paths">;
 defm untag_addresses : B<"untag-addresses", "", "Remove memory tags from addresses before symbolization">;
-def use_native_pdb_reader : F<"use-native-pdb-reader", "Use native PDB functionality">;
+def use_dia: F<"dia", "Use the DIA library to access symbols (Windows only)">;
 def verbose : F<"verbose", "Print verbose line info">;
 def version : F<"version", "Display the version">;
 

diff  --git a/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp b/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp
index f57922b2c506..875432bd6705 100644
--- a/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp
+++ b/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp
@@ -288,7 +288,13 @@ int main(int argc, char **argv) {
   Opts.RelativeAddresses = Args.hasArg(OPT_relative_address);
   Opts.UntagAddresses =
       Args.hasFlag(OPT_untag_addresses, OPT_no_untag_addresses, !IsAddr2Line);
-  Opts.UseNativePDBReader = Args.hasArg(OPT_use_native_pdb_reader);
+  Opts.UseDIA = Args.hasArg(OPT_use_dia);
+#if !defined(LLVM_ENABLE_DIA_SDK)
+  if (Opts.UseDIA) {
+    WithColor::warning() << "DIA not available; using native PDB reader\n";
+    Opts.UseDIA = false;
+  }
+#endif
   Opts.UseSymbolTable = true;
 
   for (const opt::Arg *A : Args.filtered(OPT_dsym_hint_EQ)) {


        


More information about the llvm-branch-commits mailing list