678 lines · plain
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 %t645# RUN: llvm-readobj -r %t64 \6# RUN: | FileCheck %s --check-prefix=LLVM-64 --strict-whitespace --match-full-lines7# RUN: llvm-readobj --relocs %t64 \8# RUN: | FileCheck %s --check-prefix=LLVM-64 --strict-whitespace --match-full-lines9# RUN: llvm-readobj --relocations %t64 \10# RUN: | FileCheck %s --check-prefix=LLVM-64 --strict-whitespace --match-full-lines11 12# LLVM-64:Relocations [13# LLVM-64-NEXT: Section (2) .rel.text {14# LLVM-64-NEXT: 0x0 R_X86_64_NONE rel_015# LLVM-64-NEXT: 0x1 R_X86_64_PC32 rel_neg16# LLVM-64-NEXT: 0x5 R_X86_64_PLT32 rel_pos17# LLVM-64-NEXT: 0x9 R_X86_64_64 rel_6418# LLVM-64-NEXT: }19# LLVM-64-NEXT: Section (3) .rela.text {20# LLVM-64-NEXT: 0x0 R_X86_64_NONE rela_0 0x021# LLVM-64-NEXT: 0x1 R_X86_64_PC32 rela_neg 0xFFFFFFFFFFFFFFFF22# LLVM-64-NEXT: 0x5 R_X86_64_PLT32 rela_pos 0x223# LLVM-64-NEXT: 0xFFFFFFFFFFFFFFFF R_X86_64_64 rela_minneg 0x800000000000000024# LLVM-64-NEXT: 0x9 R_X86_64_32S rela_maxpos 0x7FFFFFFFFFFFFFFF25# 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-lines30# RUN: llvm-readelf --relocs %t64 \31# RUN: | FileCheck %s --check-prefix=GNU-64 --strict-whitespace --match-full-lines32# RUN: llvm-readelf --relocations %t64 \33# RUN: | FileCheck %s --check-prefix=GNU-64 --strict-whitespace --match-full-lines34 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 Name37# GNU-64-NEXT:0000000000000000 0000000100000000 R_X86_64_NONE 0000000000000000 rel_038# GNU-64-NEXT:0000000000000001 0000000200000002 R_X86_64_PC32 0000000000000001 rel_neg39# GNU-64-NEXT:0000000000000005 0000000300000004 R_X86_64_PLT32 0000000000000002 rel_pos40# GNU-64-NEXT:0000000000000009 0000000400000001 R_X86_64_64 ffffffffffffffff rel_6441# 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 + Addend44# GNU-64-NEXT:0000000000000000 0000000500000000 R_X86_64_NONE 0000000000000000 rela_0 + 045# GNU-64-NEXT:0000000000000001 0000000600000002 R_X86_64_PC32 0000000000000001 rela_neg - 146# GNU-64-NEXT:0000000000000005 0000000700000004 R_X86_64_PLT32 0000000000000002 rela_pos + 247# GNU-64-NEXT:ffffffffffffffff 0000000800000001 R_X86_64_64 0000000000000003 rela_minneg - 800000000000000048# GNU-64-NEXT:0000000000000009 000000090000000b R_X86_64_32S ffffffffffffffff rela_maxpos + 7fffffffffffffff49 50## Show that --expand-relocs expands the relocation dump for LLVM style and not GNU.51# RUN: llvm-readobj -r --expand-relocs %t64 \52# RUN: | FileCheck %s --check-prefix=LLVM-EXPAND-64 --match-full-lines --strict-whitespace53# RUN: llvm-readelf -r --expand-relocs %t64 \54# RUN: | FileCheck %s --check-prefix=GNU-64 --match-full-lines --strict-whitespace55 56# LLVM-EXPAND-64:Relocations [57# LLVM-EXPAND-64-NEXT: Section (2) .rel.text {58# LLVM-EXPAND-64-NEXT: Relocation {59# LLVM-EXPAND-64-NEXT: Offset: 0x060# LLVM-EXPAND-64-NEXT: Type: R_X86_64_NONE (0)61# LLVM-EXPAND-64-NEXT: Symbol: rel_0 (1)62# LLVM-EXPAND-64-NEXT: }63# LLVM-EXPAND-64-NEXT: Relocation {64# LLVM-EXPAND-64-NEXT: Offset: 0x165# LLVM-EXPAND-64-NEXT: Type: R_X86_64_PC32 (2)66# LLVM-EXPAND-64-NEXT: Symbol: rel_neg (2)67# LLVM-EXPAND-64-NEXT: }68# LLVM-EXPAND-64-NEXT: Relocation {69# LLVM-EXPAND-64-NEXT: Offset: 0x570# LLVM-EXPAND-64-NEXT: Type: R_X86_64_PLT32 (4)71# LLVM-EXPAND-64-NEXT: Symbol: rel_pos (3)72# LLVM-EXPAND-64-NEXT: }73# LLVM-EXPAND-64-NEXT: Relocation {74# LLVM-EXPAND-64-NEXT: Offset: 0x975# LLVM-EXPAND-64-NEXT: Type: R_X86_64_64 (1)76# LLVM-EXPAND-64-NEXT: Symbol: rel_64 (4)77# LLVM-EXPAND-64-NEXT: }78# LLVM-EXPAND-64-NEXT: }79# LLVM-EXPAND-64-NEXT: Section (3) .rela.text {80# LLVM-EXPAND-64-NEXT: Relocation {81# LLVM-EXPAND-64-NEXT: Offset: 0x082# LLVM-EXPAND-64-NEXT: Type: R_X86_64_NONE (0)83# LLVM-EXPAND-64-NEXT: Symbol: rela_0 (5)84# LLVM-EXPAND-64-NEXT: Addend: 0x085# LLVM-EXPAND-64-NEXT: }86# LLVM-EXPAND-64-NEXT: Relocation {87# LLVM-EXPAND-64-NEXT: Offset: 0x188# LLVM-EXPAND-64-NEXT: Type: R_X86_64_PC32 (2)89# LLVM-EXPAND-64-NEXT: Symbol: rela_neg (6)90# LLVM-EXPAND-64-NEXT: Addend: 0xFFFFFFFFFFFFFFFF91# LLVM-EXPAND-64-NEXT: }92# LLVM-EXPAND-64-NEXT: Relocation {93# LLVM-EXPAND-64-NEXT: Offset: 0x594# LLVM-EXPAND-64-NEXT: Type: R_X86_64_PLT32 (4)95# LLVM-EXPAND-64-NEXT: Symbol: rela_pos (7)96# LLVM-EXPAND-64-NEXT: Addend: 0x297# LLVM-EXPAND-64-NEXT: }98# LLVM-EXPAND-64-NEXT: Relocation {99# LLVM-EXPAND-64-NEXT: Offset: 0xFFFFFFFFFFFFFFFF100# LLVM-EXPAND-64-NEXT: Type: R_X86_64_64 (1)101# LLVM-EXPAND-64-NEXT: Symbol: rela_minneg (8)102# LLVM-EXPAND-64-NEXT: Addend: 0x8000000000000000103# LLVM-EXPAND-64-NEXT: }104# LLVM-EXPAND-64-NEXT: Relocation {105# LLVM-EXPAND-64-NEXT: Offset: 0x9106# LLVM-EXPAND-64-NEXT: Type: R_X86_64_32S (11)107# LLVM-EXPAND-64-NEXT: Symbol: rela_maxpos (9)108# LLVM-EXPAND-64-NEXT: Addend: 0x7FFFFFFFFFFFFFFF109# LLVM-EXPAND-64-NEXT: }110# LLVM-EXPAND-64-NEXT: }111# LLVM-EXPAND-64-NEXT:]112 113## Show that JSON relocations are always expanded.114# RUN: llvm-readobj -r %t64 --elf-output-style=JSON --pretty-print \115# RUN: | FileCheck %s --check-prefix=JSON-EXPAND-64116# RUN: llvm-readobj -r --expand-relocs %t64 --elf-output-style=JSON --pretty-print \117# RUN: | FileCheck %s --check-prefix=JSON-EXPAND-64118 119# JSON-EXPAND-64: "Relocations": [120# JSON-EXPAND-64-NEXT: {121# JSON-EXPAND-64-NEXT: "SectionIndex": 2122# JSON-EXPAND-64-NEXT: "Relocs": [123# JSON-EXPAND-64-NEXT: {124# JSON-EXPAND-64-NEXT: "Relocation": {125# JSON-EXPAND-64-NEXT: "Offset": 0,126# JSON-EXPAND-64-NEXT: "Type": {127# JSON-EXPAND-64-NEXT: "Name": "R_X86_64_NONE",128# JSON-EXPAND-64-NEXT: "Value": 0129# JSON-EXPAND-64-NEXT: },130# JSON-EXPAND-64-NEXT: "Symbol": {131# JSON-EXPAND-64-NEXT: "Name": "rel_0",132# JSON-EXPAND-64-NEXT: "Value": 1133# JSON-EXPAND-64-NEXT: }134# JSON-EXPAND-64-NEXT: }135# JSON-EXPAND-64-NEXT: },136# JSON-EXPAND-64-NEXT: {137# JSON-EXPAND-64-NEXT: "Relocation": {138# JSON-EXPAND-64-NEXT: "Offset": 1,139# JSON-EXPAND-64-NEXT: "Type": {140# JSON-EXPAND-64-NEXT: "Name": "R_X86_64_PC32",141# JSON-EXPAND-64-NEXT: "Value": 2142# JSON-EXPAND-64-NEXT: },143# JSON-EXPAND-64-NEXT: "Symbol": {144# JSON-EXPAND-64-NEXT: "Name": "rel_neg",145# JSON-EXPAND-64-NEXT: "Value": 2146# JSON-EXPAND-64-NEXT: }147# JSON-EXPAND-64-NEXT: }148# JSON-EXPAND-64-NEXT: },149# JSON-EXPAND-64-NEXT: {150# JSON-EXPAND-64-NEXT: "Relocation": {151# JSON-EXPAND-64-NEXT: "Offset": 5,152# JSON-EXPAND-64-NEXT: "Type": {153# JSON-EXPAND-64-NEXT: "Name": "R_X86_64_PLT32",154# JSON-EXPAND-64-NEXT: "Value": 4155# JSON-EXPAND-64-NEXT: },156# JSON-EXPAND-64-NEXT: "Symbol": {157# JSON-EXPAND-64-NEXT: "Name": "rel_pos",158# JSON-EXPAND-64-NEXT: "Value": 3159# JSON-EXPAND-64-NEXT: }160# JSON-EXPAND-64-NEXT: }161# JSON-EXPAND-64-NEXT: },162# JSON-EXPAND-64-NEXT: {163# JSON-EXPAND-64-NEXT: "Relocation": {164# JSON-EXPAND-64-NEXT: "Offset": 9,165# JSON-EXPAND-64-NEXT: "Type": {166# JSON-EXPAND-64-NEXT: "Name": "R_X86_64_64",167# JSON-EXPAND-64-NEXT: "Value": 1168# JSON-EXPAND-64-NEXT: },169# JSON-EXPAND-64-NEXT: "Symbol": {170# JSON-EXPAND-64-NEXT: "Name": "rel_64",171# JSON-EXPAND-64-NEXT: "Value": 4172# JSON-EXPAND-64-NEXT: }173# JSON-EXPAND-64-NEXT: }174# JSON-EXPAND-64-NEXT: }175# JSON-EXPAND-64-NEXT: ]176# JSON-EXPAND-64-NEXT: },177# JSON-EXPAND-64-NEXT: {178# JSON-EXPAND-64-NEXT: "SectionIndex": 3,179# JSON-EXPAND-64-NEXT: "Relocs": [180# JSON-EXPAND-64-NEXT: {181# JSON-EXPAND-64-NEXT: "Relocation": {182# JSON-EXPAND-64-NEXT: "Offset": 0,183# JSON-EXPAND-64-NEXT: "Type": {184# JSON-EXPAND-64-NEXT: "Name": "R_X86_64_NONE",185# JSON-EXPAND-64-NEXT: "Value": 0186# JSON-EXPAND-64-NEXT: },187# JSON-EXPAND-64-NEXT: "Symbol": {188# JSON-EXPAND-64-NEXT: "Name": "rela_0",189# JSON-EXPAND-64-NEXT: "Value": 5190# JSON-EXPAND-64-NEXT: },191# JSON-EXPAND-64-NEXT: "Addend": 0192# JSON-EXPAND-64-NEXT: }193# JSON-EXPAND-64-NEXT: },194# JSON-EXPAND-64-NEXT: {195# JSON-EXPAND-64-NEXT: "Relocation": {196# JSON-EXPAND-64-NEXT: "Offset": 1,197# JSON-EXPAND-64-NEXT: "Type": {198# JSON-EXPAND-64-NEXT: "Name": "R_X86_64_PC32",199# JSON-EXPAND-64-NEXT: "Value": 2200# JSON-EXPAND-64-NEXT: },201# JSON-EXPAND-64-NEXT: "Symbol": {202# JSON-EXPAND-64-NEXT: "Name": "rela_neg",203# JSON-EXPAND-64-NEXT: "Value": 6204# JSON-EXPAND-64-NEXT: },205# JSON-EXPAND-64-NEXT: "Addend": 18446744073709551615206# JSON-EXPAND-64-NEXT: }207# JSON-EXPAND-64-NEXT: },208# JSON-EXPAND-64-NEXT: {209# JSON-EXPAND-64-NEXT: "Relocation": {210# JSON-EXPAND-64-NEXT: "Offset": 5,211# JSON-EXPAND-64-NEXT: "Type": {212# JSON-EXPAND-64-NEXT: "Name": "R_X86_64_PLT32",213# JSON-EXPAND-64-NEXT: "Value": 4214# JSON-EXPAND-64-NEXT: },215# JSON-EXPAND-64-NEXT: "Symbol": {216# JSON-EXPAND-64-NEXT: "Name": "rela_pos",217# JSON-EXPAND-64-NEXT: "Value": 7218# JSON-EXPAND-64-NEXT: },219# JSON-EXPAND-64-NEXT: "Addend": 2220# JSON-EXPAND-64-NEXT: }221# JSON-EXPAND-64-NEXT: },222# JSON-EXPAND-64-NEXT: {223# JSON-EXPAND-64-NEXT: "Relocation": {224# JSON-EXPAND-64-NEXT: "Offset": 18446744073709551615,225# JSON-EXPAND-64-NEXT: "Type": {226# JSON-EXPAND-64-NEXT: "Name": "R_X86_64_64",227# JSON-EXPAND-64-NEXT: "Value": 1228# JSON-EXPAND-64-NEXT: },229# JSON-EXPAND-64-NEXT: "Symbol": {230# JSON-EXPAND-64-NEXT: "Name": "rela_minneg",231# JSON-EXPAND-64-NEXT: "Value": 8232# JSON-EXPAND-64-NEXT: },233# JSON-EXPAND-64-NEXT: "Addend": 9223372036854775808234# JSON-EXPAND-64-NEXT: }235# JSON-EXPAND-64-NEXT: },236# JSON-EXPAND-64-NEXT: {237# JSON-EXPAND-64-NEXT: "Relocation": {238# JSON-EXPAND-64-NEXT: "Offset": 9,239# JSON-EXPAND-64-NEXT: "Type": {240# JSON-EXPAND-64-NEXT: "Name": "R_X86_64_32S",241# JSON-EXPAND-64-NEXT: "Value": 11242# JSON-EXPAND-64-NEXT: },243# JSON-EXPAND-64-NEXT: "Symbol": {244# JSON-EXPAND-64-NEXT: "Name": "rela_maxpos",245# JSON-EXPAND-64-NEXT: "Value": 9246# JSON-EXPAND-64-NEXT: },247# JSON-EXPAND-64-NEXT: "Addend": 9223372036854775807248# JSON-EXPAND-64-NEXT: }249# JSON-EXPAND-64-NEXT: }250# JSON-EXPAND-64-NEXT: ]251# JSON-EXPAND-64-NEXT: }252# JSON-EXPAND-64-NEXT: ]253 254--- !ELF255FileHeader:256 Class: ELFCLASS64257 Data: ELFDATA2LSB258 Type: ET_REL259 Machine: EM_X86_64260Sections:261 - Name: .text262 Type: SHT_PROGBITS263 Content: '00FFFFFFFF020000001234567890ABCDEF'264 - Name: .rel.text265 Type: SHT_REL266 Info: .text267 Link: [[LINK=.symtab]]268 ShName: [[SHNAME=<none>]]269 EntSize: [[ENTSIZEREL=<none>]]270 Relocations:271 - Symbol: rel_0272 Type: R_X86_64_NONE273 - Offset: 0x1274 Symbol: rel_neg275 Type: R_X86_64_PC32276 - Offset: 0x5277 Symbol: rel_pos278 Type: R_X86_64_PLT32279 - Offset: 0x9280 Symbol: rel_64281 Type: R_X86_64_64282 - Name: .rela.text283 Type: SHT_RELA284 Info: .text285 Link: [[LINK=.symtab]]286 ShName: [[SHNAME=<none>]]287 EntSize: [[ENTSIZERELA=<none>]]288 Relocations:289 - Symbol: rela_0290 Type: R_X86_64_NONE291 Addend: 0292 - Offset: 0x1293 Symbol: rela_neg294 Type: R_X86_64_PC32295 Addend: -1296 - Offset: 0x5297 Symbol: rela_pos298 Type: R_X86_64_PLT32299 Addend: 2300 - Offset: 0xFFFFFFFFFFFFFFFF301 Symbol: rela_minneg302 Type: R_X86_64_64303 Addend: -9223372036854775808 ## Min 64-bit signed.304 - Offset: 0x9305 Symbol: rela_maxpos306 Type: R_X86_64_32S307 Addend: 9223372036854775807 ## Max 64-bit signed.308Symbols:309 - Name: rel_0310 Section: .text311 Value: 0312 - Name: rel_neg313 Section: .text314 Value: 1315 - Name: rel_pos316 Section: .text317 Value: 2318 - Name: rel_64319 Section: .text320 Value: 0xFFFFFFFFFFFFFFFF321 - Name: rela_0322 Section: .text323 Value: 0324 - Name: rela_neg325 Section: .text326 Value: 1327 - Name: rela_pos328 Section: .text329 Value: 2330 - Name: rela_minneg331 Section: .text332 Value: 3333 - Name: rela_maxpos334 Section: .text335 Value: 0xFFFFFFFFFFFFFFFF336 337## Check we report a warning when we are unable to dump relocations for a section.338## Check we continue dumping other relocation sections if any.339 340## Case A: check the case when relocations can't be read from an SHT_REL section.341## because of broken sh_entsize field.342# RUN: yaml2obj %s --docnum=1 -DENTSIZEREL=1 -o %t.broken.rel343# RUN: llvm-readobj --relocations %t.broken.rel 2>&1 \344# RUN: | FileCheck %s -DFILE=%t.broken.rel --check-prefix=BROKEN-REL-LLVM345# RUN: llvm-readelf --relocations %t.broken.rel 2>&1 \346# RUN: | FileCheck %s -DFILE=%t.broken.rel --check-prefix=BROKEN-REL-GNU347 348# BROKEN-REL-LLVM: Relocations [349# BROKEN-REL-LLVM-NEXT: Section (2) .rel.text {350# 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 1351# BROKEN-REL-LLVM-NEXT: }352# BROKEN-REL-LLVM-NEXT: Section (3) .rela.text {353# BROKEN-REL-LLVM-NEXT: 0x0 R_X86_64_NONE rela_0 0x0354# BROKEN-REL-LLVM-NEXT: 0x1 R_X86_64_PC32 rela_neg 0xFFFFFFFFFFFFFFFF355# BROKEN-REL-LLVM-NEXT: 0x5 R_X86_64_PLT32 rela_pos 0x2356# BROKEN-REL-LLVM-NEXT: 0xFFFFFFFFFFFFFFFF R_X86_64_64 rela_minneg 0x8000000000000000357# BROKEN-REL-LLVM-NEXT: 0x9 R_X86_64_32S rela_maxpos 0x7FFFFFFFFFFFFFFF358# BROKEN-REL-LLVM-NEXT: }359# BROKEN-REL-LLVM-NEXT: ]360 361# BROKEN-REL-GNU: Relocation section '.rel.text' at offset 0x51 contains 64 entries:362# BROKEN-REL-GNU-NEXT: Offset Info Type Symbol's Value Symbol's Name363# 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 1364# BROKEN-REL-GNU: Relocation section '.rela.text' at offset 0x91 contains 5 entries:365# BROKEN-REL-GNU-NEXT: Offset Info Type Symbol's Value Symbol's Name366# BROKEN-REL-GNU-NEXT: 0000000000000000 0000000500000000 R_X86_64_NONE 0000000000000000 rela_0 + 0367# BROKEN-REL-GNU-NEXT: 0000000000000001 0000000600000002 R_X86_64_PC32 0000000000000001 rela_neg - 1368# BROKEN-REL-GNU-NEXT: 0000000000000005 0000000700000004 R_X86_64_PLT32 0000000000000002 rela_pos + 2369# BROKEN-REL-GNU-NEXT: ffffffffffffffff 0000000800000001 R_X86_64_64 0000000000000003 rela_minneg - 8000000000000000370# BROKEN-REL-GNU-NEXT: 0000000000000009 000000090000000b R_X86_64_32S ffffffffffffffff rela_maxpos + 7fffffffffffffff371 372## Case B: check the case when relocations can't be read from an SHT_RELA section.373## because of broken sh_entsize field.374# RUN: yaml2obj %s --docnum=1 -DENTSIZERELA=1 -o %t.broken.rela375# RUN: llvm-readobj --relocations %t.broken.rela 2>&1 \376# RUN: | FileCheck %s -DFILE=%t.broken.rela --check-prefix=BROKEN-RELA-LLVM377# RUN: llvm-readelf --relocations %t.broken.rela 2>&1 \378# RUN: | FileCheck %s -DFILE=%t.broken.rela --check-prefix=BROKEN-RELA-GNU379 380# BROKEN-RELA-LLVM: Relocations [381# BROKEN-RELA-LLVM-NEXT: Section (2) .rel.text {382# BROKEN-RELA-LLVM-NEXT: 0x0 R_X86_64_NONE rel_0{{$}}383# BROKEN-RELA-LLVM-NEXT: 0x1 R_X86_64_PC32 rel_neg{{$}}384# BROKEN-RELA-LLVM-NEXT: 0x5 R_X86_64_PLT32 rel_pos{{$}}385# BROKEN-RELA-LLVM-NEXT: 0x9 R_X86_64_64 rel_64{{$}}386# BROKEN-RELA-LLVM-NEXT: }387# BROKEN-RELA-LLVM-NEXT: Section (3) .rela.text {388# 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 1389# BROKEN-RELA-LLVM-NEXT: }390# BROKEN-RELA-LLVM-NEXT: ]391 392# BROKEN-RELA-GNU: Relocation section '.rel.text' at offset 0x51 contains 4 entries:393# BROKEN-RELA-GNU-NEXT: Offset Info Type Symbol's Value Symbol's Name394# BROKEN-RELA-GNU-NEXT: 0000000000000000 0000000100000000 R_X86_64_NONE 0000000000000000 rel_0395# BROKEN-RELA-GNU-NEXT: 0000000000000001 0000000200000002 R_X86_64_PC32 0000000000000001 rel_neg396# BROKEN-RELA-GNU-NEXT: 0000000000000005 0000000300000004 R_X86_64_PLT32 0000000000000002 rel_pos397# BROKEN-RELA-GNU-NEXT: 0000000000000009 0000000400000001 R_X86_64_64 ffffffffffffffff rel_64398# BROKEN-RELA-GNU-EMPTY:399# BROKEN-RELA-GNU-NEXT: Relocation section '.rela.text' at offset 0x91 contains 120 entries:400# BROKEN-RELA-GNU-NEXT: Offset Info Type Symbol's Value Symbol's Name + Addend401# 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 1402 403## Case C: check the case when relocations can't be read from SHT_REL/SHT_RELA sections404## because of broken sh_link fields.405# RUN: yaml2obj %s --docnum=1 -DLINK=0xffff -o %t.broken.link406# RUN: llvm-readobj --relocations %t.broken.link 2>&1 \407# RUN: | FileCheck %s -DFILE=%t.broken.link --check-prefix=BROKEN-LINK-LLVM408# RUN: llvm-readelf --relocations %t.broken.link 2>&1 \409# RUN: | FileCheck %s -DFILE=%t.broken.link --check-prefix=BROKEN-LINK-GNU410 411# BROKEN-LINK-LLVM: Relocations [412# BROKEN-LINK-LLVM-NEXT: Section (2) .rel.text {413# BROKEN-LINK-LLVM-NEXT: warning: '[[FILE]]': unable to locate a symbol table for SHT_REL section with index 2: invalid section index: 65535414# BROKEN-LINK-LLVM-NEXT: }415# BROKEN-LINK-LLVM-NEXT: Section (3) .rela.text {416# BROKEN-LINK-LLVM-NEXT: warning: '[[FILE]]': unable to locate a symbol table for SHT_RELA section with index 3: invalid section index: 65535417# BROKEN-LINK-LLVM-NEXT: }418# BROKEN-LINK-LLVM-NEXT: ]419 420# BROKEN-LINK-GNU: Relocation section '.rel.text' at offset 0x51 contains 4 entries:421# BROKEN-LINK-GNU-NEXT: Offset Info Type Symbol's Value Symbol's Name422# BROKEN-LINK-GNU-NEXT: warning: '[[FILE]]': unable to locate a symbol table for SHT_REL section with index 2: invalid section index: 65535423# BROKEN-LINK-GNU-EMPTY:424# BROKEN-LINK-GNU-NEXT: Relocation section '.rela.text' at offset 0x91 contains 5 entries:425# BROKEN-LINK-GNU-NEXT: Offset Info Type Symbol's Value Symbol's Name + Addend426# BROKEN-LINK-GNU-NEXT: warning: '[[FILE]]': unable to locate a symbol table for SHT_RELA section with index 3: invalid section index: 65535427 428## Show that ELF32 is dumped correctly.429# RUN: yaml2obj %s --docnum=2 -o %t32430# RUN: llvm-readobj -r %t32 \431# RUN: | FileCheck %s --check-prefix=LLVM-32 --strict-whitespace --match-full-lines432# RUN: llvm-readobj --relocs %t32 \433# RUN: | FileCheck %s --check-prefix=LLVM-32 --strict-whitespace --match-full-lines434# RUN: llvm-readobj --relocations %t32 \435# RUN: | FileCheck %s --check-prefix=LLVM-32 --strict-whitespace --match-full-lines436 437# LLVM-32:Relocations [438# LLVM-32-NEXT: Section (2) .rel.text {439# LLVM-32-NEXT: 0x0 R_386_NONE rel_0440# LLVM-32-NEXT: 0x1 R_386_PC32 rel_neg441# LLVM-32-NEXT: 0x5 R_386_PLT32 rel_pos442# LLVM-32-NEXT: }443# LLVM-32-NEXT: Section (3) .rela.text {444# LLVM-32-NEXT: 0x0 R_386_NONE rela_0 0x0445# LLVM-32-NEXT: 0x1 R_386_PC32 rela_neg 0xFFFFFFFF446# LLVM-32-NEXT: 0x5 R_386_PLT32 rela_pos 0x2447# LLVM-32-NEXT: 0xFFFFFFFF R_386_32 rela_minneg 0x80000000448# LLVM-32-NEXT: 0x9 R_386_GOT32 rela_maxpos 0x7FFFFFFF449# LLVM-32-NEXT: }450# LLVM-32-NEXT:]451 452# RUN: llvm-readelf -r %t32 \453# RUN: | FileCheck %s --check-prefix=GNU-32 --strict-whitespace --match-full-lines454# RUN: llvm-readelf --relocs %t32 \455# RUN: | FileCheck %s --check-prefix=GNU-32 --strict-whitespace --match-full-lines456# RUN: llvm-readelf --relocations %t32 \457# RUN: | FileCheck %s --check-prefix=GNU-32 --strict-whitespace --match-full-lines458 459# GNU-32:Relocation section '.rel.text' at offset 0x3d contains 3 entries:460# GNU-32-NEXT: Offset Info Type Sym. Value Symbol's Name461# GNU-32-NEXT:00000000 00000100 R_386_NONE 00000000 rel_0462# GNU-32-NEXT:00000001 00000202 R_386_PC32 00000001 rel_neg463# GNU-32-NEXT:00000005 00000304 R_386_PLT32 ffffffff rel_pos464# GNU-32-EMPTY:465# GNU-32-NEXT:Relocation section '.rela.text' at offset 0x55 contains 5 entries:466# GNU-32-NEXT: Offset Info Type Sym. Value Symbol's Name + Addend467# GNU-32-NEXT:00000000 00000400 R_386_NONE 00000000 rela_0 + 0468# GNU-32-NEXT:00000001 00000502 R_386_PC32 00000001 rela_neg - 1469# GNU-32-NEXT:00000005 00000604 R_386_PLT32 00000002 rela_pos + 2470# GNU-32-NEXT:ffffffff 00000701 R_386_32 00000003 rela_minneg - 80000000471# GNU-32-NEXT:00000009 00000803 R_386_GOT32 ffffffff rela_maxpos + 7fffffff472 473## Show that --expand-relocs expands the relocation dump for LLVM style and not GNU.474# RUN: llvm-readobj -r --expand-relocs %t32 \475# RUN: | FileCheck %s --check-prefix=LLVM-EXPAND-32 --strict-whitespace --match-full-lines476# RUN: llvm-readelf -r --expand-relocs %t32 \477# RUN: | FileCheck %s --check-prefix=GNU-32 --strict-whitespace --match-full-lines478 479# LLVM-EXPAND-32:Relocations [480# LLVM-EXPAND-32-NEXT: Section (2) .rel.text {481# LLVM-EXPAND-32-NEXT: Relocation {482# LLVM-EXPAND-32-NEXT: Offset: 0x0483# LLVM-EXPAND-32-NEXT: Type: R_386_NONE (0)484# LLVM-EXPAND-32-NEXT: Symbol: rel_0 (1)485# LLVM-EXPAND-32-NEXT: }486# LLVM-EXPAND-32-NEXT: Relocation {487# LLVM-EXPAND-32-NEXT: Offset: 0x1488# LLVM-EXPAND-32-NEXT: Type: R_386_PC32 (2)489# LLVM-EXPAND-32-NEXT: Symbol: rel_neg (2)490# LLVM-EXPAND-32-NEXT: }491# LLVM-EXPAND-32-NEXT: Relocation {492# LLVM-EXPAND-32-NEXT: Offset: 0x5493# LLVM-EXPAND-32-NEXT: Type: R_386_PLT32 (4)494# LLVM-EXPAND-32-NEXT: Symbol: rel_pos (3)495# LLVM-EXPAND-32-NEXT: }496# LLVM-EXPAND-32-NEXT: }497# LLVM-EXPAND-32-NEXT: Section (3) .rela.text {498# LLVM-EXPAND-32-NEXT: Relocation {499# LLVM-EXPAND-32-NEXT: Offset: 0x0500# LLVM-EXPAND-32-NEXT: Type: R_386_NONE (0)501# LLVM-EXPAND-32-NEXT: Symbol: rela_0 (4)502# LLVM-EXPAND-32-NEXT: Addend: 0x0503# LLVM-EXPAND-32-NEXT: }504# LLVM-EXPAND-32-NEXT: Relocation {505# LLVM-EXPAND-32-NEXT: Offset: 0x1506# LLVM-EXPAND-32-NEXT: Type: R_386_PC32 (2)507# LLVM-EXPAND-32-NEXT: Symbol: rela_neg (5)508# LLVM-EXPAND-32-NEXT: Addend: 0xFFFFFFFF509# LLVM-EXPAND-32-NEXT: }510# LLVM-EXPAND-32-NEXT: Relocation {511# LLVM-EXPAND-32-NEXT: Offset: 0x5512# LLVM-EXPAND-32-NEXT: Type: R_386_PLT32 (4)513# LLVM-EXPAND-32-NEXT: Symbol: rela_pos (6)514# LLVM-EXPAND-32-NEXT: Addend: 0x2515# LLVM-EXPAND-32-NEXT: }516# LLVM-EXPAND-32-NEXT: Relocation {517# LLVM-EXPAND-32-NEXT: Offset: 0xFFFFFFFF518# LLVM-EXPAND-32-NEXT: Type: R_386_32 (1)519# LLVM-EXPAND-32-NEXT: Symbol: rela_minneg (7)520# LLVM-EXPAND-32-NEXT: Addend: 0x80000000521# LLVM-EXPAND-32-NEXT: }522# LLVM-EXPAND-32-NEXT: Relocation {523# LLVM-EXPAND-32-NEXT: Offset: 0x9524# LLVM-EXPAND-32-NEXT: Type: R_386_GOT32 (3)525# LLVM-EXPAND-32-NEXT: Symbol: rela_maxpos (8)526# LLVM-EXPAND-32-NEXT: Addend: 0x7FFFFFFF527# LLVM-EXPAND-32-NEXT: }528# LLVM-EXPAND-32-NEXT: }529# LLVM-EXPAND-32-NEXT:]530 531--- !ELF532FileHeader:533 Class: ELFCLASS32534 Data: ELFDATA2LSB535 Type: ET_REL536 Machine: EM_386537Sections:538 - Name: .text539 Type: SHT_PROGBITS540 Content: '00FFFFFFFF02000000'541 - Name: .rel.text542 Type: SHT_REL543 Info: .text544 Relocations:545 - Symbol: rel_0546 Type: R_386_NONE547 - Offset: 0x1548 Symbol: rel_neg549 Type: R_386_PC32550 - Offset: 0x5551 Symbol: rel_pos552 Type: R_386_PLT32553 - Name: .rela.text554 Type: SHT_RELA555 Info: .text556 Relocations:557 - Symbol: rela_0558 Type: R_386_NONE559 Addend: 0560 - Offset: 0x1561 Symbol: rela_neg562 Type: R_386_PC32563 Addend: -1564 - Offset: 0x5565 Symbol: rela_pos566 Type: R_386_PLT32567 Addend: 2568 - Offset: 0xFFFFFFFF569 Symbol: rela_minneg570 Type: R_386_32571 Addend: -2147483648 ## Min 32-bit signed.572 - Offset: 0x9573 Symbol: rela_maxpos574 Type: R_386_GOT32575 Addend: 2147483647 ## Max 32-bit signed.576Symbols:577 - Name: rel_0578 Section: .text579 Value: 0580 - Name: rel_neg581 Section: .text582 Value: 1583 - Name: rel_pos584 Section: .text585 Value: 0xFFFFFFFF586 - Name: rela_0587 Section: .text588 Value: 0589 - Name: rela_neg590 Section: .text591 Value: 1592 - Name: rela_pos593 Section: .text594 Value: 2595 - Name: rela_minneg596 Section: .text597 Value: 3598 - Name: rela_maxpos599 Section: .text600 Value: 0xFFFFFFFF601 602## Check we report a warning when the name of a relocation section can't be read. Check we continue dumping.603# RUN: yaml2obj %s --docnum=1 -DSHNAME=0xffffffff -o %tshname604# RUN: llvm-readobj --relocs %tshname 2>&1 | FileCheck %s -DFILE=%tshname --check-prefix=LLVM-SHNAME605# RUN: llvm-readelf --relocs %tshname 2>&1 | FileCheck %s -DFILE=%tshname --check-prefix=GNU-SHNAME606 607# LLVM-SHNAME: Relocations [608# 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 table609# LLVM-SHNAME-NEXT: Section (2) <?> {610# LLVM-SHNAME-NEXT: 0x0 R_X86_64_NONE rel_0{{$}}611# LLVM-SHNAME-NEXT: 0x1 R_X86_64_PC32 rel_neg{{$}}612# LLVM-SHNAME-NEXT: 0x5 R_X86_64_PLT32 rel_pos{{$}}613# LLVM-SHNAME-NEXT: 0x9 R_X86_64_64 rel_64{{$}}614# LLVM-SHNAME-NEXT: }615# 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 table616# LLVM-SHNAME-NEXT: Section (3) <?> {617# LLVM-SHNAME-NEXT: 0x0 R_X86_64_NONE rela_0 0x0618# LLVM-SHNAME-NEXT: 0x1 R_X86_64_PC32 rela_neg 0xFFFFFFFFFFFFFFFF619# LLVM-SHNAME-NEXT: 0x5 R_X86_64_PLT32 rela_pos 0x2620# LLVM-SHNAME-NEXT: 0xFFFFFFFFFFFFFFFF R_X86_64_64 rela_minneg 0x8000000000000000621# LLVM-SHNAME-NEXT: 0x9 R_X86_64_32S rela_maxpos 0x7FFFFFFFFFFFFFFF622# LLVM-SHNAME-NEXT: }623# LLVM-SHNAME-NEXT: ]624 625# 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 table626# GNU-SHNAME: Relocation section '<?>' at offset 0x51 contains 4 entries:627# GNU-SHNAME-NEXT: Offset Info Type Symbol's Value Symbol's Name628# GNU-SHNAME-NEXT: 0000000000000000 0000000100000000 R_X86_64_NONE 0000000000000000 rel_0629# GNU-SHNAME-NEXT: 0000000000000001 0000000200000002 R_X86_64_PC32 0000000000000001 rel_neg630# GNU-SHNAME-NEXT: 0000000000000005 0000000300000004 R_X86_64_PLT32 0000000000000002 rel_pos631# GNU-SHNAME-NEXT: 0000000000000009 0000000400000001 R_X86_64_64 ffffffffffffffff rel_64632# 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 table633# GNU-SHNAME: Relocation section '<?>' at offset 0x91 contains 5 entries:634# GNU-SHNAME-NEXT: Offset Info Type Symbol's Value Symbol's Name + Addend635# GNU-SHNAME-NEXT: 0000000000000000 0000000500000000 R_X86_64_NONE 0000000000000000 rela_0 + 0636# GNU-SHNAME-NEXT: 0000000000000001 0000000600000002 R_X86_64_PC32 0000000000000001 rela_neg - 1637# GNU-SHNAME-NEXT: 0000000000000005 0000000700000004 R_X86_64_PLT32 0000000000000002 rela_pos + 2638# GNU-SHNAME-NEXT: ffffffffffffffff 0000000800000001 R_X86_64_64 0000000000000003 rela_minneg - 8000000000000000639# GNU-SHNAME-NEXT: 0000000000000009 000000090000000b R_X86_64_32S ffffffffffffffff rela_maxpos + 7fffffffffffffff640 641## Check that we report a warning when a relocation has a642## symbol index past the end of the symbol table643 644# RUN: yaml2obj %s --docnum=3 -o %t3645# RUN: llvm-readobj --relocs %t3 2>&1 | \646# RUN: FileCheck %s --implicit-check-not=warning: -DFILE=%t3 --check-prefix=LLVM-SYMNDX647# RUN: llvm-readelf --relocs %t3 2>&1 | \648# RUN: FileCheck %s --implicit-check-not=warning: -DFILE=%t3 --check-prefix=GNU-SYMNDX649 650# LLVM-SYMNDX: Relocations [651# LLVM-SYMNDX-NEXT: Section (1) .rela.text {652# 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)653# 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)654# LLVM-SYMNDX-NEXT: }655# LLVM-SYMNDX-NEXT: ]656 657# GNU-SYMNDX: Relocation section '.rela.text' at offset 0x40 contains 2 entries:658# GNU-SYMNDX-NEXT: Offset Info Type Symbol's Value Symbol's Name + Addend659# 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)660# 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)661 662--- !ELF663FileHeader:664 Class: ELFCLASS64665 Data: ELFDATA2LSB666 Type: ET_DYN667 Machine: EM_X86_64668Sections:669 - Name: .rela.text670 Type: SHT_RELA671 Relocations:672 - Type: R_X86_64_NONE673 Symbol: 0x2674 - Type: R_X86_64_NONE675 Symbol: 0x3676Symbols:677 - Name: foo678