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