diff options
| author | Rafael Espindola <rafael.espindola@gmail.com> | 2014-01-30 02:49:50 +0000 |
|---|---|---|
| committer | Rafael Espindola <rafael.espindola@gmail.com> | 2014-01-30 02:49:50 +0000 |
| commit | 5e812afaeb3db56db706e81e448db46c08298abd (patch) | |
| tree | 86d091fea3f71879287f607d9f616e410866099c /llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp | |
| parent | 980f2dc4fc9a27fa950f6f9c6baf554aa7cef351 (diff) | |
| download | bcm5719-llvm-5e812afaeb3db56db706e81e448db46c08298abd.tar.gz bcm5719-llvm-5e812afaeb3db56db706e81e448db46c08298abd.zip | |
Simplify the handling of iterators in ObjectFile.
None of the object file formats reported error on iterator increment. In
retrospect, that is not too surprising: no object format stores symbols or
sections in a linked list or other structure that requires chasing pointers.
As a consequence, all error checking can be done on begin() and end().
This reduces the text segment of bin/llvm-readobj in my machine from 521233 to
518526 bytes.
llvm-svn: 200442
Diffstat (limited to 'llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp')
| -rw-r--r-- | llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp | 13 |
1 files changed, 4 insertions, 9 deletions
diff --git a/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp b/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp index 7f3a790d4b9..4dbd6794c61 100644 --- a/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp +++ b/llvm/lib/ExecutionEngine/RuntimeDyld/RuntimeDyldELF.cpp @@ -621,10 +621,8 @@ void RuntimeDyldELF::findOPDEntrySection(ObjectImage &Obj, RelocationValueRef &Rel) { // Get the ELF symbol value (st_value) to compare with Relocation offset in // .opd entries - - error_code err; - for (section_iterator si = Obj.begin_sections(), - se = Obj.end_sections(); si != se; si.increment(err)) { + for (section_iterator si = Obj.begin_sections(), se = Obj.end_sections(); + si != se; ++si) { section_iterator RelSecI = si->getRelocatedSection(); if (RelSecI == Obj.end_sections()) continue; @@ -636,14 +634,12 @@ void RuntimeDyldELF::findOPDEntrySection(ObjectImage &Obj, for (relocation_iterator i = si->begin_relocations(), e = si->end_relocations(); i != e;) { - check(err); - // The R_PPC64_ADDR64 relocation indicates the first field // of a .opd entry uint64_t TypeFunc; check(i->getType(TypeFunc)); if (TypeFunc != ELF::R_PPC64_ADDR64) { - i.increment(err); + ++i; continue; } @@ -653,10 +649,9 @@ void RuntimeDyldELF::findOPDEntrySection(ObjectImage &Obj, int64_t Addend; check(getELFRelocationAddend(*i, Addend)); - i = i.increment(err); + ++i; if (i == e) break; - check(err); // Just check if following relocation is a R_PPC64_TOC uint64_t TypeTOC; |

