mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-12 13:30:51 +00:00
[DWARF parser] Simplify DWARFDebugAranges generation.
There is no need to keep the whole contents of .debug_aranges section in memory when we build address ranges table. Memory optimization that used to be in this code (precalculate the size of vector of ranges before filling it) is not really needed - later we will compact and resize this vector anyway. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@207457 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
686bd64d0c
commit
dc9a4f7391
@ -63,7 +63,6 @@ public:
|
||||
return desc_iterator_range(ArangeDescriptors.begin(),
|
||||
ArangeDescriptors.end());
|
||||
}
|
||||
uint32_t getNumDescriptors() const { return ArangeDescriptors.size(); }
|
||||
};
|
||||
|
||||
}
|
||||
|
@ -21,23 +21,11 @@ void DWARFDebugAranges::extract(DataExtractor DebugArangesData) {
|
||||
if (!DebugArangesData.isValidOffset(0))
|
||||
return;
|
||||
uint32_t Offset = 0;
|
||||
typedef std::vector<DWARFDebugArangeSet> RangeSetColl;
|
||||
RangeSetColl Sets;
|
||||
DWARFDebugArangeSet Set;
|
||||
uint32_t TotalRanges = 0;
|
||||
|
||||
while (Set.extract(DebugArangesData, &Offset)) {
|
||||
Sets.push_back(Set);
|
||||
TotalRanges += Set.getNumDescriptors();
|
||||
}
|
||||
if (TotalRanges == 0)
|
||||
return;
|
||||
|
||||
Aranges.reserve(TotalRanges);
|
||||
for (const auto &I : Sets) {
|
||||
uint32_t CUOffset = I.getCompileUnitDIEOffset();
|
||||
|
||||
for (const auto &Desc : I.descriptors()) {
|
||||
uint32_t CUOffset = Set.getCompileUnitDIEOffset();
|
||||
for (const auto &Desc : Set.descriptors()) {
|
||||
uint64_t LowPC = Desc.Address;
|
||||
uint64_t HighPC = Desc.getEndAddress();
|
||||
appendRange(CUOffset, LowPC, HighPC);
|
||||
@ -112,11 +100,6 @@ void DWARFDebugAranges::sortAndMinimize() {
|
||||
++minimal_size;
|
||||
}
|
||||
|
||||
// If the sizes are the same, then no consecutive aranges can be
|
||||
// combined, we are done.
|
||||
if (minimal_size == orig_arange_size)
|
||||
return;
|
||||
|
||||
// Else, make a new RangeColl that _only_ contains what we need.
|
||||
RangeColl minimal_aranges;
|
||||
minimal_aranges.resize(minimal_size);
|
||||
|
Loading…
Reference in New Issue
Block a user