forked from OSchip/llvm-project
[DWARF] NFC: Make string-offset handling more like address-table handling;
do the indirection and relocation all in the same method. llvm-svn: 306418
This commit is contained in:
parent
81cbb0c237
commit
d66ee0f9a7
|
@ -194,9 +194,7 @@ public:
|
|||
}
|
||||
|
||||
bool getAddrOffsetSectionItem(uint32_t Index, uint64_t &Result) const;
|
||||
// FIXME: Result should be uint64_t in DWARF64.
|
||||
bool getStringOffsetSectionItem(uint32_t Index, uint64_t &Result) const;
|
||||
uint64_t getStringOffsetSectionRelocation(uint32_t Index) const;
|
||||
|
||||
DataExtractor getDebugInfoExtractor() const {
|
||||
return DataExtractor(InfoSection.Data, isLittleEndian,
|
||||
|
|
|
@ -576,7 +576,6 @@ Optional<const char *> DWARFFormValue::getAsCString() const {
|
|||
uint64_t StrOffset;
|
||||
if (!U->getStringOffsetSectionItem(Offset, StrOffset))
|
||||
return None;
|
||||
StrOffset += U->getStringOffsetSectionRelocation(Offset);
|
||||
Offset = StrOffset;
|
||||
}
|
||||
if (const char *Str = U->getStringExtractor().getCStr(&Offset)) {
|
||||
|
|
|
@ -74,24 +74,16 @@ bool DWARFUnit::getAddrOffsetSectionItem(uint32_t Index,
|
|||
|
||||
bool DWARFUnit::getStringOffsetSectionItem(uint32_t Index,
|
||||
uint64_t &Result) const {
|
||||
unsigned ItemSize = getFormat() == DWARF64 ? 8 : 4;
|
||||
unsigned ItemSize = getDwarfOffsetByteSize();
|
||||
uint32_t Offset = StringOffsetSectionBase + Index * ItemSize;
|
||||
if (StringOffsetSection.Data.size() < Offset + ItemSize)
|
||||
return false;
|
||||
DataExtractor DA(StringOffsetSection.Data, isLittleEndian, 0);
|
||||
Result = ItemSize == 4 ? DA.getU32(&Offset) : DA.getU64(&Offset);
|
||||
Result = getRelocatedValue(DA, ItemSize, &Offset,
|
||||
&StringOffsetSection.Relocs);
|
||||
return true;
|
||||
}
|
||||
|
||||
uint64_t DWARFUnit::getStringOffsetSectionRelocation(uint32_t Index) const {
|
||||
unsigned ItemSize = getFormat() == DWARF64 ? 8 : 4;
|
||||
uint64_t ByteOffset = StringOffsetSectionBase + Index * ItemSize;
|
||||
RelocAddrMap::const_iterator AI = getStringOffsetsRelocMap().find(ByteOffset);
|
||||
if (AI != getStringOffsetsRelocMap().end())
|
||||
return AI->second.Value;
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool DWARFUnit::extractImpl(DataExtractor debug_info, uint32_t *offset_ptr) {
|
||||
Length = debug_info.getU32(offset_ptr);
|
||||
// FIXME: Support DWARF64.
|
||||
|
|
Loading…
Reference in New Issue