502 lines · plain
1## Test how we handle cases when dynamic relocations or corresponding dynamic tags are broken.2 3## Check that llvm-readobj/llvm-readelf reports an error when dumping relocations if a dynamic4## symbol name offset is broken (goes past the end of the dynamic symbol string table).5 6# RUN: yaml2obj --docnum=1 %s -o %t17# RUN: llvm-readobj --dyn-relocations %t1 2>&1 | FileCheck %s -DFILE=%t1 --check-prefix=LLVM8# RUN: llvm-readelf --dyn-relocations %t1 2>&1 | FileCheck %s -DFILE=%t1 --check-prefix=GNU9 10# LLVM: Dynamic Relocations {11# LLVM-NEXT: warning: '[[FILE]]': unable to get name of the dynamic symbol with index 1: st_name (0x1234) is past the end of the string table of size 0x112# LLVM-NEXT: 0x0 R_X86_64_NONE <corrupt> 0x013# LLVM-NEXT: }14 15# GNU: 'RELA' relocation section at offset {{.+}} contains 24 bytes:16# GNU-NEXT: Offset Info Type Symbol's Value Symbol's Name + Addend17# GNU-NEXT: warning: '[[FILE]]': unable to get name of the dynamic symbol with index 1: st_name (0x1234) is past the end of the string table of size 0x118# GNU-NEXT: 0000000000000000 0000000100000000 R_X86_64_NONE 0000000000000000 <corrupt> + 019 20--- !ELF21FileHeader:22 Class: ELFCLASS6423 Data: ELFDATA2LSB24 Type: ET_DYN25 Machine: EM_X86_6426Sections:27 - Name: .rela.dyn28 Type: SHT_RELA29 Link: .dynsym30 Relocations:31 - Symbol: 1 ## Index of a dynamic symbol with a broken st_name.32 Type: R_X86_64_NONE33 - Name: .dynamic34 Type: SHT_DYNAMIC35 Entries:36 - Tag: DT_RELA37 Value: 0x000000000000000038 - Tag: DT_RELASZ39 Value: 0x000000000000001840 - Tag: DT_RELAENT41 Value: 0x000000000000001842 - Tag: DT_NULL43 Value: 0x000000000000000044DynamicSymbols:45 - StName: 0x123446ProgramHeaders:47 - Type: PT_LOAD48 FirstSec: .rela.dyn49 LastSec: .dynamic50 51## Show we print a warning for an invalid relocation table size stored in a DT_RELASZ entry.52 53## Case A: the size of a single relocation entry is 0x18. In this case 0xFF % 0x18 != 0 and we report a warning54 55# RUN: yaml2obj --docnum=2 -DRELTYPE=RELA -DTAG1=DT_RELASZ -DTAG1VAL=0xFF -DTAG2=DT_RELAENT %s -o %t2a56# RUN: llvm-readobj --dyn-relocations %t2a 2>&1 | \57# RUN: FileCheck %s -DFILE=%t2a --check-prefix=INVALID-DT-RELASZ1 --implicit-check-not=warning:58# RUN: llvm-readelf --dyn-relocations %t2a 2>&1 | \59# RUN: FileCheck %s -DFILE=%t2a --check-prefix=INVALID-DT-RELASZ1 --implicit-check-not=warning:60 61# INVALID-DT-RELASZ1: warning: '[[FILE]]': invalid DT_RELASZ value (0xff) or DT_RELAENT value (0x18)62 63--- !ELF64FileHeader:65 Class: ELFCLASS6466 Data: ELFDATA2LSB67 Type: ET_DYN68Sections:69 - Name: .relx.dyn70 Type: SHT_[[RELTYPE]]71 - Name: .dynamic72 Type: SHT_DYNAMIC73 Entries:74 - Tag: DT_[[RELTYPE]]75 Value: 0x076 - Tag: [[TAG1]]77 Value: [[TAG1VAL=0x18]]78 - Tag: [[TAG2]]79 Value: [[TAG2VAL=0x18]]80 - Tag: DT_NULL81 Value: 0x082DynamicSymbols: []83ProgramHeaders:84 - Type: PT_LOAD85 FirstSec: .relx.dyn86 LastSec: .dynamic87 88## Case B: the DT_RELASZ has value of 0x251, what is too large, because the relocation table goes past the EOF.89 90# RUN: yaml2obj --docnum=2 -DRELTYPE=RELA -DTAG1=DT_RELASZ -DTAG1VAL=0x251 -DTAG2=DT_RELAENT %s -o %t2b91# RUN: llvm-readobj --dyn-relocations %t2b 2>&1 | \92# RUN: FileCheck %s -DFILE=%t2b --check-prefix=INVALID-DT-RELASZ2 --implicit-check-not=warning:93# RUN: llvm-readelf --dyn-relocations %t2b 2>&1 | \94# RUN: FileCheck %s -DFILE=%t2b --check-prefix=INVALID-DT-RELASZ2 --implicit-check-not=warning:95 96# INVALID-DT-RELASZ2: warning: '[[FILE]]': unable to read data at 0x78 of size 0x251 (DT_RELASZ value): it goes past the end of the file of size 0x2c897 98## Show we print a warning for an invalid relocation table entry size stored in a DT_RELAENT entry.99# RUN: yaml2obj --docnum=2 -DRELTYPE=RELA -DTAG1=DT_RELASZ -DTAG2=DT_RELAENT -DTAG2VAL=0xFF %s -o %t3100# RUN: llvm-readobj --dyn-relocations %t3 2>&1 | \101# RUN: FileCheck %s -DFILE=%t3 --check-prefix=INVALID-DT-RELAENT --implicit-check-not=warning:102# RUN: llvm-readelf --dyn-relocations %t3 2>&1 | \103# RUN: FileCheck %s -DFILE=%t3 --check-prefix=INVALID-DT-RELAENT --implicit-check-not=warning:104 105# INVALID-DT-RELAENT: warning: '[[FILE]]': invalid DT_RELASZ value (0x18) or DT_RELAENT value (0xff)106 107## Show we print a warning for an invalid relocation table size stored in a DT_RELSZ entry.108 109## Case A: the size of a single relocation entry is 0x18. In this case 0xFF % 0x18 != 0 and we report a warning.110 111# RUN: yaml2obj --docnum=2 -DRELTYPE=REL -DTAG1=DT_RELSZ -DTAG1VAL=0xFF -DTAG2=DT_RELENT %s -o %t4a112# RUN: llvm-readobj --dyn-relocations %t4a 2>&1 | FileCheck %s -DFILE=%t4a --check-prefix=INVALID-DT-RELSZ1113# RUN: llvm-readelf --dyn-relocations %t4a 2>&1 | FileCheck %s -DFILE=%t4a --check-prefix=INVALID-DT-RELSZ1114 115# INVALID-DT-RELSZ1: warning: '[[FILE]]': invalid DT_RELSZ value (0xff) or DT_RELENT value (0x18)116 117## Case B: the DT_RELSZ has value of 0x251, what is too large, because the relocation table goes past the EOF.118 119# RUN: yaml2obj --docnum=2 -DRELTYPE=REL -DTAG1=DT_RELSZ -DTAG1VAL=0x251 -DTAG2=DT_RELENT %s -o %t4b120# RUN: llvm-readobj --dyn-relocations %t4b 2>&1 | FileCheck %s -DFILE=%t4b --check-prefix=INVALID-DT-RELSZ2121# RUN: llvm-readelf --dyn-relocations %t4b 2>&1 | FileCheck %s -DFILE=%t4b --check-prefix=INVALID-DT-RELSZ2122 123# INVALID-DT-RELSZ2: warning: '[[FILE]]': unable to read data at 0x78 of size 0x251 (DT_RELSZ value): it goes past the end of the file of size 0x2c8124 125## Show we print a warning for an invalid relocation table entry size stored in a DT_RELENT entry.126# RUN: yaml2obj --docnum=2 -DRELTYPE=REL -DTAG1=DT_RELSZ -DTAG2=DT_RELENT -DTAG2VAL=0xFF %s -o %t5127# RUN: llvm-readobj --dyn-relocations %t5 2>&1 | FileCheck %s -DFILE=%t5 --check-prefix=INVALID-DT-RELENT128# RUN: llvm-readelf --dyn-relocations %t5 2>&1 | FileCheck %s -DFILE=%t5 --check-prefix=INVALID-DT-RELENT129 130# INVALID-DT-RELENT: warning: '[[FILE]]': invalid DT_RELSZ value (0x18) or DT_RELENT value (0xff)131 132## Show we print a warning for an invalid relocation table size stored in a DT_RELRSZ/DT_ANDROID_RELRSZ entry.133# RUN: yaml2obj --docnum=2 -DRELTYPE=RELR -DTAG1=DT_RELRSZ -DTAG1VAL=0xFF -DTAG2=DT_RELRENT %s -o %t6134# RUN: llvm-readobj --dyn-relocations %t6 2>&1 | FileCheck %s -DFILE=%t6 --check-prefix=INVALID-DT-RELRSZ135# RUN: llvm-readelf --dyn-relocations %t6 2>&1 | FileCheck %s -DFILE=%t6 --check-prefix=INVALID-DT-RELRSZ136 137# RUN: yaml2obj --docnum=2 -DRELTYPE=RELR -DTAG1=DT_ANDROID_RELRSZ -DTAG1VAL=0xFF -DTAG2=DT_ANDROID_RELRENT %s -o %t7138# RUN: llvm-readobj --dyn-relocations %t7 2>&1 | FileCheck %s -DFILE=%t7 --check-prefix=INVALID-DT-ANDROID-RELRSZ139# RUN: llvm-readelf --dyn-relocations %t7 2>&1 | FileCheck %s -DFILE=%t7 --check-prefix=INVALID-DT-ANDROID-RELRSZ140 141# INVALID-DT-RELRSZ: warning: '[[FILE]]': invalid DT_RELRSZ value (0xff) or DT_RELRENT value (0x18)142# INVALID-DT-ANDROID-RELRSZ: warning: '[[FILE]]': invalid DT_ANDROID_RELRSZ value (0xff) or DT_ANDROID_RELRENT value (0x18)143 144## Show we print a warning for an invalid relocation table entry size stored in a DT_RELRENT/DT_ANDROID_RELRENT entry.145# RUN: yaml2obj --docnum=2 -DRELTYPE=RELR -DTAG1=DT_RELRSZ -DTAG2=DT_RELRENT -DTAG2VAL=0xFF %s -o %t8146# RUN: llvm-readobj --dyn-relocations %t8 2>&1 | FileCheck %s -DFILE=%t8 --check-prefix=INVALID-DT-RELRENT147# RUN: llvm-readelf --dyn-relocations %t8 2>&1 | FileCheck %s -DFILE=%t8 --check-prefix=INVALID-DT-RELRENT148# RUN: yaml2obj --docnum=2 -DRELTYPE=RELR -DTAG1=DT_ANDROID_RELRSZ -DTAG2=DT_ANDROID_RELRENT -DTAG2VAL=0xFF %s -o %t9149# RUN: llvm-readobj --dyn-relocations %t9 2>&1 | FileCheck %s -DFILE=%t9 --check-prefix=INVALID-DT-ANDROID-RELRENT150# RUN: llvm-readelf --dyn-relocations %t9 2>&1 | FileCheck %s -DFILE=%t9 --check-prefix=INVALID-DT-ANDROID-RELRENT151 152# INVALID-DT-RELRENT: invalid DT_RELRSZ value (0x18) or DT_RELRENT value (0xff)153# INVALID-DT-ANDROID-RELRENT: invalid DT_ANDROID_RELRSZ value (0x18) or DT_ANDROID_RELRENT value (0xff)154 155## Show we print a warning for an invalid value of DT_PLTRELSZ, which describes the total size156## of the relocation entries associated with the procedure linkage table.157 158## Case A: the size of a single relocation entry is 0x18. In this case 0xFF % 0x18 != 0 and we report a warning.159 160# RUN: yaml2obj --docnum=3 -DVAL=0xFF %s -o %t10a161# RUN: llvm-readobj --dyn-relocations %t10a 2>&1 | \162# RUN: FileCheck %s -DFILE=%t10a --check-prefix=INVALID-DT-PLTRELSZ1 --implicit-check-not=warning:163# RUN: llvm-readelf --dyn-relocations %t10a 2>&1 | \164# RUN: FileCheck %s -DFILE=%t10a --check-prefix=INVALID-DT-PLTRELSZ1 --implicit-check-not=warning:165 166# INVALID-DT-PLTRELSZ1: warning: '[[FILE]]': invalid DT_PLTRELSZ value (0xff) or PLTREL entry size (0x18){{$}}167 168--- !ELF169FileHeader:170 Class: ELFCLASS64171 Data: ELFDATA2LSB172 Type: ET_EXEC173 Machine: EM_X86_64174Sections:175 - Name: .rela.plt176 Type: SHT_RELA177 Relocations:178 - Type: R_X86_64_NONE179 - Name: .dynamic180 Type: SHT_DYNAMIC181 Entries:182 - Tag: DT_JMPREL183 Value: 0x0184 - Tag: DT_PLTRELSZ185 Value: [[VAL]] ## The valid value would be 0x18.186 - Tag: DT_PLTREL187 Value: 0x7 ## DT_RELA188 - Tag: DT_NULL189 Value: 0x0190DynamicSymbols: []191ProgramHeaders:192 - Type: PT_LOAD193 FirstSec: .rela.plt194 LastSec: .dynamic195 196## Case B: the DT_PLTRELSZ (PLT size) has value of 0x269, what is too large, because PLT goes past the EOF.197 198# RUN: yaml2obj --docnum=3 -DVAL=0x269 %s -o %t10b199# RUN: llvm-readobj --dyn-relocations %t10b 2>&1 | \200# RUN: FileCheck %s -DFILE=%t10b --check-prefix=INVALID-DT-PLTRELSZ2-LLVM --implicit-check-not=warning:201# RUN: llvm-readelf --dyn-relocations %t10b 2>&1 | \202# RUN: FileCheck %s -DFILE=%t10b --check-prefix=INVALID-DT-PLTRELSZ2-GNU --implicit-check-not=warning:203 204# INVALID-DT-PLTRELSZ2-LLVM: Dynamic Relocations {205# INVALID-DT-PLTRELSZ2-LLVM-NEXT: warning: '[[FILE]]': unable to read data at 0x78 of size 0x269 (DT_PLTRELSZ value): it goes past the end of the file of size 0x2e0206# INVALID-DT-PLTRELSZ2-LLVM-NEXT: }207 208# INVALID-DT-PLTRELSZ2-GNU: 'PLT' relocation section at offset 0x78 contains 617 bytes:209# INVALID-DT-PLTRELSZ2-GNU-NEXT: Offset Info Type Symbol's Value Symbol's Name + Addend210# INVALID-DT-PLTRELSZ2-GNU-NEXT: warning: '[[FILE]]': unable to read data at 0x78 of size 0x269 (DT_PLTRELSZ value): it goes past the end of the file of size 0x2e0211 212## Show we print a warning when dumping dynamic relocations if there is no dynamic symbol table.213# RUN: yaml2obj --docnum=4 %s -o %t11214# RUN: llvm-readobj --dyn-relocations %t11 2>&1 | FileCheck %s -DFILE=%t11 --check-prefix=LLVM-NO-DYNSYM215# RUN: llvm-readelf --dyn-relocations %t11 2>&1 | FileCheck %s -DFILE=%t11 --check-prefix=GNU-NO-DYNSYM216 217# LLVM-NO-DYNSYM: Dynamic Relocations {218# LLVM-NO-DYNSYM-NEXT: warning: '[[FILE]]': unable to get name of the dynamic symbol with index 0: no dynamic symbol table found219# LLVM-NO-DYNSYM-NEXT: 0x0 R_X86_64_NONE <corrupt> 0x0220# LLVM-NO-DYNSYM-NEXT: warning: '[[FILE]]': unable to get name of the dynamic symbol with index 1: no dynamic symbol table found221# LLVM-NO-DYNSYM-NEXT: 0x0 R_X86_64_NONE <corrupt> 0x0222# LLVM-NO-DYNSYM-NEXT: }223 224# GNU-NO-DYNSYM: 'RELA' relocation section at offset 0x78 contains 48 bytes:225# GNU-NO-DYNSYM-NEXT: Offset Info Type Symbol's Value Symbol's Name + Addend226# GNU-NO-DYNSYM-NEXT: warning: '[[FILE]]': unable to get name of the dynamic symbol with index 0: no dynamic symbol table found227# GNU-NO-DYNSYM-NEXT: 0000000000000000 0000000000000000 R_X86_64_NONE <corrupt> + 0228# GNU-NO-DYNSYM-NEXT: warning: '[[FILE]]': unable to get name of the dynamic symbol with index 1: no dynamic symbol table found229# GNU-NO-DYNSYM-NEXT: 0000000000000000 0000000100000000 R_X86_64_NONE <corrupt> + 0230 231--- !ELF232FileHeader:233 Class: ELFCLASS64234 Data: ELFDATA2LSB235 Type: ET_DYN236 Machine: EM_X86_64237Sections:238 - Name: .rela.dyn239 Type: SHT_RELA240 Relocations:241 - Type: R_X86_64_NONE242 - Type: R_X86_64_NONE243 Symbol: 0x1244 - Name: .dynamic245 Type: SHT_DYNAMIC246 Entries:247 - Tag: DT_RELA248 Value: 0x0249 - Tag: DT_RELASZ250 Value: 0x30251 - Tag: DT_RELAENT252 Value: 0x18253 - Tag: DT_NULL254 Value: 0x0255ProgramHeaders:256 - Type: PT_LOAD257 FirstSec: .rela.dyn258 LastSec: .dynamic259 260## Show we print a warning when the symbol index of a dynamic relocation is too261## large (goes past the end of the dynamic symbol table).262# RUN: yaml2obj --docnum=5 %s -o %t12263# RUN: llvm-readobj --dyn-relocations %t12 2>&1 | \264# RUN: FileCheck %s -DFILE=%t12 --implicit-check-not=warning: --check-prefix=LLVM-INVALID-DYNSYM265# RUN: llvm-readelf --dyn-relocations %t12 2>&1 | \266# RUN: FileCheck %s -DFILE=%t12 --implicit-check-not=warning: --check-prefix=GNU-INVALID-DYNSYM267 268# LLVM-INVALID-DYNSYM: Dynamic Relocations {269# LLVM-INVALID-DYNSYM-NEXT: warning: '[[FILE]]': unable to get name of the dynamic symbol with index 2: index is greater than or equal to the number of dynamic symbols (2)270# LLVM-INVALID-DYNSYM-NEXT: 0x0 R_X86_64_NONE <corrupt> 0x0271# LLVM-INVALID-DYNSYM-NEXT: 0x0 R_X86_64_NONE <corrupt> 0x0272# LLVM-INVALID-DYNSYM-NEXT: }273 274# GNU-INVALID-DYNSYM: 'RELA' relocation section at offset 0x78 contains 48 bytes:275# GNU-INVALID-DYNSYM-NEXT: Offset Info Type Symbol's Value Symbol's Name + Addend276# GNU-INVALID-DYNSYM-NEXT: warning: '[[FILE]]': unable to get name of the dynamic symbol with index 2: index is greater than or equal to the number of dynamic symbols (2)277# GNU-INVALID-DYNSYM-NEXT: 0000000000000000 0000000200000000 R_X86_64_NONE <corrupt> + 0278# GNU-INVALID-DYNSYM-NEXT: 0000000000000000 0000000200000000 R_X86_64_NONE <corrupt> + 0279 280--- !ELF281FileHeader:282 Class: ELFCLASS64283 Data: ELFDATA2LSB284 Type: ET_DYN285 Machine: EM_X86_64286Sections:287 - Name: .rela.dyn288 Type: SHT_RELA289 Relocations:290 - Type: R_X86_64_NONE291 Symbol: 0x2292 - Type: R_X86_64_NONE293 Symbol: 0x2294 - Name: .dynamic295 Type: SHT_DYNAMIC296 Entries:297 - Tag: DT_RELA298 Value: 0x0299 - Tag: DT_RELASZ300 Value: 0x30301 - Tag: DT_RELAENT302 Value: 0x18303 - Tag: DT_NULL304 Value: 0x0305DynamicSymbols:306 - Name: foo307ProgramHeaders:308 - Type: PT_LOAD309 FirstSec: .rela.dyn310 LastSec: .dynamic311 312## Show that when we have both REL and RELA relocations, we dump both sets.313# RUN: yaml2obj --docnum=6 %s -o %t13314# RUN: llvm-readobj --dyn-relocations %t13 2>&1 | FileCheck %s -DFILE=%t13 --check-prefix=BOTH-RELA-REL-LLVM315# RUN: llvm-readelf --dyn-relocations %t13 2>&1 | FileCheck %s -DFILE=%t13 --check-prefix=BOTH-RELA-REL-GNU316 317# BOTH-RELA-REL-LLVM: Dynamic Relocations {318# BOTH-RELA-REL-LLVM-NEXT: 0x1 R_X86_64_NONE - 0x0{{$}}319# BOTH-RELA-REL-LLVM-NEXT: 0x2 R_X86_64_NONE -{{$}}320# BOTH-RELA-REL-LLVM-NEXT: }321 322# BOTH-RELA-REL-GNU: 'RELA' relocation section at offset 0x78 contains 24 bytes:323# BOTH-RELA-REL-GNU-NEXT: Offset Info Type Symbol's Value Symbol's Name + Addend324# BOTH-RELA-REL-GNU-NEXT: 0000000000000001 0000000000000000 R_X86_64_NONE 0325# BOTH-RELA-REL-GNU-EMPTY:326# BOTH-RELA-REL-GNU: 'REL' relocation section at offset 0x90 contains 16 bytes:327# BOTH-RELA-REL-GNU-NEXT: Offset Info Type Symbol's Value Symbol's Name328# BOTH-RELA-REL-GNU-NEXT: 0000000000000002 0000000000000000 R_X86_64_NONE329 330--- !ELF331FileHeader:332 Class: ELFCLASS64333 Data: ELFDATA2LSB334 Type: ET_DYN335 Machine: EM_X86_64336Sections:337 - Name: .rela.dyn338 Type: SHT_RELA339 Relocations:340 - Type: R_X86_64_NONE341 Offset: 0x1342 - Name: .rel.dyn343 Type: SHT_REL344 Relocations:345 - Type: R_X86_64_NONE346 Offset: 0x2347 - Name: .dynamic348 Type: SHT_DYNAMIC349 Entries:350 - Tag: DT_RELA351 Value: 0x0352 - Tag: DT_RELASZ353 Value: 0x18354 - Tag: DT_RELAENT355 Value: 0x18356## 0x18 == offset of .rel.dyn == size of .rela.dyn section.357 - Tag: DT_REL358 Value: 0x18359 - Tag: DT_RELSZ360 Value: 0x10361 - Tag: DT_RELENT362 Value: 0x10363 - Tag: DT_NULL364 Value: 0x0365DynamicSymbols: []366ProgramHeaders:367 - Type: PT_LOAD368 FirstSec: .rela.dyn369 LastSec: .dynamic370 371## Check that llvm-readobj/llvm-readelf reports a warning when dumping a relocation372## which refers to a symbol past the end of the file.373 374# RUN: yaml2obj --docnum=7 %s -o %t7375# RUN: llvm-readobj --dyn-relocations %t7 2>&1 | \376# RUN: FileCheck %s -DFILE=%t7 --check-prefix=PAST-EOF-LLVM377# RUN: llvm-readelf --dyn-relocations %t7 2>&1 | \378# RUN: FileCheck %s -DFILE=%t7 --check-prefix=PAST-EOF-GNU379 380# PAST-EOF-LLVM: Dynamic Relocations {381# PAST-EOF-LLVM-NEXT: warning: '[[FILE]]': unable to get name of the dynamic symbol with index 1: st_name (0x1) is past the end of the string table of size 0x0382# PAST-EOF-LLVM-NEXT: 0x0 R_X86_64_NONE <corrupt> 0x0383# PAST-EOF-LLVM-NEXT: warning: '[[FILE]]': unable to get name of the dynamic symbol with index 2: symbol at 0x330 goes past the end of the file (0x330)384# PAST-EOF-LLVM-NEXT: 0x0 R_X86_64_NONE <corrupt> 0x0385# PAST-EOF-LLVM-NEXT: warning: '[[FILE]]': unable to get name of the dynamic symbol with index 4294967295: symbol at 0x18000002e8 goes past the end of the file (0x330)386# PAST-EOF-LLVM-NEXT: 0x0 R_X86_64_NONE <corrupt> 0x0387# PAST-EOF-LLVM-NEXT: }388 389# PAST-EOF-GNU: 'RELA' relocation section at offset 0x200 contains 72 bytes:390# PAST-EOF-GNU-NEXT: Offset Info Type Symbol's Value Symbol's Name + Addend391# PAST-EOF-GNU-NEXT: warning: '[[FILE]]': unable to get name of the dynamic symbol with index 1: st_name (0x1) is past the end of the string table of size 0x0392# PAST-EOF-GNU-NEXT: 0000000000000000 0000000100000000 R_X86_64_NONE 0000000000000000 <corrupt> + 0393# PAST-EOF-GNU-NEXT: warning: '[[FILE]]': unable to get name of the dynamic symbol with index 2: symbol at 0x330 goes past the end of the file (0x330)394# PAST-EOF-GNU-NEXT: 0000000000000000 0000000200000000 R_X86_64_NONE <corrupt> + 0395# PAST-EOF-GNU-NEXT: warning: '[[FILE]]': unable to get name of the dynamic symbol with index 4294967295: symbol at 0x18000002e8 goes past the end of the file (0x330)396# PAST-EOF-GNU-NEXT: 0000000000000000 ffffffff00000000 R_X86_64_NONE <corrupt> + 0397 398--- !ELF399FileHeader:400 Class: ELFCLASS64401 Data: ELFDATA2LSB402 Type: ET_DYN403 Machine: EM_X86_64404Sections:405 - Name: .dynamic406 Type: SHT_DYNAMIC407 Flags: [ SHF_ALLOC ]408 Address: 0x100409 Offset: 0x100410 Entries:411 - Tag: DT_RELA412 Value: 0x200413 - Tag: DT_SYMTAB414 Value: 0x300415 - Tag: DT_RELASZ416 Value: 0x48417 - Tag: DT_RELAENT418 Value: 0x18419 - Tag: DT_NULL420 Value: 0x0421 - Name: .rela.dyn422 Type: SHT_RELA423 Flags: [ SHF_ALLOC ]424 Address: 0x200425 Offset: 0x200426 Relocations:427## This symbol is located right before the EOF, so we can dump it.428 - Symbol: 0x1429 Type: R_X86_64_NONE430## The next symbol, which goes past the EOF.431 - Symbol: 0x2432 Type: R_X86_64_NONE433## One more symbol that goes past the EOF434## with the maximal possible index.435 - Symbol: 0xFFFFFFFF436 Type: R_X86_64_NONE437## Place all implicit sections here to make the .dynsym section to be the438## last in the file. This makes the task of validating offsets a bit easier.439 - Name: .dynstr440 Type: SHT_STRTAB441 - Name: .strtab442 Type: SHT_STRTAB443 - Name: .shstrtab444 Type: SHT_STRTAB445 - Name: .dynsym446 Type: SHT_DYNSYM447 Flags: [ SHF_ALLOC ]448 Address: 0x300449 Offset: 0x300450 - Type: SectionHeaderTable451 NoHeaders: true452DynamicSymbols:453 - Name: foo454ProgramHeaders:455 - Type: PT_LOAD456 Offset: 0x0457 FirstSec: .dynamic458 LastSec: .dynsym459 - Type: PT_DYNAMIC460 FirstSec: .dynamic461 LastSec: .dynamic462 463## Show we print a warning for an invalid relocation table size stored in a DT_AARCH64_AUTH_RELRSZ entry.464# RUN: yaml2obj --docnum=8 -DRELTYPE=RELR -DTAG1=DT_AARCH64_AUTH_RELRSZ -DTAG1VAL=0xFF -DTAG2=DT_AARCH64_AUTH_RELRENT %s -o %t14465# RUN: llvm-readobj --dyn-relocations %t14 2>&1 | FileCheck %s -DFILE=%t14 --check-prefix=INVALID-DT-AARCH64-AUTH-RELRSZ466# RUN: llvm-readelf --dyn-relocations %t14 2>&1 | FileCheck %s -DFILE=%t14 --check-prefix=INVALID-DT-AARCH64-AUTH-RELRSZ467 468# INVALID-DT-AARCH64-AUTH-RELRSZ: warning: '[[FILE]]': invalid DT_AARCH64_AUTH_RELRSZ value (0xff) or DT_AARCH64_AUTH_RELRENT value (0x18)469 470## Show we print a warning for an invalid relocation table entry size stored in a DT_AARCH64_AUTH_RELRENT entry.471# RUN: yaml2obj --docnum=8 -DRELTYPE=RELR -DTAG1=DT_AARCH64_AUTH_RELRSZ -DTAG2=DT_AARCH64_AUTH_RELRENT -DTAG2VAL=0xFF %s -o %t15472# RUN: llvm-readobj --dyn-relocations %t15 2>&1 | FileCheck %s -DFILE=%t15 --check-prefix=INVALID-DT-AARCH64-AUTH-RELRENT473# RUN: llvm-readelf --dyn-relocations %t15 2>&1 | FileCheck %s -DFILE=%t15 --check-prefix=INVALID-DT-AARCH64-AUTH-RELRENT474 475# INVALID-DT-AARCH64-AUTH-RELRENT: invalid DT_AARCH64_AUTH_RELRSZ value (0x18) or DT_AARCH64_AUTH_RELRENT value (0xff)476 477--- !ELF478FileHeader:479 Class: ELFCLASS64480 Data: ELFDATA2LSB481 Type: ET_DYN482 Machine: EM_AARCH64483Sections:484 - Name: .relx.dyn485 Type: SHT_[[RELTYPE]]486 - Name: .dynamic487 Type: SHT_DYNAMIC488 Entries:489 - Tag: DT_[[RELTYPE]]490 Value: 0x0491 - Tag: [[TAG1]]492 Value: [[TAG1VAL=0x18]]493 - Tag: [[TAG2]]494 Value: [[TAG2VAL=0x18]]495 - Tag: DT_NULL496 Value: 0x0497DynamicSymbols: []498ProgramHeaders:499 - Type: PT_LOAD500 FirstSec: .relx.dyn501 LastSec: .dynamic502