mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-03-07 11:59:09 +00:00
DebugInfo: Accurately propagate the section used by a relocation when accessing ranges defined by low/high_pc
This is difficult/not possible to test in LLVM, but is visible as a crash in LLD when parsing DWARF to generate gdb-index. This function is called by llvm-dwarfdump when parsing high_pc for non-verbose output (to print the actual high_pc rather than the low_pc relative value), but in that case llvm-dwarfdump doesn't print section names (if it did, it would hit this problem). We could add some other features to llvm-dwarfdump to expose this, but nothing really springs to my mind. I will add a test to lld, though. llvm-svn: 350010
This commit is contained in:
parent
9aa515f31f
commit
3388b4510f
@ -61,7 +61,6 @@ public:
|
||||
|
||||
dwarf::Form getForm() const { return Form; }
|
||||
uint64_t getRawUValue() const { return Value.uval; }
|
||||
uint64_t getSectionIndex() const { return Value.SectionIndex; }
|
||||
void setForm(dwarf::Form F) { Form = F; }
|
||||
void setUValue(uint64_t V) { Value.uval = V; }
|
||||
void setSValue(int64_t V) { Value.sval = V; }
|
||||
|
@ -466,13 +466,13 @@ Optional<uint64_t> DWARFDie::getHighPC(uint64_t LowPC) const {
|
||||
bool DWARFDie::getLowAndHighPC(uint64_t &LowPC, uint64_t &HighPC,
|
||||
uint64_t &SectionIndex) const {
|
||||
auto F = find(DW_AT_low_pc);
|
||||
auto LowPcAddr = toAddress(F);
|
||||
auto LowPcAddr = toSectionedAddress(F);
|
||||
if (!LowPcAddr)
|
||||
return false;
|
||||
if (auto HighPcAddr = getHighPC(*LowPcAddr)) {
|
||||
LowPC = *LowPcAddr;
|
||||
if (auto HighPcAddr = getHighPC(LowPcAddr->Address)) {
|
||||
LowPC = LowPcAddr->Address;
|
||||
HighPC = *HighPcAddr;
|
||||
SectionIndex = F->getSectionIndex();
|
||||
SectionIndex = LowPcAddr->SectionIndex;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
Loading…
x
Reference in New Issue
Block a user