diff options
author | Alexey Samsonov <samsonov@google.com> | 2014-03-13 13:52:54 +0000 |
---|---|---|
committer | Alexey Samsonov <samsonov@google.com> | 2014-03-13 13:52:54 +0000 |
commit | 063eb3fa2de0b1ba93b253a57e57a5a4358a33a2 (patch) | |
tree | 1a2f1bb8fd84e6948feecf9e907c0cebfd3e6935 /llvm/lib/MC/MCObjectSymbolizer.cpp | |
parent | cbc68521b3fbb0a6d8ca3e2cc6bff2772145ba32 (diff) | |
download | bcm5719-llvm-063eb3fa2de0b1ba93b253a57e57a5a4358a33a2.tar.gz bcm5719-llvm-063eb3fa2de0b1ba93b253a57e57a5a4358a33a2.zip |
[C++11] Introduce ObjectFile::sections().
Summary:
This adds ObjectFile::section_iterator_range, that allows to write
range-based for-loops running over all sections of a given file.
Several files from lib/ are converted to the new interface. Similar fixes
should be applied to a variety of llvm-* tools.
Reviewers: rafael
Reviewed By: rafael
CC: llvm-commits
Differential Revision: http://llvm-reviews.chandlerc.com/D3069
llvm-svn: 203799
Diffstat (limited to 'llvm/lib/MC/MCObjectSymbolizer.cpp')
-rw-r--r-- | llvm/lib/MC/MCObjectSymbolizer.cpp | 41 |
1 files changed, 21 insertions, 20 deletions
diff --git a/llvm/lib/MC/MCObjectSymbolizer.cpp b/llvm/lib/MC/MCObjectSymbolizer.cpp index 8aafcf6ee7c..4548a7d4251 100644 --- a/llvm/lib/MC/MCObjectSymbolizer.cpp +++ b/llvm/lib/MC/MCObjectSymbolizer.cpp @@ -51,11 +51,11 @@ MCMachObjectSymbolizer::MCMachObjectSymbolizer( : MCObjectSymbolizer(Ctx, RelInfo, MOOF), MOOF(MOOF), StubsStart(0), StubsCount(0), StubSize(0), StubsIndSymIndex(0) { - for (section_iterator SI = MOOF->section_begin(), SE = MOOF->section_end(); - SI != SE; ++SI) { - StringRef Name; SI->getName(Name); + for (const SectionRef &Section : MOOF->sections()) { + StringRef Name; + Section.getName(Name); if (Name == "__stubs") { - SectionRef StubsSec = *SI; + SectionRef StubsSec = Section; if (MOOF->is64Bit()) { MachO::section_64 S = MOOF->getSection64(StubsSec.getRawDataRefImpl()); StubsIndSymIndex = S.reserved1; @@ -230,40 +230,41 @@ const RelocationRef *MCObjectSymbolizer::findRelocationAt(uint64_t Addr) { } void MCObjectSymbolizer::buildSectionList() { - for (section_iterator SI = Obj->section_begin(), SE = Obj->section_end(); - SI != SE; ++SI) { - bool RequiredForExec; SI->isRequiredForExecution(RequiredForExec); + for (const SectionRef &Section : Obj->sections()) { + bool RequiredForExec; + Section.isRequiredForExecution(RequiredForExec); if (RequiredForExec == false) continue; - uint64_t SAddr; SI->getAddress(SAddr); - uint64_t SSize; SI->getSize(SSize); - SortedSectionList::iterator It = std::lower_bound(SortedSections.begin(), - SortedSections.end(), - SAddr, - SectionStartsBefore); + uint64_t SAddr; + Section.getAddress(SAddr); + uint64_t SSize; + Section.getSize(SSize); + SortedSectionList::iterator It = + std::lower_bound(SortedSections.begin(), SortedSections.end(), SAddr, + SectionStartsBefore); if (It != SortedSections.end()) { uint64_t FoundSAddr; It->getAddress(FoundSAddr); if (FoundSAddr < SAddr + SSize) llvm_unreachable("Inserting overlapping sections"); } - SortedSections.insert(It, *SI); + SortedSections.insert(It, Section); } } void MCObjectSymbolizer::buildRelocationByAddrMap() { - for (section_iterator SI = Obj->section_begin(), SE = Obj->section_end(); - SI != SE; ++SI) { - section_iterator RelSecI = SI->getRelocatedSection(); + for (const SectionRef &Section : Obj->sections()) { + section_iterator RelSecI = Section.getRelocatedSection(); if (RelSecI == Obj->section_end()) continue; uint64_t StartAddr; RelSecI->getAddress(StartAddr); uint64_t Size; RelSecI->getSize(Size); - bool RequiredForExec; RelSecI->isRequiredForExecution(RequiredForExec); + bool RequiredForExec; + RelSecI->isRequiredForExecution(RequiredForExec); if (RequiredForExec == false || Size == 0) continue; - for (relocation_iterator RI = SI->relocation_begin(), - RE = SI->relocation_end(); + for (relocation_iterator RI = Section.relocation_begin(), + RE = Section.relocation_end(); RI != RE; ++RI) { // FIXME: libObject is inconsistent regarding error handling. The // overwhelming majority of methods always return object_error::success, |