256 lines
8.6 KiB
Plaintext
256 lines
8.6 KiB
Plaintext
## Check that we are able to dump MIPS PLT GOT entries using -A properly.
|
|
|
|
# RUN: yaml2obj --docnum=1 %s -o %t.plt.o
|
|
# RUN: llvm-readobj -A %t.plt.o | FileCheck %s --check-prefix=LLVM
|
|
# RUN: llvm-readelf -A %t.plt.o | \
|
|
# RUN: FileCheck %s --strict-whitespace --match-full-lines --check-prefix=GNU
|
|
|
|
# LLVM: PLT GOT {
|
|
# LLVM-NEXT: Reserved entries [
|
|
# LLVM-NEXT: Entry {
|
|
# LLVM-NEXT: Address: 0x2000
|
|
# LLVM-NEXT: Initial: 0x0
|
|
# LLVM-NEXT: Purpose: PLT lazy resolver
|
|
# LLVM-NEXT: }
|
|
# LLVM-NEXT: Entry {
|
|
# LLVM-NEXT: Address: 0x2008
|
|
# LLVM-NEXT: Initial: 0x0
|
|
# LLVM-NEXT: Purpose: Module pointer
|
|
# LLVM-NEXT: }
|
|
# LLVM-NEXT: ]
|
|
# LLVM-NEXT: Entries [
|
|
# LLVM-NEXT: Entry {
|
|
# LLVM-NEXT: Address: 0x2010
|
|
# LLVM-NEXT: Initial: 0x0
|
|
# LLVM-NEXT: Value: 0x0
|
|
# LLVM-NEXT: Type: None (0x0)
|
|
# LLVM-NEXT: Section: Undefined (0x0)
|
|
# LLVM-NEXT: Name: foo (5)
|
|
# LLVM-NEXT: }
|
|
# LLVM-NEXT: Entry {
|
|
# LLVM-NEXT: Address: 0x2018
|
|
# LLVM-NEXT: Initial: 0x0
|
|
# LLVM-NEXT: Value: 0x0
|
|
# LLVM-NEXT: Type: None (0x0)
|
|
# LLVM-NEXT: Section: Undefined (0x0)
|
|
# LLVM-NEXT: Name: bar (1)
|
|
# LLVM-NEXT: }
|
|
# LLVM-NEXT: ]
|
|
# LLVM-NEXT: }
|
|
|
|
# GNU:PLT GOT:
|
|
# GNU-EMPTY:
|
|
# GNU-NEXT: Reserved entries:
|
|
# GNU-NEXT: Address Initial Purpose
|
|
# GNU-NEXT: 0000000000002000 0000000000000000 PLT lazy resolver
|
|
# GNU-NEXT: 0000000000002008 0000000000000000 Module pointer
|
|
# GNU-EMPTY:
|
|
# GNU-NEXT: Entries:
|
|
# GNU-NEXT: Address Initial Sym.Val. Type Ndx Name
|
|
# GNU-NEXT: 0000000000002010 0000000000000000 0000000000000000 NOTYPE UND foo
|
|
# GNU-NEXT: 0000000000002018 0000000000000000 0000000000000000 NOTYPE UND bar
|
|
# GNU-NOT:{{.}}
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_REL
|
|
Machine: EM_MIPS
|
|
Sections:
|
|
- Name: .rel.plt
|
|
Type: SHT_REL
|
|
Flags: [ SHF_ALLOC ]
|
|
Address: 0x1000
|
|
Link: .dynsym
|
|
Relocations:
|
|
- Offset: 0x1
|
|
Symbol: 1
|
|
Type: R_MIPS_JUMP_SLOT
|
|
- Offset: 0x2
|
|
Symbol: 2
|
|
Type: R_MIPS_JUMP_SLOT
|
|
- Name: .got.plt
|
|
Type: SHT_PROGBITS
|
|
Flags: [ SHF_WRITE, SHF_ALLOC ]
|
|
Address: 0x2000
|
|
Size: 32 ## (dynamic symbols number + 2) * 8
|
|
- Name: .dynamic
|
|
Type: SHT_DYNAMIC
|
|
Entries:
|
|
- Tag: DT_JMPREL
|
|
Value: 0x1000
|
|
- Tag: DT_MIPS_PLTGOT
|
|
Value: 0x2000
|
|
DynamicSymbols:
|
|
- Name: "foo"
|
|
- Name: "bar"
|
|
|
|
## Check we report errors when dynamic tags, needed for dumping PLT, are missing.
|
|
|
|
# RUN: yaml2obj --docnum=2 -DTAG=DT_MIPS_PLTGOT %s -o %t.err1.o
|
|
# RUN: llvm-readobj -A %t.err1.o 2>&1 | FileCheck %s -DFILE=%t.err1.o --check-prefixes=NO-OUTPUT,ERR1
|
|
|
|
# RUN: yaml2obj --docnum=2 -DTAG=DT_JMPREL %s -o %t.err2.o
|
|
# RUN: llvm-readobj -A %t.err2.o 2>&1 | FileCheck %s -DFILE=%t.err2.o --check-prefixes=NO-OUTPUT,ERR2
|
|
|
|
--- !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=3 %s -DVAL1=0xffff -o %t.err3.o
|
|
# RUN: llvm-readobj -A %t.err3.o 2>&1 | FileCheck %s -DFILE=%t.err3.o -check-prefixes=NO-OUTPUT,ERR3
|
|
|
|
# RUN: yaml2obj --docnum=3 %s -DVAL2=0xffff -o %t.err4.o
|
|
# RUN: llvm-readobj -A %t.err4.o 2>&1 | FileCheck %s -DFILE=%t.err4.o -check-prefixes=NO-OUTPUT,ERR4
|
|
|
|
--- !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=3 -DVAL1=0x100 %s -o %t.err5.o
|
|
# RUN: llvm-readobj -A %t.err5.o 2>&1 | FileCheck %s -DFILE=%t.err5.o -check-prefixes=NO-OUTPUT,ERR5
|
|
|
|
# RUN: yaml2obj --docnum=3 -DVAL2=0x100 -DLINK=0xaaaaaaaa %s -o %t.err6.o
|
|
# RUN: llvm-readobj -A %t.err6.o 2>&1 | FileCheck %s -DFILE=%t.err6.o -check-prefixes=NO-OUTPUT,ERR6
|
|
|
|
# RUN: yaml2obj --docnum=3 -DVAL2=0x100 %s -o %t.err7.o
|
|
# RUN: llvm-readobj -A %t.err7.o 2>&1 | FileCheck %s -DFILE=%t.err7.o -check-prefixes=NO-OUTPUT,ERR7
|
|
|
|
# NO-OUTPUT: LoadName: <Not found>
|
|
# NO-OUTPUT-NEXT: There is no .MIPS.abiflags section in the file.
|
|
# NO-OUTPUT-NEXT: There is no .MIPS.options section in the file.
|
|
# NO-OUTPUT-NEXT: There is no .reginfo section in the file.
|
|
|
|
# ERR1-NEXT: warning: '[[FILE]]': cannot find JMPREL dynamic tag
|
|
# ERR2-NEXT: warning: '[[FILE]]': cannot find MIPS_PLTGOT dynamic tag
|
|
# ERR3-NEXT: warning: '[[FILE]]': there is no non-empty PLTGOT section at 0xffff
|
|
# ERR4-NEXT: warning: '[[FILE]]': there is no non-empty RELPLT section at 0xffff
|
|
# ERR5-NEXT: warning: '[[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)
|
|
# ERR6-NEXT: warning: '[[FILE]]': unable to get a symbol table linked to the SHT_PROGBITS section with index 2: invalid section index: 2863311530
|
|
# ERR7-NEXT: warning: '[[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
|
|
|
|
# NO-OUTPUT-EMPTY:
|
|
# NO-OUTPUT-NOT: {{.}}
|
|
|
|
## Check how we print PLT entries when they are unnamed section symbols.
|
|
# RUN: yaml2obj --docnum=4 %s -o %t3
|
|
# RUN: llvm-readobj -A %t3 2>&1 | FileCheck %s -DFILE=%t3 --check-prefix=SEC-SYMS-LLVM
|
|
# RUN: llvm-readelf -A %t3 2>&1 | FileCheck %s -DFILE=%t3 --check-prefix=SEC-SYMS-GNU
|
|
|
|
# SEC-SYMS-LLVM: PLT GOT {
|
|
# SEC-SYMS-LLVM: Entries [
|
|
# SEC-SYMS-LLVM: Entry {
|
|
# SEC-SYMS-LLVM: Section: Absolute (0xFFF1)
|
|
# SEC-SYMS-LLVM-NEXT: warning: '[[FILE]]': unable to get section index for symbol with st_shndx = 0xfff1 (SHN_ABS)
|
|
# SEC-SYMS-LLVM-NEXT: Name: <?> (0)
|
|
# SEC-SYMS-LLVM-NEXT: }
|
|
# SEC-SYMS-LLVM-NEXT: Entry {
|
|
# SEC-SYMS-LLVM: Section: .got.plt (0x2)
|
|
# SEC-SYMS-LLVM-NEXT: Name: .got.plt (0)
|
|
# SEC-SYMS-LLVM-NEXT: }
|
|
# SEC-SYMS-LLVM-NEXT: Entry {
|
|
# SEC-SYMS-LLVM: Section: Common (0xFFF2)
|
|
# SEC-SYMS-LLVM-NEXT: warning: '[[FILE]]': unable to get section index for symbol with st_shndx = 0xfff2 (SHN_COMMON)
|
|
# SEC-SYMS-LLVM-NEXT: Name: <?> (0)
|
|
# SEC-SYMS-LLVM-NEXT: }
|
|
# SEC-SYMS-LLVM-NEXT: Entry {
|
|
# SEC-SYMS-LLVM: Type: Section (0x3)
|
|
# SEC-SYMS-LLVM-NEXT: warning: '[[FILE]]': found an extended symbol index (4), but unable to locate the extended symbol index table
|
|
# SEC-SYMS-LLVM-NEXT: Section: Reserved (0xFFFF)
|
|
# SEC-SYMS-LLVM-NEXT: Name: <?> (0)
|
|
# SEC-SYMS-LLVM-NEXT: }
|
|
# SEC-SYMS-LLVM-NEXT: ]
|
|
# SEC-SYMS-LLVM-NEXT: }
|
|
|
|
# SEC-SYMS-GNU: PLT GOT:
|
|
# SEC-SYMS-GNU: Entries:
|
|
# SEC-SYMS-GNU-NEXT: Address {{.*}} Ndx Name
|
|
# SEC-SYMS-GNU-NEXT: warning: '[[FILE]]': unable to get section index for symbol with st_shndx = 0xfff1 (SHN_ABS)
|
|
# SEC-SYMS-GNU-NEXT: 0000000000002010 {{.*}} ABS <?>
|
|
# SEC-SYMS-GNU-NEXT: 0000000000002018 {{.*}} 2 .got.plt
|
|
# SEC-SYMS-GNU-NEXT: warning: '[[FILE]]': unable to get section index for symbol with st_shndx = 0xfff2 (SHN_COMMON)
|
|
# SEC-SYMS-GNU-NEXT: 0000000000002020 {{.*}} COM <?>
|
|
# SEC-SYMS-GNU-NEXT: warning: '[[FILE]]': found an extended symbol index (4), but unable to locate the extended symbol index table
|
|
# SEC-SYMS-GNU-NEXT: 0000000000002028 {{.*}} RSV[0xffff] <?>
|
|
|
|
--- !ELF
|
|
FileHeader:
|
|
Class: ELFCLASS64
|
|
Data: ELFDATA2LSB
|
|
Type: ET_REL
|
|
Machine: EM_MIPS
|
|
Sections:
|
|
- Name: .rel.plt
|
|
Type: SHT_REL
|
|
Flags: [ SHF_ALLOC ]
|
|
Address: 0x1000
|
|
Link: .dynsym
|
|
Relocations:
|
|
- Offset: 0x1
|
|
Symbol: 1
|
|
Type: R_MIPS_JUMP_SLOT
|
|
- Offset: 0x2
|
|
Symbol: 2
|
|
Type: R_MIPS_JUMP_SLOT
|
|
- Offset: 0x2
|
|
Symbol: 3
|
|
Type: R_MIPS_JUMP_SLOT
|
|
- Offset: 0x3
|
|
Symbol: 4
|
|
Type: R_MIPS_JUMP_SLOT
|
|
- Name: .got.plt
|
|
Type: SHT_PROGBITS
|
|
Flags: [ SHF_WRITE, SHF_ALLOC ]
|
|
Address: 0x2000
|
|
Size: 48 ## (dynamic symbols number + 2) * 8
|
|
- Name: .dynamic
|
|
Type: SHT_DYNAMIC
|
|
Entries:
|
|
- Tag: DT_JMPREL
|
|
Value: 0x1000
|
|
- Tag: DT_MIPS_PLTGOT
|
|
Value: 0x2000
|
|
DynamicSymbols:
|
|
- Type: STT_SECTION
|
|
Index: SHN_ABS
|
|
- Type: STT_SECTION
|
|
Section: .got.plt
|
|
- Type: STT_SECTION
|
|
Index: SHN_COMMON
|
|
- Type: STT_SECTION
|
|
Index: SHN_XINDEX
|