From cf6037b5619037be993ee9d5850737f25cdd82c1 Mon Sep 17 00:00:00 2001 From: Georgii Rymar Date: Wed, 29 Jan 2020 17:10:07 +0300 Subject: [PATCH] [llvm-readobj][test] - Cleanup testing of the --sections command line option. We have the `ELF\sections.test` to test --sections. `ELF\sections.test` uses precompiled objects, it has a bug (does not test -s alias properly). Also, we test machine specific section types in `ELF\machine-specific-section-types.test`, so we probably do not need to test `--sections` for a MIPS object in `ELF\sections.test`. I think it is enough to test ELF32 and ELF64 (we do not test ELF64 in this test). `Object/readobj-shared-object.test` also tests how llvm-readobj handles `--sections`. It is location is wrong, it is not complete, it uses precompiled binaries and it duplicates the `ELF\sections.test` partially (it tests both ELF32 and ELF64). We have `ELF\readelf-s-alias.test` that tests the `-s` alias for `--sections` in llvm-readobj and `-s` as an alias for `--symbols` in llvm-readelf. There is no need to have a separate test for such things. The test for the `-s` alias for `--sections` can be included into the `ELF\sections.test`. And the test for `-s` for llvm-readelf is already included into `ELF\symbols.test`. So, this patch: 1) Removes `Object/readobj-shared-object.test`. 2) Removes `ELF\readelf-s-alias.test` 3) Rewrites the `ELF\sections.test`. 4) Removes ELF/Inputs/trivial.obj.elf-mipsel. Differential revision: https://reviews.llvm.org/D73686 --- llvm/test/Object/readobj-shared-object.test | 109 -------------- .../ELF/Inputs/trivial.obj.elf-mipsel | Bin 629 -> 0 bytes .../llvm-readobj/ELF/readelf-s-alias.test | 49 ------- .../test/tools/llvm-readobj/ELF/sections.test | 138 ++++++++++++------ 4 files changed, 92 insertions(+), 204 deletions(-) delete mode 100644 llvm/test/Object/readobj-shared-object.test delete mode 100644 llvm/test/tools/llvm-readobj/ELF/Inputs/trivial.obj.elf-mipsel delete mode 100644 llvm/test/tools/llvm-readobj/ELF/readelf-s-alias.test diff --git a/llvm/test/Object/readobj-shared-object.test b/llvm/test/Object/readobj-shared-object.test deleted file mode 100644 index 64f916987069..000000000000 --- a/llvm/test/Object/readobj-shared-object.test +++ /dev/null @@ -1,109 +0,0 @@ -# RUN: llvm-readobj --sections \ -# RUN: %p/Inputs/shared-object-test.elf-i386 | FileCheck %s - -# RUN: llvm-readobj --sections \ -# RUN: %p/Inputs/shared-object-test.elf-x86-64 | FileCheck %s - -# CHECK: Sections [ -# CHECK: Section { -# CHECK: Name: (0) -# CHECK: Type: SHT_NULL -# CHECK: Flags [ (0x0) -# CHECK: ] -# CHECK: } -# CHECK: Section { -# CHECK: Name: .hash -# CHECK: Type: SHT_HASH -# CHECK: Flags [ (0x2) -# CHECK: SHF_ALLOC -# CHECK: ] -# CHECK: } -# CHECK: Section { -# CHECK: Name: .dynsym -# CHECK: Type: SHT_DYNSYM -# CHECK: Flags [ (0x2) -# CHECK: SHF_ALLOC -# CHECK: ] -# CHECK: } -# CHECK: Section { -# CHECK: Name: .dynstr -# CHECK: Type: SHT_STRTAB -# CHECK: Flags [ (0x2) -# CHECK: SHF_ALLOC -# CHECK: ] -# CHECK: } -# CHECK: Section { -# CHECK: Name: .text -# CHECK: Type: SHT_PROGBITS -# CHECK: Flags [ (0x6) -# CHECK: SHF_ALLOC -# CHECK: SHF_EXECINSTR -# CHECK: ] -# CHECK: } -# CHECK: Section { -# CHECK: Name: .eh_frame -# CHECK: Type: SHT_PROGBITS -# CHECK: Flags [ (0x2) -# CHECK: SHF_ALLOC -# CHECK: ] -# CHECK: } -# CHECK: Section { -# CHECK: Name: .tdata -# CHECK: Type: SHT_PROGBITS -# CHECK: Flags [ (0x403) -# CHECK: SHF_ALLOC -# CHECK: SHF_TLS -# CHECK: SHF_WRITE -# CHECK: ] -# CHECK: } -# CHECK: Section { -# CHECK: Name: .dynamic -# CHECK: Type: SHT_DYNAMIC -# CHECK: Flags [ (0x3) -# CHECK: SHF_ALLOC -# CHECK: SHF_WRITE -# CHECK: ] -# CHECK: } -# CHECK: Section { -# CHECK: Name: .got.plt -# CHECK: Type: SHT_PROGBITS -# CHECK: Flags [ (0x3) -# CHECK: SHF_ALLOC -# CHECK: SHF_WRITE -# CHECK: ] -# CHECK: } -# CHECK: Section { -# CHECK: Name: .data -# CHECK: Type: SHT_PROGBITS -# CHECK: Flags [ (0x3) -# CHECK: SHF_ALLOC -# CHECK: SHF_WRITE -# CHECK: ] -# CHECK: } -# CHECK: Section { -# CHECK: Name: .bss -# CHECK: Type: SHT_NOBITS -# CHECK: Flags [ (0x3) -# CHECK: SHF_ALLOC -# CHECK: SHF_WRITE -# CHECK: ] -# CHECK: } -# CHECK: Section { -# CHECK: Name: .shstrtab -# CHECK: Type: SHT_STRTAB -# CHECK: Flags [ (0x0) -# CHECK: ] -# CHECK: } -# CHECK: Section { -# CHECK: Name: .symtab -# CHECK: Type: SHT_SYMTAB -# CHECK: Flags [ (0x0) -# CHECK: ] -# CHECK: } -# CHECK: Section { -# CHECK: Name: .strtab -# CHECK: Type: SHT_STRTAB -# CHECK: Flags [ (0x0) -# CHECK: ] -# CHECK: } -# CHECK: ] diff --git a/llvm/test/tools/llvm-readobj/ELF/Inputs/trivial.obj.elf-mipsel b/llvm/test/tools/llvm-readobj/ELF/Inputs/trivial.obj.elf-mipsel deleted file mode 100644 index c523908605cf866ff6f1f63ff6b904dbd3b86e19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 629 zcmah_y9&ZU5Zp69!NS5qu(7ZZi>t)aN(Dh7;177gr~zLjS7_xA`H{{hSxkb#g}t4* z8)okAwOB8eQVyl1s7Xo)=9_Vc+)2DQq88O-RK5&gm$OKu+WHSm+KVF6o0YrO#tRN- za|8|jV{kp(NJpp0hSqpMGM|^2?~OI(k%be!Keya8x%*dCP2nun$>Ym(4d|Naf4V+2 z$h=oDx!A84qhyhPZG(<8I=7(XEUqD1GMS&ya|UUN-xORj`KSxB!(<=+1AcD@t?wUO<*p+owzwvBl-ZKs2-I7 diff --git a/llvm/test/tools/llvm-readobj/ELF/readelf-s-alias.test b/llvm/test/tools/llvm-readobj/ELF/readelf-s-alias.test deleted file mode 100644 index b50d0e2442a0..000000000000 --- a/llvm/test/tools/llvm-readobj/ELF/readelf-s-alias.test +++ /dev/null @@ -1,49 +0,0 @@ -# In llvm-readobj, -s is an alias for --sections. -RUN: llvm-readobj -S %p/Inputs/trivial.obj.elf-i386 \ -RUN: | FileCheck %s -check-prefix SEC -RUN: llvm-readobj --sections %p/Inputs/trivial.obj.elf-i386 \ -RUN: | FileCheck %s -check-prefix SEC - -# In llvm-readelf, -s is an alias for --symbols. -RUN: llvm-readelf -s %p/Inputs/trivial.obj.elf-i386 \ -RUN: | FileCheck %s -check-prefix SYM -RUN: llvm-readelf --symbols %p/Inputs/trivial.obj.elf-i386 \ -RUN: | FileCheck %s -check-prefix SYM - -SEC: Sections [ -SEC-NEXT: Section { -SEC-NEXT: Index: 0 -SEC-NEXT: Name: (0) -SEC-NEXT: Type: SHT_NULL (0x0) -SEC-NEXT: Flags [ (0x0) -SEC-NEXT: ] -SEC-NEXT: Address: 0x0 -SEC-NEXT: Offset: 0x0 -SEC-NEXT: Size: 0 -SEC-NEXT: Link: 0 -SEC-NEXT: Info: 0 -SEC-NEXT: AddressAlignment: 0 -SEC-NEXT: EntrySize: 0 -SEC-NEXT: } -SEC-NEXT: Section { -SEC-NEXT: Index: 1 -SEC-NEXT: Name: .text (5) -SEC-NEXT: Type: SHT_PROGBITS (0x1) -SEC-NEXT: Flags [ (0x6) -SEC-NEXT: SHF_ALLOC (0x2) -SEC-NEXT: SHF_EXECINSTR (0x4) -SEC-NEXT: ] -SEC-NEXT: Address: 0x0 -SEC-NEXT: Offset: 0x40 -SEC-NEXT: Size: 42 -SEC-NEXT: Link: 0 -SEC-NEXT: Info: 0 -SEC-NEXT: AddressAlignment: 16 -SEC-NEXT: EntrySize: 0 -SEC-NEXT: } - -SYM: Symbol table '.symtab' contains {{.*}} entries: -SYM-NEXT: Num: Value Size Type Bind Vis Ndx Name -SYM-NEXT: 0: {{.*}} NOTYPE {{.*}} UND -SYM-NEXT: 1: {{.*}} FILE {{.*}} trivial.ll -SYM-NEXT: 2: {{.*}} OBJECT {{.*}} .L.str diff --git a/llvm/test/tools/llvm-readobj/ELF/sections.test b/llvm/test/tools/llvm-readobj/ELF/sections.test index 9eecd18545bc..d2865c041798 100644 --- a/llvm/test/tools/llvm-readobj/ELF/sections.test +++ b/llvm/test/tools/llvm-readobj/ELF/sections.test @@ -1,16 +1,27 @@ -## Check how we print sections. +## Check how llvm-readobj prints sections with --sections. +## We test the --sections flag for llvm-readelf in the gnu-sections.test. -# RUN: llvm-readobj --sections %p/Inputs/trivial.obj.elf-i386 \ -# RUN: | FileCheck %s --check-prefix ELF -# RUN: llvm-readobj --sections %p/Inputs/trivial.obj.elf-mipsel \ -# RUN: | FileCheck %s --check-prefix ELF-MIPSEL +# RUN: yaml2obj --docnum=1 %s -o %t64 +# RUN: llvm-readobj --sections %t64 | FileCheck %s --check-prefixes=ELF,ELF64 +# RUN: yaml2obj --docnum=2 %s -o %t32 +# RUN: llvm-readobj --sections %t32 | FileCheck %s --check-prefixes=ELF,ELF32 ## Check flag aliases produce identical output. -# RUN: llvm-readobj --sections %p/Inputs/trivial.obj.elf-i386 > %t.sections -# RUN: llvm-readobj -S %p/Inputs/trivial.obj.elf-i386 > %t.uppers -# RUN: cmp %t.sections %t.uppers -# RUN: llvm-readobj -S %p/Inputs/trivial.obj.elf-i386 > %t.lowers -# RUN: cmp %t.sections %t.lowers +# RUN: llvm-readobj --sections %t64 > %t64.llvm.sections +# RUN: llvm-readobj -S %t64 > %t64.llvm.upper.s +# RUN: cmp %t64.llvm.sections %t64.llvm.upper.s +# RUN: llvm-readobj -s %t64 > %t64.llvm.lower.s +# RUN: cmp %t64.llvm.sections %t64.llvm.lower.s +# RUN: llvm-readobj --section-headers %t64 > %t64.llvm.section-headers +# RUN: cmp %t64.llvm.sections %t64.llvm.section-headers + +# RUN: llvm-readobj --sections %t32 > %t32.llvm.sections +# RUN: llvm-readobj -S %t32 > %t32.llvm.upper.s +# RUN: cmp %t32.llvm.sections %t32.llvm.upper.s +# RUN: llvm-readobj -s %t32 > %t32.llvm.lower.s +# RUN: cmp %t32.llvm.sections %t32.llvm.lower.s +# RUN: llvm-readobj --section-headers %t32 > %t32.llvm.section-headers +# RUN: cmp %t32.llvm.sections %t32.llvm.section-headers # ELF: Sections [ # ELF-NEXT: Section { @@ -29,48 +40,83 @@ # ELF-NEXT: } # ELF-NEXT: Section { # ELF-NEXT: Index: 1 -# ELF-NEXT: Name: .text (5) +# ELF-NEXT: Name: .foo (1) # ELF-NEXT: Type: SHT_PROGBITS (0x1) -# ELF-NEXT: Flags [ (0x6) +# ELF-NEXT: Flags [ (0x3) # ELF-NEXT: SHF_ALLOC (0x2) -# ELF-NEXT: SHF_EXECINSTR (0x4) +# ELF-NEXT: SHF_WRITE (0x1) +# ELF-NEXT: ] +# ELF-NEXT: Address: 0x2 +# ELF64-NEXT: Offset: 0x41 +# ELF32-NEXT: Offset: 0x37 +# ELF-NEXT: Size: 3 +# ELF-NEXT: Link: 4 +# ELF-NEXT: Info: 1 +# ELF-NEXT: AddressAlignment: 5 +# ELF-NEXT: EntrySize: 6 +# ELF-NEXT: } +# ELF-NEXT: Section { +# ELF-NEXT: Index: 2 +# ELF-NEXT: Name: .strtab (16) +# ELF-NEXT: Type: SHT_STRTAB (0x3) +# ELF-NEXT: Flags [ (0x0) # ELF-NEXT: ] # ELF-NEXT: Address: 0x0 -# ELF-NEXT: Offset: 0x40 -# ELF-NEXT: Size: 42 +# ELF64-NEXT: Offset: 0x44 +# ELF32-NEXT: Offset: 0x3A +# ELF-NEXT: Size: 1 # ELF-NEXT: Link: 0 # ELF-NEXT: Info: 0 -# ELF-NEXT: AddressAlignment: 16 +# ELF-NEXT: AddressAlignment: 1 # ELF-NEXT: EntrySize: 0 # ELF-NEXT: } +# ELF-NEXT: Section { +# ELF-NEXT: Index: 3 +# ELF-NEXT: Name: .shstrtab (6) +# ELF-NEXT: Type: SHT_STRTAB (0x3) +# ELF-NEXT: Flags [ (0x0) +# ELF-NEXT: ] +# ELF-NEXT: Address: 0x0 +# ELF64-NEXT: Offset: 0x45 +# ELF32-NEXT: Offset: 0x3B +# ELF-NEXT: Size: 24 +# ELF-NEXT: Link: 0 +# ELF-NEXT: Info: 0 +# ELF-NEXT: AddressAlignment: 1 +# ELF-NEXT: EntrySize: 0 +# ELF-NEXT: } +# ELF-NEXT: ] -# ELF-MIPSEL: Section { -# ELF-MIPSEL: Index: 4 -# ELF-MIPSEL-NEXT: Name: .reginfo (27) -# ELF-MIPSEL-NEXT: Type: SHT_MIPS_REGINFO (0x70000006) -# ELF-MIPSEL-NEXT: Flags [ (0x2) -# ELF-MIPSEL-NEXT: SHF_ALLOC (0x2) -# ELF-MIPSEL-NEXT: ] -# ELF-MIPSEL-NEXT: Address: 0x0 -# ELF-MIPSEL-NEXT: Offset: 0x34 -# ELF-MIPSEL-NEXT: Size: 24 -# ELF-MIPSEL-NEXT: Link: 0 -# ELF-MIPSEL-NEXT: Info: 0 -# ELF-MIPSEL-NEXT: AddressAlignment: 1 -# ELF-MIPSEL-NEXT: EntrySize: 0 -# ELF-MIPSEL-NEXT: } -# ELF-MIPSEL-NEXT: Section { -# ELF-MIPSEL-NEXT: Index: 5 -# ELF-MIPSEL-NEXT: Name: .MIPS.abiflags (12) -# ELF-MIPSEL-NEXT: Type: SHT_MIPS_ABIFLAGS (0x7000002A) -# ELF-MIPSEL-NEXT: Flags [ (0x2) -# ELF-MIPSEL-NEXT: SHF_ALLOC (0x2) -# ELF-MIPSEL-NEXT: ] -# ELF-MIPSEL-NEXT: Address: 0x0 -# ELF-MIPSEL-NEXT: Offset: 0x50 -# ELF-MIPSEL-NEXT: Size: 24 -# ELF-MIPSEL-NEXT: Link: 0 -# ELF-MIPSEL-NEXT: Info: 0 -# ELF-MIPSEL-NEXT: AddressAlignment: 8 -# ELF-MIPSEL-NEXT: EntrySize: 0 -# ELF-MIPSEL-NEXT: } +--- !ELF +FileHeader: + Class: ELFCLASS64 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_X86_64 +Sections: + - Name: .foo + Type: SHT_PROGBITS + Info: 1 + Address: 0x2 + Size: 0x3 + Flags: [ SHF_WRITE, SHF_ALLOC ] + Link: 4 + AddressAlign: 5 + EntSize: 6 + +--- !ELF +FileHeader: + Class: ELFCLASS32 + Data: ELFDATA2LSB + Type: ET_REL + Machine: EM_386 +Sections: + - Name: .foo + Type: SHT_PROGBITS + Info: 1 + Address: 0x2 + Size: 0x3 + Flags: [ SHF_WRITE, SHF_ALLOC ] + Link: 4 + AddressAlign: 5 + EntSize: 6