diff options
author | dim <dim@FreeBSD.org> | 2014-11-24 09:08:18 +0000 |
---|---|---|
committer | dim <dim@FreeBSD.org> | 2014-11-24 09:08:18 +0000 |
commit | e27feadae0885aa074df58ebfda2e7a7f7a7d590 (patch) | |
tree | f5944309621cee4fe0976be6f9ac619b7ebfc4c2 /lib/DebugInfo/DWARFDebugRangeList.cpp | |
parent | 87ba4fbed530c9d0dff7505d121035f5ed09c9f3 (diff) | |
download | FreeBSD-src-e27feadae0885aa074df58ebfda2e7a7f7a7d590.zip FreeBSD-src-e27feadae0885aa074df58ebfda2e7a7f7a7d590.tar.gz |
Vendor import of llvm RELEASE_350/final tag r216957 (effectively, 3.5.0 release):
https://llvm.org/svn/llvm-project/llvm/tags/RELEASE_350/final@216957
Diffstat (limited to 'lib/DebugInfo/DWARFDebugRangeList.cpp')
-rw-r--r-- | lib/DebugInfo/DWARFDebugRangeList.cpp | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/lib/DebugInfo/DWARFDebugRangeList.cpp b/lib/DebugInfo/DWARFDebugRangeList.cpp index 1806bee..07b23b3 100644 --- a/lib/DebugInfo/DWARFDebugRangeList.cpp +++ b/lib/DebugInfo/DWARFDebugRangeList.cpp @@ -45,23 +45,25 @@ bool DWARFDebugRangeList::extract(DataExtractor data, uint32_t *offset_ptr) { } void DWARFDebugRangeList::dump(raw_ostream &OS) const { - for (int i = 0, n = Entries.size(); i != n; ++i) { + for (const RangeListEntry &RLE : Entries) { const char *format_str = (AddressSize == 4 ? "%08x %08" PRIx64 " %08" PRIx64 "\n" : "%08x %016" PRIx64 " %016" PRIx64 "\n"); - OS << format(format_str, Offset, Entries[i].StartAddress, - Entries[i].EndAddress); + OS << format(format_str, Offset, RLE.StartAddress, RLE.EndAddress); } OS << format("%08x <End of list>\n", Offset); } -bool DWARFDebugRangeList::containsAddress(uint64_t BaseAddress, - uint64_t Address) const { - for (int i = 0, n = Entries.size(); i != n; ++i) { - if (Entries[i].isBaseAddressSelectionEntry(AddressSize)) - BaseAddress = Entries[i].EndAddress; - else if (Entries[i].containsAddress(BaseAddress, Address)) - return true; +DWARFAddressRangesVector +DWARFDebugRangeList::getAbsoluteRanges(uint64_t BaseAddress) const { + DWARFAddressRangesVector Res; + for (const RangeListEntry &RLE : Entries) { + if (RLE.isBaseAddressSelectionEntry(AddressSize)) { + BaseAddress = RLE.EndAddress; + } else { + Res.push_back(std::make_pair(BaseAddress + RLE.StartAddress, + BaseAddress + RLE.EndAddress)); + } } - return false; + return Res; } |