[C++11] Use ObjectFile::sections() in commandline llvm tools

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@203802 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Alexey Samsonov
2014-03-13 14:37:36 +00:00
parent b920dfe02b
commit 7a2da95e44
5 changed files with 111 additions and 114 deletions

View File

@@ -85,10 +85,10 @@ static size_t getNumLengthAsString(uint64_t num) {
return result.size();
}
/// @brief Print the size of each section in @p o.
/// @brief Print the size of each section in @p Obj.
///
/// The format used is determined by @c OutputFormat and @c Radix.
static void PrintObjectSectionSizes(ObjectFile *o) {
static void PrintObjectSectionSizes(ObjectFile *Obj) {
uint64_t total = 0;
std::string fmtbuf;
raw_string_ostream fmt(fmtbuf);
@@ -111,17 +111,18 @@ 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");
for (section_iterator i = o->section_begin(), e = o->section_end();
i != e; ++i) {
for (const SectionRef &Section : Obj->sections()) {
uint64_t size = 0;
if (error(i->getSize(size)))
if (error(Section.getSize(size)))
return;
total += size;
StringRef name;
uint64_t addr = 0;
if (error(i->getName(name))) return;
if (error(i->getAddress(addr))) return;
if (error(Section.getName(name)))
return;
if (error(Section.getAddress(addr)))
return;
max_name_len = std::max(max_name_len, name.size());
max_size_len = std::max(max_size_len, getNumLengthAsString(size));
max_addr_len = std::max(max_addr_len, getNumLengthAsString(addr));
@@ -150,20 +151,19 @@ static void PrintObjectSectionSizes(ObjectFile *o) {
<< "%#" << max_addr_len << radix_fmt << "\n";
// Print each section.
for (section_iterator i = o->section_begin(), e = o->section_end();
i != e; ++i) {
for (const SectionRef &Section : Obj->sections()) {
StringRef name;
uint64_t size = 0;
uint64_t addr = 0;
if (error(i->getName(name))) return;
if (error(i->getSize(size))) return;
if (error(i->getAddress(addr))) return;
if (error(Section.getName(name)))
return;
if (error(Section.getSize(size)))
return;
if (error(Section.getAddress(addr)))
return;
std::string namestr = name;
outs() << format(fmt.str().c_str(),
namestr.c_str(),
size,
addr);
outs() << format(fmt.str().c_str(), namestr.c_str(), size, addr);
}
// Print total.
@@ -181,16 +181,19 @@ static void PrintObjectSectionSizes(ObjectFile *o) {
uint64_t total_bss = 0;
// Make one pass over the section table to calculate sizes.
for (section_iterator i = o->section_begin(), e = o->section_end();
i != e; ++i) {
for (const SectionRef &Section : Obj->sections()) {
uint64_t size = 0;
bool isText = false;
bool isData = false;
bool isBSS = false;
if (error(i->getSize(size))) return;
if (error(i->isText(isText))) return;
if (error(i->isData(isData))) return;
if (error(i->isBSS(isBSS))) return;
if (error(Section.getSize(size)))
return;
if (error(Section.isText(isText)))
return;
if (error(Section.isData(isData)))
return;
if (error(Section.isBSS(isBSS)))
return;
if (isText)
total_text += size;
else if (isData)