| ## Test that we are able to print dynamic relocations with --dyn-relocations. |
| |
| ## Check what we print when there are no dynamic relocations in an object. |
| # RUN: yaml2obj --docnum=1 %s -o %t1 |
| # RUN: llvm-readobj --dyn-relocations %t1 2>&1 | FileCheck %s --check-prefix=LLVM-NONE |
| # RUN: llvm-readelf --dyn-relocations %t1 2>&1 | FileCheck %s --implicit-check-not={{.}} --allow-empty |
| |
| # LLVM-NONE: Dynamic Relocations { |
| # LLVM-NONE-NEXT: } |
| # LLVM-NONE-NOT: {{.}} |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_DYN |
| |
| ## Check that we dump all possbile dynamic relocation sections. |
| # RUN: yaml2obj --docnum=2 %s -o %t2.1 |
| # RUN: llvm-readobj --dyn-relocations %t2.1 2>&1 | \ |
| # RUN: FileCheck %s --implicit-check-not=warning: --check-prefix=LLVM-RELOCS |
| # RUN: llvm-readelf --dyn-relocations %t2.1 2>&1 | \ |
| # RUN: FileCheck %s --implicit-check-not=warning: --strict-whitespace \ |
| # RUN: --match-full-lines --check-prefixes=GNU-RELOCS,GNU-PLTREL |
| |
| ## 7 == DT_RELA. |
| # RUN: yaml2obj --docnum=2 %s -DDTPLTREL=7 -DPLTTYPE=SHT_RELA -DPLTRELSZ=0x18 -o %t2.2 |
| # RUN: llvm-readobj --dyn-relocations %t2.2 2>&1 | \ |
| # RUN: FileCheck %s --implicit-check-not=warning: --check-prefix=LLVM-RELOCS |
| # RUN: llvm-readelf --dyn-relocations %t2.2 2>&1 | \ |
| # RUN: FileCheck %s --implicit-check-not=warning: --strict-whitespace \ |
| # RUN: --match-full-lines --check-prefixes=GNU-RELOCS,GNU-PLTRELA |
| |
| # LLVM-RELOCS: Dynamic Relocations { |
| # LLVM-RELOCS-NEXT: 0x1 R_X86_64_NONE foo 0x0 |
| # LLVM-RELOCS-NEXT: 0x2 R_X86_64_NONE foo |
| # LLVM-RELOCS-NEXT: 0x4 R_X86_64_RELATIVE |
| # LLVM-RELOCS-NEXT: 0x8 R_X86_64_NONE foo |
| # LLVM-RELOCS-NEXT: } |
| |
| # GNU-RELOCS:'RELA' relocation section at offset 0x78 contains 24 bytes: |
| # GNU-RELOCS-NEXT: Offset Info Type Symbol's Value Symbol's Name + Addend |
| # GNU-RELOCS-NEXT:0000000000000001 0000000100000000 R_X86_64_NONE 0000000000000000 foo + 0 |
| # GNU-RELOCS-EMPTY: |
| # GNU-RELOCS-NEXT:'REL' relocation section at offset 0x90 contains 16 bytes: |
| # GNU-RELOCS-NEXT: Offset Info Type Symbol's Value Symbol's Name |
| # GNU-RELOCS-NEXT:0000000000000002 0000000100000000 R_X86_64_NONE 0000000000000000 foo |
| # GNU-RELOCS-EMPTY: |
| # GNU-RELOCS-NEXT:'RELR' relocation section at offset 0xa0 contains 8 bytes: |
| # GNU-RELOCS-NEXT: Offset Info Type Symbol's Value Symbol's Name |
| # GNU-RELOCS-NEXT:0000000000000004 0000000000000008 R_X86_64_RELATIVE {{$}} |
| # GNU-RELOCS-EMPTY: |
| # GNU-PLTREL-NEXT:'PLT' relocation section at offset 0xa8 contains 16 bytes: |
| # GNU-PLTREL-NEXT: Offset Info Type Symbol's Value Symbol's Name |
| # GNU-PLTREL-NEXT:0000000000000008 0000000100000000 R_X86_64_NONE 0000000000000000 foo |
| # GNU-PLTRELA-NEXT:'PLT' relocation section at offset 0xa8 contains 24 bytes: |
| # GNU-PLTRELA-NEXT: Offset Info Type Symbol's Value Symbol's Name + Addend |
| # GNU-PLTRELA-NEXT:0000000000000008 0000000100000000 R_X86_64_NONE 0000000000000000 foo + 0 |
| # GNU-RELOCS-EMPTY: |
| # GNU-RELOCS-NOT:{{.}} |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_DYN |
| Machine: EM_X86_64 |
| Sections: |
| - Name: .rela.dyn |
| Type: SHT_RELA |
| Relocations: |
| - Type: R_X86_64_NONE |
| Offset: 0x1 |
| Symbol: foo |
| - Name: .rel.dyn |
| Type: SHT_REL |
| Relocations: |
| - Type: R_X86_64_NONE |
| Offset: 0x2 |
| Symbol: foo |
| - Name: .relr.dyn |
| Type: SHT_RELR |
| Flags: [ SHF_ALLOC ] |
| Entries: [ 0x0000000000000004 ] |
| - Name: .plt |
| Type: [[PLTTYPE=SHT_REL]] |
| Relocations: |
| - Type: R_X86_64_NONE |
| Offset: 0x8 |
| Symbol: foo |
| - Name: .dynamic |
| Type: SHT_DYNAMIC |
| Entries: |
| - Tag: DT_RELA |
| Value: 0x0 |
| - Tag: DT_RELASZ |
| Value: 0x18 |
| - Tag: DT_RELAENT |
| Value: 0x18 |
| ## 0x18 == offset of .rel.dyn in the segment. |
| - Tag: DT_REL |
| Value: 0x18 |
| - Tag: DT_RELSZ |
| Value: 0x10 |
| - Tag: DT_RELENT |
| Value: 0x10 |
| ## 0x28 == offset of .relr.dyn section in the segment. |
| - Tag: DT_RELR |
| Value: 0x28 |
| - Tag: DT_RELRSZ |
| Value: 0x8 |
| - Tag: DT_RELRENT |
| Value: 0x8 |
| ## 0x30 == offset of .plt section in the segment. |
| - Tag: DT_JMPREL |
| Value: 0x30 |
| - Tag: DT_PLTREL |
| Value: [[DTPLTREL=17]] ## 17 == DT_REL |
| - Tag: DT_PLTRELSZ |
| Value: [[PLTRELSZ=0x10]] |
| - Tag: DT_NULL |
| Value: 0x0 |
| Symbols: |
| - Name: foo |
| DynamicSymbols: |
| - Name: foo |
| ProgramHeaders: |
| - Type: PT_LOAD |
| FirstSec: .rela.dyn |
| LastSec: .dynamic |
| |
| ## Check we report a warning when the value of the DT_PLTREL dynamic tag is invalid. |
| ## We currently accept DT_RELA(7) and DT_REL(17) values. This test case uses 0xff. |
| |
| # RUN: yaml2obj --docnum=2 %s -DDTPLTREL=0xFF -o %t3 |
| # RUN: llvm-readobj --dyn-relocations %t3 2>&1 | \ |
| # RUN: FileCheck %s -DFILE=%t3 --implicit-check-not=warning: --check-prefix=PLTRELUNKNOWN-LLVM |
| # RUN: llvm-readelf --dyn-relocations %t3 2>&1 | \ |
| # RUN: FileCheck %s -DFILE=%t3 --implicit-check-not=warning: --check-prefix=PLTRELUNKNOWN-GNU |
| |
| # PLTRELUNKNOWN-LLVM: warning: '[[FILE]]': unknown DT_PLTREL value of 255 |
| # PLTRELUNKNOWN-LLVM: Dynamic Relocations { |
| # PLTRELUNKNOWN-LLVM-NEXT: 0x1 R_X86_64_NONE foo 0x0 |
| # PLTRELUNKNOWN-LLVM-NEXT: 0x2 R_X86_64_NONE foo{{$}} |
| # PLTRELUNKNOWN-LLVM-NEXT: 0x4 R_X86_64_RELATIVE -{{$}} |
| # PLTRELUNKNOWN-LLVM-NEXT: warning: '[[FILE]]': invalid DT_PLTRELSZ value (0x10) or PLTREL entry size (0x0) |
| # PLTRELUNKNOWN-LLVM-NEXT: } |
| |
| # PLTRELUNKNOWN-GNU: warning: '[[FILE]]': unknown DT_PLTREL value of 255 |
| # PLTRELUNKNOWN-GNU-EMPTY: |
| # PLTRELUNKNOWN-GNU-NEXT: 'RELA' relocation section at offset 0x78 contains 24 bytes: |
| # PLTRELUNKNOWN-GNU-NEXT: Offset Info Type Symbol's Value Symbol's Name + Addend |
| # PLTRELUNKNOWN-GNU-NEXT: 0000000000000001 0000000100000000 R_X86_64_NONE 0000000000000000 foo + 0 |
| # PLTRELUNKNOWN-GNU-EMPTY: |
| # PLTRELUNKNOWN-GNU-NEXT: 'REL' relocation section at offset 0x90 contains 16 bytes: |
| # PLTRELUNKNOWN-GNU-NEXT: Offset Info Type Symbol's Value Symbol's Name |
| # PLTRELUNKNOWN-GNU-NEXT: 0000000000000002 0000000100000000 R_X86_64_NONE 0000000000000000 foo |
| # PLTRELUNKNOWN-GNU-EMPTY: |
| # PLTRELUNKNOWN-GNU-NEXT: 'RELR' relocation section at offset 0xa0 contains 8 bytes: |
| # PLTRELUNKNOWN-GNU-NEXT: Offset Info Type Symbol's Value Symbol's Name |
| # PLTRELUNKNOWN-GNU-NEXT: 0000000000000004 0000000000000008 R_X86_64_RELATIVE |
| # PLTRELUNKNOWN-GNU-EMPTY: |
| # PLTRELUNKNOWN-GNU-NEXT: 'PLT' relocation section at offset 0xa8 contains 16 bytes: |
| # PLTRELUNKNOWN-GNU-NEXT: Offset Info Type Symbol's Value Symbol's Name |
| # PLTRELUNKNOWN-GNU-NEXT: warning: '[[FILE]]': invalid DT_PLTRELSZ value (0x10) or PLTREL entry size (0x0) |