brintos

brintos / llvm-project-archived public Read only

0
0
Text · 30.4 KiB · 34cff40 Raw
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