[llvm] r361489 - [llvm-objdump][test] Improve testing of some switches #3

James Henderson via llvm-commits llvm-commits at lists.llvm.org
Thu May 23 05:30:39 PDT 2019


Author: jhenderson
Date: Thu May 23 05:30:39 2019
New Revision: 361489

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

This is the third commit in a series of patches to improve test coverage
of llvm-objdump. In this patch I have added a number of tests testing
various aspects of disassembly.

Reviewed by: MaskRay, grimar, rupprecht

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

Added:
    llvm/trunk/test/tools/llvm-objdump/X86/disasm-specific-funcs-mangled-name.test
    llvm/trunk/test/tools/llvm-objdump/X86/disassemble-invalid-byte-sequences.test
    llvm/trunk/test/tools/llvm-objdump/X86/disassemble-long-instructions.test
    llvm/trunk/test/tools/llvm-objdump/X86/elf-disassemble-dynamic-symbols.test
    llvm/trunk/test/tools/llvm-objdump/X86/elf-disassemble-no-symtab.test
    llvm/trunk/test/tools/llvm-objdump/X86/elf-disassemble-relocs.test
    llvm/trunk/test/tools/llvm-objdump/X86/elf-disassemble-symbol-labels-exec.test
    llvm/trunk/test/tools/llvm-objdump/X86/elf-disassemble-symbol-labels-rel.test
    llvm/trunk/test/tools/llvm-objdump/X86/elf-disassemble-symbol-references.yaml
    llvm/trunk/test/tools/llvm-objdump/X86/elf-disassemble.test
    llvm/trunk/test/tools/llvm-objdump/X86/start-stop-address-relocatable-object.test
Removed:
    llvm/trunk/test/tools/llvm-objdump/X86/stripped-shared.test
Modified:
    llvm/trunk/test/tools/llvm-objdump/X86/disasm-specific-funcs.test
    llvm/trunk/test/tools/llvm-objdump/X86/start-stop-address.test

Added: llvm/trunk/test/tools/llvm-objdump/X86/disasm-specific-funcs-mangled-name.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objdump/X86/disasm-specific-funcs-mangled-name.test?rev=361489&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-objdump/X86/disasm-specific-funcs-mangled-name.test (added)
+++ llvm/trunk/test/tools/llvm-objdump/X86/disasm-specific-funcs-mangled-name.test Thu May 23 05:30:39 2019
@@ -0,0 +1,27 @@
+## Show that the --disassemble-functions switch takes mangled names, not
+## demangled names.
+
+# RUN: yaml2obj %s -o %t.o
+# RUN: llvm-objdump -d --disassemble-functions=_Z3foov %t.o | FileCheck %s
+# RUN: llvm-objdump -d --disassemble-functions='foo()' %t.o | FileCheck %s --check-prefix=NOFOO
+# RUN: llvm-objdump -d -C --disassemble-functions='foo()' %t.o | FileCheck %s --check-prefix=NOFOO
+# RUN: llvm-objdump -d --disassemble-functions=foo %t.o | FileCheck %s --check-prefix=NOFOO
+
+# CHECK: _Z3foov:
+
+# NOFOO-NOT: foo
+
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  Type:    ET_EXEC
+  Machine: EM_X86_64
+Sections:
+  - Name:  .text
+    Type:  SHT_PROGBITS
+    Flags: [SHF_ALLOC, SHF_EXECINSTR]
+    Content: '90'
+Symbols:
+  - Name:    _Z3foov
+    Section: .text

Modified: llvm/trunk/test/tools/llvm-objdump/X86/disasm-specific-funcs.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objdump/X86/disasm-specific-funcs.test?rev=361489&r1=361488&r2=361489&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-objdump/X86/disasm-specific-funcs.test (original)
+++ llvm/trunk/test/tools/llvm-objdump/X86/disasm-specific-funcs.test Thu May 23 05:30:39 2019
@@ -1,21 +1,25 @@
-// RUN: yaml2obj -o %t.out %p/Inputs/simple-executable-x86_64.yaml
-// RUN: llvm-objdump -d %t.out -disassemble-functions=main | FileCheck %s
+## Show that the --diassemble-functions switch disassembles only the specified
+## functions.
 
-// CHECK:              Disassembly of section .anothertext:
-// CHECK-EMPTY:
-// CHECK-NEXT:         main:
-// CHECK-NEXT:         10:       55      pushq   %rbp
-// CHECK-NEXT:         11:       48 89 e5        movq    %rsp, %rbp
-// CHECK-NEXT:         14:       48 83 ec 20     subq    $32, %rsp
-// CHECK-NEXT:         18:       48 8d 04 25 a8 00 00 00         leaq    168, %rax
-// CHECK-NEXT:         20:       c7 45 fc 00 00 00 00    movl    $0, -4(%rbp)
-// CHECK-NEXT:         27:       48 89 45 f0     movq    %rax, -16(%rbp)
-// CHECK-NEXT:         2b:       48 8b 45 f0     movq    -16(%rbp), %rax
-// CHECK-NEXT:         2f:       8b 08   movl    (%rax), %ecx
-// CHECK-NEXT:         31:       89 4d ec        movl    %ecx, -20(%rbp)
-// CHECK-NEXT:         34:       e8 c7 ff ff ff  callq   -57
-// CHECK-NEXT:         39:       8b 4d ec        movl    -20(%rbp), %ecx
-// CHECK-NEXT:         3c:       01 c1   addl    %eax, %ecx
-// CHECK-NEXT:         3e:       89 c8   movl    %ecx, %eax
-// CHECK-NEXT:         40:       48 83 c4 20     addq    $32, %rsp
-// CHECK-NEXT:         44:       5d      popq    %rbp
+# RUN: yaml2obj -o %t.out %p/Inputs/simple-executable-x86_64.yaml
+# RUN: llvm-objdump -d %t.out --disassemble-functions=main \
+# RUN:   | FileCheck %s --check-prefix=MAIN --implicit-check-not=foo --implicit-check-not=somedata
+# RUN: llvm-objdump -d %t.out --disassemble-functions=main,foo \
+# RUN:   | FileCheck %s --check-prefixes=MAIN,FOO --implicit-check-not=somedata
+
+# FOO: foo:
+# MAIN: main:
+
+## Unknown symbol name.
+# RUN: llvm-objdump -d %t.out --disassemble-functions=baz \
+# RUN:   | FileCheck %s --implicit-check-not=Disassembly
+
+## Data symbol.
+# RUN: llvm-objdump -d %t.out --disassemble-functions=a \
+# RUN:   | FileCheck %s --implicit-check-not=Disassembly
+
+## Data symbol + --disassemble-all.
+# RUN: llvm-objdump -D %t.out --disassemble-functions=a \
+# RUN:   | FileCheck %s --check-prefix=DATA
+
+# DATA: a:

Added: llvm/trunk/test/tools/llvm-objdump/X86/disassemble-invalid-byte-sequences.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objdump/X86/disassemble-invalid-byte-sequences.test?rev=361489&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-objdump/X86/disassemble-invalid-byte-sequences.test (added)
+++ llvm/trunk/test/tools/llvm-objdump/X86/disassemble-invalid-byte-sequences.test Thu May 23 05:30:39 2019
@@ -0,0 +1,20 @@
+## Show that llvm-objdump handles invalid byte sequences, and continues.
+
+# RUN: yaml2obj %s -o %t.o
+# RUN: llvm-objdump %t.o -d | FileCheck %s
+
+# CHECK:      0000000000000000 .text:
+# CHECK:         0: d9 e2 <unknown>
+# CHECK-NEXT:    2: 90    nop
+
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  Type:    ET_EXEC
+  Machine: EM_X86_64
+Sections:
+  - Name:    .text
+    Type:    SHT_PROGBITS
+    Flags:   [SHF_ALLOC, SHF_EXECINSTR]
+    Content: 'd9e290'

Added: llvm/trunk/test/tools/llvm-objdump/X86/disassemble-long-instructions.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objdump/X86/disassemble-long-instructions.test?rev=361489&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-objdump/X86/disassemble-long-instructions.test (added)
+++ llvm/trunk/test/tools/llvm-objdump/X86/disassemble-long-instructions.test Thu May 23 05:30:39 2019
@@ -0,0 +1,17 @@
+## This test shows that llvm-objdump can disassemble a long instruction.
+# RUN: yaml2obj %s -o %t.o
+# RUN: llvm-objdump -d %t.o | FileCheck %s --strict-whitespace
+
+# CHECK: 0: 66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	nopw	%cs:(%rax,%rax)
+
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  Type:    ET_EXEC
+  Machine: EM_X86_64
+Sections:
+  - Name:  .text
+    Type:  SHT_PROGBITS
+    Flags: [SHF_ALLOC, SHF_EXECINSTR]
+    Content: '6666666666662E0F1F840000000000' # 15-byte nop

Added: llvm/trunk/test/tools/llvm-objdump/X86/elf-disassemble-dynamic-symbols.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objdump/X86/elf-disassemble-dynamic-symbols.test?rev=361489&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-objdump/X86/elf-disassemble-dynamic-symbols.test (added)
+++ llvm/trunk/test/tools/llvm-objdump/X86/elf-disassemble-dynamic-symbols.test Thu May 23 05:30:39 2019
@@ -0,0 +1,99 @@
+## Show the disassembly behaviour when dynamic symbols are present.
+# RUN: yaml2obj %s -o %t
+
+## Case 1: Both static and dynamic symbols are present. Only static
+## symbols are displayed.
+# RUN: llvm-objdump -d %t | FileCheck %s --check-prefixes=CHECK,STATIC
+
+## Case 2: Only the dynamic symbols are present. These should be displayed, if
+## they meet the necessary criteria.
+# RUN: llvm-objcopy --strip-all %t %t2
+# RUN: llvm-objdump -d %t2 | FileCheck %s --check-prefixes=CHECK,DYN
+
+# CHECK:       Disassembly of section .text:
+# CHECK-EMPTY:
+# STATIC-NEXT: 0000000000001000 .text:
+# DYN-NEXT:    0000000000001000 only_dyn:
+# CHECK-NEXT:      1000:
+# CHECK-EMPTY:
+# STATIC-NEXT: 0000000000001001 both_static:
+# DYN-NEXT:    0000000000001001 both_dyn:
+# CHECK-NEXT:      1001:
+# STATIC-EMPTY:
+# STATIC-NEXT: 0000000000001002 only_static:
+# CHECK-NEXT:      1002:
+# CHECK-NEXT:      1003:
+# CHECK-NEXT:      1004:
+# CHECK-NEXT:      1005:{{.*}}
+# CHECK-NOT:   {{.}}
+
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  Type:    ET_DYN
+  Machine: EM_X86_64
+Sections:
+  - Name:    .text
+    Type:    SHT_PROGBITS
+    Flags:   [SHF_ALLOC, SHF_EXECINSTR]
+    Address: 0x1000
+    Content: 909090909090
+ProgramHeaders:
+  - Type: PT_LOAD
+    VAddr: 0x1000
+    Sections:
+      - Section: .text
+Symbols:
+  - Name:    both_static
+    Value:   0x1001
+    Section: .text
+    Binding: STB_GLOBAL
+  - Name:    only_static
+    Value:   0x1002
+    Section: .text
+    Binding: STB_GLOBAL
+DynamicSymbols:
+  - Name:    only_dyn
+    Value:   0x1000
+    Section: .text
+    Size:    1
+    Type:    STT_FUNC
+    Binding: STB_GLOBAL
+  - Name:    both_dyn
+    Value:   0x1001
+    Section: .text
+    Size:    1
+    Type:    STT_FUNC
+    Binding: STB_GLOBAL
+  ## The rest of the dynamic symbols won't be used for various reasons.
+  ## FIXME: the first two symbols here should be dumped.
+  ##        See https://bugs.llvm.org/show_bug.cgi?id=41947
+  - Name:    not_func
+    Value:   0x1003
+    Section: .text
+    Type:    STT_OBJECT
+    Binding: STB_GLOBAL
+  - Name:    zero_sized
+    Value:   0x1004
+    Section: .text
+    Type:    STT_FUNC
+    Binding: STB_GLOBAL
+  - Name:    '' # No name
+    Value:   0x1005
+    Section: .text
+    Size:    1
+    Type:    STT_FUNC
+    Binding: STB_GLOBAL
+  - Name:    absolute
+    Value:   0x1005
+    Index:   SHN_ABS
+    Size:    1
+    Type:    STT_FUNC
+    Binding: STB_GLOBAL
+  - Name:    undefined
+    Value:   0x1005
+    Index:   SHN_UNDEF
+    Size:    1
+    Type:    STT_FUNC
+    Binding: STB_GLOBAL

Added: llvm/trunk/test/tools/llvm-objdump/X86/elf-disassemble-no-symtab.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objdump/X86/elf-disassemble-no-symtab.test?rev=361489&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-objdump/X86/elf-disassemble-no-symtab.test (added)
+++ llvm/trunk/test/tools/llvm-objdump/X86/elf-disassemble-no-symtab.test Thu May 23 05:30:39 2019
@@ -0,0 +1,24 @@
+## Show that llvm-objdump can handle a missing symbol table when printing
+## references and labels.
+
+# RUN: yaml2obj %s -o %t
+# RUN: llvm-objcopy -R .symtab %t
+# RUN: llvm-objdump %t -d | FileCheck %s
+
+# CHECK:       Disassembly of section .text:
+# CHECK-EMPTY:
+# CHECK-NEXT:  0000000000004000 .text:
+# CHECK-NEXT:    4000: e8 42 00 00 00                callq   66 <.text+0x47>
+
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  Type:    ET_EXEC
+  Machine: EM_X86_64
+Sections:
+  - Name:    .text
+    Type:    SHT_PROGBITS
+    Address: 0x4000
+    Flags:   [SHF_ALLOC, SHF_EXECINSTR]
+    Content: 'e842000000'

Added: llvm/trunk/test/tools/llvm-objdump/X86/elf-disassemble-relocs.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objdump/X86/elf-disassemble-relocs.test?rev=361489&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-objdump/X86/elf-disassemble-relocs.test (added)
+++ llvm/trunk/test/tools/llvm-objdump/X86/elf-disassemble-relocs.test Thu May 23 05:30:39 2019
@@ -0,0 +1,42 @@
+## Show that --disassemble + --reloc prints relocations inline and does not dump
+## the relocation sections.
+
+# RUN: yaml2obj %s -o %t.o
+# RUN: llvm-objdump %t.o -d -r | FileCheck %s --implicit-check-not="RELOCATION RECORDS"
+
+# CHECK:      0: e8 00 00 00 00                callq   0 <.text+0x5>
+# CHECK-NEXT:          0000000000000001:  R_X86_64_PC32        foo-4
+# CHECK-NEXT:          0000000000000002:  R_X86_64_NONE        bar+8
+# CHECK-NEXT: 5: e8 00 00 00 00                callq   0 <.text+0xa>
+# CHECK-NEXT:          0000000000000006:  R_X86_64_PLT32       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]
+    Content: 'e800000000e800000000'
+  - Name:    .rela.text
+    Type:    SHT_RELA
+    Info:    .text
+    Relocations:
+      - Offset: 1
+        Symbol: foo
+        Type:   R_X86_64_PC32
+        Addend: -4
+      - Offset: 2
+        Symbol: bar
+        Type:   R_X86_64_NONE
+        Addend: 8
+      - Offset: 6
+        Symbol: foo
+        Type:   R_X86_64_PLT32
+        Addend: 1
+Symbols:
+  - Name: foo
+  - Name: bar

Added: llvm/trunk/test/tools/llvm-objdump/X86/elf-disassemble-symbol-labels-exec.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objdump/X86/elf-disassemble-symbol-labels-exec.test?rev=361489&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-objdump/X86/elf-disassemble-symbol-labels-exec.test (added)
+++ llvm/trunk/test/tools/llvm-objdump/X86/elf-disassemble-symbol-labels-exec.test Thu May 23 05:30:39 2019
@@ -0,0 +1,54 @@
+## Show which labels are printed in disassembly of an executable.
+
+# RUN: yaml2obj %s -o %t
+# RUN: llvm-objdump %t -d | FileCheck %s --implicit-check-not=stt_section \
+# RUN:                                   --implicit-check-not=fourth \
+# RUN:                                   --implicit-check-not=absolute \
+# RUN:                                   --implicit-check-not=other
+
+# CHECK:     0000000000004000 first:
+# CHECK:     0000000000004001 second:
+# CHECK:     0000000000004002 third:
+
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  Type:    ET_EXEC
+  Machine: EM_X86_64
+Sections:
+  - Name:    .text
+    Type:    SHT_PROGBITS
+    Address: 0x4000
+    Flags:   [SHF_ALLOC, SHF_EXECINSTR]
+    Content: '9090909090'
+  - Name:    .text2
+    Type:    SHT_PROGBITS
+    Address: 0x4004
+    Flags:   [SHF_ALLOC, SHF_EXECINSTR]
+    Size:    0
+Symbols:
+  - Name:    first # Shows, with second, that symbol sizes are not used to delineate functions.
+    Value:   0x4000
+    Section: .text
+    Size:    0x2
+  - Name:    second
+    Value:   0x4001
+    Size:    0x1
+    Section: .text
+  - Name:    third # Shows, with fourth, that first symbol is picked.
+    Value:   0x4002
+    Section: .text
+  - Name:    fourth
+    Value:   0x4002
+    Section: .text
+  - Name:    stt_section # Shows that STT_SECTION symbols are ignored even if no other symbol present.
+    Value:   0x4003
+    Type:    STT_SECTION
+    Section: .text
+  - Name:    absolute # Show that absolute symbols are ignored.
+    Value:   0x4004
+    Index:   SHN_ABS
+  - Name:    other # Show that symbols from other sections are ignored.
+    Value:   0x4004
+    Section: .text2

Added: llvm/trunk/test/tools/llvm-objdump/X86/elf-disassemble-symbol-labels-rel.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objdump/X86/elf-disassemble-symbol-labels-rel.test?rev=361489&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-objdump/X86/elf-disassemble-symbol-labels-rel.test (added)
+++ llvm/trunk/test/tools/llvm-objdump/X86/elf-disassemble-symbol-labels-rel.test Thu May 23 05:30:39 2019
@@ -0,0 +1,58 @@
+## Show which labels are printed in disassembly of a relocatable object.
+
+# RUN: yaml2obj %s -o %t
+# RUN: llvm-objdump %t -d | FileCheck %s --implicit-check-not=stt_section \
+# RUN:                                   --implicit-check-not=first \
+# RUN:                                   --implicit-check-not=second \
+# RUN:                                   --implicit-check-not=third \
+# RUN:                                   --implicit-check-not=fourth \
+# RUN:                                   --implicit-check-not=absolute \
+# RUN:                                   --implicit-check-not=other
+
+# CHECK: Disassembly of section .text:
+# CHECK: 0000000000000000 first:
+# CHECK: 0000000000000001 second:
+# CHECK: 0000000000000002 third:
+# CHECK: Disassembly of section .text2:
+# CHECK: 0000000000000004 other:
+
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  Type:    ET_REL
+  Machine: EM_X86_64
+Sections:
+  - Name:    .text
+    Type:    SHT_PROGBITS
+    Flags:   [SHF_ALLOC, SHF_EXECINSTR]
+    Content: '909090909090'
+  - Name:    .text2
+    Type:    SHT_PROGBITS
+    Flags:   [SHF_ALLOC, SHF_EXECINSTR]
+    Content: '9090909090'
+Symbols:
+  - Name:    first
+    Value:   0
+    Section: .text
+    Size:    2
+  - Name:    second # Shows, with first, that symbol sizes are not used to delineate functions.
+    Value:   1
+    Size:    1
+    Section: .text
+  - Name:    third # Shows, with fourth, that first symbol is picked.
+    Value:   2
+    Section: .text
+  - Name:    fourth
+    Value:   2
+    Section: .text
+  - Name:    stt_section # Shows that STT_SECTION symbols are ignored even if no other symbol present.
+    Value:   3
+    Type:    STT_SECTION
+    Section: .text
+  - Name:    absolute # Show that absolute symbols are ignored.
+    Value:   4
+    Index:   SHN_ABS
+  - Name:    other # Show that symbols in other sections are ignored.
+    Value:   4
+    Section: .text2

Added: llvm/trunk/test/tools/llvm-objdump/X86/elf-disassemble-symbol-references.yaml
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objdump/X86/elf-disassemble-symbol-references.yaml?rev=361489&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-objdump/X86/elf-disassemble-symbol-references.yaml (added)
+++ llvm/trunk/test/tools/llvm-objdump/X86/elf-disassemble-symbol-references.yaml Thu May 23 05:30:39 2019
@@ -0,0 +1,101 @@
+## Show that references in disassembly are labelled with the correct symbol.
+# RUN: yaml2obj %s --docnum=1 -o %t
+# RUN: llvm-objdump %t -d | FileCheck %s --check-prefix=EXEC
+
+# EXEC: Disassembly of section .text1:
+# EXEC:     4000: e8 00 00 00 00                callq   0 <third>
+# EXEC: Disassembly of section .text2:
+# EXEC:     4005: e8 12 34 56 78                callq   2018915346 <fourth+0x78563412>
+
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  Type:    ET_EXEC
+  Machine: EM_X86_64
+Sections:
+  - Name:    .text1
+    Type:    SHT_PROGBITS
+    Address: 0x4000
+    Flags:   [SHF_ALLOC, SHF_EXECINSTR]
+    Content: 'e800000000' # Case 1: Referencing an address with a symbol.
+  - Name:    .text2
+    Type:    SHT_PROGBITS
+    Flags:   [SHF_ALLOC, SHF_EXECINSTR]
+    Address: 0x4005
+    Content: 'e812345678' # Case 2: Referencing an address without a symbol.
+  - Name:    .text3
+    Type:    SHT_PROGBITS
+    Flags:   [SHF_ALLOC, SHF_EXECINSTR]
+    Address: 0x400A
+Symbols:
+  - Name:    first
+    Section: .text1
+    Value:   0x4000
+  - Name:    second
+    Section: .text1
+    Value:   0x4005
+  - Name:    third
+    Section: .text2
+    Value:   0x4005
+  - Name:    fourth
+    Section: .text3
+    Value:   0x400A
+
+# RUN: yaml2obj %s --docnum=2 -o %t.o
+# RUN: llvm-objdump %t.o -d | FileCheck %s --check-prefix=REL
+
+# REL:      Disassembly of section .text1:
+# REL-EMPTY:
+# REL-NEXT: 0000000000000000 .text1:
+# REL-NEXT:        0: e8 00 00 00 00                callq   0 <.text1+0x5>
+# REL-EMPTY:
+# REL-NEXT: Disassembly of section .text2:
+# REL-EMPTY:
+# REL-NEXT: 0000000000000000 .text2:
+# REL-NEXT:        0: e8 00 00 00 00                callq   0 <sym2>
+# REL-EMPTY:
+# REL-NEXT: Disassembly of section .text3:
+# REL-EMPTY:
+# REL-NEXT: 0000000000000000 .text3:
+# REL-NEXT:        0: e8 00 00 00 00                callq   0 <.text3+0x5>
+
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  Type:    ET_REL
+  Machine: EM_X86_64
+Sections:
+  - Name:    .text1
+    Type:    SHT_PROGBITS
+    Flags:   [SHF_ALLOC, SHF_EXECINSTR]
+    Content: 'e800000000' # Case 1: Instruction is patched by a relocation.
+  - Name:    .rela.text1
+    Type:    SHT_RELA
+    Info:    .text1
+    Relocations:
+      - Offset: 1
+        Type:   R_X86_64_PC32
+        Symbol: sym3
+  - Name:    .text2
+    Type:    SHT_PROGBITS
+    Flags:   [SHF_ALLOC, SHF_EXECINSTR]
+    Content: 'e800000000' # Case 2: Referencing an address with a matching symbol in that section.
+  - Name:    .text3
+    Type:    SHT_PROGBITS
+    Flags:   [SHF_ALLOC, SHF_EXECINSTR]
+    Content: 'e800000000' # Case 3: Referencing an address without a matching symbol in that section.
+  - Name:    .other
+    Type:    SHT_PROGBITS
+Symbols:
+  # Shouldn't be picked, despite matching value, as not in right section.
+  - Name:    sym1
+    Section: .other
+    Value:   5
+  # Symbol in correct section, with right value should be picked for disassembly of .text2.
+  - Name:    sym2
+    Section: .text2
+    Value:   5
+  # Symbol referenced by relocation could be picked for disassembly of .text1, but isn't.
+  - Name:    sym3

Added: llvm/trunk/test/tools/llvm-objdump/X86/elf-disassemble.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objdump/X86/elf-disassemble.test?rev=361489&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-objdump/X86/elf-disassemble.test (added)
+++ llvm/trunk/test/tools/llvm-objdump/X86/elf-disassemble.test Thu May 23 05:30:39 2019
@@ -0,0 +1,50 @@
+## Show that disassembly is printed correctly, for only the desired sections.
+# RUN: yaml2obj %s -o %t.o
+# RUN: llvm-objdump %t.o --disassemble | FileCheck %s --implicit-check-not=Disassembly
+# RUN: llvm-objdump %t.o --disassemble-all | FileCheck %s --check-prefixes=CHECK,ALL
+
+# CHECK:       Disassembly of section .executable:
+# CHECK-EMPTY:
+# CHECK-NEXT:  0000000000001000 .executable:
+# CHECK-NEXT:         0: 90                            nop
+# ALL-EMPTY:
+# ALL-NEXT:    Disassembly of section .writable:
+# ALL-EMPTY:
+# ALL-NEXT:    0000000000002000 .writable:
+# ALL-NEXT:           0: c3                            retq
+# ALL-EMPTY:
+# ALL-NEXT:    Disassembly of section .readonly:
+# ALL-EMPTY:
+# ALL-NEXT:    0000000000003000 .readonly:
+# ALL-NEXT:           0: 01 00                         addl    %eax, (%rax)
+# ALL-EMPTY:
+# ALL-NEXT:    Disassembly of section .nobits:
+# ALL-EMPTY:
+# ALL-NEXT:    0000000000004000 .nobits:
+# ALL-NEXT:    ...
+
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  Type:    ET_REL
+  Machine: EM_X86_64
+Sections:
+  - Name:    .executable
+    Type:    SHT_PROGBITS
+    Address: 0x1000
+    Flags:   [SHF_EXECINSTR]
+    Content: '90'
+  - Name:    .writable
+    Type:    SHT_PROGBITS
+    Address: 0x2000
+    Flags:   [SHF_WRITE]
+    Content: 'c3'
+  - Name:    .readonly
+    Type:    SHT_PROGBITS
+    Address: 0x3000
+    Content: '0100'
+  - Name:    .nobits
+    Type:    SHT_NOBITS
+    Address: 0x4000
+    Size:    4

Added: llvm/trunk/test/tools/llvm-objdump/X86/start-stop-address-relocatable-object.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objdump/X86/start-stop-address-relocatable-object.test?rev=361489&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-objdump/X86/start-stop-address-relocatable-object.test (added)
+++ llvm/trunk/test/tools/llvm-objdump/X86/start-stop-address-relocatable-object.test Thu May 23 05:30:39 2019
@@ -0,0 +1,46 @@
+## Show how --start-address and --stop-address work in a relocatable object.
+## They limit the disassembly to the relative offset ranges within sections.
+# RUN: yaml2obj %s -o %t.o
+# RUN: llvm-objdump -d %t.o --start-address=1 --stop-address=2 | FileCheck %s --check-prefix=COMMON
+# RUN: llvm-objdump -d %t.o --start-address=1 | FileCheck %s --check-prefixes=START,COMMON
+# RUN: llvm-objdump -d %t.o --stop-address=2 | FileCheck %s --check-prefixes=STOP,COMMON
+
+# COMMON:       Disassembly of section .text:
+# COMMON-EMPTY:
+# COMMON-NEXT:  0000000000000000 .text:
+# STOP-NEXT:           0: 90                            nop
+# COMMON-NEXT:         1: 90                            nop
+# START-NEXT:          2: 90                            nop
+# COMMON-EMPTY:
+# COMMON-NEXT:  Disassembly of section .text2:
+# COMMON-EMPTY:
+# COMMON-NEXT:  0000000000000000 .text2:
+# STOP-NEXT:           0: c3                            retq
+# COMMON-NEXT:         1: c3                            retq
+# START-NEXT:          2: c3                            retq
+# STOP-EMPTY:
+# STOP-NEXT:    Disassembly of section .text3:
+# STOP-EMPTY:
+# STOP-NEXT:    0000000000000000 .text3:
+# STOP-NEXT:           0: cc                            int3
+# COMMON-NOT:   {{.}}
+
+--- !ELF
+FileHeader:
+  Class:   ELFCLASS64
+  Data:    ELFDATA2LSB
+  Type:    ET_REL
+  Machine: EM_X86_64
+Sections:
+  - Name:         .text
+    Type:         SHT_PROGBITS
+    Flags:        [SHF_ALLOC, SHF_EXECINSTR]
+    Content:      '909090'
+  - Name:         .text2
+    Type:         SHT_PROGBITS
+    Flags:        [SHF_ALLOC, SHF_EXECINSTR]
+    Content:      'c3c3c3'
+  - Name:         .text3
+    Type:         SHT_PROGBITS
+    Flags:        [SHF_ALLOC, SHF_EXECINSTR]
+    Content:      'cc'

Modified: llvm/trunk/test/tools/llvm-objdump/X86/start-stop-address.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objdump/X86/start-stop-address.test?rev=361489&r1=361488&r2=361489&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-objdump/X86/start-stop-address.test (original)
+++ llvm/trunk/test/tools/llvm-objdump/X86/start-stop-address.test Thu May 23 05:30:39 2019
@@ -1,8 +1,12 @@
 // RUN: yaml2obj -o %t.out %p/Inputs/simple-executable-x86_64.yaml 
 // RUN: llvm-objdump -d %t.out --start-address=0x18 --stop-address=0x2f | FileCheck %s 
-// RUN: llvm-objdump -d %t.out --start-address=0xc --stop-address=0x11 | FileCheck %s --check-prefix "CROSSSECTION"
-// RUN: llvm-objdump -d %t.out --start-address=0x40 --stop-address=0x47 | FileCheck %s --check-prefix "CROSSDATA"
+// RUN: llvm-objdump -d %t.out --start-address=0xc --stop-address=0x11 | FileCheck %s --check-prefix CROSSSECTION
+// RUN: llvm-objdump -d %t.out --start-address=0x40 --stop-address=0x47 | FileCheck %s --check-prefix CROSSDATA
+// RUN: llvm-objdump -d %t.out --start-address=0x40 | FileCheck %s --check-prefix START
+// RUN: llvm-objdump -d %t.out --stop-address=0x11 | FileCheck %s --check-prefix STOP
+// RUN: llvm-objdump -d %t.out --start-address=0xffffffff | FileCheck %s --check-prefix OUT-OF-RANGE
 
+// CHECK-NOT:          Disassembly
 // CHECK:              Disassembly of section .anothertext:
 // CHECK-EMPTY:
 // CHECK-NEXT:         main:
@@ -10,8 +14,9 @@
 // CHECK-NEXT:         20:	c7 45 fc 00 00 00 00 	movl	$0, -4(%rbp)
 // CHECK-NEXT:         27:	48 89 45 f0 	movq	%rax, -16(%rbp)
 // CHECK-NEXT:         2b:	48 8b 45 f0 	movq	-16(%rbp), %rax
-// CHECK-NOT:          2f:
+// CHECK-NOT:          {{.}}
 
+// CROSSECTION-NOT:    Disassembly
 // CROSSSECTION:       Disassembly of section .text:
 // CROSSSECTION-EMPTY:
 // CROSSSECTION-NEXT:  foo:
@@ -22,12 +27,45 @@
 // CROSSSECTION-EMPTY:
 // CROSSSECTION-NEXT:  main:
 // CROSSSECTION-NEXT:  10:	55 	pushq	%rbp
-// CROSSSECTION-NOT:   11:
+// CROSSSECTION-NOT:   {{.}}
 
+// CROSSDATA-NOT:      Disassembly
 // CROSSDATA:          Disassembly of section .anothertext:
 // CROSSDATA:          main:
 // CROSSDATA:          40:	48 83 c4 20 	addq	$32, %rsp
 // CROSSDATA:          44:	5d 	popq	%rbp
 // CROSSDATA-DAG:      somedata:
 // CROSSDATA-NEXT:     45:	 74 65                           te
+// CROSSDATA-NOT:      {{.}}
 
+// START-NOT:   Disassembly
+// START:       Disassembly of section .anothertext:
+// START-EMPTY:
+// START-NEXT:  0000000000000010 main:
+// START-NEXT:        40: 48 83 c4 20                   addq    $32, %rsp
+// START-NEXT:        44: 5d                            popq    %rbp
+// START-EMPTY:
+// START-NEXT:  0000000000000045 somedata:
+// START-NEXT:        45:        74 65 73 74 20 73 74 72         test str
+// START-NEXT:        4d:        00 c3                           ..
+
+// STOP:       Disassembly of section .text:
+// STOP-EMPTY:
+// STOP-NEXT:       0000000000000000 foo:
+// STOP-NEXT:       0: 55                            pushq   %rbp
+// STOP-NEXT:       1: 48 89 e5                      movq    %rsp, %rbp
+// STOP-NEXT:       4: 8b 04 25 a8 00 00 00          movl    168, %eax
+// STOP-NEXT:       b: 5d                            popq    %rbp
+// STOP-NEXT:       c: c3                            retq
+// STOP-NEXT:       d: 0f 1f 00                      nopl    (%rax)
+// STOP-EMPTY:
+// STOP-NEXT:  Disassembly of section .anothertext:
+// STOP-EMPTY:
+// STOP-NEXT:  0000000000000010 main:
+// STOP-NEXT:      10: 55                            pushq   %rbp
+// STOP-NOT:       {{.}}
+
+// OUT-OF-RANGE-NOT: Disassembly
+
+// RUN: not llvm-objdump -d %t.out --start-address=0x40 --stop-address=0x3f 2>&1 | FileCheck %s --check-prefix ERRMSG
+// ERRMSG: error: Start address should be less than stop address.

Removed: llvm/trunk/test/tools/llvm-objdump/X86/stripped-shared.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-objdump/X86/stripped-shared.test?rev=361488&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-objdump/X86/stripped-shared.test (original)
+++ llvm/trunk/test/tools/llvm-objdump/X86/stripped-shared.test (removed)
@@ -1,10 +0,0 @@
-// This test checks that dynamic symbols are used when disassembling elf files.
-// RUN: llvm-objdump -d %p/Inputs/stripped-elf.so | FileCheck %s
-
-# CHECK: .init
-# CHECK: .plt
-# CHECK: .text
-# CHECK: func0
-# CHECK: func1
-# CHECK: func2
-# CHECK: .fini




More information about the llvm-commits mailing list