1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2025-02-01 05:01:59 +01:00
llvm-mirror/test/tools/llvm-readobj/elf-versioninfo.test
Fangrui Song c21ea7e2f4 [yaml2obj] Write the section header table after section contents
Linkers (ld.bfd/gold/lld) place the section header table at the very
end. This allows tools to strip it, which is optional in executable/shared objects.
In addition, if we add or section, the size of the section header table
will change. Placing the section header table in the end keeps section
offsets unchanged.

yaml2obj currently places the section header table immediately after the
program header. Follow what linkers do to make offset updating easier.

Reviewed By: grimar

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

llvm-svn: 371074
2019-09-05 14:25:57 +00:00

192 lines
5.6 KiB
Plaintext

## Test that llvm-readobj dumps version info tags correctly.
# RUN: yaml2obj %s --docnum=1 -o %t1
# RUN: llvm-readobj -V %t1 | FileCheck %s --check-prefix=LLVM
# RUN: llvm-readelf -V %t1 | FileCheck %s --check-prefix=GNU
--- !ELF
FileHeader:
Class: ELFCLASS64
Data: ELFDATA2LSB
OSABI: ELFOSABI_FREEBSD
Type: ET_DYN
Machine: EM_X86_64
Sections:
- Name: .gnu.version
Type: SHT_GNU_versym
Flags: [ SHF_ALLOC ]
Link: .dynsym
AddressAlign: 0x0000000000000002
EntSize: 0x0000000000000002
Entries: [ 0, 2, 3, 4, 5, 6]
- Name: .gnu.version_d
Type: SHT_GNU_verdef
Flags: [ SHF_ALLOC ]
Link: .dynstr
AddressAlign: 0x0000000000000004
Info: 0x0000000000000003
Entries:
- Version: 1
Flags: 0
VersionNdx: 2
Hash: 175630257
Names:
- VERSION1
- Version: 1
Flags: 0
VersionNdx: 3
Hash: 175630258
Names:
- VERSION2
- VERSION1
- Name: .gnu.version_r
Type: SHT_GNU_verneed
Flags: [ SHF_ALLOC ]
Link: .dynstr
AddressAlign: 0x0000000000000004
Info: 0x0000000000000002
Dependencies:
- Version: 1
File: verneed1.so.0
Entries:
- Name: v1
Hash: 1938
Flags: 0
Other: 4
- Name: v2
Hash: 1939
Flags: 0
Other: 5
- Version: 1
File: verneed2.so.0
Entries:
- Name: v3
Hash: 1937
Flags: 0
Other: 6
DynamicSymbols:
- Name: sym1
Binding: STB_GLOBAL
- Name: sym2
Binding: STB_GLOBAL
- Name: sym3
Binding: STB_GLOBAL
- Name: sym4
Binding: STB_GLOBAL
- Name: sym5
Binding: STB_GLOBAL
...
# LLVM: Version symbols {
# LLVM-NEXT: Section Name: .gnu.version
# LLVM-NEXT: Address: 0x0
# LLVM-NEXT: Offset: 0x40
# LLVM-NEXT: Link: 7
# LLVM-NEXT: Symbols [
# LLVM-NEXT: Symbol {
# LLVM-NEXT: Version: 0
# LLVM-NEXT: Name:
# LLVM-NEXT: }
# LLVM-NEXT: Symbol {
# LLVM-NEXT: Version: 2
# LLVM-NEXT: Name: sym1@@VERSION1
# LLVM-NEXT: }
# LLVM-NEXT: Symbol {
# LLVM-NEXT: Version: 3
# LLVM-NEXT: Name: sym2@@VERSION2
# LLVM-NEXT: }
# LLVM-NEXT: Symbol {
# LLVM-NEXT: Version: 4
# LLVM-NEXT: Name: sym3@v1
# LLVM-NEXT: }
# LLVM-NEXT: Symbol {
# LLVM-NEXT: Version: 5
# LLVM-NEXT: Name: sym4@v2
# LLVM-NEXT: }
# LLVM-NEXT: Symbol {
# LLVM-NEXT: Version: 6
# LLVM-NEXT: Name: sym5@v3
# LLVM-NEXT: }
# LLVM-NEXT: ]
# LLVM-NEXT: }
# LLVM-NEXT: SHT_GNU_verdef {
# LLVM-NEXT: Definition {
# LLVM-NEXT: Version: 1
# LLVM-NEXT: Flags: 0x0
# LLVM-NEXT: Index: 2
# LLVM-NEXT: Hash: 175630257
# LLVM-NEXT: Name: VERSION1
# LLVM-NEXT: }
# LLVM-NEXT: Definition {
# LLVM-NEXT: Version: 1
# LLVM-NEXT: Flags: 0x0
# LLVM-NEXT: Index: 3
# LLVM-NEXT: Hash: 175630258
# LLVM-NEXT: Name: VERSION2
# LLVM-NEXT: Predecessor: VERSION1
# LLVM-NEXT: }
# LLVM-NEXT: Definition {
# LLVM-NEXT: Version: 1
# LLVM-NEXT: Flags: 0x0
# LLVM-NEXT: Index: 3
# LLVM-NEXT: Hash: 175630258
# LLVM-NEXT: Name: VERSION2
# LLVM-NEXT: Predecessor: VERSION1
# LLVM-NEXT: }
# LLVM-NEXT: }
# LLVM-NEXT: SHT_GNU_verneed {
# LLVM-NEXT: Dependency {
# LLVM-NEXT: Version: 1
# LLVM-NEXT: Count: 2
# LLVM-NEXT: FileName: verneed1.so.0
# LLVM-NEXT: Entries [
# LLVM-NEXT: Entry {
# LLVM-NEXT: Hash: 1938
# LLVM-NEXT: Flags: 0x0
# LLVM-NEXT: Index: 4
# LLVM-NEXT: Name: v1
# LLVM-NEXT: }
# LLVM-NEXT: Entry {
# LLVM-NEXT: Hash: 1939
# LLVM-NEXT: Flags: 0x0
# LLVM-NEXT: Index: 5
# LLVM-NEXT: Name: v2
# LLVM-NEXT: }
# LLVM-NEXT: ]
# LLVM-NEXT: }
# LLVM-NEXT: Dependency {
# LLVM-NEXT: Version: 1
# LLVM-NEXT: Count: 1
# LLVM-NEXT: FileName: verneed2.so.0
# LLVM-NEXT: Entries [
# LLVM-NEXT: Entry {
# LLVM-NEXT: Hash: 1937
# LLVM-NEXT: Flags: 0x0
# LLVM-NEXT: Index: 6
# LLVM-NEXT: Name: v3
# LLVM-NEXT: }
# LLVM-NEXT: ]
# LLVM-NEXT: }
# LLVM-NEXT: }
# GNU: Version symbols section '.gnu.version' contains 6 entries:
# GNU-NEXT: Addr: 0000000000000000 Offset: 0x000040 Link: 7 (.dynsym)
# GNU-NEXT: 000: 0 (*local*) 2 (VERSION1) 3 (VERSION2) 4 (v1)
# GNU-NEXT: 004: 5 (v2) 6 (v3)
# GNU-EMPTY:
# GNU-NEXT: Version definition section '.gnu.version_d' contains 3 entries:
# GNU-NEXT: Addr: 0000000000000000 Offset: 0x00004c Link: 8 (.dynstr)
# GNU-NEXT: 0x0000: Rev: 1 Flags: none Index: 2 Cnt: 1 Name: VERSION1
# GNU-NEXT: 0x001c: Rev: 1 Flags: none Index: 3 Cnt: 2 Name: VERSION2
# GNU-NEXT: 0x0038: Parent 1: VERSION1
# GNU-NEXT: 0x001c: Rev: 1 Flags: none Index: 3 Cnt: 2 Name: VERSION2
# GNU-NEXT: 0x0038: Parent 1: VERSION1
# GNU-EMPTY:
# GNU-NEXT: Version needs section '.gnu.version_r' contains 2 entries:
# GNU-NEXT: Addr: 0000000000000000 Offset: 0x00008c Link: 8 (.dynstr)
# GNU-NEXT: 0x0000: Version: 1 File: verneed1.so.0 Cnt: 2
# GNU-NEXT: 0x0010: Name: v1 Flags: none Version: 4
# GNU-NEXT: 0x0020: Name: v2 Flags: none Version: 5
# GNU-NEXT: 0x0030: Version: 1 File: verneed2.so.0 Cnt: 1
# GNU-NEXT: 0x0040: Name: v3 Flags: none Version: 6