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.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@200442 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Rafael Espindola
2014-01-30 02:49:50 +00:00
parent 6bf3966f7f
commit efdbec8b0a
25 changed files with 147 additions and 365 deletions

View File

@@ -111,12 +111,8 @@ static void PrintObjectSectionSizes(ObjectFile *o) {
std::size_t max_name_len = strlen("section");
std::size_t max_size_len = strlen("size");
std::size_t max_addr_len = strlen("addr");
error_code ec;
for (section_iterator i = o->begin_sections(),
e = o->end_sections(); i != e;
i.increment(ec)) {
if (error(ec))
return;
for (section_iterator i = o->begin_sections(), e = o->end_sections();
i != e; ++i) {
uint64_t size = 0;
if (error(i->getSize(size)))
return;
@@ -154,12 +150,8 @@ static void PrintObjectSectionSizes(ObjectFile *o) {
<< "%#" << max_addr_len << radix_fmt << "\n";
// Print each section.
for (section_iterator i = o->begin_sections(),
e = o->end_sections(); i != e;
i.increment(ec)) {
if (error(ec))
return;
for (section_iterator i = o->begin_sections(), e = o->end_sections();
i != e; ++i) {
StringRef name;
uint64_t size = 0;
uint64_t addr = 0;
@@ -189,13 +181,8 @@ static void PrintObjectSectionSizes(ObjectFile *o) {
uint64_t total_bss = 0;
// Make one pass over the section table to calculate sizes.
error_code ec;
for (section_iterator i = o->begin_sections(),
e = o->end_sections(); i != e;
i.increment(ec)) {
if (error(ec))
return;
for (section_iterator i = o->begin_sections(), e = o->end_sections();
i != e; ++i) {
uint64_t size = 0;
bool isText = false;
bool isData = false;