[llvm] 41ca82c - [llvm-size] Output REL, RELA and STRTAB sections when allocatable

via llvm-commits llvm-commits at lists.llvm.org
Wed Jul 1 04:03:03 PDT 2020


Author: gbreynoo
Date: 2020-07-01T12:02:32+01:00
New Revision: 41ca82cbe815904173d094cb3a7789a705a73695

URL: https://github.com/llvm/llvm-project/commit/41ca82cbe815904173d094cb3a7789a705a73695
DIFF: https://github.com/llvm/llvm-project/commit/41ca82cbe815904173d094cb3a7789a705a73695.diff

LOG: [llvm-size] Output REL, RELA and STRTAB sections when allocatable

gnu size has a number of special cases regarding REL, RELA and STRTAB
sections being considered in size output. To avoid unnecessary
complexity this commit makes llvm size outputs these sections in cases
they have the SHF_ALLOC flag.

Differential Revision: https://reviews.llvm.org/D82479

Added: 
    llvm/test/tools/llvm-size/output-alloc.test

Modified: 
    llvm/tools/llvm-size/llvm-size.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/test/tools/llvm-size/output-alloc.test b/llvm/test/tools/llvm-size/output-alloc.test
new file mode 100644
index 000000000000..9882126bdd6d
--- /dev/null
+++ b/llvm/test/tools/llvm-size/output-alloc.test
@@ -0,0 +1,38 @@
+## gnu size has a number of special cases regarding REL, RELA and STRTAB sections being considered in size output. 
+## To avoid unnecessary complexity llvm size outputs these sections in cases they have the SHF_ALLOC flag.
+
+# RUN: yaml2obj %s -o %t1
+# RUN: llvm-size --format=sysv %t1 | FileCheck %s
+
+# CHECK:      section     size   addr
+# CHECK-NEXT: .rela.alloc
+# CHECK-NEXT: .rel.alloc
+# CHECK-NEXT: .strtab.alloc
+# CHECK-NEXT: Total
+# CHECK-EMPTY:
+
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  Type:    ET_REL
+  Machine: EM_X86_64
+Sections:
+  - Name:  .rela.alloc
+    Type:  SHT_RELA
+    Flags: [ SHF_ALLOC ]
+  - Name:  .rel.alloc
+    Type:  SHT_REL
+    Flags: [ SHF_ALLOC ]
+  - Name:  .strtab.alloc
+    Type:  SHT_STRTAB
+    Flags: [ SHF_ALLOC ]
+  - Name:  .rela
+    Type:  SHT_RELA
+    Flags: []
+  - Name:  .rel
+    Type:  SHT_REL
+    Flags: []
+  - Name:  .strtab
+    Type:  SHT_STRTAB
+    Flags: []

diff  --git a/llvm/tools/llvm-size/llvm-size.cpp b/llvm/tools/llvm-size/llvm-size.cpp
index b79622823fea..987270e98c48 100644
--- a/llvm/tools/llvm-size/llvm-size.cpp
+++ b/llvm/tools/llvm-size/llvm-size.cpp
@@ -187,10 +187,11 @@ static bool considerForSize(ObjectFile *Obj, SectionRef Section) {
   switch (static_cast<ELFSectionRef>(Section).getType()) {
   case ELF::SHT_NULL:
   case ELF::SHT_SYMTAB:
+    return false;
   case ELF::SHT_STRTAB:
   case ELF::SHT_REL:
   case ELF::SHT_RELA:
-    return false;
+    return static_cast<ELFSectionRef>(Section).getFlags() & ELF::SHF_ALLOC;
   }
   return true;
 }


        


More information about the llvm-commits mailing list