| # 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 |