143 lines
4.9 KiB
Plaintext
143 lines
4.9 KiB
Plaintext
# RUN: llvm-readobj -A %p/Inputs/got-plt.exe.elf-mipsel | FileCheck %s
|
|
# RUN: llvm-readelf -A %p/Inputs/got-plt.exe.elf-mipsel | FileCheck --check-prefix=GNU %s
|
|
|
|
# CHECK: PLT GOT {
|
|
# CHECK-NEXT: Reserved entries [
|
|
# CHECK-NEXT: Entry {
|
|
# CHECK-NEXT: Address: 0x410814
|
|
# CHECK-NEXT: Initial: 0x0
|
|
# CHECK-NEXT: Purpose: PLT lazy resolver
|
|
# CHECK-NEXT: }
|
|
# CHECK-NEXT: Entry {
|
|
# CHECK-NEXT: Address: 0x410818
|
|
# CHECK-NEXT: Initial: 0x0
|
|
# CHECK-NEXT: Purpose: Module pointer
|
|
# CHECK-NEXT: }
|
|
# CHECK-NEXT: ]
|
|
# CHECK-NEXT: Entries [
|
|
# CHECK-NEXT: Entry {
|
|
# CHECK-NEXT: Address: 0x41081C
|
|
# CHECK-NEXT: Initial: 0x4007C0
|
|
# CHECK-NEXT: Value: 0x0
|
|
# CHECK-NEXT: Type: Function (0x2)
|
|
# CHECK-NEXT: Section: Undefined (0x0)
|
|
# CHECK-NEXT: Name: puts@GLIBC_2.0 (71)
|
|
# CHECK-NEXT: }
|
|
# CHECK-NEXT: Entry {
|
|
# CHECK-NEXT: Address: 0x410820
|
|
# CHECK-NEXT: Initial: 0x4007C0
|
|
# CHECK-NEXT: Value: 0x0
|
|
# CHECK-NEXT: Type: Function (0x2)
|
|
# CHECK-NEXT: Section: Undefined (0x0)
|
|
# CHECK-NEXT: Name: __libc_start_main@GLIBC_2.0 (53)
|
|
# CHECK-NEXT: }
|
|
# CHECK-NEXT: ]
|
|
# CHECK-NEXT: }
|
|
|
|
# GNU: Primary GOT:
|
|
# GNU-NEXT: Canonical gp value: 00418840
|
|
|
|
# GNU: Reserved entries:
|
|
# GNU-NEXT: Address Access Initial Purpose
|
|
# GNU-NEXT: 00410850 -32752(gp) 00000000 Lazy resolver
|
|
# GNU-NEXT: 00410854 -32748(gp) 80000000 Module pointer (GNU extension)
|
|
|
|
# GNU: Local entries:
|
|
# GNU-NEXT: Address Access Initial
|
|
# GNU-NEXT: 00410858 -32744(gp) 004003d4
|
|
# GNU-NEXT: 0041085c -32740(gp) 00410800
|
|
# GNU-NEXT: 00410860 -32736(gp) 00000000
|
|
|
|
# GNU: Global entries:
|
|
# GNU-NEXT: Address Access Initial Sym.Val. Type Ndx Name
|
|
# GNU-NEXT: 00410864 -32732(gp) 00000000 00000000 FUNC UND __gmon_start__
|
|
# GNU-NEXT: PLT GOT:
|
|
|
|
# GNU: Reserved entries:
|
|
# GNU-NEXT: Address Initial Purpose
|
|
# GNU-NEXT: 00410814 00000000 PLT lazy resolver
|
|
# GNU-NEXT: 00410818 00000000 Module pointer
|
|
|
|
# GNU: Entries:
|
|
# GNU-NEXT: Address Initial Sym.Val. Type Ndx Name
|
|
# GNU-NEXT: 0041081c 004007c0 00000000 FUNC UND puts
|
|
# GNU-NEXT: 00410820 004007c0 00000000 FUNC UND __libc_start_main
|
|
|
|
## Check we report errors when dynamic tags, needed for dumping PLT, are missing.
|
|
|
|
# RUN: yaml2obj --docnum=1 -DTAG=DT_MIPS_PLTGOT %s -o %t.err1.o
|
|
# RUN: not llvm-readobj -A %t.err1.o 2>&1 | FileCheck %s -DFILE=%t.err1.o --check-prefix=ERR1
|
|
|
|
# ERR1: error: '[[FILE]]': cannot find JMPREL dynamic tag
|
|
|
|
# RUN: yaml2obj --docnum=1 -DTAG=DT_JMPREL %s -o %t.err2.o
|
|
# RUN: not llvm-readobj -A %t.err2.o 2>&1 | FileCheck %s -DFILE=%t.err2.o --check-prefix=ERR2
|
|
|
|
# ERR2: error: '[[FILE]]': cannot find MIPS_PLTGOT dynamic tag
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_EXEC
|
|
Machine: EM_MIPS
|
|
Sections:
|
|
- Name: .dynamic
|
|
Type: SHT_DYNAMIC
|
|
Entries:
|
|
- Tag: [[TAG]]
|
|
Value: 0
|
|
- Tag: DT_NULL
|
|
Value: 0
|
|
|
|
## Check we report errors when we are unable to find PLTGOT/JMPREL sections.
|
|
# RUN: yaml2obj --docnum=2 %s -DVAL1=0xffff -o %t.err3.o
|
|
# RUN: not llvm-readobj -A %t.err3.o 2>&1 | FileCheck %s -DFILE=%t.err3.o -check-prefix ERR3
|
|
|
|
# ERR3: error: '[[FILE]]': there is no non-empty PLTGOT section at 0xffff
|
|
|
|
# RUN: yaml2obj --docnum=2 %s -DVAL2=0xffff -o %t.err4.o
|
|
# RUN: not llvm-readobj -A %t.err4.o 2>&1 | FileCheck %s -DFILE=%t.err4.o -check-prefix ERR4
|
|
|
|
# ERR4: error: '[[FILE]]': there is no non-empty RELPLT section at 0xffff
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_EXEC
|
|
Machine: EM_MIPS
|
|
Sections:
|
|
- Name: .dynamic
|
|
Type: SHT_DYNAMIC
|
|
Entries:
|
|
- Tag: DT_MIPS_PLTGOT
|
|
Value: [[VAL1=0]]
|
|
- Tag: DT_JMPREL
|
|
Value: [[VAL2=0]]
|
|
- Tag: DT_NULL
|
|
Value: 0
|
|
- Name: .foo
|
|
Type: SHT_PROGBITS
|
|
Address: 0x100
|
|
ShSize: 0xffffffff
|
|
Link: [[LINK=0x1]]
|
|
DynamicSymbols: []
|
|
|
|
## Check we report errors when we are unable to dump PLTGOT properly.
|
|
|
|
# RUN: yaml2obj --docnum=2 -DVAL1=0x100 %s -o %t.err5.o
|
|
# RUN: not llvm-readobj -A %t.err5.o 2>&1 | FileCheck %s -DFILE=%t.err5.o -check-prefix ERR5
|
|
|
|
# ERR5: error: '[[FILE]]': unable to read PLTGOT section content: section [index 2] has a sh_offset (0x70) + sh_size (0xffffffff) that is greater than the file size (0x280)
|
|
|
|
# RUN: yaml2obj --docnum=2 -DVAL2=0x100 -DLINK=0xaaaaaaaa %s -o %t.err6.o
|
|
# RUN: not llvm-readobj -A %t.err6.o 2>&1 | FileCheck %s -DFILE=%t.err6.o -check-prefix ERR6
|
|
|
|
# ERR6: error: '[[FILE]]': unable to get a symbol table linked to the SHT_PROGBITS section with index 2: invalid section index: 2863311530
|
|
|
|
# RUN: yaml2obj --docnum=2 -DVAL2=0x100 %s -o %t.err7.o
|
|
# RUN: not llvm-readobj -A %t.err7.o 2>&1 | FileCheck %s -DFILE=%t.err7.o -check-prefix ERR7
|
|
|
|
# ERR7: error: '[[FILE]]': unable to get a string table for the SHT_DYNAMIC section with index 1: invalid sh_type for symbol table, expected SHT_SYMTAB or SHT_DYNSYM
|