mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 11:42:57 +01:00
c21ea7e2f4
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
69 lines
2.0 KiB
Plaintext
69 lines
2.0 KiB
Plaintext
## Test that we are able to dump section headers even if the
|
|
## .dynsym section's sh_link field is broken.
|
|
|
|
## Case 1: sh_link is set to 0.
|
|
# RUN: yaml2obj --docnum=1 %s -o %t1
|
|
# RUN: llvm-readobj -S %t1 2>&1 | FileCheck %s -DFILE=%t1 --check-prefixes=LLVM,ERR
|
|
# RUN: llvm-readelf -S %t1 2>&1 | FileCheck %s -DFILE=%t1 --check-prefixes=GNU,ERR
|
|
|
|
# ERR: warning: '[[FILE]]': invalid sh_type for string table section [index 0]: expected SHT_STRTAB, but got SHT_NULL
|
|
|
|
# LLVM: Name: .dynsym
|
|
# LLVM-NEXT: Type: SHT_DYNSYM
|
|
# LLVM-NEXT: Flags [
|
|
# LLVM-NEXT: SHF_ALLOC
|
|
# LLVM-NEXT: ]
|
|
# LLVM-NEXT: Address: 0x0
|
|
# LLVM-NEXT: Offset: 0x40
|
|
# LLVM-NEXT: Size: 24
|
|
# LLVM-NEXT: Link: 0
|
|
|
|
# GNU: Section Headers:
|
|
# GNU-NEXT: [Nr] Name Type Address Off Size ES Flg Lk
|
|
# GNU-NEXT: [ 0] NULL 0000000000000000 000000 000000 00 0 0
|
|
# GNU-NEXT: [ 1] .dynsym DYNSYM 0000000000000000 000040 000018 18 A 0
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_DYN
|
|
Machine: EM_X86_64
|
|
Sections:
|
|
- Name: .dynsym
|
|
Type: SHT_DYNSYM
|
|
|
|
## Case 2: sh_link is set to 255, which is larger than the number of the sections.
|
|
# RUN: yaml2obj --docnum=2 %s -o %t2
|
|
|
|
# RUN: llvm-readobj -S %t2 2>&1 | FileCheck -DFILE=%t2 %s --check-prefixes=LLVM2,ERR2
|
|
# RUN: llvm-readelf -S %t2 2>&1 | FileCheck -DFILE=%t2 %s --check-prefixes=GNU2,ERR2
|
|
|
|
# ERR2: warning: '[[FILE]]': invalid section index
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_DYN
|
|
Machine: EM_X86_64
|
|
Sections:
|
|
- Name: .dynsym
|
|
Type: SHT_DYNSYM
|
|
Link: 255
|
|
|
|
# LLVM2: Name: .dynsym
|
|
# LLVM2-NEXT: Type: SHT_DYNSYM
|
|
# LLVM2-NEXT: Flags [
|
|
# LLVM2-NEXT: SHF_ALLOC
|
|
# LLVM2-NEXT: ]
|
|
# LLVM2-NEXT: Address: 0x0
|
|
# LLVM2-NEXT: Offset: 0x40
|
|
# LLVM2-NEXT: Size: 24
|
|
# LLVM2-NEXT: Link: 255
|
|
|
|
# GNU2: Section Headers:
|
|
# GNU2-NEXT: [Nr] Name Type Address Off Size ES Flg Lk
|
|
# GNU2-NEXT: [ 0] NULL 0000000000000000 000000 000000 00 0 0
|
|
# GNU2-NEXT: [ 1] .dynsym DYNSYM 0000000000000000 000040 000018 18 A 255
|