brintos

brintos / llvm-project-archived public Read only

0
0
Text · 21.5 KiB · 9f18248 Raw
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