diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2016-02-09 21:39:49 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2016-02-09 21:39:49 +0000 |
commit | a0ff556aa10f868349e1a1d88e6fd8b147565186 (patch) | |
tree | bdc9b205d83cd36b3a0af5119f04c057c4748d7e /llvm/tools/llvm-size/llvm-size.cpp | |
parent | 81d0804d96904148b9f16a4ae4be07fd89b01c4a (diff) | |
download | bcm5719-llvm-a0ff556aa10f868349e1a1d88e6fd8b147565186.tar.gz bcm5719-llvm-a0ff556aa10f868349e1a1d88e6fd8b147565186.zip |
This brings back commit r259578.
But now it follows the llvm style, uses an early return and doesn't
include a file named 1.o.
llvm-svn: 260293
Diffstat (limited to 'llvm/tools/llvm-size/llvm-size.cpp')
-rw-r--r-- | llvm/tools/llvm-size/llvm-size.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/llvm/tools/llvm-size/llvm-size.cpp b/llvm/tools/llvm-size/llvm-size.cpp index 7b1b9c6f93a..aacbe9e25b9 100644 --- a/llvm/tools/llvm-size/llvm-size.cpp +++ b/llvm/tools/llvm-size/llvm-size.cpp @@ -15,6 +15,7 @@ #include "llvm/ADT/APInt.h" #include "llvm/Object/Archive.h" +#include "llvm/Object/ELFObjectFile.h" #include "llvm/Object/MachO.h" #include "llvm/Object/MachOUniversal.h" #include "llvm/Object/ObjectFile.h" @@ -111,6 +112,21 @@ static const char *getRadixFmt() { return nullptr; } +/// Remove unneeded ELF sections from calculation +static bool considerForSize(ObjectFile *Obj, SectionRef Section) { + if (!Obj->isELF()) + return true; + switch (static_cast<ELFSectionRef>(Section).getType()) { + case ELF::SHT_NULL: + case ELF::SHT_SYMTAB: + case ELF::SHT_STRTAB: + case ELF::SHT_REL: + case ELF::SHT_RELA: + return false; + } + return true; +} + /// Print the size of each Mach-O segment and section in @p MachO. /// /// This is when used when @c OutputFormat is darwin and produces the same @@ -287,6 +303,8 @@ static void printObjectSectionSizes(ObjectFile *Obj) { std::size_t max_size_len = strlen("size"); std::size_t max_addr_len = strlen("addr"); for (const SectionRef &Section : Obj->sections()) { + if (!considerForSize(Obj, Section)) + continue; uint64_t size = Section.getSize(); total += size; @@ -322,6 +340,8 @@ static void printObjectSectionSizes(ObjectFile *Obj) { // Print each section. for (const SectionRef &Section : Obj->sections()) { + if (!considerForSize(Obj, Section)) + continue; StringRef name; if (error(Section.getName(name))) return; |