Commit e1f524ea authored by Georgii Rymar's avatar Georgii Rymar
Browse files

[llvm-readobj][llvm-readelf][test] - Add a few more dynamic section tests.

This adds a few more tests for dynamic section.

We only had tests for simple unknown values for 64-bits target,
in this patch I've added OS specific and processor specific tags.
Also it tests both 32 and 64-bits targets now.

It will help to fix the formatting issues we have and diagnose a possible new ones.

Differential revision: https://reviews.llvm.org/D71896
parent 1d6b964e
Loading
Loading
Loading
Loading
+288 −61
Original line number Diff line number Diff line
# RUN: yaml2obj %s > %t
# RUN: llvm-objdump -p %t | FileCheck %s
# RUN: yaml2obj --docnum=1 %s -o %t1
# RUN: llvm-objdump -p %t1 | FileCheck %s --strict-whitespace --match-full-lines --check-prefix=ELF64

#      CHECK:Dynamic Section:
# CHECK-NEXT:  NEEDED               D
# CHECK-NEXT:  PLTRELSZ             0x0000000000000010
# CHECK-NEXT:  PLTGOT               0x0000000000001000
# CHECK-NEXT:  HASH                 0x0000000000001000
# CHECK-NEXT:  STRTAB               0x0000000000001000
# CHECK-NEXT:  SYMTAB               0x0000000000001000
# CHECK-NEXT:  RELA                 0x0000000000001000
# CHECK-NEXT:  RELASZ               0x0000000000000010
# CHECK-NEXT:  RELAENT              0x0000000000000789
# CHECK-NEXT:  STRSZ                0x0000000000000010
# CHECK-NEXT:  SYMENT               0x0000000000000987
# CHECK-NEXT:  INIT                 0x0000000000001000
# CHECK-NEXT:  FINI                 0x0000000000001000
# CHECK-NEXT:  SONAME               U
# CHECK-NEXT:  RPATH                f
# CHECK-NEXT:  SYMBOLIC             0x1234567890abcdef
# CHECK-NEXT:  REL                  0x0000000000001000
# CHECK-NEXT:  RELSZ                0x0000000000000010
# CHECK-NEXT:  RELENT               0x0000000000000123
# CHECK-NEXT:  PLTREL               0x0000000000000007
# CHECK-NEXT:  DEBUG                0xfedcba0987654321
# CHECK-NEXT:  TEXTREL              0x1122334455667788
# CHECK-NEXT:  JMPREL               0x0000000000001000
# CHECK-NEXT:  BIND_NOW             0x8877665544332211
# CHECK-NEXT:  INIT_ARRAY           0x0000000000001000
# CHECK-NEXT:  FINI_ARRAY           0x0000000000001000
# CHECK-NEXT:  INIT_ARRAYSZ         0x0000000000000010
# CHECK-NEXT:  FINI_ARRAYSZ         0x0000000000000010
# CHECK-NEXT:  RUNPATH              w
# CHECK-NEXT:  FLAGS                0xaabbccddeeff9900
# CHECK-NEXT:  PREINIT_ARRAY        0x0000000000001000
# CHECK-NEXT:  PREINIT_ARRAYSZ      0x0000000000000010
# CHECK-NEXT:  SYMTAB_SHNDX         0x0000000000001000
# CHECK-NEXT:  RELRSZ               0x0000000000000010
# CHECK-NEXT:  RELR                 0x0000000000001000
# CHECK-NEXT:  RELRENT              0x0000000000004321
# CHECK-NEXT:  ANDROID_REL          0x0000000000001000
# CHECK-NEXT:  ANDROID_RELSZ        0x0000000000000010
# CHECK-NEXT:  ANDROID_RELA         0x0000000000001000
# CHECK-NEXT:  ANDROID_RELASZ       0x0000000000000010
# CHECK-NEXT:  ANDROID_RELR         0x0000000000001000
# CHECK-NEXT:  ANDROID_RELRSZ       0x0000000000000010
# CHECK-NEXT:  ANDROID_RELRENT      0x0000000000001234
# CHECK-NEXT:  GNU_HASH             0x0000000000001000
# CHECK-NEXT:  TLSDESC_PLT          0x0000000000001000
# CHECK-NEXT:  TLSDESC_GOT          0x0000000000001000
# CHECK-NEXT:  RELACOUNT            0x0000000000000000
# CHECK-NEXT:  RELCOUNT             0x0000000000000000
# CHECK-NEXT:  FLAGS_1              0x0000000087654321
# CHECK-NEXT:  VERSYM               0x0000000000001000
# CHECK-NEXT:  VERDEF               0x0000000000001000
# CHECK-NEXT:  VERDEFNUM            0x0000000000000000
# CHECK-NEXT:  VERNEED              0x0000000000001000
# CHECK-NEXT:  VERNEEDNUM           0x0000000000000000
# CHECK-NEXT:  AUXILIARY            D
# CHECK-NEXT:  FILTER               U
# CHECK-NEXT:  <unknown:>0x1234abcd 0x0000000000000001
#      ELF64:Dynamic Section:
# ELF64-NEXT:  NEEDED               D
# ELF64-NEXT:  PLTRELSZ             0x0000000000000010
# ELF64-NEXT:  PLTGOT               0x0000000000001000
# ELF64-NEXT:  HASH                 0x0000000000001000
# ELF64-NEXT:  STRTAB               0x0000000000001000
# ELF64-NEXT:  SYMTAB               0x0000000000001000
# ELF64-NEXT:  RELA                 0x0000000000001000
# ELF64-NEXT:  RELASZ               0x0000000000000010
# ELF64-NEXT:  RELAENT              0x0000000000000789
# ELF64-NEXT:  STRSZ                0x0000000000000010
# ELF64-NEXT:  SYMENT               0x0000000000000987
# ELF64-NEXT:  INIT                 0x0000000000001000
# ELF64-NEXT:  FINI                 0x0000000000001000
# ELF64-NEXT:  SONAME               U
# ELF64-NEXT:  RPATH                f
# ELF64-NEXT:  SYMBOLIC             0x1234567890abcdef
# ELF64-NEXT:  REL                  0x0000000000001000
# ELF64-NEXT:  RELSZ                0x0000000000000010
# ELF64-NEXT:  RELENT               0x0000000000000123
# ELF64-NEXT:  PLTREL               0x0000000000000007
# ELF64-NEXT:  DEBUG                0xfedcba0987654321
# ELF64-NEXT:  TEXTREL              0x1122334455667788
# ELF64-NEXT:  JMPREL               0x0000000000001000
# ELF64-NEXT:  BIND_NOW             0x8877665544332211
# ELF64-NEXT:  INIT_ARRAY           0x0000000000001000
# ELF64-NEXT:  FINI_ARRAY           0x0000000000001000
# ELF64-NEXT:  INIT_ARRAYSZ         0x0000000000000010
# ELF64-NEXT:  FINI_ARRAYSZ         0x0000000000000010
# ELF64-NEXT:  RUNPATH              w
# ELF64-NEXT:  FLAGS                0xaabbccddeeff9900
# ELF64-NEXT:  PREINIT_ARRAY        0x0000000000001000
# ELF64-NEXT:  PREINIT_ARRAYSZ      0x0000000000000010
# ELF64-NEXT:  SYMTAB_SHNDX         0x0000000000001000
# ELF64-NEXT:  RELRSZ               0x0000000000000010
# ELF64-NEXT:  RELR                 0x0000000000001000
# ELF64-NEXT:  RELRENT              0x0000000000004321
# ELF64-NEXT:  ANDROID_REL          0x0000000000001000
# ELF64-NEXT:  ANDROID_RELSZ        0x0000000000000010
# ELF64-NEXT:  ANDROID_RELA         0x0000000000001000
# ELF64-NEXT:  ANDROID_RELASZ       0x0000000000000010
# ELF64-NEXT:  ANDROID_RELR         0x0000000000001000
# ELF64-NEXT:  ANDROID_RELRSZ       0x0000000000000010
# ELF64-NEXT:  ANDROID_RELRENT      0x0000000000001234
# ELF64-NEXT:  GNU_HASH             0x0000000000001000
# ELF64-NEXT:  TLSDESC_PLT          0x0000000000001000
# ELF64-NEXT:  TLSDESC_GOT          0x0000000000001000
# ELF64-NEXT:  RELACOUNT            0x0000000000000000
# ELF64-NEXT:  RELCOUNT             0x0000000000000000
# ELF64-NEXT:  FLAGS_1              0x0000000087654321
# ELF64-NEXT:  VERSYM               0x0000000000001000
# ELF64-NEXT:  VERDEF               0x0000000000001000
# ELF64-NEXT:  VERDEFNUM            0x0000000000000000
# ELF64-NEXT:  VERNEED              0x0000000000001000
# ELF64-NEXT:  VERNEEDNUM           0x0000000000000000
# ELF64-NEXT:  AUXILIARY            D
# ELF64-NEXT:  FILTER               U
# ELF64-NEXT:  <unknown:>0x12345678 0x8765432187654321
# ELF64-NEXT:  <unknown:>0x6abcdef0 0x9988776655443322
# ELF64-NEXT:  <unknown:>0x76543210 0x5555666677778888
# ELF64-NOT:{{.}}

--- !ELF
FileHeader:
@@ -189,8 +192,232 @@ Sections:
       Value: 0x1
     - Tag:   DT_FILTER
       Value: 0x3
     - Tag:   0x1234abcd
## Show behaviour for unknown values in special and unmarked ranges.
## An arbitrary unknown value outside of the special ranges.
     - Tag:   0x12345678
       Value: 0x8765432187654321
## An OS specific tag.
     - Tag:   0x6abcdef0
       Value: 0x9988776655443322
## A processor specific tags.
     - Tag:   0x76543210
       Value: 0x5555666677778888
     - Tag:   DT_NULL
       Value: 0x0
ProgramHeaders:
  - Type: PT_LOAD
    VAddr: 0x1000
    Sections:
      - Section: .dynstr
      - Section: .dynamic
  - Type: PT_DYNAMIC
    VAddr: 0x1010
    Sections:
      - Section: .dynamic

# RUN: yaml2obj --docnum=2 %s > %t2
# RUN: llvm-objdump -p %t2 | FileCheck %s --strict-whitespace --match-full-lines --check-prefix=ELF32

#      ELF32:Dynamic Section:
# ELF32-NEXT:  NEEDED               D
# ELF32-NEXT:  PLTRELSZ             0x00000010
# ELF32-NEXT:  PLTGOT               0x00001000
# ELF32-NEXT:  HASH                 0x00001000
# ELF32-NEXT:  STRTAB               0x00001000
# ELF32-NEXT:  SYMTAB               0x00001000
# ELF32-NEXT:  RELA                 0x00001000
# ELF32-NEXT:  RELASZ               0x00000010
# ELF32-NEXT:  RELAENT              0x00000789
# ELF32-NEXT:  STRSZ                0x00000010
# ELF32-NEXT:  SYMENT               0x00000987
# ELF32-NEXT:  INIT                 0x00001000
# ELF32-NEXT:  FINI                 0x00001000
# ELF32-NEXT:  SONAME               U
# ELF32-NEXT:  RPATH                f
# ELF32-NEXT:  SYMBOLIC             0x12345678
# ELF32-NEXT:  REL                  0x00001000
# ELF32-NEXT:  RELSZ                0x00000010
# ELF32-NEXT:  RELENT               0x00000123
# ELF32-NEXT:  PLTREL               0x00000007
# ELF32-NEXT:  DEBUG                0xfedcba09
# ELF32-NEXT:  TEXTREL              0x11223344
# ELF32-NEXT:  JMPREL               0x00001000
# ELF32-NEXT:  BIND_NOW             0x88776655
# ELF32-NEXT:  INIT_ARRAY           0x00001000
# ELF32-NEXT:  FINI_ARRAY           0x00001000
# ELF32-NEXT:  INIT_ARRAYSZ         0x00000010
# ELF32-NEXT:  FINI_ARRAYSZ         0x00000010
# ELF32-NEXT:  RUNPATH              w
# ELF32-NEXT:  FLAGS                0xaabbccdd
# ELF32-NEXT:  PREINIT_ARRAY        0x00001000
# ELF32-NEXT:  PREINIT_ARRAYSZ      0x00000010
# ELF32-NEXT:  SYMTAB_SHNDX         0x00001000
# ELF32-NEXT:  RELRSZ               0x00000010
# ELF32-NEXT:  RELR                 0x00001000
# ELF32-NEXT:  RELRENT              0x00004321
# ELF32-NEXT:  ANDROID_REL          0x00001000
# ELF32-NEXT:  ANDROID_RELSZ        0x00000010
# ELF32-NEXT:  ANDROID_RELA         0x00001000
# ELF32-NEXT:  ANDROID_RELASZ       0x00000010
# ELF32-NEXT:  ANDROID_RELR         0x00001000
# ELF32-NEXT:  ANDROID_RELRSZ       0x00000010
# ELF32-NEXT:  ANDROID_RELRENT      0x00001234
# ELF32-NEXT:  GNU_HASH             0x00001000
# ELF32-NEXT:  TLSDESC_PLT          0x00001000
# ELF32-NEXT:  TLSDESC_GOT          0x00001000
# ELF32-NEXT:  RELACOUNT            0x00000000
# ELF32-NEXT:  RELCOUNT             0x00000000
# ELF32-NEXT:  FLAGS_1              0x87654321
# ELF32-NEXT:  VERSYM               0x00001000
# ELF32-NEXT:  VERDEF               0x00001000
# ELF32-NEXT:  VERDEFNUM            0x00000000
# ELF32-NEXT:  VERNEED              0x00001000
# ELF32-NEXT:  VERNEEDNUM           0x00000000
# ELF32-NEXT:  AUXILIARY            D
# ELF32-NEXT:  FILTER               U
# ELF32-NEXT:  <unknown:>0x12345678 0x87654321
# ELF32-NEXT:  <unknown:>0x6abcdef0 0x99887766
# ELF32-NEXT:  <unknown:>0x76543210 0x55556666

--- !ELF
FileHeader:
  Class:   ELFCLASS32
  Data:    ELFDATA2LSB
  Type:    ET_EXEC
  Machine: EM_386
Sections:
  - Name:    .dynstr
    Type:    SHT_STRTAB
    Address: 0x1000
    Size:    0x10
    Content: "004400550066007700"
  - Name:    .dynamic
    Type:    SHT_DYNAMIC
    Address: 0x1010
    Link:    1
    Entries:
     - Tag:   DT_NEEDED
       Value: 0x1
     - Tag:   DT_PLTRELSZ
       Value: 0x10
     - Tag:   DT_PLTGOT
       Value: 0x1000
     - Tag:   DT_HASH
       Value: 0x1000
     - Tag:   DT_STRTAB
       Value: 0x1000
     - Tag:   DT_SYMTAB
       Value: 0x1000
     - Tag:   DT_RELA
       Value: 0x1000
     - Tag:   DT_RELASZ
       Value: 0x10
     - Tag:   DT_RELAENT
       Value: 0x789
     - Tag:   DT_STRSZ
       Value: 0x10
     - Tag:   DT_SYMENT
       Value: 0x987
     - Tag:   DT_INIT
       Value: 0x1000
     - Tag:   DT_FINI
       Value: 0x1000
     - Tag:   DT_SONAME
       Value: 0x3
     - Tag:   DT_RPATH
       Value: 0x5
     - Tag:   DT_SYMBOLIC
       Value: 0x12345678
     - Tag:   DT_REL
       Value: 0x1000
     - Tag:   DT_RELSZ
       Value: 0x10
     - Tag:   DT_RELENT
       Value: 0x123
     - Tag:   DT_PLTREL
       Value: 0x7
     - Tag:   DT_DEBUG
       Value: 0xfedcba09
     - Tag:   DT_TEXTREL
       Value: 0x11223344
     - Tag:   DT_JMPREL
       Value: 0x1000
     - Tag:   DT_BIND_NOW
       Value: 0x88776655
     - Tag:   DT_INIT_ARRAY
       Value: 0x1000
     - Tag:   DT_FINI_ARRAY
       Value: 0x1000
     - Tag:   DT_INIT_ARRAYSZ
       Value: 0x10
     - Tag:   DT_FINI_ARRAYSZ
       Value: 0x10
     - Tag:   DT_RUNPATH
       Value: 0x7
     - Tag:   DT_FLAGS
       Value: 0xaabbccdd
     - Tag:   DT_PREINIT_ARRAY
       Value: 0x1000
     - Tag:   DT_PREINIT_ARRAYSZ
       Value: 0x10
     - Tag:   DT_SYMTAB_SHNDX
       Value: 0x1000
     - Tag:   DT_RELRSZ
       Value: 0x10
     - Tag:   DT_RELR
       Value: 0x1000
     - Tag:   DT_RELRENT
       Value: 0x4321
     - Tag:   DT_ANDROID_REL
       Value: 0x1000
     - Tag:   DT_ANDROID_RELSZ
       Value: 0x10
     - Tag:   DT_ANDROID_RELA
       Value: 0x1000
     - Tag:   DT_ANDROID_RELASZ
       Value: 0x10
     - Tag:   DT_ANDROID_RELR
       Value: 0x1000
     - Tag:   DT_ANDROID_RELRSZ
       Value: 0x10
     - Tag:   DT_ANDROID_RELRENT
       Value: 0x1234
     - Tag:   DT_GNU_HASH
       Value: 0x1000
     - Tag:   DT_TLSDESC_PLT
       Value: 0x1000
     - Tag:   DT_TLSDESC_GOT
       Value: 0x1000
     - Tag:   DT_RELACOUNT
       Value: 0x0
     - Tag:   DT_RELCOUNT
       Value: 0x0
     - Tag:   DT_FLAGS_1
       Value: 0x87654321
     - Tag:   DT_VERSYM
       Value: 0x1000
     - Tag:   DT_VERDEF
       Value: 0x1000
     - Tag:   DT_VERDEFNUM
       Value: 0x0
     - Tag:   DT_VERNEED
       Value: 0x1000
     - Tag:   DT_VERNEEDNUM
       Value: 0x0
     - Tag:   DT_AUXILIARY
       Value: 0x1
     - Tag:   DT_FILTER
       Value: 0x3
## Show behaviour for unknown values in special and unmarked ranges.
## An arbitrary unknown value outside of the special ranges.
     - Tag:   0x12345678
       Value: 0x87654321
## An OS specific tag.
     - Tag:   0x6abcdef0
       Value: 0x99887766
## A processor specific tags.
     - Tag:   0x76543210
       Value: 0x55556666
     - Tag:   DT_NULL
       Value: 0x0
ProgramHeaders:
+428 −135

File changed.

Preview size limit exceeded, changes collapsed.