llvm-project/llvm/test/tools/llvm-readobj/ELF/mips-plt.test

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