1## Check llvm-readobj and llvm-readelf print relocations as expected. 2 3## Show that ELF64 is dumped correctly. 4# RUN: yaml2obj %s --docnum=1 -o %t64 5# RUN: llvm-readobj -r %t64 \ 6# RUN: | FileCheck %s --check-prefix=LLVM-64 --strict-whitespace --match-full-lines 7# RUN: llvm-readobj --relocs %t64 \ 8# RUN: | FileCheck %s --check-prefix=LLVM-64 --strict-whitespace --match-full-lines 9# RUN: llvm-readobj --relocations %t64 \ 10# RUN: | FileCheck %s --check-prefix=LLVM-64 --strict-whitespace --match-full-lines 11 12# LLVM-64:Relocations [ 13# LLVM-64-NEXT: Section (2) .rel.text { 14# LLVM-64-NEXT: 0x0 R_X86_64_NONE rel_0 15# LLVM-64-NEXT: 0x1 R_X86_64_PC32 rel_neg 16# LLVM-64-NEXT: 0x5 R_X86_64_PLT32 rel_pos 17# LLVM-64-NEXT: 0x9 R_X86_64_64 rel_64 18# LLVM-64-NEXT: } 19# LLVM-64-NEXT: Section (3) .rela.text { 20# LLVM-64-NEXT: 0x0 R_X86_64_NONE rela_0 0x0 21# LLVM-64-NEXT: 0x1 R_X86_64_PC32 rela_neg 0xFFFFFFFFFFFFFFFF 22# LLVM-64-NEXT: 0x5 R_X86_64_PLT32 rela_pos 0x2 23# LLVM-64-NEXT: 0xFFFFFFFFFFFFFFFF R_X86_64_64 rela_minneg 0x8000000000000000 24# LLVM-64-NEXT: 0x9 R_X86_64_32S rela_maxpos 0x7FFFFFFFFFFFFFFF 25# LLVM-64-NEXT: } 26# LLVM-64-NEXT:] 27 28# RUN: llvm-readelf -r %t64 \ 29# RUN: | FileCheck %s --check-prefix=GNU-64 --strict-whitespace --match-full-lines 30# RUN: llvm-readelf --relocs %t64 \ 31# RUN: | FileCheck %s --check-prefix=GNU-64 --strict-whitespace --match-full-lines 32# RUN: llvm-readelf --relocations %t64 \ 33# RUN: | FileCheck %s --check-prefix=GNU-64 --strict-whitespace --match-full-lines 34 35# GNU-64:Relocation section '.rel.text' at offset 0x51 contains 4 entries: 36# GNU-64-NEXT: Offset Info Type Symbol's Value Symbol's Name 37# GNU-64-NEXT:0000000000000000 0000000100000000 R_X86_64_NONE 0000000000000000 rel_0 38# GNU-64-NEXT:0000000000000001 0000000200000002 R_X86_64_PC32 0000000000000001 rel_neg 39# GNU-64-NEXT:0000000000000005 0000000300000004 R_X86_64_PLT32 0000000000000002 rel_pos 40# GNU-64-NEXT:0000000000000009 0000000400000001 R_X86_64_64 ffffffffffffffff rel_64 41# GNU-64-EMPTY: 42# GNU-64-NEXT:Relocation section '.rela.text' at offset 0x91 contains 5 entries: 43# GNU-64-NEXT: Offset Info Type Symbol's Value Symbol's Name + Addend 44# GNU-64-NEXT:0000000000000000 0000000500000000 R_X86_64_NONE 0000000000000000 rela_0 + 0 45# GNU-64-NEXT:0000000000000001 0000000600000002 R_X86_64_PC32 0000000000000001 rela_neg - 1 46# GNU-64-NEXT:0000000000000005 0000000700000004 R_X86_64_PLT32 0000000000000002 rela_pos + 2 47# GNU-64-NEXT:ffffffffffffffff 0000000800000001 R_X86_64_64 0000000000000003 rela_minneg - 8000000000000000 48# GNU-64-NEXT:0000000000000009 000000090000000b R_X86_64_32S ffffffffffffffff rela_maxpos + 7fffffffffffffff 49 50## Show that --expand-relocs expands the relocation dump for LLVM style only 51## (and not GNU). 52# RUN: llvm-readobj -r --expand-relocs %t64 \ 53# RUN: | FileCheck %s --check-prefix=LLVM-EXPAND-64 --match-full-lines --strict-whitespace 54# RUN: llvm-readelf -r --expand-relocs %t64 \ 55# RUN: | FileCheck %s --check-prefix=GNU-64 --match-full-lines --strict-whitespace 56 57# LLVM-EXPAND-64:Relocations [ 58# LLVM-EXPAND-64-NEXT: Section (2) .rel.text { 59# LLVM-EXPAND-64-NEXT: Relocation { 60# LLVM-EXPAND-64-NEXT: Offset: 0x0 61# LLVM-EXPAND-64-NEXT: Type: R_X86_64_NONE (0) 62# LLVM-EXPAND-64-NEXT: Symbol: rel_0 (1) 63# LLVM-EXPAND-64-NEXT: } 64# LLVM-EXPAND-64-NEXT: Relocation { 65# LLVM-EXPAND-64-NEXT: Offset: 0x1 66# LLVM-EXPAND-64-NEXT: Type: R_X86_64_PC32 (2) 67# LLVM-EXPAND-64-NEXT: Symbol: rel_neg (2) 68# LLVM-EXPAND-64-NEXT: } 69# LLVM-EXPAND-64-NEXT: Relocation { 70# LLVM-EXPAND-64-NEXT: Offset: 0x5 71# LLVM-EXPAND-64-NEXT: Type: R_X86_64_PLT32 (4) 72# LLVM-EXPAND-64-NEXT: Symbol: rel_pos (3) 73# LLVM-EXPAND-64-NEXT: } 74# LLVM-EXPAND-64-NEXT: Relocation { 75# LLVM-EXPAND-64-NEXT: Offset: 0x9 76# LLVM-EXPAND-64-NEXT: Type: R_X86_64_64 (1) 77# LLVM-EXPAND-64-NEXT: Symbol: rel_64 (4) 78# LLVM-EXPAND-64-NEXT: } 79# LLVM-EXPAND-64-NEXT: } 80# LLVM-EXPAND-64-NEXT: Section (3) .rela.text { 81# LLVM-EXPAND-64-NEXT: Relocation { 82# LLVM-EXPAND-64-NEXT: Offset: 0x0 83# LLVM-EXPAND-64-NEXT: Type: R_X86_64_NONE (0) 84# LLVM-EXPAND-64-NEXT: Symbol: rela_0 (5) 85# LLVM-EXPAND-64-NEXT: Addend: 0x0 86# LLVM-EXPAND-64-NEXT: } 87# LLVM-EXPAND-64-NEXT: Relocation { 88# LLVM-EXPAND-64-NEXT: Offset: 0x1 89# LLVM-EXPAND-64-NEXT: Type: R_X86_64_PC32 (2) 90# LLVM-EXPAND-64-NEXT: Symbol: rela_neg (6) 91# LLVM-EXPAND-64-NEXT: Addend: 0xFFFFFFFFFFFFFFFF 92# LLVM-EXPAND-64-NEXT: } 93# LLVM-EXPAND-64-NEXT: Relocation { 94# LLVM-EXPAND-64-NEXT: Offset: 0x5 95# LLVM-EXPAND-64-NEXT: Type: R_X86_64_PLT32 (4) 96# LLVM-EXPAND-64-NEXT: Symbol: rela_pos (7) 97# LLVM-EXPAND-64-NEXT: Addend: 0x2 98# LLVM-EXPAND-64-NEXT: } 99# LLVM-EXPAND-64-NEXT: Relocation { 100# LLVM-EXPAND-64-NEXT: Offset: 0xFFFFFFFFFFFFFFFF 101# LLVM-EXPAND-64-NEXT: Type: R_X86_64_64 (1) 102# LLVM-EXPAND-64-NEXT: Symbol: rela_minneg (8) 103# LLVM-EXPAND-64-NEXT: Addend: 0x8000000000000000 104# LLVM-EXPAND-64-NEXT: } 105# LLVM-EXPAND-64-NEXT: Relocation { 106# LLVM-EXPAND-64-NEXT: Offset: 0x9 107# LLVM-EXPAND-64-NEXT: Type: R_X86_64_32S (11) 108# LLVM-EXPAND-64-NEXT: Symbol: rela_maxpos (9) 109# LLVM-EXPAND-64-NEXT: Addend: 0x7FFFFFFFFFFFFFFF 110# LLVM-EXPAND-64-NEXT: } 111# LLVM-EXPAND-64-NEXT: } 112# LLVM-EXPAND-64-NEXT:] 113 114--- !ELF 115FileHeader: 116 Class: ELFCLASS64 117 Data: ELFDATA2LSB 118 Type: ET_REL 119 Machine: EM_X86_64 120Sections: 121 - Name: .text 122 Type: SHT_PROGBITS 123 Content: '00FFFFFFFF020000001234567890ABCDEF' 124 - Name: .rel.text 125 Type: SHT_REL 126 Info: .text 127 Link: [[LINK=.symtab]] 128 ShName: [[SHNAME=<none>]] 129 EntSize: [[ENTSIZEREL=<none>]] 130 Relocations: 131 - Symbol: rel_0 132 Type: R_X86_64_NONE 133 - Offset: 0x1 134 Symbol: rel_neg 135 Type: R_X86_64_PC32 136 - Offset: 0x5 137 Symbol: rel_pos 138 Type: R_X86_64_PLT32 139 - Offset: 0x9 140 Symbol: rel_64 141 Type: R_X86_64_64 142 - Name: .rela.text 143 Type: SHT_RELA 144 Info: .text 145 Link: [[LINK=.symtab]] 146 ShName: [[SHNAME=<none>]] 147 EntSize: [[ENTSIZERELA=<none>]] 148 Relocations: 149 - Symbol: rela_0 150 Type: R_X86_64_NONE 151 Addend: 0 152 - Offset: 0x1 153 Symbol: rela_neg 154 Type: R_X86_64_PC32 155 Addend: -1 156 - Offset: 0x5 157 Symbol: rela_pos 158 Type: R_X86_64_PLT32 159 Addend: 2 160 - Offset: 0xFFFFFFFFFFFFFFFF 161 Symbol: rela_minneg 162 Type: R_X86_64_64 163 Addend: -9223372036854775808 ## Min 64-bit signed. 164 - Offset: 0x9 165 Symbol: rela_maxpos 166 Type: R_X86_64_32S 167 Addend: 9223372036854775807 ## Max 64-bit signed. 168Symbols: 169 - Name: rel_0 170 Section: .text 171 Value: 0 172 - Name: rel_neg 173 Section: .text 174 Value: 1 175 - Name: rel_pos 176 Section: .text 177 Value: 2 178 - Name: rel_64 179 Section: .text 180 Value: 0xFFFFFFFFFFFFFFFF 181 - Name: rela_0 182 Section: .text 183 Value: 0 184 - Name: rela_neg 185 Section: .text 186 Value: 1 187 - Name: rela_pos 188 Section: .text 189 Value: 2 190 - Name: rela_minneg 191 Section: .text 192 Value: 3 193 - Name: rela_maxpos 194 Section: .text 195 Value: 0xFFFFFFFFFFFFFFFF 196 197## Check we report a warning when we are unable to dump relocations for a section. 198## Check we continue dumping other relocation sections if any. 199 200## Case A: check the case when relocations can't be read from an SHT_REL section. 201## because of broken sh_entsize field. 202# RUN: yaml2obj %s --docnum=1 -DENTSIZEREL=1 -o %t.broken.rel 203# RUN: llvm-readobj --relocations %t.broken.rel 2>&1 \ 204# RUN: | FileCheck %s -DFILE=%t.broken.rel --check-prefix=BROKEN-REL-LLVM 205# RUN: llvm-readelf --relocations %t.broken.rel 2>&1 \ 206# RUN: | FileCheck %s -DFILE=%t.broken.rel --check-prefix=BROKEN-REL-GNU 207 208# BROKEN-REL-LLVM: Relocations [ 209# BROKEN-REL-LLVM-NEXT: Section (2) .rel.text { 210# BROKEN-REL-LLVM-NEXT: warning: '[[FILE]]': unable to read relocations from SHT_REL section with index 2: section [index 2] has invalid sh_entsize: expected 16, but got 1 211# BROKEN-REL-LLVM-NEXT: } 212# BROKEN-REL-LLVM-NEXT: Section (3) .rela.text { 213# BROKEN-REL-LLVM-NEXT: 0x0 R_X86_64_NONE rela_0 0x0 214# BROKEN-REL-LLVM-NEXT: 0x1 R_X86_64_PC32 rela_neg 0xFFFFFFFFFFFFFFFF 215# BROKEN-REL-LLVM-NEXT: 0x5 R_X86_64_PLT32 rela_pos 0x2 216# BROKEN-REL-LLVM-NEXT: 0xFFFFFFFFFFFFFFFF R_X86_64_64 rela_minneg 0x8000000000000000 217# BROKEN-REL-LLVM-NEXT: 0x9 R_X86_64_32S rela_maxpos 0x7FFFFFFFFFFFFFFF 218# BROKEN-REL-LLVM-NEXT: } 219# BROKEN-REL-LLVM-NEXT: ] 220 221# BROKEN-REL-GNU: Relocation section '.rel.text' at offset 0x51 contains 64 entries: 222# BROKEN-REL-GNU-NEXT: Offset Info Type Symbol's Value Symbol's Name 223# BROKEN-REL-GNU-NEXT: warning: '[[FILE]]': unable to read relocations from SHT_REL section with index 2: section [index 2] has invalid sh_entsize: expected 16, but got 1 224# BROKEN-REL-GNU: Relocation section '.rela.text' at offset 0x91 contains 5 entries: 225# BROKEN-REL-GNU-NEXT: Offset Info Type Symbol's Value Symbol's Name 226# BROKEN-REL-GNU-NEXT: 0000000000000000 0000000500000000 R_X86_64_NONE 0000000000000000 rela_0 + 0 227# BROKEN-REL-GNU-NEXT: 0000000000000001 0000000600000002 R_X86_64_PC32 0000000000000001 rela_neg - 1 228# BROKEN-REL-GNU-NEXT: 0000000000000005 0000000700000004 R_X86_64_PLT32 0000000000000002 rela_pos + 2 229# BROKEN-REL-GNU-NEXT: ffffffffffffffff 0000000800000001 R_X86_64_64 0000000000000003 rela_minneg - 8000000000000000 230# BROKEN-REL-GNU-NEXT: 0000000000000009 000000090000000b R_X86_64_32S ffffffffffffffff rela_maxpos + 7fffffffffffffff 231 232## Case B: check the case when relocations can't be read from an SHT_RELA section. 233## because of broken sh_entsize field. 234# RUN: yaml2obj %s --docnum=1 -DENTSIZERELA=1 -o %t.broken.rela 235# RUN: llvm-readobj --relocations %t.broken.rela 2>&1 \ 236# RUN: | FileCheck %s -DFILE=%t.broken.rela --check-prefix=BROKEN-RELA-LLVM 237# RUN: llvm-readelf --relocations %t.broken.rela 2>&1 \ 238# RUN: | FileCheck %s -DFILE=%t.broken.rela --check-prefix=BROKEN-RELA-GNU 239 240# BROKEN-RELA-LLVM: Relocations [ 241# BROKEN-RELA-LLVM-NEXT: Section (2) .rel.text { 242# BROKEN-RELA-LLVM-NEXT: 0x0 R_X86_64_NONE rel_0{{$}} 243# BROKEN-RELA-LLVM-NEXT: 0x1 R_X86_64_PC32 rel_neg{{$}} 244# BROKEN-RELA-LLVM-NEXT: 0x5 R_X86_64_PLT32 rel_pos{{$}} 245# BROKEN-RELA-LLVM-NEXT: 0x9 R_X86_64_64 rel_64{{$}} 246# BROKEN-RELA-LLVM-NEXT: } 247# BROKEN-RELA-LLVM-NEXT: Section (3) .rela.text { 248# BROKEN-RELA-LLVM-NEXT: warning: '[[FILE]]': unable to read relocations from SHT_RELA section with index 3: section [index 3] has invalid sh_entsize: expected 24, but got 1 249# BROKEN-RELA-LLVM-NEXT: } 250# BROKEN-RELA-LLVM-NEXT: ] 251 252# BROKEN-RELA-GNU: Relocation section '.rel.text' at offset 0x51 contains 4 entries: 253# BROKEN-RELA-GNU-NEXT: Offset Info Type Symbol's Value Symbol's Name 254# BROKEN-RELA-GNU-NEXT: 0000000000000000 0000000100000000 R_X86_64_NONE 0000000000000000 rel_0 255# BROKEN-RELA-GNU-NEXT: 0000000000000001 0000000200000002 R_X86_64_PC32 0000000000000001 rel_neg 256# BROKEN-RELA-GNU-NEXT: 0000000000000005 0000000300000004 R_X86_64_PLT32 0000000000000002 rel_pos 257# BROKEN-RELA-GNU-NEXT: 0000000000000009 0000000400000001 R_X86_64_64 ffffffffffffffff rel_64 258# BROKEN-RELA-GNU-EMPTY: 259# BROKEN-RELA-GNU-NEXT: Relocation section '.rela.text' at offset 0x91 contains 120 entries: 260# BROKEN-RELA-GNU-NEXT: Offset Info Type Symbol's Value Symbol's Name + Addend 261# BROKEN-RELA-GNU-NEXT: warning: '[[FILE]]': unable to read relocations from SHT_RELA section with index 3: section [index 3] has invalid sh_entsize: expected 24, but got 1 262 263## Case C: check the case when relocations can't be read from SHT_REL/SHT_RELA sections 264## because of broken sh_link fields. 265# RUN: yaml2obj %s --docnum=1 -DLINK=0xffff -o %t.broken.link 266# RUN: llvm-readobj --relocations %t.broken.link 2>&1 \ 267# RUN: | FileCheck %s -DFILE=%t.broken.link --check-prefix=BROKEN-LINK-LLVM 268# RUN: llvm-readelf --relocations %t.broken.link 2>&1 \ 269# RUN: | FileCheck %s -DFILE=%t.broken.link --check-prefix=BROKEN-LINK-GNU 270 271# BROKEN-LINK-LLVM: Relocations [ 272# BROKEN-LINK-LLVM-NEXT: Section (2) .rel.text { 273# BROKEN-LINK-LLVM-NEXT: warning: '[[FILE]]': unable to locate a symbol table for SHT_REL section with index 2: invalid section index: 65535 274# BROKEN-LINK-LLVM-NEXT: } 275# BROKEN-LINK-LLVM-NEXT: Section (3) .rela.text { 276# BROKEN-LINK-LLVM-NEXT: warning: '[[FILE]]': unable to locate a symbol table for SHT_RELA section with index 3: invalid section index: 65535 277# BROKEN-LINK-LLVM-NEXT: } 278# BROKEN-LINK-LLVM-NEXT: ] 279 280# BROKEN-LINK-GNU: Relocation section '.rel.text' at offset 0x51 contains 4 entries: 281# BROKEN-LINK-GNU-NEXT: Offset Info Type Symbol's Value Symbol's Name 282# BROKEN-LINK-GNU-NEXT: warning: '[[FILE]]': unable to locate a symbol table for SHT_REL section with index 2: invalid section index: 65535 283# BROKEN-LINK-GNU-EMPTY: 284# BROKEN-LINK-GNU-NEXT: Relocation section '.rela.text' at offset 0x91 contains 5 entries: 285# BROKEN-LINK-GNU-NEXT: Offset Info Type Symbol's Value Symbol's Name + Addend 286# BROKEN-LINK-GNU-NEXT: warning: '[[FILE]]': unable to locate a symbol table for SHT_RELA section with index 3: invalid section index: 65535 287 288## Show that ELF32 is dumped correctly. 289# RUN: yaml2obj %s --docnum=2 -o %t32 290# RUN: llvm-readobj -r %t32 \ 291# RUN: | FileCheck %s --check-prefix=LLVM-32 --strict-whitespace --match-full-lines 292# RUN: llvm-readobj --relocs %t32 \ 293# RUN: | FileCheck %s --check-prefix=LLVM-32 --strict-whitespace --match-full-lines 294# RUN: llvm-readobj --relocations %t32 \ 295# RUN: | FileCheck %s --check-prefix=LLVM-32 --strict-whitespace --match-full-lines 296 297# LLVM-32:Relocations [ 298# LLVM-32-NEXT: Section (2) .rel.text { 299# LLVM-32-NEXT: 0x0 R_386_NONE rel_0 300# LLVM-32-NEXT: 0x1 R_386_PC32 rel_neg 301# LLVM-32-NEXT: 0x5 R_386_PLT32 rel_pos 302# LLVM-32-NEXT: } 303# LLVM-32-NEXT: Section (3) .rela.text { 304# LLVM-32-NEXT: 0x0 R_386_NONE rela_0 0x0 305# LLVM-32-NEXT: 0x1 R_386_PC32 rela_neg 0xFFFFFFFF 306# LLVM-32-NEXT: 0x5 R_386_PLT32 rela_pos 0x2 307# LLVM-32-NEXT: 0xFFFFFFFF R_386_32 rela_minneg 0x80000000 308# LLVM-32-NEXT: 0x9 R_386_GOT32 rela_maxpos 0x7FFFFFFF 309# LLVM-32-NEXT: } 310# LLVM-32-NEXT:] 311 312# RUN: llvm-readelf -r %t32 \ 313# RUN: | FileCheck %s --check-prefix=GNU-32 --strict-whitespace --match-full-lines 314# RUN: llvm-readelf --relocs %t32 \ 315# RUN: | FileCheck %s --check-prefix=GNU-32 --strict-whitespace --match-full-lines 316# RUN: llvm-readelf --relocations %t32 \ 317# RUN: | FileCheck %s --check-prefix=GNU-32 --strict-whitespace --match-full-lines 318 319# GNU-32:Relocation section '.rel.text' at offset 0x3d contains 3 entries: 320# GNU-32-NEXT: Offset Info Type Sym. Value Symbol's Name 321# GNU-32-NEXT:00000000 00000100 R_386_NONE 00000000 rel_0 322# GNU-32-NEXT:00000001 00000202 R_386_PC32 00000001 rel_neg 323# GNU-32-NEXT:00000005 00000304 R_386_PLT32 ffffffff rel_pos 324# GNU-32-EMPTY: 325# GNU-32-NEXT:Relocation section '.rela.text' at offset 0x55 contains 5 entries: 326# GNU-32-NEXT: Offset Info Type Sym. Value Symbol's Name + Addend 327# GNU-32-NEXT:00000000 00000400 R_386_NONE 00000000 rela_0 + 0 328# GNU-32-NEXT:00000001 00000502 R_386_PC32 00000001 rela_neg - 1 329# GNU-32-NEXT:00000005 00000604 R_386_PLT32 00000002 rela_pos + 2 330# GNU-32-NEXT:ffffffff 00000701 R_386_32 00000003 rela_minneg - 80000000 331# GNU-32-NEXT:00000009 00000803 R_386_GOT32 ffffffff rela_maxpos + 7fffffff 332 333## Show that --expand-relocs expands the relocation dump for LLVM style only 334## (and not GNU). 335# RUN: llvm-readobj -r --expand-relocs %t32 \ 336# RUN: | FileCheck %s --check-prefix=LLVM-EXPAND-32 --strict-whitespace --match-full-lines 337# RUN: llvm-readelf -r --expand-relocs %t32 \ 338# RUN: | FileCheck %s --check-prefix=GNU-32 --strict-whitespace --match-full-lines 339 340# LLVM-EXPAND-32:Relocations [ 341# LLVM-EXPAND-32-NEXT: Section (2) .rel.text { 342# LLVM-EXPAND-32-NEXT: Relocation { 343# LLVM-EXPAND-32-NEXT: Offset: 0x0 344# LLVM-EXPAND-32-NEXT: Type: R_386_NONE (0) 345# LLVM-EXPAND-32-NEXT: Symbol: rel_0 (1) 346# LLVM-EXPAND-32-NEXT: } 347# LLVM-EXPAND-32-NEXT: Relocation { 348# LLVM-EXPAND-32-NEXT: Offset: 0x1 349# LLVM-EXPAND-32-NEXT: Type: R_386_PC32 (2) 350# LLVM-EXPAND-32-NEXT: Symbol: rel_neg (2) 351# LLVM-EXPAND-32-NEXT: } 352# LLVM-EXPAND-32-NEXT: Relocation { 353# LLVM-EXPAND-32-NEXT: Offset: 0x5 354# LLVM-EXPAND-32-NEXT: Type: R_386_PLT32 (4) 355# LLVM-EXPAND-32-NEXT: Symbol: rel_pos (3) 356# LLVM-EXPAND-32-NEXT: } 357# LLVM-EXPAND-32-NEXT: } 358# LLVM-EXPAND-32-NEXT: Section (3) .rela.text { 359# LLVM-EXPAND-32-NEXT: Relocation { 360# LLVM-EXPAND-32-NEXT: Offset: 0x0 361# LLVM-EXPAND-32-NEXT: Type: R_386_NONE (0) 362# LLVM-EXPAND-32-NEXT: Symbol: rela_0 (4) 363# LLVM-EXPAND-32-NEXT: Addend: 0x0 364# LLVM-EXPAND-32-NEXT: } 365# LLVM-EXPAND-32-NEXT: Relocation { 366# LLVM-EXPAND-32-NEXT: Offset: 0x1 367# LLVM-EXPAND-32-NEXT: Type: R_386_PC32 (2) 368# LLVM-EXPAND-32-NEXT: Symbol: rela_neg (5) 369# LLVM-EXPAND-32-NEXT: Addend: 0xFFFFFFFF 370# LLVM-EXPAND-32-NEXT: } 371# LLVM-EXPAND-32-NEXT: Relocation { 372# LLVM-EXPAND-32-NEXT: Offset: 0x5 373# LLVM-EXPAND-32-NEXT: Type: R_386_PLT32 (4) 374# LLVM-EXPAND-32-NEXT: Symbol: rela_pos (6) 375# LLVM-EXPAND-32-NEXT: Addend: 0x2 376# LLVM-EXPAND-32-NEXT: } 377# LLVM-EXPAND-32-NEXT: Relocation { 378# LLVM-EXPAND-32-NEXT: Offset: 0xFFFFFFFF 379# LLVM-EXPAND-32-NEXT: Type: R_386_32 (1) 380# LLVM-EXPAND-32-NEXT: Symbol: rela_minneg (7) 381# LLVM-EXPAND-32-NEXT: Addend: 0x80000000 382# LLVM-EXPAND-32-NEXT: } 383# LLVM-EXPAND-32-NEXT: Relocation { 384# LLVM-EXPAND-32-NEXT: Offset: 0x9 385# LLVM-EXPAND-32-NEXT: Type: R_386_GOT32 (3) 386# LLVM-EXPAND-32-NEXT: Symbol: rela_maxpos (8) 387# LLVM-EXPAND-32-NEXT: Addend: 0x7FFFFFFF 388# LLVM-EXPAND-32-NEXT: } 389# LLVM-EXPAND-32-NEXT: } 390# LLVM-EXPAND-32-NEXT:] 391 392--- !ELF 393FileHeader: 394 Class: ELFCLASS32 395 Data: ELFDATA2LSB 396 Type: ET_REL 397 Machine: EM_386 398Sections: 399 - Name: .text 400 Type: SHT_PROGBITS 401 Content: '00FFFFFFFF02000000' 402 - Name: .rel.text 403 Type: SHT_REL 404 Info: .text 405 Relocations: 406 - Symbol: rel_0 407 Type: R_386_NONE 408 - Offset: 0x1 409 Symbol: rel_neg 410 Type: R_386_PC32 411 - Offset: 0x5 412 Symbol: rel_pos 413 Type: R_386_PLT32 414 - Name: .rela.text 415 Type: SHT_RELA 416 Info: .text 417 Relocations: 418 - Symbol: rela_0 419 Type: R_386_NONE 420 Addend: 0 421 - Offset: 0x1 422 Symbol: rela_neg 423 Type: R_386_PC32 424 Addend: -1 425 - Offset: 0x5 426 Symbol: rela_pos 427 Type: R_386_PLT32 428 Addend: 2 429 - Offset: 0xFFFFFFFF 430 Symbol: rela_minneg 431 Type: R_386_32 432 Addend: -2147483648 ## Min 32-bit signed. 433 - Offset: 0x9 434 Symbol: rela_maxpos 435 Type: R_386_GOT32 436 Addend: 2147483647 ## Max 32-bit signed. 437Symbols: 438 - Name: rel_0 439 Section: .text 440 Value: 0 441 - Name: rel_neg 442 Section: .text 443 Value: 1 444 - Name: rel_pos 445 Section: .text 446 Value: 0xFFFFFFFF 447 - Name: rela_0 448 Section: .text 449 Value: 0 450 - Name: rela_neg 451 Section: .text 452 Value: 1 453 - Name: rela_pos 454 Section: .text 455 Value: 2 456 - Name: rela_minneg 457 Section: .text 458 Value: 3 459 - Name: rela_maxpos 460 Section: .text 461 Value: 0xFFFFFFFF 462 463## Check we report a warning when the name of a relocation section can't be read. Check we continue dumping. 464# RUN: yaml2obj %s --docnum=1 -DSHNAME=0xffffffff -o %tshname 465# RUN: llvm-readobj --relocs %tshname 2>&1 | FileCheck %s -DFILE=%tshname --check-prefix=LLVM-SHNAME 466# RUN: llvm-readelf --relocs %tshname 2>&1 | FileCheck %s -DFILE=%tshname --check-prefix=GNU-SHNAME 467 468# LLVM-SHNAME: Relocations [ 469# LLVM-SHNAME-NEXT: warning: '[[FILE]]': unable to get the name of SHT_REL section with index 2: a section [index 2] has an invalid sh_name (0xffffffff) offset which goes past the end of the section name string table 470# LLVM-SHNAME-NEXT: Section (2) <?> { 471# LLVM-SHNAME-NEXT: 0x0 R_X86_64_NONE rel_0{{$}} 472# LLVM-SHNAME-NEXT: 0x1 R_X86_64_PC32 rel_neg{{$}} 473# LLVM-SHNAME-NEXT: 0x5 R_X86_64_PLT32 rel_pos{{$}} 474# LLVM-SHNAME-NEXT: 0x9 R_X86_64_64 rel_64{{$}} 475# LLVM-SHNAME-NEXT: } 476# LLVM-SHNAME-NEXT: warning: '[[FILE]]': unable to get the name of SHT_RELA section with index 3: a section [index 3] has an invalid sh_name (0xffffffff) offset which goes past the end of the section name string table 477# LLVM-SHNAME-NEXT: Section (3) <?> { 478# LLVM-SHNAME-NEXT: 0x0 R_X86_64_NONE rela_0 0x0 479# LLVM-SHNAME-NEXT: 0x1 R_X86_64_PC32 rela_neg 0xFFFFFFFFFFFFFFFF 480# LLVM-SHNAME-NEXT: 0x5 R_X86_64_PLT32 rela_pos 0x2 481# LLVM-SHNAME-NEXT: 0xFFFFFFFFFFFFFFFF R_X86_64_64 rela_minneg 0x8000000000000000 482# LLVM-SHNAME-NEXT: 0x9 R_X86_64_32S rela_maxpos 0x7FFFFFFFFFFFFFFF 483# LLVM-SHNAME-NEXT: } 484# LLVM-SHNAME-NEXT: ] 485 486# GNU-SHNAME: warning: '[[FILE]]': unable to get the name of SHT_REL section with index 2: a section [index 2] has an invalid sh_name (0xffffffff) offset which goes past the end of the section name string table 487# GNU-SHNAME: Relocation section '<?>' at offset 0x51 contains 4 entries: 488# GNU-SHNAME-NEXT: Offset Info Type Symbol's Value Symbol's Name 489# GNU-SHNAME-NEXT: 0000000000000000 0000000100000000 R_X86_64_NONE 0000000000000000 rel_0 490# GNU-SHNAME-NEXT: 0000000000000001 0000000200000002 R_X86_64_PC32 0000000000000001 rel_neg 491# GNU-SHNAME-NEXT: 0000000000000005 0000000300000004 R_X86_64_PLT32 0000000000000002 rel_pos 492# GNU-SHNAME-NEXT: 0000000000000009 0000000400000001 R_X86_64_64 ffffffffffffffff rel_64 493# GNU-SHNAME: warning: '[[FILE]]': unable to get the name of SHT_RELA section with index 3: a section [index 3] has an invalid sh_name (0xffffffff) offset which goes past the end of the section name string table 494# GNU-SHNAME: Relocation section '<?>' at offset 0x91 contains 5 entries: 495# GNU-SHNAME-NEXT: Offset Info Type Symbol's Value Symbol's Name + Addend 496# GNU-SHNAME-NEXT: 0000000000000000 0000000500000000 R_X86_64_NONE 0000000000000000 rela_0 + 0 497# GNU-SHNAME-NEXT: 0000000000000001 0000000600000002 R_X86_64_PC32 0000000000000001 rela_neg - 1 498# GNU-SHNAME-NEXT: 0000000000000005 0000000700000004 R_X86_64_PLT32 0000000000000002 rela_pos + 2 499# GNU-SHNAME-NEXT: ffffffffffffffff 0000000800000001 R_X86_64_64 0000000000000003 rela_minneg - 8000000000000000 500# GNU-SHNAME-NEXT: 0000000000000009 000000090000000b R_X86_64_32S ffffffffffffffff rela_maxpos + 7fffffffffffffff 501 502## Check that we report a warning when a relocation has a 503## symbol index past the end of the symbol table 504 505# RUN: yaml2obj %s --docnum=3 -o %t3 506# RUN: llvm-readobj --relocs %t3 2>&1 | \ 507# RUN: FileCheck %s --implicit-check-not=warning: -DFILE=%t3 --check-prefix=LLVM-SYMNDX 508# RUN: llvm-readelf --relocs %t3 2>&1 | \ 509# RUN: FileCheck %s --implicit-check-not=warning: -DFILE=%t3 --check-prefix=GNU-SYMNDX 510 511# LLVM-SYMNDX: Relocations [ 512# LLVM-SYMNDX-NEXT: Section (1) .rela.text { 513# LLVM-SYMNDX-NEXT: warning: '[[FILE]]': unable to print relocation 0 in SHT_RELA section with index 1: unable to read an entry with index 2 from SHT_SYMTAB section with index 2: can't read an entry at 0x30: it goes past the end of the section (0x30) 514# LLVM-SYMNDX-NEXT: warning: '[[FILE]]': unable to print relocation 1 in SHT_RELA section with index 1: unable to read an entry with index 3 from SHT_SYMTAB section with index 2: can't read an entry at 0x48: it goes past the end of the section (0x30) 515# LLVM-SYMNDX-NEXT: } 516# LLVM-SYMNDX-NEXT: ] 517 518# GNU-SYMNDX: Relocation section '.rela.text' at offset 0x40 contains 2 entries: 519# GNU-SYMNDX-NEXT: Offset Info Type Symbol's Value Symbol's Name + Addend 520# GNU-SYMNDX-NEXT: warning: '[[FILE]]': unable to print relocation 0 in SHT_RELA section with index 1: unable to read an entry with index 2 from SHT_SYMTAB section with index 2: can't read an entry at 0x30: it goes past the end of the section (0x30) 521# GNU-SYMNDX-NEXT: warning: '[[FILE]]': unable to print relocation 1 in SHT_RELA section with index 1: unable to read an entry with index 3 from SHT_SYMTAB section with index 2: can't read an entry at 0x48: it goes past the end of the section (0x30) 522 523--- !ELF 524FileHeader: 525 Class: ELFCLASS64 526 Data: ELFDATA2LSB 527 Type: ET_DYN 528 Machine: EM_X86_64 529Sections: 530 - Name: .rela.text 531 Type: SHT_RELA 532 Relocations: 533 - Type: R_X86_64_NONE 534 Symbol: 0x2 535 - Type: R_X86_64_NONE 536 Symbol: 0x3 537Symbols: 538 - Name: foo 539