1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165
|
## 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)
|