[LLD] [COFF] Use the local dwarf code instead of Symbolizer for resolving code locations. NFC.

As we now have code that parses the dwarf info for variable locations,
we can use that instead of relying on the higher level Symbolizer library,
reducing the previous two different dwarf codepaths into one.

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

git-svn-id: https://llvm.org/svn/llvm-project/lld/trunk@375391 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/COFF/CMakeLists.txt b/COFF/CMakeLists.txt
index a30df7c..7c5e8b7 100644
--- a/COFF/CMakeLists.txt
+++ b/COFF/CMakeLists.txt
@@ -38,7 +38,6 @@
   Object
   Option
   Support
-  Symbolize
   WindowsManifest
 
   LINK_LIBS
diff --git a/COFF/Config.h b/COFF/Config.h
index cd597dd..309e1fb 100644
--- a/COFF/Config.h
+++ b/COFF/Config.h
@@ -18,12 +18,6 @@
 #include <set>
 #include <string>
 
-namespace llvm {
-namespace symbolize {
-class LLVMSymbolizer;
-}
-} // namespace llvm
-
 namespace lld {
 namespace coff {
 
@@ -232,8 +226,6 @@
   bool swaprunNet = false;
   bool thinLTOEmitImportsFiles;
   bool thinLTOIndexOnly;
-
-  llvm::symbolize::LLVMSymbolizer *symbolizer = nullptr;
 };
 
 extern Configuration *config;
diff --git a/COFF/InputFiles.cpp b/COFF/InputFiles.cpp
index 4097cda..faec3ba 100644
--- a/COFF/InputFiles.cpp
+++ b/COFF/InputFiles.cpp
@@ -807,6 +807,19 @@
   return std::make_pair(saver.save(ret->first), ret->second);
 }
 
+// Used only for DWARF debug info, which is not common (except in MinGW
+// environments).
+Optional<DILineInfo> ObjFile::getDILineInfo(uint32_t offset,
+                                            uint32_t sectionIndex) {
+  if (!dwarf) {
+    dwarf = make<DWARFCache>(DWARFContext::create(*getCOFFObj()));
+    if (!dwarf)
+      return None;
+  }
+
+  return dwarf->getDILineInfo(offset, sectionIndex);
+}
+
 StringRef ltrim1(StringRef s, const char *chars) {
   if (!s.empty() && strchr(chars, s[0]))
     return s.substr(1);
diff --git a/COFF/InputFiles.h b/COFF/InputFiles.h
index 6624971..1004432 100644
--- a/COFF/InputFiles.h
+++ b/COFF/InputFiles.h
@@ -26,6 +26,7 @@
 #include <vector>
 
 namespace llvm {
+struct DILineInfo;
 namespace pdb {
 class DbiModuleDescriptorBuilder;
 }
@@ -206,6 +207,9 @@
   llvm::Optional<std::pair<StringRef, uint32_t>>
   getVariableLocation(StringRef var);
 
+  llvm::Optional<llvm::DILineInfo> getDILineInfo(uint32_t offset,
+                                                 uint32_t sectionIndex);
+
 private:
   const coff_section* getSection(uint32_t i);
   const coff_section *getSection(COFFSymbolRef sym) {
diff --git a/COFF/SymbolTable.cpp b/COFF/SymbolTable.cpp
index 183761f..869dfc7 100644
--- a/COFF/SymbolTable.cpp
+++ b/COFF/SymbolTable.cpp
@@ -110,13 +110,11 @@
 
 static Optional<std::pair<StringRef, uint32_t>>
 getFileLineDwarf(const SectionChunk *c, uint32_t addr) {
-  if (!config->symbolizer)
-    config->symbolizer = make<symbolize::LLVMSymbolizer>();
-  Expected<DILineInfo> expectedLineInfo = config->symbolizer->symbolizeCode(
-      *c->file->getCOFFObj(), {addr, c->getSectionNumber() - 1});
-  if (!expectedLineInfo)
+  Optional<DILineInfo> optionalLineInfo =
+      c->file->getDILineInfo(addr, c->getSectionNumber() - 1);
+  if (!optionalLineInfo)
     return None;
-  const DILineInfo &lineInfo = *expectedLineInfo;
+  const DILineInfo &lineInfo = *optionalLineInfo;
   if (lineInfo.FileName == DILineInfo::BadString)
     return None;
   return std::make_pair(saver.save(lineInfo.FileName), lineInfo.Line);