[llvm] f65ab62 - [llvm-readelf][test] - Refine the sections-ext.test

Georgii Rymar via llvm-commits llvm-commits at lists.llvm.org
Wed Aug 26 04:10:19 PDT 2020


Author: Georgii Rymar
Date: 2020-08-26T14:01:31+03:00
New Revision: f65ab626e549f8ddd4cdf10ac12371de3af73aa7

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

LOG: [llvm-readelf][test] - Refine the sections-ext.test

The `sections-ext.test` is a test for ELF that is used
to test `--st`, `--sr` and `--sd` extension options for `-S`.

There are 2 problems with it:
1) It is broken, because for CHECK lines it contains there is
no corresponding `FileCheck` call.

2) It uses the precompiled object: `trivial.obj.elf-i386`.
This is the last ELF test where `trivial.obj.elf-i386` is used so we can get
rid of the binary and use an YAML description.

Also, there is a `Inputs/trivial.ll` file that describes how `trivial*` objects
in `Inputs` folders are created. I've removed it from `ELF`, because it is not
actual anymore (we have no more input binaries created with the use of trivial.ll there)
and copied the refined versions of it to `COFF`, `MachO` and `wasm` Input folders.

Differential revision: https://reviews.llvm.org/D86462

Added: 
    llvm/test/tools/llvm-readobj/COFF/Inputs/trivial.ll
    llvm/test/tools/llvm-readobj/MachO/Inputs/trivial.ll
    llvm/test/tools/llvm-readobj/wasm/Inputs/trivial.ll

Modified: 
    llvm/test/tools/llvm-readobj/ELF/sections-ext.test

Removed: 
    llvm/test/tools/llvm-readobj/ELF/Inputs/trivial.ll
    llvm/test/tools/llvm-readobj/ELF/Inputs/trivial.obj.elf-i386


################################################################################
diff  --git a/llvm/test/tools/llvm-readobj/COFF/Inputs/trivial.ll b/llvm/test/tools/llvm-readobj/COFF/Inputs/trivial.ll
new file mode 100644
index 000000000000..63fa224a4cdb
--- /dev/null
+++ b/llvm/test/tools/llvm-readobj/COFF/Inputs/trivial.ll
@@ -0,0 +1,16 @@
+; Input used for generating checked-in binaries (trivial.obj.*)
+; llc -mtriple=i386-pc-win32 trivial.ll -filetype=obj -o trivial.obj.coff-i386
+; llc -mtriple=x86_64-pc-win32 trivial.ll -filetype=obj -o trivial.obj.coff-x86-64
+
+ at .str = private unnamed_addr constant [13 x i8] c"Hello World\0A\00", align 1
+
+define i32 @main() nounwind {
+entry:
+  %call = tail call i32 @puts(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str, i32 0, i32 0)) nounwind
+  tail call void bitcast (void (...)* @SomeOtherFunction to void ()*)() nounwind
+  ret i32 0
+}
+
+declare i32 @puts(i8* nocapture) nounwind
+
+declare void @SomeOtherFunction(...)

diff  --git a/llvm/test/tools/llvm-readobj/ELF/Inputs/trivial.obj.elf-i386 b/llvm/test/tools/llvm-readobj/ELF/Inputs/trivial.obj.elf-i386
deleted file mode 100644
index f85e40d6261f..000000000000
Binary files a/llvm/test/tools/llvm-readobj/ELF/Inputs/trivial.obj.elf-i386 and /dev/null 
diff er

diff  --git a/llvm/test/tools/llvm-readobj/ELF/sections-ext.test b/llvm/test/tools/llvm-readobj/ELF/sections-ext.test
index 8e3bc2a7e24d..cc58f6da4534 100644
--- a/llvm/test/tools/llvm-readobj/ELF/sections-ext.test
+++ b/llvm/test/tools/llvm-readobj/ELF/sections-ext.test
@@ -1,110 +1,219 @@
 ## This is a test case for --section-symbols, --section-relocations and
 ## --section-data command line flags and their aliases.
 
-# RUN: llvm-readobj -S --st --sr --sd %p/Inputs/trivial.obj.elf-i386
+# RUN: yaml2obj %s -o %t
 
-## Check the two-letter aliases above (--st, --sr, --sd) are equivalent to their
-## full flag names.
+## Test --section-symbols (--st) displays symbols for each section.
+# RUN: llvm-readobj --sections --st %t > %t.readobj-st
+# RUN: llvm-readobj --sections --section-symbols %t > %t.readobj-st-no-alias
+# RUN: 
diff  %t.readobj-st %t.readobj-st-no-alias
+# RUN: FileCheck %s --input-file=%t.readobj-st --check-prefixes=ALL,ST
 
-# RUN: llvm-readobj -S --st %p/Inputs/trivial.obj.elf-i386 > %t.readobj-st-alias
-# RUN: llvm-readobj -S --section-symbols %p/Inputs/trivial.obj.elf-i386 > %t.readobj-st-no-alias
-# RUN: 
diff  %t.readobj-st-alias %t.readobj-st-no-alias
+## Test --section-relocations (--sr) displays relocations for each section.
+# RUN: llvm-readobj --sections --sr %t > %t.readobj-sr
+# RUN: llvm-readobj --sections --section-relocations %t > %t.readobj-sr-no-alias
+# RUN: 
diff  %t.readobj-sr %t.readobj-sr-no-alias
+# RUN: FileCheck %s --input-file=%t.readobj-sr --check-prefixes=ALL,SR
 
-# RUN: llvm-readobj -S --sr %p/Inputs/trivial.obj.elf-i386 > %t.readobj-sr-alias
-# RUN: llvm-readobj -S --section-relocations %p/Inputs/trivial.obj.elf-i386 > %t.readobj-sr-no-alias
-# RUN: 
diff  %t.readobj-sr-alias %t.readobj-sr-no-alias
+## Test --section-data (--sd) displays section data for each section except SHT_NOBITS sections.
+# RUN: llvm-readobj --sections --sd %t > %t.readobj-sd
+# RUN: llvm-readobj --sections --section-data %t > %t.readobj-sd-no-alias
+# RUN: 
diff  %t.readobj-sd %t.readobj-sd-no-alias
+# RUN: FileCheck %s --input-file=%t.readobj-sd --check-prefixes=ALL,SD
 
-# RUN: llvm-readobj -S --sd %p/Inputs/trivial.obj.elf-i386 > %t.readobj-sd-alias
-# RUN: llvm-readobj -S --section-data %p/Inputs/trivial.obj.elf-i386 > %t.readobj-sd-no-alias
-# RUN: 
diff  %t.readobj-sd-alias %t.readobj-sd-no-alias
+## Test all options together.
+# RUN: llvm-readobj --sections --section-symbols --section-relocations --section-data %t | \
+# RUN:   FileCheck %s --check-prefixes=ALL,ST,SR,SD
 
-# CHECK:      Sections [
-# CHECK-NEXT:   Section {
-# CHECK-NEXT:     Index: 0
-# CHECK-NEXT:     Name:  (0)
-# CHECK-NEXT:     Type: SHT_NULL (0x0)
-# CHECK-NEXT:     Flags [ (0x0)
-# CHECK-NEXT:     ]
-# CHECK-NEXT:     Address: 0x0
-# CHECK-NEXT:     Offset: 0x0
-# CHECK-NEXT:     Size: 0
-# CHECK-NEXT:     Link: 0
-# CHECK-NEXT:     Info: 0
-# CHECK-NEXT:     AddressAlignment: 0
-# CHECK-NEXT:     EntrySize: 0
-# CHECK-NEXT:     Relocations [
-# CHECK-NEXT:     ]
-# CHECK-NEXT:     Symbols [
-# CHECK-NEXT:     ]
-# CHECK-NEXT:     SectionData (
-# CHECK-NEXT:     )
-# CHECK-NEXT:   }
-# CHECK-NEXT:   Section {
-# CHECK-NEXT:     Index: 1
-# CHECK-NEXT:     Name: .text (5)
-# CHECK-NEXT:     Type: SHT_PROGBITS (0x1)
-# CHECK-NEXT:     Flags [ (0x6)
-# CHECK-NEXT:       SHF_ALLOC (0x2)
-# CHECK-NEXT:       SHF_EXECINSTR (0x4)
-# CHECK-NEXT:     ]
-# CHECK-NEXT:     Address: 0x0
-# CHECK-NEXT:     Offset: 0x40
-# CHECK-NEXT:     Size: 42
-# CHECK-NEXT:     Link: 0
-# CHECK-NEXT:     Info: 0
-# CHECK-NEXT:     AddressAlignment: 16
-# CHECK-NEXT:     EntrySize: 0
-# CHECK-NEXT:     Relocations [
-# CHECK-NEXT:     ]
-# CHECK-NEXT:     Symbols [
-# CHECK-NEXT:       Symbol {
-# CHECK-NEXT:         Name: .text (0)
-# CHECK-NEXT:         Value: 0x0
-# CHECK-NEXT:         Size: 0
-# CHECK-NEXT:         Binding: Local (0x0)
-# CHECK-NEXT:         Type: Section (0x3)
-# CHECK-NEXT:         Other: 0
-# CHECK-NEXT:         Section: .text (0x1)
-# CHECK-NEXT:       }
-# CHECK-NEXT:       Symbol {
-# CHECK-NEXT:         Name: main (12)
-# CHECK-NEXT:         Value: 0x0
-# CHECK-NEXT:         Size: 42
-# CHECK-NEXT:         Binding: Global (0x1)
-# CHECK-NEXT:         Type: Function (0x2)
-# CHECK-NEXT:         Other: 0
-# CHECK-NEXT:         Section: .text (0x1)
-# CHECK-NEXT:       }
-# CHECK-NEXT:     ]
-# CHECK-NEXT:     SectionData (
-# CHECK-NEXT:       0000: 5383EC08 E8000000 005B81C3 03000000  |S........[......|
-# CHECK-NEXT:       0010: 8D830000 00008904 24E8FCFF FFFFE8FC  |........$.......|
-# CHECK-NEXT:       0020: FFFFFF31 C083C408 5BC3               |...1....[.|
-# CHECK-NEXT:     )
-# CHECK-NEXT:   }
-# CHECK-NEXT:   Section {
-# CHECK-NEXT:     Index: 2
-# CHECK-NEXT:     Name: .rel.text (1)
-# CHECK-NEXT:     Type: SHT_REL (0x9)
-# CHECK-NEXT:     Flags [ (0x0)
-# CHECK-NEXT:     ]
-# CHECK-NEXT:     Address: 0x0
-# CHECK-NEXT:     Offset: 0x360
-# CHECK-NEXT:     Size: 32
-# CHECK-NEXT:     Link: 8
-# CHECK-NEXT:     Info: 1
-# CHECK-NEXT:     AddressAlignment: 4
-# CHECK-NEXT:     EntrySize: 8
-# CHECK-NEXT:     Relocations [
-# CHECK-NEXT:       0xC R_386_GOTPC _GLOBAL_OFFSET_TABLE_ 0x0
-# CHECK-NEXT:       0x12 R_386_GOTOFF .L.str 0x0
-# CHECK-NEXT:       0x1A R_386_PLT32 puts 0x0
-# CHECK-NEXT:       0x1F R_386_PLT32 SomeOtherFunction 0x0
-# CHECK-NEXT:     ]
-# CHECK-NEXT:     Symbols [
-# CHECK-NEXT:     ]
-# CHECK-NEXT:     SectionData (
-# CHECK-NEXT:       0000: 0C000000 0A0A0000 12000000 09020000  |................|
-# CHECK-NEXT:       0010: 1A000000 040B0000 1F000000 04090000  |................|
-# CHECK-NEXT:     )
-# CHECK-NEXT:   }
+# ALL:      Sections [
+# ALL-NEXT:   Section {
+# ALL-NEXT:     Index: 0
+# ALL-NEXT:     Name:  (0)
+# ALL-NEXT:     Type: SHT_NULL (0x0)
+# ALL-NEXT:     Flags [ (0x0)
+# ALL-NEXT:     ]
+# ALL-NEXT:     Address: 0x0
+# ALL-NEXT:     Offset: 0x0
+# ALL-NEXT:     Size: 0
+# ALL-NEXT:     Link: 0
+# ALL-NEXT:     Info: 0
+# ALL-NEXT:     AddressAlignment: 0
+# ALL-NEXT:     EntrySize: 0
+# SR-NEXT:      Relocations [
+# SR-NEXT:      ]
+# ST-NEXT:      Symbols [
+# ST-NEXT:      ]
+# SD-NEXT:      SectionData (
+# SD-NEXT:      )
+# ALL-NEXT:   }
+# ALL-NEXT:   Section {
+# ALL-NEXT:     Index: 1
+# ALL-NEXT:     Name: .text (6)
+# ALL-NEXT:     Type: SHT_PROGBITS (0x1)
+# ALL-NEXT:     Flags [ (0x0)
+# ALL-NEXT:     ]
+# ALL-NEXT:     Address: 0x0
+# ALL-NEXT:     Offset: 0x40
+# ALL-NEXT:     Size: 0
+# ALL-NEXT:     Link: 0
+# ALL-NEXT:     Info: 0
+# ALL-NEXT:     AddressAlignment: 0
+# ALL-NEXT:     EntrySize: 0
+# SR-NEXT:      Relocations [
+# SR-NEXT:      ]
+# ST-NEXT:      Symbols [
+# ST-NEXT:        Symbol {
+# ST-NEXT:          Name: foo (1)
+# ST-NEXT:          Value: 0x0
+# ST-NEXT:          Size: 0
+# ST-NEXT:          Binding: Local (0x0)
+# ST-NEXT:          Type: None (0x0)
+# ST-NEXT:          Other: 0
+# ST-NEXT:          Section: .text (0x1)
+# ST-NEXT:        }
+# ST-NEXT:      ]
+# SD-NEXT:      SectionData (
+# SD-NEXT:      )
+# ALL-NEXT:   }
+# ALL-NEXT:   Section {
+# ALL-NEXT:     Index: 2
+# ALL-NEXT:     Name: .rela.text (1)
+# ALL-NEXT:     Type: SHT_RELA (0x4)
+# ALL-NEXT:     Flags [ (0x0)
+# ALL-NEXT:     ]
+# ALL-NEXT:     Address: 0x0
+# ALL-NEXT:     Offset: 0x40
+# ALL-NEXT:     Size: 24
+# ALL-NEXT:     Link: 4
+# ALL-NEXT:     Info: 1
+# ALL-NEXT:     AddressAlignment: 0
+# ALL-NEXT:     EntrySize: 24
+# SR-NEXT:      Relocations [
+# SR-NEXT:        0x0 R_X86_64_NONE - 0x0
+# SR-NEXT:      ]
+# ST-NEXT:      Symbols [
+# ST-NEXT:      ]
+# SD-NEXT:      SectionData (
+# SD-NEXT:        0000: 00000000 00000000 00000000 00000000  |................|
+# SD-NEXT:        0010: 00000000 00000000                    |........|
+# SD-NEXT:      )
+# ALL-NEXT:   }
+# ALL-NEXT:   Section {
+# ALL-NEXT:     Index: 3
+# ALL-NEXT:     Name: .bss (12)
+# ALL-NEXT:     Type: SHT_NOBITS (0x8)
+# ALL-NEXT:     Flags [ (0x0)
+# ALL-NEXT:     ]
+# ALL-NEXT:     Address: 0x0
+# ALL-NEXT:     Offset: 0x58
+# ALL-NEXT:     Size: 4096
+# ALL-NEXT:     Link: 0
+# ALL-NEXT:     Info: 0
+# ALL-NEXT:     AddressAlignment: 0
+# ALL-NEXT:     EntrySize: 0
+# SR-NEXT:      Relocations [
+# SR-NEXT:      ]
+# ST-NEXT:      Symbols [
+# ST-NEXT:      ]
+# ALL-NEXT:   }
+# ALL-NEXT:   Section {
+# ALL-NEXT:     Index: 4
+# ALL-NEXT:     Name: .symtab (35)
+# ALL-NEXT:     Type: SHT_SYMTAB (0x2)
+# ALL-NEXT:     Flags [ (0x0)
+# ALL-NEXT:     ]
+# ALL-NEXT:     Address: 0x0
+# ALL-NEXT:     Offset: 0x58
+# ALL-NEXT:     Size: 48
+# ALL-NEXT:     Link: 5
+# ALL-NEXT:     Info: 2
+# ALL-NEXT:     AddressAlignment: 8
+# ALL-NEXT:     EntrySize: 24
+# SR-NEXT:      Relocations [
+# SR-NEXT:      ]
+# ST-NEXT:      Symbols [
+# ST-NEXT:      ]
+# SD-NEXT:      SectionData (
+# SD-NEXT:        0000: 00000000 00000000 00000000 00000000  |................|
+# SD-NEXT:        0010: 00000000 00000000 01000000 00000100  |................|
+# SD-NEXT:        0020: 00000000 00000000 00000000 00000000  |................|
+# SD-NEXT:      )
+# ALL-NEXT:   }
+# ALL-NEXT:   Section {
+# ALL-NEXT:     Index: 5
+# ALL-NEXT:     Name: .strtab (27)
+# ALL-NEXT:     Type: SHT_STRTAB (0x3)
+# ALL-NEXT:     Flags [ (0x0)
+# ALL-NEXT:     ]
+# ALL-NEXT:     Address: 0x0
+# ALL-NEXT:     Offset: 0x88
+# ALL-NEXT:     Size: 5
+# ALL-NEXT:     Link: 0
+# ALL-NEXT:     Info: 0
+# ALL-NEXT:     AddressAlignment: 1
+# ALL-NEXT:     EntrySize: 0
+# SR-NEXT:      Relocations [
+# SR-NEXT:      ]
+# ST-NEXT:      Symbols [
+# ST-NEXT:      ]
+# SD-NEXT:      SectionData (
+# SD-NEXT:        0000: 00666F6F 00 |.foo.|
+# SD-NEXT:      )
+# ALL-NEXT:   }
+# ALL-NEXT:   Section {
+# ALL-NEXT:     Index: 6
+# ALL-NEXT:     Name: .shstrtab (17)
+# ALL-NEXT:     Type: SHT_STRTAB (0x3)
+# ALL-NEXT:     Flags [ (0x0)
+# ALL-NEXT:     ]
+# ALL-NEXT:     Address: 0x0
+# ALL-NEXT:     Offset: 0x8D
+# ALL-NEXT:     Size: 43
+# ALL-NEXT:     Link: 0
+# ALL-NEXT:     Info: 0
+# ALL-NEXT:     AddressAlignment: 1
+# ALL-NEXT:     EntrySize: 0
+# SR-NEXT:      Relocations [
+# SR-NEXT:      ]
+# ST-NEXT:      Symbols [
+# ST-NEXT:      ]
+# SD-NEXT:      SectionData (
+# SD-NEXT:        0000: 002E7265 6C612E74 65787400 2E627373 |..rela.text..bss|
+# SD-NEXT:        0010: 002E7368 73747274 6162002E 73747274 |..shstrtab..strt|
+# SD-NEXT:        0020: 6162002E 73796D74 616200            |ab..symtab.|
+# SD-NEXT:      )
+# ALL-NEXT:   }
+# ALL-NEXT: ]
+
+## Check that --section-symbols, --section-relocations and --section-data
+## options produce no output without --sections.
+# RUN: llvm-readobj --section-symbols --section-relocations --section-data %t | \
+# RUN:   FileCheck %s -DFILE=%t --check-prefix=NO-SECTIONS
+
+# NO-SECTIONS:      File: [[FILE]]
+# NO-SECTIONS-NEXT: Format: elf64-x86-64
+# NO-SECTIONS-NEXT: Arch: x86_64
+# NO-SECTIONS-NEXT: AddressSize: 64bit
+# NO-SECTIONS-NEXT: LoadName: <Not found>
+# NO-SECTIONS-NOT:  {{.}}
+
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  Type:    ET_REL
+  Machine: EM_X86_64
+Sections:
+  - Name: .text
+    Type: SHT_PROGBITS
+  - Name: .rela.text
+    Type: SHT_RELA
+    Info: .text
+    Relocations:
+      - Type: R_X86_64_NONE
+  - Name: .bss
+    Type: SHT_NOBITS
+    Size: 0x1000
+Symbols:
+  - Name:    foo
+    Section: .text

diff  --git a/llvm/test/tools/llvm-readobj/ELF/Inputs/trivial.ll b/llvm/test/tools/llvm-readobj/MachO/Inputs/trivial.ll
similarity index 66%
rename from llvm/test/tools/llvm-readobj/ELF/Inputs/trivial.ll
rename to llvm/test/tools/llvm-readobj/MachO/Inputs/trivial.ll
index d3fdb40aecbe..21a3cf2a9594 100644
--- a/llvm/test/tools/llvm-readobj/ELF/Inputs/trivial.ll
+++ b/llvm/test/tools/llvm-readobj/MachO/Inputs/trivial.ll
@@ -1,10 +1,6 @@
 ; Input used for generating checked-in binaries (trivial.obj.*)
-; llc -mtriple=i386-pc-win32 trivial.ll -filetype=obj -o trivial.obj.coff-i386
-; llc -mtriple=x86_64-pc-win32 trivial.ll -filetype=obj -o trivial.obj.coff-x86-64
-; llc -mtriple=i386-linux-gnu trivial.ll -filetype=obj -o trivial.obj.elf-i386 -relocation-model=pic
 ; llc -mtriple=i386-apple-darwin10 trivial.ll -filetype=obj -o trivial.obj.macho-i386 -relocation-model=pic
 ; llc -mtriple=x86_64-apple-darwin10 trivial.ll -filetype=obj -o trivial.obj.macho-x86-64 -relocation-model=pic
-; llc -mtriple=wasm32-unknown-unknown trivial.ll -filetype=obj -o trivial.obj.wasm
 
 @.str = private unnamed_addr constant [13 x i8] c"Hello World\0A\00", align 1
 

diff  --git a/llvm/test/tools/llvm-readobj/wasm/Inputs/trivial.ll b/llvm/test/tools/llvm-readobj/wasm/Inputs/trivial.ll
new file mode 100644
index 000000000000..b0de85bbeede
--- /dev/null
+++ b/llvm/test/tools/llvm-readobj/wasm/Inputs/trivial.ll
@@ -0,0 +1,15 @@
+; Input used for generating checked-in binaries (trivial.obj.*)
+; llc -mtriple=wasm32-unknown-unknown trivial.ll -filetype=obj -o trivial.obj.wasm
+
+ at .str = private unnamed_addr constant [13 x i8] c"Hello World\0A\00", align 1
+
+define i32 @main() nounwind {
+entry:
+  %call = tail call i32 @puts(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str, i32 0, i32 0)) nounwind
+  tail call void bitcast (void (...)* @SomeOtherFunction to void ()*)() nounwind
+  ret i32 0
+}
+
+declare i32 @puts(i8* nocapture) nounwind
+
+declare void @SomeOtherFunction(...)


        


More information about the llvm-commits mailing list