[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
This commit is contained in:
gbreynoo 2020-07-01 11:57:30 +01:00
parent 93707fe309
commit 41ca82cbe8
2 changed files with 40 additions and 1 deletions

View File

@ -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: []

View File

@ -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;
}