[llvm] r360893 - [llvm-objdump]Improve testing of some switches #1

James Henderson via llvm-commits llvm-commits at lists.llvm.org
Thu May 16 06:28:36 PDT 2019


Author: jhenderson
Date: Thu May 16 06:28:36 2019
New Revision: 360893

URL: http://llvm.org/viewvc/llvm-project?rev=360893&view=rev
Log:
[llvm-objdump]Improve testing of some switches #1

This is the first in a set of patches I have to improve testing of
llvm-objdump. This patch targets --all-headers, --section, and
--full-contents. In the --section case, it deletes a pre-canned binary
which is only used by the one test and replaces it with yaml.

Reviewed by: grimar, MaskRay

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

Removed:
    llvm/trunk/test/tools/llvm-objdump/Inputs/section-filter.obj
Modified:
    llvm/trunk/test/tools/llvm-objdump/all-headers.test
    llvm/trunk/test/tools/llvm-objdump/full-contents.test
    llvm/trunk/test/tools/llvm-objdump/section-filter.test

Removed: llvm/trunk/test/tools/llvm-objdump/Inputs/section-filter.obj
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objdump/Inputs/section-filter.obj?rev=360892&view=auto
==============================================================================
Binary file - no diff available.

Modified: llvm/trunk/test/tools/llvm-objdump/all-headers.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objdump/all-headers.test?rev=360893&r1=360892&r2=360893&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-objdump/all-headers.test (original)
+++ llvm/trunk/test/tools/llvm-objdump/all-headers.test Thu May 16 06:28:36 2019
@@ -1,8 +1,8 @@
 # RUN: yaml2obj %s > %t
 # RUN: llvm-objdump --all-headers %t | FileCheck %s
 
-## Check we print file format, architecture and start address before
-## anything else when using --all-headers.
+## Check we print file format, architecture and start address followed by the
+## other data when using --all-headers.
 
 # CHECK:       file format ELF64-x86-64
 # CHECK-EMPTY:
@@ -10,6 +10,9 @@
 # CHECK-NEXT:  start address: 0x0000000000000000
 # CHECK-EMPTY:
 # CHECK-NEXT:  Sections:
+# CHECK: SYMBOL TABLE:
+# CHECK: Program Header:
+# CHECK: Dynamic Section:
 
 ## Check how we dump the archives.
 ## Check we dump the appropriate headers for each file in the archive.

Modified: llvm/trunk/test/tools/llvm-objdump/full-contents.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objdump/full-contents.test?rev=360893&r1=360892&r2=360893&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-objdump/full-contents.test (original)
+++ llvm/trunk/test/tools/llvm-objdump/full-contents.test Thu May 16 06:28:36 2019
@@ -2,16 +2,19 @@
 # RUN: llvm-objdump --full-contents %t > %t.out1
 # RUN: llvm-objdump -s %t > %t.out2
 # RUN: cmp %t.out1 %t.out2
-# RUN: FileCheck %s --input-file=%t.out1
+# RUN: FileCheck %s --input-file=%t.out1 --implicit-check-not=.empty-progbits \
+# RUN:              --implicit-check-not=.empty-nobits
 
 # CHECK:      .bss
-# CHECK-NEXT: <skipping contents of bss section at [0000, 0040)>
+# CHECK-NEXT: <skipping contents of bss section at [1000, 1040)>
 # CHECK:      .text
-# CHECK-NEXT:  0000 01234567                             .#Eg
+# CHECK-NEXT:  1010 01234567                             .#Eg
 # CHECK:      .user-defined
-# CHECK-NEXT:  0000 76543210                             vT2.
-# CHECK:      .empty-section
-# CHECK-NEXT: <skipping contents of bss section at [0000, 0020)>
+# CHECK-NEXT:  1020 76543210                             vT2.
+# CHECK:      .nobits-section
+# CHECK-NEXT: <skipping contents of bss section at [1030, 1050)>
+# CHECK:      .non-alloc
+# CHECK:       0000 11112222                             ..""
 # CHECK:      .symtab
 # CHECK:      .strtab
 # CHECK:      .shstrtab
@@ -26,23 +29,38 @@ Sections:
   - Name:            .bss
     Type:            SHT_NOBITS
     Flags:           [ SHF_ALLOC ]
+    Address:         0x1000
     AddressAlign:    0x0000000000000010
     Size:            64
   - Name:            .text
     Type:            SHT_PROGBITS
     Flags:           [ SHF_ALLOC, SHF_EXECINSTR ]
+    Address:         0x1010
     AddressAlign:    0x0000000000000010
     Content:         "01234567"
     Size:            4
   - Name:            .user-defined
     Type:            SHT_PROGBITS
     Flags:           [ SHF_ALLOC ]
+    Address:         0x1020
     AddressAlign:    0x0000000000000010
     Content:         "76543210"
     Size:            4
-  - Name:            .empty-section
+  - Name:            .nobits-section
     Type:            SHT_NOBITS
     Flags:           [ SHF_ALLOC ]
+    Address:         0x1030
     AddressAlign:    0x0000000000000010
     Size:            32
-
+  - Name:            .empty-progbits
+    Type:            SHT_PROGBITS
+    Address:         0x1040
+    Flags:           [ SHF_ALLOC ]
+  - Name:            .empty-nobits
+    Type:            SHT_NOBITS
+    Address:         0x1050
+    Flags:           [ SHF_ALLOC ]
+  - Name:            .non-alloc
+    Type:            SHT_PROGBITS
+    Flags:           [ ]
+    Content:         '11112222'

Modified: llvm/trunk/test/tools/llvm-objdump/section-filter.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objdump/section-filter.test?rev=360893&r1=360892&r2=360893&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-objdump/section-filter.test (original)
+++ llvm/trunk/test/tools/llvm-objdump/section-filter.test Thu May 16 06:28:36 2019
@@ -1,24 +1,224 @@
-// This test checks that --section works correctly.
-// RUN: llvm-objdump -h %p/Inputs/section-filter.obj -j=.text \
-// RUN: --section=.bss | FileCheck %s
-
-// CHECK: .text
-// CHECK-NOT: .data
-// CHECK: .bss
-
-// Test that the -j alias can be used flexibly. Create a baseline and ensure
-// all other combinations are identical.
-// RUN: llvm-objdump %p/Inputs/section-filter.obj -h -s --section .symtab > %t.full
-// RUN: llvm-objdump %p/Inputs/section-filter.obj -h -s -j .symtab > %t.1
-// RUN: llvm-objdump %p/Inputs/section-filter.obj -h -s -j=.symtab > %t.2
-// RUN: llvm-objdump %p/Inputs/section-filter.obj -h -s -j.symtab > %t.3
-// RUN: llvm-objdump %p/Inputs/section-filter.obj -hsj .symtab > %t.4
-// RUN: llvm-objdump %p/Inputs/section-filter.obj -hsj=.symtab > %t.5
-// RUN: llvm-objdump %p/Inputs/section-filter.obj -hsj.symtab > %t.6
-
-// RUN: cmp %t.full %t.1
-// RUN: cmp %t.full %t.2
-// RUN: cmp %t.full %t.3
-// RUN: cmp %t.full %t.4
-// RUN: cmp %t.full %t.5
-// RUN: cmp %t.full %t.6
+## Test that --section works correctly for -h.
+## We test the LMA here too, because the code at the time of writing uses the 
+## value of --section when looking up section LMAs.
+# RUN: yaml2obj %s --docnum=1 -o %t.h.elf
+# RUN: llvm-objdump -h %t.h.elf -j=.text --section=.bss \
+# RUN:   | FileCheck %s --check-prefix=SHDRS --implicit-check-not=.data --implicit-check-not=.text2
+
+# SHDRS: Name  Size     VMA              LMA
+# SHDRS: .text 00000001 0000000000000400 0000000000001000
+# SHDRS: .bss  00000001 0000000000000420 0000000000003000
+
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  Type:    ET_EXEC
+  Machine: EM_X86_64
+Sections:
+  - Name:         .text
+    Type:         SHT_PROGBITS
+    Flags:        [SHF_ALLOC, SHF_EXECINSTR]
+    Address:      0x400
+    AddressAlign: 0x10
+    Content:      'c3'
+  - Name:         .text2
+    Type:         SHT_PROGBITS
+    Flags:        [SHF_ALLOC, SHF_EXECINSTR]
+    Address:      0x401
+    Content:      '90'
+  - Name:         .data
+    Type:         SHT_PROGBITS
+    Flags:        [SHF_ALLOC, SHF_WRITE]
+    Address:      0x410
+    AddressAlign: 0x10
+    Content:      '42'
+  - Name:         .bss
+    Type:         SHT_NOBITS
+    Flags:        [SHF_ALLOC, SHF_WRITE]
+    Address:      0x420
+    AddressAlign: 0x10
+    Size:         1
+ProgramHeaders:
+  - Type:  PT_LOAD
+    VAddr: 0x400
+    PAddr: 0x1000
+    Sections:
+      - Section: .text
+      - Section: .text2
+  - Type:  PT_LOAD
+    VAddr: 0x410
+    PAddr: 0x2000
+    Sections:
+      - Section: .data
+  - Type:  PT_LOAD
+    VAddr: 0x420
+    PAddr: 0x3000
+    Sections:
+      - Section: .bss
+
+## Test that --section works correctly for -d with -r.
+## FIXME: Inline relocations are only printed if the relocation section itself is
+##        specified with --section. This test just characterizes the existing behavior.
+##        See https://bugs.llvm.org/show_bug.cgi?id=41886
+# RUN: yaml2obj %s --docnum=2 -o %t.o
+
+## Show non-executable sections are not disassembled even if specified,
+## and that only the specified executable sections are disassembled.
+## Also show that no relocation sections are dumped because none are
+## specified.
+## FIXME: This is different behaviour to GNU objdump, which dumps the non-
+##        executable sections if requested explicitly.
+##        See https://bugs.llvm.org/show_bug.cgi?id=41897.
+# RUN: llvm-objdump -d -r %t.o --section=.text --section=.rodata \
+# RUN:   | FileCheck %s --check-prefix=DISASM --implicit-check-not=.text2 \
+# RUN:           --implicit-check-not=.rodata --implicit-check-not=R_X86_64
+
+## Show that only the specified relocation sections that patch the
+## disassembled sections are dumped.
+# RUN: llvm-objdump -d -r %t.o --section=.text \
+# RUN:                         --section=.rela.text --section=.rela.text2 \
+# RUN:   | FileCheck %s --check-prefixes=DISASM,RELOC --implicit-check-not=.text2 \
+# RUN:           --implicit-check-not=R_X86_64
+
+# DISASM:       Disassembly of section .text:
+# DISASM-EMPTY:
+# DISASM-NEXT:  0000000000000400 .text:
+# DISASM-NEXT:  400: e8 00 00 00 00                callq   0 <.text+0x5>
+# RELOC-NEXT:                      00000401:  R_X86_64_PC32        foo+1
+
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  Type:    ET_REL
+  Machine: EM_X86_64
+Sections:
+  - Name:         .text
+    Type:         SHT_PROGBITS
+    Flags:        [SHF_ALLOC, SHF_EXECINSTR]
+    Address:      0x400
+    AddressAlign: 0x10
+    Content:      'e800000000'
+  - Name:         .text2
+    Type:         SHT_PROGBITS
+    Flags:        [SHF_ALLOC, SHF_EXECINSTR]
+    Address:      0x401
+    Content:      '90e800000000'
+  - Name:         .rela.text
+    Type:         SHT_RELA
+    Info:         .text
+    Relocations:
+      - Offset: 1
+        Symbol: foo
+        Addend: 1
+        Type:   R_X86_64_PC32
+  - Name:         .another.rela.text
+    Type:         SHT_RELA
+    Info:         .text
+    Relocations:
+      - Offset: 1
+        Symbol: foo
+        Type:   R_X86_64_GOT32
+  - Name:         .rela.text2
+    Type:         SHT_RELA
+    Info:         .text2
+    Relocations:
+      - Offset: 1
+        Symbol: foo
+        Addend: 2
+        Type:   R_X86_64_PLT32
+  - Name:       .rodata
+    Type:       SHT_PROGBITS
+    Flags:      [SHF_ALLOC]
+    Size:       4
+  - Name:       .rela.rodata
+    Type:       SHT_RELA
+    Info:       .rodata
+    Relocations:
+      - Offset: 0
+        Symbol: foo
+        Type: R_X86_64_NONE
+Symbols:
+  - Name: foo
+
+## Test that --section works when dumping relocation sections.
+# RUN: llvm-objdump -r %t.o --section=.another.rela.text --section=.rela.rodata \
+# RUN:   | FileCheck %s --check-prefix=DUMP-RELOCS --implicit-check-not=R_X86_64 \
+# RUN:                  --implicit-check-not="RELOCATION RECORDS"
+
+# DUMP-RELOCS: RELOCATION RECORDS FOR [.text]:
+# DUMP-RELOCS: 00000001 R_X86_64_GOT32 foo
+# DUMP-RELOCS: RELOCATION RECORDS FOR [.rodata]:
+# DUMP-RELOCS: 00000000 R_X86_64_NONE foo
+
+## Test that --section works with --full-contents.
+# RUN: llvm-objdump -s %t.o --section=.text --section=.rela.text2 \
+# RUN:   | FileCheck %s --check-prefix=CONTENTS \
+# RUN:                  --implicit-check-not=.text \
+# RUN:                  --implicit-check-not=.rodata
+
+# CONTENTS: Contents of section .text:
+# CONTENTS: Contents of section .rela.text2:
+
+## Test that --section works with --fault-map-section.
+# RUN: yaml2obj %s --docnum=3 -o %t2.o
+# RUN: llvm-objdump %t2.o --fault-map-section -j __clangast \
+# RUN:   | FileCheck %s --check-prefixes=FAULTMAP,NO-FAULTMAP
+# RUN: llvm-objdump %t2.o --fault-map-section -j .llvm_faultmaps \
+# RUN:   | FileCheck %s --check-prefixes=FAULTMAP,WITH-FAULTMAP
+
+# FAULTMAP:           FaultMap table:
+# NO-FAULTMAP-NEXT:   <not found>
+# WITH-FAULTMAP-NEXT: Version: 0x1
+# WITH-FAULTMAP-NEXT: NumFunctions: 0
+
+## Test that --section works with --raw-clang-ast.
+# RUN: llvm-objdump %t2.o --raw-clang-ast -j .llvm_faultmaps \
+# RUN:   | FileCheck %s --check-prefix=NO-AST --allow-empty
+# RUN: llvm-objdump %t2.o --raw-clang-ast -j __clangast \
+# RUN:   | FileCheck %s --check-prefix=CLANG-AST
+
+# NO-AST-NOT: {{.}}
+# CLANG-AST: foobar
+
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  Type:    ET_REL
+  Machine: EM_X86_64
+Sections:
+  - Name:    .llvm_faultmaps
+    Type:    SHT_PROGBITS
+    Content: '0100000000000000'
+  - Name:    __clangast
+    Type:    SHT_PROGBITS
+    Content: '666f6f626172' # "foobar"
+
+## Test that the -j alias can be used flexibly. Create a baseline and ensure
+## all other combinations are identical.
+# RUN: llvm-objdump %t.h.elf -h -s --section .symtab > %t.full
+# RUN: llvm-objdump %t.h.elf -h -s -j .symtab > %t.1
+# RUN: llvm-objdump %t.h.elf -h -s -j=.symtab > %t.2
+# RUN: llvm-objdump %t.h.elf -h -s -j.symtab > %t.3
+# RUN: llvm-objdump %t.h.elf -hsj .symtab > %t.4
+# RUN: llvm-objdump %t.h.elf -hsj=.symtab > %t.5
+# RUN: llvm-objdump %t.h.elf -hsj.symtab > %t.6
+
+# RUN: cmp %t.full %t.1
+# RUN: cmp %t.full %t.2
+# RUN: cmp %t.full %t.3
+# RUN: cmp %t.full %t.4
+# RUN: cmp %t.full %t.5
+# RUN: cmp %t.full %t.6
+
+## Test that an unknown section name causes all section output to be suppressed.
+## TODO: Add a warning for this case.
+##       See https://bugs.llvm.org/show_bug.cgi?id=41898.
+# RUN: llvm-objdump %t.h.elf -h --section foobar \
+# RUN:   | FileCheck %s --check-prefix=NO-SECTION
+
+# NO-SECTION:      Sections:
+# NO-SECTION-NEXT: Idx Name Size VMA Type
+# NO-SECTION-NOT:  {{.}}




More information about the llvm-commits mailing list