[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

llvm-svn: 375391
This commit is contained in:
Martin Storsjo 2019-10-21 08:01:59 +00:00
parent 908b780952
commit 65b1c497d2
5 changed files with 21 additions and 15 deletions

View File

@ -38,7 +38,6 @@ add_lld_library(lldCOFF
Object
Option
Support
Symbolize
WindowsManifest
LINK_LIBS

View File

@ -18,12 +18,6 @@
#include <set>
#include <string>
namespace llvm {
namespace symbolize {
class LLVMSymbolizer;
}
} // namespace llvm
namespace lld {
namespace coff {
@ -232,8 +226,6 @@ struct Configuration {
bool swaprunNet = false;
bool thinLTOEmitImportsFiles;
bool thinLTOIndexOnly;
llvm::symbolize::LLVMSymbolizer *symbolizer = nullptr;
};
extern Configuration *config;

View File

@ -807,6 +807,19 @@ ObjFile::getVariableLocation(StringRef var) {
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);

View File

@ -26,6 +26,7 @@
#include <vector>
namespace llvm {
struct DILineInfo;
namespace pdb {
class DbiModuleDescriptorBuilder;
}
@ -206,6 +207,9 @@ public:
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) {

View File

@ -110,13 +110,11 @@ static std::vector<std::string> getSymbolLocations(BitcodeFile *file) {
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);