[PATCH] D16816: Calculate correct section sizes for llvm-size

khemant@codeaurora.org via llvm-commits llvm-commits at lists.llvm.org
Tue Feb 2 12:51:54 PST 2016


khemant updated this revision to Diff 46688.

Repository:
  rL LLVM

http://reviews.llvm.org/D16816

Files:
  test/tools/llvm-size/Inputs/1.o
  test/tools/llvm-size/basic.test
  tools/llvm-size/llvm-size.cpp

Index: tools/llvm-size/llvm-size.cpp
===================================================================
--- tools/llvm-size/llvm-size.cpp
+++ tools/llvm-size/llvm-size.cpp
@@ -15,11 +15,13 @@
 
 #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"
 #include "llvm/Support/Casting.h"
 #include "llvm/Support/CommandLine.h"
+#include "llvm/Support/ELF.h"
 #include "llvm/Support/FileSystem.h"
 #include "llvm/Support/Format.h"
 #include "llvm/Support/ManagedStatic.h"
@@ -111,6 +113,20 @@
   return nullptr;
 }
 
+/// @brief Remove unneeded ELF sections from calculation
+static bool ConsiderForSize(ObjectFile *Obj, SectionRef Section) {
+  if (Obj->isELF()) {
+    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;
+}
 /// @brief 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
@@ -285,6 +301,8 @@
     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;
 
@@ -320,6 +338,8 @@
 
     // Print each section.
     for (const SectionRef &Section : Obj->sections()) {
+      if (!ConsiderForSize(Obj, Section))
+        continue;
       StringRef name;
       if (error(Section.getName(name)))
         return;
Index: test/tools/llvm-size/basic.test
===================================================================
--- test/tools/llvm-size/basic.test
+++ test/tools/llvm-size/basic.test
@@ -1,2 +1,28 @@
 RUN: llvm-size %t.blah 2>&1 | FileCheck --check-prefix=ENOENT %s
+#1.o source
+#int x ; int y ; int z;
+#
+#int main () {
+#  x = 1;
+#  y = 1;
+#  z = 1;
+#  return x + y + z;
+#}
+#Compilation: clang -c -O0
+RUN: llvm-size -A %p/Inputs/1.o | FileCheck --check-prefix="SYSV" %s
+RUN: llvm-size -B %p/Inputs/1.o | FileCheck --check-prefix="BSD" %s
+
 ENOENT: {{.*}}llvm-size{{(\.EXE|\.exe)?}}: {{.*}}.blah: {{[Nn]}}o such file or directory
+SYSV:    {{[ -\(\)_A-Za-z0-9.\\/:]+}}  :
+SYSV-NEXT:    section             size   addr
+SYSV-NEXT:    .text                 67      0
+SYSV-NEXT:    .data                  0      0
+SYSV-NEXT:    .bss                   0      0
+SYSV-NEXT:    .comment              46      0
+SYSV-NEXT:    .note.GNU-stack        0      0
+SYSV-NEXT:    .eh_frame             56      0
+SYSV-NEXT:    Total                169
+
+BSD:        text    data     bss     dec     hex filename
+BSD-NEXT:     67      56       0     123      7b {{[ -\(\)_A-Za-z0-9.\\/:]+}}
+


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D16816.46688.patch
Type: text/x-patch
Size: 2959 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160202/9fece502/attachment.bin>


More information about the llvm-commits mailing list