| ## Check that we are able to dump MIPS GOT entries using -A properly. |
| |
| ## Check how we dump 64-bit inputs. |
| |
| # RUN: yaml2obj --docnum=1 -DTYPE=ET_REL %s -o %t.got.o |
| # RUN: yaml2obj --docnum=1 -DTYPE=ET_DYN %s -o %t.got.so |
| # RUN: yaml2obj --docnum=1 -DTYPE=ET_EXEC %s -o %t.got.exe |
| |
| # RUN: llvm-readobj -A %t.got.o 2>&1 | FileCheck %s -DOTHERNUM=0 -check-prefix=BASIC-LLVM |
| # RUN: llvm-readobj -A %t.got.so 2>&1 | FileCheck %s -DOTHERNUM=0 -check-prefix=BASIC-LLVM |
| # RUN: llvm-readobj -A %t.got.exe 2>&1 | FileCheck %s -DOTHERNUM=0 -check-prefix=BASIC-LLVM |
| # RUN: llvm-readelf -A %t.got.o 2>&1 | FileCheck %s -check-prefix=BASIC-GNU \ |
| # RUN: --implicit-check-not="Number of" --strict-whitespace --match-full-lines |
| # RUN: llvm-readelf -A %t.got.so 2>&1 | FileCheck %s -check-prefix=BASIC-GNU \ |
| # RUN: --implicit-check-not="Number of" --strict-whitespace --match-full-lines |
| # RUN: llvm-readelf -A %t.got.exe 2>&1 | FileCheck %s -check-prefix=BASIC-GNU \ |
| # RUN: --implicit-check-not="Number of" --strict-whitespace --match-full-lines |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: [[TYPE=ET_EXEC]] |
| Machine: EM_MIPS |
| Sections: |
| - Name: .got |
| Type: SHT_PROGBITS |
| Address: 0x1122 |
| ContentArray: [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ## Lazy resolver. |
| 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, ## Module pointer (GNU extension) |
| 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, ## Local entry 1 |
| 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, ## Local entry 2 |
| 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, ## Global entry 1 |
| 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB ] ## Global entry 2 |
| Size: [[SIZE=<none>]] |
| - Name: .dynamic |
| Type: SHT_DYNAMIC |
| ShType: [[DYNAMICTYPE=<none>]] |
| Entries: |
| - Tag: DT_MIPS_LOCAL_GOTNO |
| Value: 4 |
| - Tag: DT_MIPS_GOTSYM |
| Value: 1 |
| - Tag: DT_PLTGOT |
| Value: 0x1122 |
| DynamicSymbols: |
| - Name: foo |
| - Name: bar |
| Type: STT_FUNC |
| |
| # BASIC-LLVM: Primary GOT { |
| # BASIC-LLVM-NEXT: Canonical gp value: 0x9112 |
| # BASIC-LLVM-NEXT: Reserved entries [ |
| # BASIC-LLVM-NEXT: Entry { |
| # BASIC-LLVM-NEXT: Address: 0x1122 |
| # BASIC-LLVM-NEXT: Access: -32752 |
| # BASIC-LLVM-NEXT: Initial: 0x0 |
| # BASIC-LLVM-NEXT: Purpose: Lazy resolver |
| # BASIC-LLVM-NEXT: } |
| # BASIC-LLVM-NEXT: Entry { |
| # BASIC-LLVM-NEXT: Address: 0x112A |
| # BASIC-LLVM-NEXT: Access: -32744 |
| # BASIC-LLVM-NEXT: Initial: 0xFFFFFFFFFFFFFFFF |
| # BASIC-LLVM-NEXT: Purpose: Module pointer (GNU extension) |
| # BASIC-LLVM-NEXT: } |
| # BASIC-LLVM-NEXT: ] |
| # BASIC-LLVM-NEXT: Local entries [ |
| # BASIC-LLVM-NEXT: Entry { |
| # BASIC-LLVM-NEXT: Address: 0x1132 |
| # BASIC-LLVM-NEXT: Access: -32736 |
| # BASIC-LLVM-NEXT: Initial: 0x1111111111111111 |
| # BASIC-LLVM-NEXT: } |
| # BASIC-LLVM-NEXT: Entry { |
| # BASIC-LLVM-NEXT: Address: 0x113A |
| # BASIC-LLVM-NEXT: Access: -32728 |
| # BASIC-LLVM-NEXT: Initial: 0x2222222222222222 |
| # BASIC-LLVM-NEXT: } |
| # BASIC-LLVM-NEXT: ] |
| # BASIC-LLVM-NEXT: Global entries [ |
| # BASIC-LLVM-NEXT: Entry { |
| # BASIC-LLVM-NEXT: Address: 0x1142 |
| # BASIC-LLVM-NEXT: Access: -32720 |
| # BASIC-LLVM-NEXT: Initial: 0xAAAAAAAAAAAAAAAA |
| # BASIC-LLVM-NEXT: Value: 0x0 |
| # BASIC-LLVM-NEXT: Type: None (0x0) |
| # BASIC-LLVM-NEXT: Section: Undefined (0x0) |
| # BASIC-LLVM-NEXT: Name: foo (5) |
| # BASIC-LLVM-NEXT: } |
| # BASIC-LLVM-NEXT: Entry { |
| # BASIC-LLVM-NEXT: Address: 0x114A |
| # BASIC-LLVM-NEXT: Access: -32712 |
| # BASIC-LLVM-NEXT: Initial: 0xBBBBBBBBBBBBBBBB |
| # BASIC-LLVM-NEXT: Value: 0x0 |
| # BASIC-LLVM-NEXT: Type: Function (0x2) |
| # BASIC-LLVM-NEXT: Section: Undefined (0x0) |
| # BASIC-LLVM-NEXT: Name: bar (1) |
| # BASIC-LLVM-NEXT: } |
| # BASIC-LLVM-NEXT: ] |
| # BASIC-LLVM-NEXT: Number of TLS and multi-GOT entries: [[OTHERNUM]] |
| # BASIC-LLVM-NEXT: } |
| |
| # BASIC-GNU:Primary GOT: |
| # BASIC-GNU-NEXT: Canonical gp value: 0000000000009112 |
| # BASIC-GNU-EMPTY: |
| # BASIC-GNU-NEXT: Reserved entries: |
| # BASIC-GNU-NEXT: Address Access Initial Purpose |
| # BASIC-GNU-NEXT: 0000000000001122 -32752(gp) 0000000000000000 Lazy resolver |
| # BASIC-GNU-NEXT: 000000000000112a -32744(gp) ffffffffffffffff Module pointer (GNU extension) |
| # BASIC-GNU-EMPTY: |
| # BASIC-GNU-NEXT: Local entries: |
| # BASIC-GNU-NEXT: Address Access Initial |
| # BASIC-GNU-NEXT: 0000000000001132 -32736(gp) 1111111111111111 {{$}} |
| # BASIC-GNU-NEXT: 000000000000113a -32728(gp) 2222222222222222 {{$}} |
| # BASIC-GNU-EMPTY: |
| # BASIC-GNU-NEXT: Global entries: |
| # BASIC-GNU-NEXT: Address Access Initial Sym.Val. Type Ndx Name |
| # BASIC-GNU-NEXT: 0000000000001142 -32720(gp) aaaaaaaaaaaaaaaa 0000000000000000 NOTYPE UND foo |
| # BASIC-GNU-NEXT: 000000000000114a -32712(gp) bbbbbbbbbbbbbbbb 0000000000000000 FUNC UND bar |
| # BASIC-GNU-EMPTY: |
| # BASIC-GNU-OTHER-NEXT: Number of TLS and multi-GOT entries [[OTHERNUM]] |
| |
| ## Check we are able to print the number of TLS and multi-GOT entries properly. |
| |
| # RUN: yaml2obj --docnum=1 %s -DSIZE=56 -o %t.other.entries1.exe |
| # RUN: yaml2obj --docnum=1 %s -DSIZE=64 -o %t.other.entries2.exe |
| # RUN: llvm-readobj -A %t.other.entries1.exe 2>&1 | FileCheck %s -DOTHERNUM=1 --check-prefix=BASIC-LLVM |
| # RUN: llvm-readobj -A %t.other.entries2.exe 2>&1 | FileCheck %s -DOTHERNUM=2 -check-prefix=BASIC-LLVM |
| # RUN: llvm-readelf -A %t.other.entries1.exe 2>&1 | FileCheck %s -DOTHERNUM=1 \ |
| # RUN: --check-prefixes=BASIC-GNU,BASIC-GNU-OTHER --strict-whitespace --match-full-lines |
| # RUN: llvm-readelf -A %t.other.entries2.exe 2>&1 | FileCheck %s -DOTHERNUM=2 \ |
| # RUN: --check-prefixes=BASIC-GNU,BASIC-GNU-OTHER --strict-whitespace --match-full-lines |
| |
| ## Check how we print static GOT. Our code assumes that the GOT is static when there |
| ## is no .dynamic section, so we change its type to hide it. |
| |
| # RUN: yaml2obj --docnum=1 -DDYNAMICTYPE=SHT_PROGBITS %s -o %t.got-static.exe |
| # RUN: llvm-readobj -A %t.got-static.exe | FileCheck %s --check-prefix=STATIC-GOT-LLVM |
| # RUN: llvm-readelf -A %t.got-static.exe | FileCheck %s --check-prefix=STATIC-GOT-GNU |
| |
| # STATIC-GOT-LLVM: Static GOT { |
| # STATIC-GOT-LLVM-NEXT: Canonical gp value: 0x9112 |
| # STATIC-GOT-LLVM-NEXT: Reserved entries [ |
| # STATIC-GOT-LLVM-NEXT: Entry { |
| # STATIC-GOT-LLVM-NEXT: Address: 0x1122 |
| # STATIC-GOT-LLVM-NEXT: Access: -32752 |
| # STATIC-GOT-LLVM-NEXT: Initial: 0x0 |
| # STATIC-GOT-LLVM-NEXT: Purpose: Lazy resolver |
| # STATIC-GOT-LLVM-NEXT: } |
| # STATIC-GOT-LLVM-NEXT: Entry { |
| # STATIC-GOT-LLVM-NEXT: Address: 0x112A |
| # STATIC-GOT-LLVM-NEXT: Access: -32744 |
| # STATIC-GOT-LLVM-NEXT: Initial: 0xFFFFFFFFFFFFFFFF |
| # STATIC-GOT-LLVM-NEXT: Purpose: Module pointer (GNU extension) |
| # STATIC-GOT-LLVM-NEXT: } |
| # STATIC-GOT-LLVM-NEXT: ] |
| # STATIC-GOT-LLVM-NEXT: Local entries [ |
| # STATIC-GOT-LLVM-NEXT: Entry { |
| # STATIC-GOT-LLVM-NEXT: Address: 0x1132 |
| # STATIC-GOT-LLVM-NEXT: Access: -32736 |
| # STATIC-GOT-LLVM-NEXT: Initial: 0x1111111111111111 |
| # STATIC-GOT-LLVM-NEXT: } |
| # STATIC-GOT-LLVM-NEXT: Entry { |
| # STATIC-GOT-LLVM-NEXT: Address: 0x113A |
| # STATIC-GOT-LLVM-NEXT: Access: -32728 |
| # STATIC-GOT-LLVM-NEXT: Initial: 0x2222222222222222 |
| # STATIC-GOT-LLVM-NEXT: } |
| # STATIC-GOT-LLVM-NEXT: Entry { |
| # STATIC-GOT-LLVM-NEXT: Address: 0x1142 |
| # STATIC-GOT-LLVM-NEXT: Access: -32720 |
| # STATIC-GOT-LLVM-NEXT: Initial: 0xAAAAAAAAAAAAAAAA |
| # STATIC-GOT-LLVM-NEXT: } |
| # STATIC-GOT-LLVM-NEXT: Entry { |
| # STATIC-GOT-LLVM-NEXT: Address: 0x114A |
| # STATIC-GOT-LLVM-NEXT: Access: -32712 |
| # STATIC-GOT-LLVM-NEXT: Initial: 0xBBBBBBBBBBBBBBBB |
| # STATIC-GOT-LLVM-NEXT: } |
| # STATIC-GOT-LLVM-NEXT: ] |
| # STATIC-GOT-LLVM-NEXT: } |
| |
| # STATIC-GOT-GNU: Static GOT: |
| # STATIC-GOT-GNU-NEXT: Canonical gp value: 0000000000009112 |
| # STATIC-GOT-GNU-EMPTY: |
| # STATIC-GOT-GNU-NEXT: Reserved entries: |
| # STATIC-GOT-GNU-NEXT: Address Access Initial Purpose |
| # STATIC-GOT-GNU-NEXT: 0000000000001122 -32752(gp) 0000000000000000 Lazy resolver |
| # STATIC-GOT-GNU-NEXT: 000000000000112a -32744(gp) ffffffffffffffff Module pointer (GNU extension) |
| # STATIC-GOT-GNU-EMPTY: |
| # STATIC-GOT-GNU-NEXT: Local entries: |
| # STATIC-GOT-GNU-NEXT: Address Access Initial |
| # STATIC-GOT-GNU-NEXT: 0000000000001132 -32736(gp) 1111111111111111 |
| # STATIC-GOT-GNU-NEXT: 000000000000113a -32728(gp) 2222222222222222 |
| # STATIC-GOT-GNU-NEXT: 0000000000001142 -32720(gp) aaaaaaaaaaaaaaaa |
| # STATIC-GOT-GNU-NEXT: 000000000000114a -32712(gp) bbbbbbbbbbbbbbbb |
| # STATIC-GOT-GNU-EMPTY: |
| # STATIC-GOT-GNU-NOT: {{.}} |
| |
| ## Check how we dump 32-bit inputs. |
| |
| # RUN: yaml2obj --docnum=2 %s -o %t.got32.exe |
| # RUN: llvm-readobj -A %t.got32.exe 2>&1 | FileCheck %s -check-prefix=BASIC32-LLVM |
| # RUN: llvm-readelf -A %t.got32.exe 2>&1 | FileCheck %s -check-prefix=BASIC32-GNU \ |
| # RUN: --strict-whitespace --match-full-lines |
| |
| # BASIC32-LLVM: Primary GOT { |
| # BASIC32-LLVM-NEXT: Canonical gp value: 0x9112 |
| # BASIC32-LLVM-NEXT: Reserved entries [ |
| # BASIC32-LLVM-NEXT: Entry { |
| # BASIC32-LLVM-NEXT: Address: 0x1122 |
| # BASIC32-LLVM-NEXT: Access: -32752 |
| # BASIC32-LLVM-NEXT: Initial: 0x0 |
| # BASIC32-LLVM-NEXT: Purpose: Lazy resolver |
| # BASIC32-LLVM-NEXT: } |
| # BASIC32-LLVM-NEXT: Entry { |
| # BASIC32-LLVM-NEXT: Address: 0x1126 |
| # BASIC32-LLVM-NEXT: Access: -32748 |
| # BASIC32-LLVM-NEXT: Initial: 0xFFFFFFFF |
| # BASIC32-LLVM-NEXT: Purpose: Module pointer (GNU extension) |
| # BASIC32-LLVM-NEXT: } |
| # BASIC32-LLVM-NEXT: ] |
| # BASIC32-LLVM-NEXT: Local entries [ |
| # BASIC32-LLVM-NEXT: Entry { |
| # BASIC32-LLVM-NEXT: Address: 0x112A |
| # BASIC32-LLVM-NEXT: Access: -32744 |
| # BASIC32-LLVM-NEXT: Initial: 0x11111111 |
| # BASIC32-LLVM-NEXT: } |
| # BASIC32-LLVM-NEXT: Entry { |
| # BASIC32-LLVM-NEXT: Address: 0x112E |
| # BASIC32-LLVM-NEXT: Access: -32740 |
| # BASIC32-LLVM-NEXT: Initial: 0x22222222 |
| # BASIC32-LLVM-NEXT: } |
| # BASIC32-LLVM-NEXT: ] |
| # BASIC32-LLVM-NEXT: Global entries [ |
| # BASIC32-LLVM-NEXT: Entry { |
| # BASIC32-LLVM-NEXT: Address: 0x1132 |
| # BASIC32-LLVM-NEXT: Access: -32736 |
| # BASIC32-LLVM-NEXT: Initial: 0xAAAAAAAA |
| # BASIC32-LLVM-NEXT: Value: 0x0 |
| # BASIC32-LLVM-NEXT: Type: None (0x0) |
| # BASIC32-LLVM-NEXT: Section: Undefined (0x0) |
| # BASIC32-LLVM-NEXT: Name: foo (5) |
| # BASIC32-LLVM-NEXT: } |
| # BASIC32-LLVM-NEXT: Entry { |
| # BASIC32-LLVM-NEXT: Address: 0x1136 |
| # BASIC32-LLVM-NEXT: Access: -32732 |
| # BASIC32-LLVM-NEXT: Initial: 0xBBBBBBBB |
| # BASIC32-LLVM-NEXT: Value: 0x0 |
| # BASIC32-LLVM-NEXT: Type: Function (0x2) |
| # BASIC32-LLVM-NEXT: Section: Undefined (0x0) |
| # BASIC32-LLVM-NEXT: Name: bar (1) |
| # BASIC32-LLVM-NEXT: } |
| # BASIC32-LLVM-NEXT: ] |
| # BASIC32-LLVM-NEXT: Number of TLS and multi-GOT entries: 1 |
| # BASIC32-LLVM-NEXT: } |
| |
| # BASIC32-GNU:Primary GOT: |
| # BASIC32-GNU-NEXT: Canonical gp value: 00009112 |
| # BASIC32-GNU-EMPTY: |
| # BASIC32-GNU-NEXT: Reserved entries: |
| # BASIC32-GNU-NEXT: Address Access Initial Purpose |
| # BASIC32-GNU-NEXT: 00001122 -32752(gp) 00000000 Lazy resolver |
| # BASIC32-GNU-NEXT: 00001126 -32748(gp) ffffffff Module pointer (GNU extension) |
| # BASIC32-GNU-EMPTY: |
| # BASIC32-GNU-NEXT: Local entries: |
| # BASIC32-GNU-NEXT: Address Access Initial |
| # BASIC32-GNU-NEXT: 0000112a -32744(gp) 11111111 {{$}} |
| # BASIC32-GNU-NEXT: 0000112e -32740(gp) 22222222 {{$}} |
| # BASIC32-GNU-EMPTY: |
| # BASIC32-GNU-NEXT: Global entries: |
| # BASIC32-GNU-NEXT: Address Access Initial Sym.Val. Type Ndx Name |
| # BASIC32-GNU-NEXT: 00001132 -32736(gp) aaaaaaaa 00000000 NOTYPE UND foo |
| # BASIC32-GNU-NEXT: 00001136 -32732(gp) bbbbbbbb 00000000 FUNC UND bar |
| # BASIC32-GNU-EMPTY: |
| # BASIC32-GNU-NEXT: Number of TLS and multi-GOT entries 1 |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS32 |
| Data: ELFDATA2LSB |
| Type: ET_EXEC |
| Machine: EM_MIPS |
| Sections: |
| - Name: .got |
| Type: SHT_PROGBITS |
| Address: 0x1122 |
| ContentArray: [ 0x00, 0x00, 0x00, 0x00, ## Lazy resolver. |
| 0xFF, 0xFF, 0xFF, 0xFF, ## Module pointer (GNU extension). |
| 0x11, 0x11, 0x11, 0x11, ## Local entry 1. |
| 0x22, 0x22, 0x22, 0x22, ## Local entry 2. |
| 0xAA, 0xAA, 0xAA, 0xAA, ## Global entry 1. |
| 0xBB, 0xBB, 0xBB, 0xBB, ## Global entry 2. |
| 0x00, 0x00, 0x00, 0x00 ] ## Other entry. |
| - Name: .dynamic |
| Type: SHT_DYNAMIC |
| Entries: |
| - Tag: DT_MIPS_LOCAL_GOTNO |
| Value: 4 |
| - Tag: DT_MIPS_GOTSYM |
| Value: 1 |
| - Tag: DT_PLTGOT |
| Value: 0x1122 |
| DynamicSymbols: |
| - Name: foo |
| - Name: bar |
| Type: STT_FUNC |
| |
| ## Check what we print when there are no local nor global GOT entries. |
| |
| # RUN: yaml2obj --docnum=3 %s -o %t.got-noentries.exe |
| # RUN: llvm-readobj -A %t.got-noentries.exe | FileCheck %s --check-prefix=GOT-EMPTY-LLVM |
| # RUN: llvm-readelf -A %t.got-noentries.exe | FileCheck %s --check-prefix=GOT-EMPTY-GNU |
| |
| # GOT-EMPTY-LLVM: Primary GOT { |
| # GOT-EMPTY-LLVM-NEXT: Canonical gp value: 0x9112 |
| # GOT-EMPTY-LLVM-NEXT: Reserved entries [ |
| # GOT-EMPTY-LLVM-NEXT: Entry { |
| # GOT-EMPTY-LLVM-NEXT: Address: 0x1122 |
| # GOT-EMPTY-LLVM-NEXT: Access: -32752 |
| # GOT-EMPTY-LLVM-NEXT: Initial: 0x0 |
| # GOT-EMPTY-LLVM-NEXT: Purpose: Lazy resolver |
| # GOT-EMPTY-LLVM-NEXT: } |
| # GOT-EMPTY-LLVM-NEXT: Entry { |
| # GOT-EMPTY-LLVM-NEXT: Address: 0x112A |
| # GOT-EMPTY-LLVM-NEXT: Access: -32744 |
| # GOT-EMPTY-LLVM-NEXT: Initial: 0xFFFFFFFFFFFFFFFF |
| # GOT-EMPTY-LLVM-NEXT: Purpose: Module pointer (GNU extension) |
| # GOT-EMPTY-LLVM-NEXT: } |
| # GOT-EMPTY-LLVM-NEXT: ] |
| # GOT-EMPTY-LLVM-NEXT: Local entries [ |
| # GOT-EMPTY-LLVM-NEXT: ] |
| # GOT-EMPTY-LLVM-NEXT: Global entries [ |
| # GOT-EMPTY-LLVM-NEXT: ] |
| # GOT-EMPTY-LLVM-NEXT: Number of TLS and multi-GOT entries: 0 |
| # GOT-EMPTY-LLVM-NEXT: } |
| |
| # GOT-EMPTY-GNU: Primary GOT: |
| # GOT-EMPTY-GNU-NEXT: Canonical gp value: 0000000000009112 |
| # GOT-EMPTY-GNU-EMPTY: |
| # GOT-EMPTY-GNU-NEXT: Reserved entries: |
| # GOT-EMPTY-GNU-NEXT: Address Access Initial Purpose |
| # GOT-EMPTY-GNU-NEXT: 0000000000001122 -32752(gp) 0000000000000000 Lazy resolver |
| # GOT-EMPTY-GNU-NEXT: 000000000000112a -32744(gp) ffffffffffffffff Module pointer (GNU extension) |
| # GOT-EMPTY-GNU-NOT: {{.}} |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_EXEC |
| Machine: EM_MIPS |
| Sections: |
| - Name: .got |
| Type: SHT_PROGBITS |
| Address: 0x1122 |
| ContentArray: [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ## Lazy resolver. |
| 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ] ## Module pointer (GNU extension) |
| Size: [[SIZE=<none>]] |
| - Name: .dynamic |
| Type: SHT_DYNAMIC |
| Entries: |
| - Tag: DT_MIPS_LOCAL_GOTNO |
| Value: 2 |
| - Tag: DT_MIPS_GOTSYM |
| Value: 1 |
| - Tag: DT_PLTGOT |
| Value: 0x1122 |
| DynamicSymbols: [] |
| |
| ## Check we report errors when dynamic tags, needed for dumping GOT, are missing. |
| |
| # RUN: yaml2obj --docnum=4 -DTAG1=DT_MIPS_LOCAL_GOTNO -DTAG2=DT_MIPS_GOTSYM %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=4 -DTAG1=DT_PLTGOT -DTAG2=DT_MIPS_GOTSYM %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 |
| |
| # RUN: yaml2obj --docnum=4 -DTAG1=DT_PLTGOT -DTAG2=DT_MIPS_LOCAL_GOTNO %s -o %t.err3.o |
| # RUN: llvm-readobj -A %t.err3.o 2>&1 | FileCheck %s -DFILE=%t.err3.o -check-prefixes=NO-OUTPUT,ERR3 |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_EXEC |
| Machine: EM_MIPS |
| Sections: |
| - Name: .dynamic |
| Type: SHT_DYNAMIC |
| Entries: |
| - Tag: [[TAG1]] |
| Value: 0 |
| - Tag: [[TAG2]] |
| Value: 0 |
| - Tag: DT_NULL |
| Value: 0 |
| DynamicSymbols: [] |
| |
| # RUN: yaml2obj --docnum=5 -DVAL1=0xffff %s -o %t.err4.o |
| # RUN: llvm-readobj -A %t.err4.o 2>&1 | FileCheck %s -DFILE=%t.err4.o -check-prefixes=NO-OUTPUT,ERR4 |
| |
| # RUN: yaml2obj --docnum=5 -DVAL2=0xffff %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 |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_EXEC |
| Machine: EM_MIPS |
| Sections: |
| - Name: .dynamic |
| Type: SHT_DYNAMIC |
| Entries: |
| - Tag: DT_MIPS_LOCAL_GOTNO |
| Value: 0 |
| - Tag: DT_MIPS_GOTSYM |
| Value: [[VAL1=0]] |
| - Tag: DT_PLTGOT |
| Value: [[VAL2=0]] |
| DynamicSymbols: [] |
| |
| # 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 PLTGOT dynamic tag |
| # ERR2-NEXT: warning: '[[FILE]]': cannot find MIPS_LOCAL_GOTNO dynamic tag |
| # ERR3-NEXT: warning: '[[FILE]]': cannot find MIPS_GOTSYM dynamic tag |
| # ERR4-NEXT: warning: '[[FILE]]': DT_MIPS_GOTSYM value (65535) exceeds the number of dynamic symbols (1) |
| # ERR5-NEXT: warning: '[[FILE]]': there is no non-empty GOT section at 0xffff |
| |
| # NO-OUTPUT-EMPTY: |
| # NO-OUTPUT-NOT: {{.}} |
| |
| ## Check that we do not report a warning about the .got section when we are able to locate it by name. |
| # RUN: yaml2obj --docnum=6 -DNAME=0xffff %s -o %t.err6.o |
| # RUN: llvm-readobj -A %t.err6.o 2>&1 | \ |
| # RUN: FileCheck %s -DFILE=%t.err6.o -check-prefix=NAME-ERR-FOUND --implicit-check-not=warning: |
| # RUN: llvm-readelf -A %t.err6.o 2>&1 | \ |
| # RUN: FileCheck %s -DFILE=%t.err6.o -check-prefix=NAME-ERR-FOUND --implicit-check-not=warning: |
| |
| # NAME-ERR-FOUND: warning: '[[FILE]]': unable to read the name of SHT_PROGBITS section with index 1: a section [index 1] has an invalid sh_name (0xffff) offset which goes past the end of the section name string table |
| # NAME-ERR-FOUND-NEXT: warning: '[[FILE]]': unable to read the name of SHT_PROGBITS section with index 3: a section [index 3] has an invalid sh_name (0xffff) offset which goes past the end of the section name string table |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_REL |
| Machine: EM_MIPS |
| Sections: |
| - Type: SHT_PROGBITS |
| ShName: [[NAME=<none>]] |
| - Name: .got |
| Type: SHT_PROGBITS |
| ShName: [[GOTNAME=<none>]] |
| - Type: SHT_PROGBITS |
| ShName: [[NAME=<none>]] |
| |
| ## Check we report a warning when we are unable to find the .got section due to an error. |
| # RUN: yaml2obj --docnum=6 -DGOTNAME=0xffff %s -o %t.err7.o |
| # RUN: llvm-readelf -A %t.err7.o 2>&1 | FileCheck %s -DFILE=%t.err7.o --check-prefix=NAME-ERR-NOTFOUND --implicit-check-not=warning: |
| # RUN: llvm-readobj -A %t.err7.o 2>&1 | FileCheck %s -DFILE=%t.err7.o --check-prefix=NAME-ERR-NOTFOUND --implicit-check-not=warning: |
| |
| # NAME-ERR-NOTFOUND: warning: '[[FILE]]': unable to read the name of SHT_PROGBITS section with index 2: a section [index 2] has an invalid sh_name (0xffff) offset which goes past the end of the section name string table |
| |
| ## Check that we correctly show .got section content when there are some other zero-sized |
| ## sections with the same address as the .got section. |
| ## In this test the empty .data section has the same address as the .got section. |
| |
| # RUN: yaml2obj --docnum=7 %s -o %t.err7.o |
| # RUN: llvm-readobj -A %t.err7.o 2>&1 | FileCheck %s -DFILE=%t.err7.o --check-prefix=SAME-ADDR-LLVM |
| # RUN: llvm-readelf -A %t.err7.o 2>&1 | FileCheck %s -DFILE=%t.err7.o --check-prefix=SAME-ADDR-GNU |
| |
| # SAME-ADDR-LLVM: Primary GOT { |
| # SAME-ADDR-LLVM-NEXT: Canonical gp value: 0x9112 |
| # SAME-ADDR-LLVM-NEXT: Reserved entries [ |
| # SAME-ADDR-LLVM-NEXT: Entry { |
| # SAME-ADDR-LLVM-NEXT: Address: 0x1122 |
| # SAME-ADDR-LLVM-NEXT: Access: -32752 |
| # SAME-ADDR-LLVM-NEXT: Initial: 0x0 |
| # SAME-ADDR-LLVM-NEXT: Purpose: Lazy resolver |
| # SAME-ADDR-LLVM-NEXT: } |
| # SAME-ADDR-LLVM-NEXT: ] |
| # SAME-ADDR-LLVM-NEXT: Local entries [ |
| # SAME-ADDR-LLVM-NEXT: ] |
| # SAME-ADDR-LLVM-NEXT: Global entries [ |
| # SAME-ADDR-LLVM-NEXT: Entry { |
| # SAME-ADDR-LLVM-NEXT: Address: 0x112A |
| # SAME-ADDR-LLVM-NEXT: Access: -32744 |
| # SAME-ADDR-LLVM-NEXT: Initial: 0x0 |
| # SAME-ADDR-LLVM-NEXT: Value: 0x0 |
| # SAME-ADDR-LLVM-NEXT: Type: None (0x0) |
| # SAME-ADDR-LLVM-NEXT: Section: Undefined (0x0) |
| # SAME-ADDR-LLVM-NEXT: Name: foo (1) |
| # SAME-ADDR-LLVM-NEXT: } |
| # SAME-ADDR-LLVM-NEXT: ] |
| # SAME-ADDR-LLVM-NEXT: Number of TLS and multi-GOT entries: 0 |
| # SAME-ADDR-LLVM-NEXT: } |
| |
| # SAME-ADDR-GNU: Primary GOT: |
| # SAME-ADDR-GNU-NEXT: Canonical gp value: 0000000000009112 |
| # SAME-ADDR-GNU-EMPTY: |
| # SAME-ADDR-GNU-NEXT: Reserved entries: |
| # SAME-ADDR-GNU-NEXT: Address Access Initial Purpose |
| # SAME-ADDR-GNU-NEXT: 0000000000001122 -32752(gp) 0000000000000000 Lazy resolver |
| # SAME-ADDR-GNU-EMPTY: |
| # SAME-ADDR-GNU-NEXT: Global entries: |
| # SAME-ADDR-GNU-NEXT: Address Access Initial Sym.Val. Type Ndx Name |
| # SAME-ADDR-GNU-NEXT: 000000000000112a -32744(gp) 0000000000000000 0000000000000000 NOTYPE UND foo |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_REL |
| Machine: EM_MIPS |
| Sections: |
| - Name: .data |
| Type: SHT_PROGBITS |
| Address: 0x1122 |
| Size: 0 |
| - Name: .got |
| Type: SHT_PROGBITS |
| Address: 0x1122 |
| Size: 16 |
| - Name: .dynamic |
| Type: SHT_DYNAMIC |
| Entries: |
| - Tag: DT_MIPS_LOCAL_GOTNO |
| Value: 1 |
| - Tag: DT_MIPS_GOTSYM |
| Value: 1 |
| - Tag: DT_PLTGOT |
| Value: 0x1122 |
| DynamicSymbols: |
| - Name: foo |
| |
| ## Check how we print global GOT entries when they are unnamed section symbols. |
| # RUN: yaml2obj --docnum=8 %s -o %t.err8.o |
| # RUN: llvm-readobj -A %t.err8.o 2>&1 | FileCheck %s -DFILE=%t.err8.o --check-prefix=SEC-SYMS-LLVM |
| # RUN: llvm-readelf -A %t.err8.o 2>&1 | FileCheck %s -DFILE=%t.err8.o --check-prefix=SEC-SYMS-GNU |
| |
| # SEC-SYMS-LLVM: Global entries [ |
| # SEC-SYMS-LLVM-NEXT: 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 (0x1) |
| # SEC-SYMS-LLVM-NEXT: Name: .got (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-GNU: Global entries: |
| # SEC-SYMS-GNU-NEXT: {{.*}} 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: {{.*}} ABS <?> |
| # SEC-SYMS-GNU-NEXT: {{.*}} 1 .got |
| # SEC-SYMS-GNU-NEXT: warning: '[[FILE]]': unable to get section index for symbol with st_shndx = 0xfff2 (SHN_COMMON) |
| # SEC-SYMS-GNU-NEXT: {{.*}} 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: {{.*}} RSV[0xffff] <?> |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_REL |
| Machine: EM_MIPS |
| Sections: |
| - Name: .got |
| Type: SHT_PROGBITS |
| Address: 0x1122 |
| Size: 48 |
| - Name: .dynamic |
| Type: SHT_DYNAMIC |
| Entries: |
| - Tag: DT_MIPS_LOCAL_GOTNO |
| Value: 1 |
| - Tag: DT_MIPS_GOTSYM |
| Value: 1 |
| - Tag: DT_PLTGOT |
| Value: 0x1122 |
| DynamicSymbols: |
| - Type: STT_SECTION |
| Index: SHN_ABS |
| - Type: STT_SECTION |
| Section: .got |
| - Type: STT_SECTION |
| Index: SHN_COMMON |
| - Type: STT_SECTION |
| Index: SHN_XINDEX |