From b02a4895087c693617f5fb683e7bc86acff71039 Mon Sep 17 00:00:00 2001 From: gbreynoo Date: Wed, 1 Jul 2020 11:57:30 +0100 Subject: [PATCH] [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 --- test/tools/llvm-size/output-alloc.test | 38 ++++++++++++++++++++++++++ tools/llvm-size/llvm-size.cpp | 3 +- 2 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 test/tools/llvm-size/output-alloc.test diff --git a/test/tools/llvm-size/output-alloc.test b/test/tools/llvm-size/output-alloc.test new file mode 100644 index 00000000000..9882126bdd6 --- /dev/null +++ b/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/tools/llvm-size/llvm-size.cpp b/tools/llvm-size/llvm-size.cpp index b79622823fe..987270e98c4 100644 --- a/tools/llvm-size/llvm-size.cpp +++ b/tools/llvm-size/llvm-size.cpp @@ -187,10 +187,11 @@ static bool considerForSize(ObjectFile *Obj, SectionRef Section) { switch (static_cast(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(Section).getFlags() & ELF::SHF_ALLOC; } return true; }