forked from OSchip/llvm-project
[llvm-readelf] - Remove the precompiled binary from gnu-hash-symbols.test
I am working on https://bugs.llvm.org/show_bug.cgi?id=42622 and this patch reworks the gnu-hash-symbols.test so that it will be easier to expand it with x86_64 case. Differential revision: https://reviews.llvm.org/D64750 llvm-svn: 366430
This commit is contained in:
parent
4f8dc16fcd
commit
37d7cb2df0
Binary file not shown.
|
@ -0,0 +1,283 @@
|
|||
## Check llvm-readelf is able to dump the content of hash sections correctly.
|
||||
|
||||
## Check the output when both .hash and .gnu.hash sections are present.
|
||||
|
||||
# RUN: yaml2obj --docnum=1 %s -o %t1-32.so
|
||||
# RUN: llvm-readelf --hash-symbols %t1-32.so \
|
||||
# RUN: | FileCheck %s --strict-whitespace --match-full-lines --check-prefix HASH-32
|
||||
|
||||
# HASH-32: Symbol table of .hash for image:
|
||||
# HASH-32-NEXT: Num Buc: Value Size Type Bind Vis Ndx Name
|
||||
# HASH-32-NEXT: 1 0: 00000000 0 NOTYPE GLOBAL DEFAULT UND ccc
|
||||
# HASH-32-NEXT: 5 0: 00001001 0 NOTYPE WEAK DEFAULT 1 bbb
|
||||
# HASH-32-NEXT: 3 0: 00000001 0 NOTYPE GLOBAL DEFAULT ABS ddd
|
||||
# HASH-32-NEXT: 2 0: 00001000 0 NOTYPE GLOBAL DEFAULT 1 aaa
|
||||
# HASH-32-NEXT: 4 0: 00000000 0 NOTYPE GLOBAL DEFAULT 2 eee
|
||||
# HASH-32-EMPTY:
|
||||
# HASH-32: Symbol table of .gnu.hash for image:
|
||||
# HASH-32-NEXT: Num Buc: Value Size Type Bind Vis Ndx Name
|
||||
# HASH-32-NEXT: 2 1: 00001000 0 NOTYPE GLOBAL DEFAULT 1 aaa
|
||||
# HASH-32-NEXT: 3 1: 00000001 0 NOTYPE GLOBAL DEFAULT ABS ddd
|
||||
# HASH-32-NEXT: 4 2: 00000000 0 NOTYPE GLOBAL DEFAULT 2 eee
|
||||
# HASH-32-NEXT: 5 2: 00001001 0 NOTYPE WEAK DEFAULT 1 bbb
|
||||
# HASH-32-NOT: {{.}}
|
||||
|
||||
--- !ELF
|
||||
FileHeader:
|
||||
Class: ELFCLASS32
|
||||
Data: ELFDATA2LSB
|
||||
Type: ET_DYN
|
||||
Machine: EM_386
|
||||
Sections:
|
||||
## The contents of .hash and .gnu.hash were generated by a linker.
|
||||
- Name: .hash
|
||||
Type: SHT_HASH
|
||||
Flags: [ SHF_ALLOC ]
|
||||
Link: .dynsym
|
||||
Content: '0300000006000000010000000000000000000000000000000500000004000000020000000000000003000000'
|
||||
- Name: .gnu.hash
|
||||
Type: SHT_GNU_HASH
|
||||
Flags: [ SHF_ALLOC ]
|
||||
Link: .dynsym
|
||||
Content: 0300000002000000010000000500000048991200000000000200000004000000685C880B9169880BF46D880BCB60880B
|
||||
- Name: .dynamic
|
||||
Type: SHT_DYNAMIC
|
||||
Flags: [ SHF_ALLOC ]
|
||||
Link: .dynstr
|
||||
Entries:
|
||||
## PT_LOAD's p_vaddr is 0x0. PT_LOAD's p_offset = 0x1bc. DT_HASH value is 0x0.
|
||||
## llvm-readelf will read .hash content from p_offset + (p_vaddr - DT_HASH value) = 0x1bc.
|
||||
## This matches the file offset of the .hash section.
|
||||
- Tag: DT_HASH
|
||||
Value: 0x0000000000000000
|
||||
- Tag: DT_GNU_HASH
|
||||
## PT_LOAD's p_vaddr is 0x0. PT_LOAD's p_offset = 0x1bc. DT_GNU_HASH value is 0x2c (size of .hash = 0x2c).
|
||||
## llvm-readelf will read .gnu.hash content from p_offset + (p_vaddr - DT_GNU_HASH value) = 0x1e8.
|
||||
## This matches the file offset of the .gnu.hash section.
|
||||
Value: 0x000000000000002C
|
||||
- Tag: DT_NULL
|
||||
Value: 0x0000000000000000
|
||||
DynamicSymbols:
|
||||
- Name: ccc
|
||||
Binding: STB_GLOBAL
|
||||
- Name: aaa
|
||||
Section: .hash
|
||||
Binding: STB_GLOBAL
|
||||
Value: 0x0000000000001000
|
||||
- Name: ddd
|
||||
Index: SHN_ABS
|
||||
Binding: STB_GLOBAL
|
||||
Value: 0x0000000000000001
|
||||
- Name: eee
|
||||
Section: .gnu.hash
|
||||
Binding: STB_GLOBAL
|
||||
- Name: bbb
|
||||
Section: .hash
|
||||
Binding: STB_WEAK
|
||||
Value: 0x0000000000001001
|
||||
ProgramHeaders:
|
||||
- Type: PT_LOAD
|
||||
Flags: [ PF_R, PF_X ]
|
||||
Sections:
|
||||
- Section: .hash
|
||||
- Section: .gnu.hash
|
||||
- Section: .dynamic
|
||||
|
||||
## Check the output when only .hash section is present.
|
||||
|
||||
# RUN: yaml2obj --docnum=2 %s -o %t2-32.so
|
||||
# RUN: llvm-readelf --hash-symbols %t2-32.so \
|
||||
# RUN: | FileCheck %s --strict-whitespace --match-full-lines --check-prefix ONLY-HASH-32
|
||||
|
||||
# ONLY-HASH-32: Symbol table of .hash for image:
|
||||
# ONLY-HASH-32-NEXT: Num Buc: Value Size Type Bind Vis Ndx Name
|
||||
# ONLY-HASH-32-NEXT: 1 0: 00000000 0 NOTYPE GLOBAL DEFAULT UND ccc
|
||||
# ONLY-HASH-32-NEXT: 5 0: 00001001 0 NOTYPE WEAK DEFAULT 1 bbb
|
||||
# ONLY-HASH-32-NEXT: 3 0: 00000001 0 NOTYPE GLOBAL DEFAULT ABS ddd
|
||||
# ONLY-HASH-32-NEXT: 2 0: 00001000 0 NOTYPE GLOBAL DEFAULT 1 aaa
|
||||
# ONLY-HASH-32-NEXT: 4 0: 00000000 0 NOTYPE GLOBAL DEFAULT 2 eee
|
||||
# ONLY-HASH-32-NOT: {{.}}
|
||||
|
||||
--- !ELF
|
||||
FileHeader:
|
||||
Class: ELFCLASS32
|
||||
Data: ELFDATA2LSB
|
||||
Type: ET_DYN
|
||||
Machine: EM_386
|
||||
Sections:
|
||||
## The contents of .hash was generated by a linker.
|
||||
- Name: .hash
|
||||
Type: SHT_HASH
|
||||
Flags: [ SHF_ALLOC ]
|
||||
Link: .dynsym
|
||||
Content: '0300000006000000010000000000000000000000000000000500000004000000020000000000000003000000'
|
||||
- Name: .dynamic
|
||||
Type: SHT_DYNAMIC
|
||||
Flags: [ SHF_ALLOC ]
|
||||
Link: .dynstr
|
||||
Entries:
|
||||
- Tag: DT_HASH
|
||||
Value: 0x0000000000000000
|
||||
- Tag: DT_NULL
|
||||
Value: 0x0000000000000000
|
||||
DynamicSymbols:
|
||||
- Name: ccc
|
||||
Binding: STB_GLOBAL
|
||||
- Name: aaa
|
||||
Section: .hash
|
||||
Binding: STB_GLOBAL
|
||||
Value: 0x0000000000001000
|
||||
- Name: ddd
|
||||
Index: SHN_ABS
|
||||
Binding: STB_GLOBAL
|
||||
Value: 0x0000000000000001
|
||||
- Name: eee
|
||||
Section: .dynamic
|
||||
Binding: STB_GLOBAL
|
||||
- Name: bbb
|
||||
Section: .hash
|
||||
Binding: STB_WEAK
|
||||
Value: 0x0000000000001001
|
||||
ProgramHeaders:
|
||||
- Type: PT_LOAD
|
||||
Flags: [ PF_R, PF_X ]
|
||||
Sections:
|
||||
- Section: .hash
|
||||
- Section: .dynamic
|
||||
|
||||
## Check the output when only .gnu.hash section is present.
|
||||
|
||||
# RUN: yaml2obj --docnum=3 %s -o %t3-32.so
|
||||
# RUN: llvm-readelf --hash-symbols %t3-32.so \
|
||||
# RUN: | FileCheck %s --strict-whitespace --match-full-lines --check-prefix ONLY-GNUHASH-32
|
||||
|
||||
# ONLY-GNUHASH-32: Symbol table of .gnu.hash for image:
|
||||
# ONLY-GNUHASH-32-NEXT: Num Buc: Value Size Type Bind Vis Ndx Name
|
||||
# ONLY-GNUHASH-32-NEXT: 2 1: 00001000 0 NOTYPE GLOBAL DEFAULT 2 aaa
|
||||
# ONLY-GNUHASH-32-NEXT: 3 1: 00000001 0 NOTYPE GLOBAL DEFAULT ABS ddd
|
||||
# ONLY-GNUHASH-32-NEXT: 4 2: 00000000 0 NOTYPE GLOBAL DEFAULT 1 eee
|
||||
# ONLY-GNUHASH-32-NEXT: 5 2: 00001001 0 NOTYPE WEAK DEFAULT 2 bbb
|
||||
# ONLY-GNUHASH-32-NOT: {{.}}
|
||||
|
||||
--- !ELF
|
||||
FileHeader:
|
||||
Class: ELFCLASS32
|
||||
Data: ELFDATA2LSB
|
||||
Type: ET_DYN
|
||||
Machine: EM_386
|
||||
Sections:
|
||||
## The contents of .gnu.hash was generated by a linker.
|
||||
- Name: .gnu.hash
|
||||
Type: SHT_GNU_HASH
|
||||
Flags: [ SHF_ALLOC ]
|
||||
Link: .dynsym
|
||||
Content: 0300000002000000010000000500000048991200000000000200000004000000685C880B9169880BF46D880BCB60880B
|
||||
- Name: .dynamic
|
||||
Type: SHT_DYNAMIC
|
||||
Flags: [ SHF_ALLOC ]
|
||||
Link: .dynstr
|
||||
Entries:
|
||||
- Tag: DT_GNU_HASH
|
||||
Value: 0x0000000000000000
|
||||
- Tag: DT_NULL
|
||||
Value: 0x0000000000000000
|
||||
DynamicSymbols:
|
||||
- Name: ccc
|
||||
Binding: STB_GLOBAL
|
||||
- Name: aaa
|
||||
Section: .dynamic
|
||||
Binding: STB_GLOBAL
|
||||
Value: 0x0000000000001000
|
||||
- Name: ddd
|
||||
Index: SHN_ABS
|
||||
Binding: STB_GLOBAL
|
||||
Value: 0x0000000000000001
|
||||
- Name: eee
|
||||
Section: .gnu.hash
|
||||
Binding: STB_GLOBAL
|
||||
- Name: bbb
|
||||
Section: .dynamic
|
||||
Binding: STB_WEAK
|
||||
Value: 0x0000000000001001
|
||||
ProgramHeaders:
|
||||
- Type: PT_LOAD
|
||||
Flags: [ PF_R, PF_X ]
|
||||
Sections:
|
||||
- Section: .gnu.hash
|
||||
- Section: .dynamic
|
||||
|
||||
## Show that if there are no hash sections, we do not print anything.
|
||||
# RUN: yaml2obj --docnum=4 %s -o %t4.so
|
||||
# RUN: llvm-readelf --hash-symbols %t4.so \
|
||||
# RUN: | FileCheck %s --check-prefix NO-HASH --allow-empty
|
||||
|
||||
# NO-HASH-NOT: {{.}}
|
||||
|
||||
## Sanity check that we can still find the dynamic symbols (i.e. the above test
|
||||
## doesn't pass due to a mistake in the dynamic section).
|
||||
# RUN: llvm-readelf --dyn-symbols %t4.so | FileCheck %s --check-prefix DYNSYMS
|
||||
|
||||
# DYNSYMS: Symbol table '.dynsym' contains 2 entries:
|
||||
|
||||
--- !ELF
|
||||
FileHeader:
|
||||
Class: ELFCLASS64
|
||||
Data: ELFDATA2LSB
|
||||
Type: ET_DYN
|
||||
Machine: EM_X86_64
|
||||
Sections:
|
||||
- Name: .dynstr
|
||||
Type: SHT_STRTAB
|
||||
Flags: [ SHF_ALLOC ]
|
||||
AddressAlign: 0x100
|
||||
EntSize: 0x1
|
||||
- Name: .dynsym
|
||||
Type: SHT_DYNSYM
|
||||
Flags: [ SHF_ALLOC ]
|
||||
Link: .dynstr
|
||||
Address: 0x100
|
||||
AddressAlign: 0x100
|
||||
EntSize: 0x18
|
||||
- Name: .dynamic
|
||||
Type: SHT_DYNAMIC
|
||||
Flags: [ SHF_ALLOC ]
|
||||
Address: 0x0000000000001000
|
||||
Link: .dynstr
|
||||
AddressAlign: 0x0000000000001000
|
||||
EntSize: 0x0000000000000010
|
||||
Entries:
|
||||
- Tag: DT_STRTAB
|
||||
Value: 0x0000000000000000
|
||||
- Tag: DT_STRSZ
|
||||
Value: 0x0000000000000009
|
||||
- Tag: DT_SYMTAB
|
||||
Value: 0x0000000000000100
|
||||
- Tag: DT_SYMENT
|
||||
Value: 0x0000000000000018
|
||||
- Tag: DT_NULL
|
||||
Value: 0x0000000000000000
|
||||
- Name: .text.foo
|
||||
Type: SHT_PROGBITS
|
||||
Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ]
|
||||
Size: 0x40
|
||||
Address: 0x2000
|
||||
AddressAlign: 0x2000
|
||||
DynamicSymbols:
|
||||
- Name: _Z3fooi
|
||||
Binding: STB_GLOBAL
|
||||
ProgramHeaders:
|
||||
- Type: PT_LOAD
|
||||
Flags: [ PF_R, PF_X ]
|
||||
VAddr: 0x0
|
||||
PAddr: 0x0
|
||||
Sections:
|
||||
- Section: .dynsym
|
||||
- Section: .dynstr
|
||||
- Section: .dynamic
|
||||
- Section: .text.foo
|
||||
- Type: PT_DYNAMIC
|
||||
Flags: [ PF_R ]
|
||||
VAddr: 0x1000
|
||||
PAddr: 0x1000
|
||||
Sections:
|
||||
- Section: .dynamic
|
|
@ -1,104 +0,0 @@
|
|||
# RUN: llvm-readelf --hash-symbols %p/Inputs/dynamic-table-exe.x86 \
|
||||
# RUN: | FileCheck %s --check-prefix HASH
|
||||
|
||||
# HASH: Symbol table of .hash for image:
|
||||
# HASH-NEXT: Num Buc: Value Size Type Bind Vis Ndx Name
|
||||
# HASH-NEXT: 9 0: 00000000 0 FUNC GLOBAL DEFAULT UND __gxx_personality_v0@CXXABI_1.3
|
||||
# HASH-NEXT: 13 0: 00001b64 0 NOTYPE GLOBAL DEFAULT ABS _edata{{$}}
|
||||
# HASH-NEXT: 7 0: 00000000 0 FUNC GLOBAL DEFAULT UND _ZNSt14basic_ifstreamIcSt11char_traitsIcEEC1EPKcSt13_Ios_Openmode@GLIBCXX_3.4
|
||||
# HASH-NEXT: 2 0: 00000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses{{$}}
|
||||
# HASH-NEXT: 1 0: 00000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__{{$}}
|
||||
# HASH-NEXT: 16 1: 00000850 81 FUNC GLOBAL DEFAULT 14 main{{$}}
|
||||
# HASH-NEXT: 10 1: 00000000 0 FUNC GLOBAL DEFAULT UND _Unwind_Resume@GCC_3.0
|
||||
# HASH-NEXT: 8 1: 00000000 0 FUNC GLOBAL DEFAULT UND puts@GLIBC_2.0
|
||||
# HASH-NEXT: 12 1: 00001b68 0 NOTYPE GLOBAL DEFAULT ABS _end{{$}}
|
||||
# HASH-NEXT: 6 1: 00000000 0 FUNC GLOBAL DEFAULT UND _ZNSt14basic_ifstreamIcSt11char_traitsIcEED1Ev@GLIBCXX_3.4
|
||||
# HASH-NEXT: 5 1: 00000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable{{$}}
|
||||
# HASH-NEXT: 4 1: 00000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTable{{$}}
|
||||
# HASH-NEXT: 3 1: 00000000 0 FUNC GLOBAL DEFAULT UND __libc_start_main@GLIBC_2.0
|
||||
# HASH-NEXT: 11 2: 00000000 0 FUNC WEAK DEFAULT UND __cxa_finalize@GLIBC_2.1.3
|
||||
# HASH-NEXT: 15 2: 00001b64 0 NOTYPE GLOBAL DEFAULT ABS __bss_start{{$}}
|
||||
# HASH-NEXT: 14 2: 0000093c 4 OBJECT GLOBAL DEFAULT 16 _IO_stdin_used{{$}}
|
||||
# HASH: Symbol table of .gnu.hash for image:
|
||||
# HASH-NEXT: Num Buc: Value Size Type Bind Vis Ndx Name
|
||||
# HASH-NEXT: 12 0: 00001b68 0 NOTYPE GLOBAL DEFAULT ABS _end{{$}}
|
||||
# HASH-NEXT: 13 0: 00001b64 0 NOTYPE GLOBAL DEFAULT ABS _edata{{$}}
|
||||
# HASH-NEXT: 14 1: 0000093c 4 OBJECT GLOBAL DEFAULT 16 _IO_stdin_used{{$}}
|
||||
# HASH-NEXT: 15 1: 00001b64 0 NOTYPE GLOBAL DEFAULT ABS __bss_start{{$}}
|
||||
# HASH-NEXT: 16 1: 00000850 81 FUNC GLOBAL DEFAULT 14 main{{$}}
|
||||
|
||||
## Show that if there are no hash sections, we do not print anything.
|
||||
# RUN: yaml2obj %s -o %t.o
|
||||
# RUN: llvm-readelf --hash-symbols %t.o \
|
||||
# RUN: | FileCheck %s --check-prefix NO-HASH --allow-empty
|
||||
|
||||
# NO-HASH-NOT: {{.}}
|
||||
|
||||
## Sanity check that we can still find the dynamic symbols (i.e. the above test
|
||||
## doesn't pass due to a mistake in the dynamic section).
|
||||
# RUN: llvm-readelf --dyn-symbols %t.o | FileCheck %s --check-prefix DYNSYMS
|
||||
|
||||
# DYNSYMS: Symbol table '.dynsym' contains 2 entries:
|
||||
|
||||
!ELF
|
||||
FileHeader:
|
||||
Class: ELFCLASS64
|
||||
Data: ELFDATA2LSB
|
||||
Type: ET_DYN
|
||||
Machine: EM_X86_64
|
||||
Sections:
|
||||
- Name: .dynstr
|
||||
Type: SHT_STRTAB
|
||||
Flags: [ SHF_ALLOC ]
|
||||
AddressAlign: 0x100
|
||||
EntSize: 0x1
|
||||
- Name: .dynsym
|
||||
Type: SHT_DYNSYM
|
||||
Flags: [ SHF_ALLOC ]
|
||||
Link: .dynstr
|
||||
Address: 0x100
|
||||
AddressAlign: 0x100
|
||||
EntSize: 0x18
|
||||
- Name: .dynamic
|
||||
Type: SHT_DYNAMIC
|
||||
Flags: [ SHF_ALLOC ]
|
||||
Address: 0x0000000000001000
|
||||
Link: .dynstr
|
||||
AddressAlign: 0x0000000000001000
|
||||
EntSize: 0x0000000000000010
|
||||
Entries:
|
||||
- Tag: DT_STRTAB
|
||||
Value: 0x0000000000000000
|
||||
- Tag: DT_STRSZ
|
||||
Value: 0x0000000000000009
|
||||
- Tag: DT_SYMTAB
|
||||
Value: 0x0000000000000100
|
||||
- Tag: DT_SYMENT
|
||||
Value: 0x0000000000000018
|
||||
- Tag: DT_NULL
|
||||
Value: 0x0000000000000000
|
||||
- Name: .text.foo
|
||||
Type: SHT_PROGBITS
|
||||
Flags: [ SHF_ALLOC, SHF_EXECINSTR, SHF_GROUP ]
|
||||
Size: 0x40
|
||||
Address: 0x2000
|
||||
AddressAlign: 0x2000
|
||||
DynamicSymbols:
|
||||
- Name: _Z3fooi
|
||||
Binding: STB_GLOBAL
|
||||
ProgramHeaders:
|
||||
- Type: PT_LOAD
|
||||
Flags: [ PF_R, PF_X ]
|
||||
VAddr: 0x0
|
||||
PAddr: 0x0
|
||||
Sections:
|
||||
- Section: .dynsym
|
||||
- Section: .dynstr
|
||||
- Section: .dynamic
|
||||
- Section: .text.foo
|
||||
- Type: PT_DYNAMIC
|
||||
Flags: [ PF_R ]
|
||||
VAddr: 0x1000
|
||||
PAddr: 0x1000
|
||||
Sections:
|
||||
- Section: .dynamic
|
Loading…
Reference in New Issue