mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-01-10 01:55:08 +00:00
[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:
parent
908b780952
commit
65b1c497d2
@ -38,7 +38,6 @@ add_lld_library(lldCOFF
|
||||
Object
|
||||
Option
|
||||
Support
|
||||
Symbolize
|
||||
WindowsManifest
|
||||
|
||||
LINK_LIBS
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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) {
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user