brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.6 KiB · f37529d Raw
210 lines · yaml
1## Check how we produce implicit SHT_STRTAB sections.2 3## For implicit string table sections, the `Flags` field can also4## be specified in YAML. Here we test the behavior in different cases.5 6## When flags are not explicitly specified, yaml2obj assigns no flags7## for .strtab/.shstrtab and the SHF_ALLOC flag for .dynstr by default.8 9# RUN: yaml2obj --docnum=1 %s -o %t110# RUN: llvm-readelf %t1 --sections | FileCheck %s --check-prefix=CASE111 12#      CASE1: [Nr] Name      Type   {{.*}} Flg Lk13#      CASE1: [ 1] .strtab   STRTAB {{.*}}     014# CASE1-NEXT: [ 2] .shstrtab STRTAB {{.*}}     015# CASE1-NEXT: [ 3] .dynstr   STRTAB {{.*}}   A 016 17--- !ELF18FileHeader:19  Class: ELFCLASS6420  Data:  ELFDATA2LSB21  Type:  ET_DYN22Sections:23  - Name: .strtab24    Type: SHT_STRTAB25    Flags: [[STRTABFLAGS=<none>]]26    Offset: [[STRTABOFFSET=<none>]]27  - Name: .shstrtab28    Type: SHT_STRTAB29    Flags: [[SHSTRTABFLAGS=<none>]]30    Offset: [[SHSTRTABOFFSET=<none>]]31  - Name: .dynstr32    Type: SHT_STRTAB33    Flags: [[DYNSTRFLAGS=<none>]]34    Offset: [[DYNSTROFFSET=<none>]]35 36## Check we can set arbitrary flags and offsets for37## implicit string table sections.38 39# RUN: yaml2obj --docnum=1 \40# RUN:   -DSTRTABFLAGS="[ SHF_ALLOC, SHF_STRINGS ]" -DSTRTABOFFSET=0x100 \41# RUN:     -DSHSTRTABFLAGS="[ SHF_ALLOC, SHF_WRITE ]" -DSHSTRTABOFFSET=0x200 \42# RUN:       -DDYNSTRFLAGS="[ SHF_STRINGS ]" -DDYNSTROFFSET=0x300 %s -o %t243# RUN: llvm-readelf %t2 --sections | FileCheck %s --check-prefix=CASE244 45#      CASE2: [Nr] Name      Type   Address          Off    {{.*}} Flg Lk46#      CASE2: [ 1] .strtab   STRTAB 0000000000000000 000100 {{.*}}  AS 047# CASE2-NEXT: [ 2] .shstrtab STRTAB 0000000000000001 000200 {{.*}}  WA 048# CASE2-NEXT: [ 3] .dynstr   STRTAB 0000000000000000 000300 {{.*}}   S 049 50## Check no flags are set by default for implicit string table sections51## when they are not described in the YAML.52 53# RUN: yaml2obj --docnum=2 %s -o %t354# RUN: llvm-readelf %t3 --sections | FileCheck %s --check-prefix=CASE355 56#      CASE3:   [Nr] Name      Type   {{.*}} ES Flg Lk57#      CASE3:   [ 1] .strtab   STRTAB {{.*}} 00      058# CASE3-NEXT:   [ 2] .shstrtab STRTAB {{.*}} 00      059 60--- !ELF61FileHeader:62  Class: ELFCLASS6463  Data:  ELFDATA2LSB64  Type:  ET_DYN65 66## For implicit string table sections, `Size` and/or `Content` fields can also67## be specified in YAML. Here we test the behavior in different cases.68 69## When no `Size` or `Content` is specified for a string table section,70## yaml2obj writes the default content.71 72# RUN: yaml2obj --docnum=3 %s -o %t473# RUN: llvm-objdump %t4 -s | FileCheck %s --check-prefix=CASE474 75# CASE4:      Contents of section .strtab:76# CASE4-NEXT:  0000 00666f6f 00                          .foo.77# CASE4-NEXT: Contents of section .shstrtab:78# CASE4-NEXT:  0000 002e6479 6e737472 002e6479 6e73796d  ..dynstr..dynsym79# CASE4-NEXT:  0010 002e7368 73747274 6162002e 73747274  ..shstrtab..strt80# CASE4-NEXT:  0020 6162002e 73796d74 616200             ab..symtab.81# CASE4-NEXT: Contents of section .dynstr:82# CASE4-NEXT:  0030 00626172 00                          .bar.83 84--- !ELF85FileHeader:86  Class: ELFCLASS6487  Data:  ELFDATA2LSB88  Type:  ET_DYN89Sections:90  - Name:    .strtab91    Type:    SHT_STRTAB92    Size:    [[STRTABSIZE=<none>]]93    Content: [[STRTABCONTENT=<none>]]94  - Name:    .shstrtab95    Type:    SHT_STRTAB96    Size:    [[SHSTRTABSIZE=<none>]]97    Content: [[SHSTRTABCONTENT=<none>]]98  - Name:    .dynstr99    Type:    SHT_STRTAB100    Size:    [[DYNSTRSIZE=<none>]]101    Content: [[DYNSTRCONTENT=<none>]]102## Used to trigger adding string `foo` to the string table section.103Symbols:104  - Name: foo105DynamicSymbols:106  - Name: bar107 108## For string table sections, `Size` can be used to override the109## implicit string table data. The content is filled with zeroes in this case.110 111# RUN: yaml2obj --docnum=3 -DSTRTABSIZE=2 -DSHSTRTABSIZE=0x30 -DDYNSTRSIZE=4 %s -o %t5112# RUN: llvm-readobj --section-data -S %t5 | FileCheck %s --check-prefix=CASE5113 114#      CASE5: Index: 1115# CASE5-NEXT: Name: (27)116# CASE5-NEXT: Type: SHT_STRTAB117#      CASE5: SectionData (118# CASE5-NEXT:   0000: 0000 |119# CASE5-NEXT: )120#      CASE5: Index: 2121# CASE5-NEXT: Name: (17)122# CASE5-NEXT: Type: SHT_STRTAB (0x3)123#      CASE5: SectionData (124# CASE5-NEXT:   0000: 00000000 00000000 00000000 00000000  |125# CASE5-NEXT:   0010: 00000000 00000000 00000000 00000000  |126# CASE5-NEXT:   0020: 00000000 00000000 00000000 00000000  |127# CASE5-NEXT: )128#      CASE5: Index: 3129# CASE5-NEXT: Name: (1)130# CASE5-NEXT: Type: SHT_STRTAB (0x3)131#      CASE5: SectionData (132# CASE5-NEXT:   0000: 00000000 |133# CASE5-NEXT: )134 135## For string table sections, `Content` can be used to override the136## implicit string table data.137 138# RUN: yaml2obj --docnum=3 %s \139# RUN:   -DSTRTABCONTENT="01020304" \140# RUN:     -DSHSTRTABCONTENT="6162636465666767696a6b6c6d6e6f707172737475767778797a61626364656667676900" \141# RUN:       -DDYNSTRCONTENT="eeddaabb" -o %t6142# RUN: llvm-readobj --section-data -S %t6 | FileCheck %s --check-prefix=CASE6143 144# CASE6:      Index: 1145# CASE6-NEXT: Name: bcdefggi (27)146#      CASE6: SectionData (147# CASE6-NEXT:   0000: 01020304 |148# CASE6-NEXT: )149# CASE6:      Index: 2150# CASE6-NEXT: Name: rstuvwxyzabcdefggi (17)151#      CASE6: SectionData (152# CASE6-NEXT:   0000: 61626364 65666767 696A6B6C 6D6E6F70  |153# CASE6-NEXT:   0010: 71727374 75767778 797A6162 63646566  |154# CASE6-NEXT:   0020: 67676900 |155# CASE6-NEXT: )156# CASE6:      Index: 3157# CASE6-NEXT: Name: bcdefggijklmnopqrstuvwxyzabcdefggi (1)158#      CASE6: SectionData (159# CASE6-NEXT:   0000: EEDDAABB |160# CASE6-NEXT: )161 162## For string table sections, check we can specify both `Size` and `Content`163## when size is greater than content size. In this case zeroes are164## added as padding after the specified content.165 166# RUN: yaml2obj --docnum=3 %s \167# RUN:   -DSTRTABCONTENT="01020304" -DSTRTABSIZE=5 \168# RUN:     -DSHSTRTABCONTENT="6162636465666767696a6b6c6d6e6f707172737475767778797a61626364656667676900" -DSHSTRTABSIZE=0x26 \169# RUN:       -DDYNSTRCONTENT="eeddaabb" -DDYNSTRSIZE=7 -o %t7170# RUN: llvm-readobj --section-data -S %t7 | FileCheck %s --check-prefix=CASE7171 172# CASE7:      Index: 1173# CASE7-NEXT: Name: bcdefggi (27)174#      CASE7: SectionData (175# CASE7-NEXT:   0000: 01020304 00 |176# CASE7-NEXT: )177# CASE7:      Index: 2178# CASE7-NEXT: Name: rstuvwxyzabcdefggi (17)179#      CASE7: SectionData (180# CASE7-NEXT:   0000: 61626364 65666767 696A6B6C 6D6E6F70  |181# CASE7-NEXT:   0010: 71727374 75767778 797A6162 63646566  |182# CASE7-NEXT:   0020: 67676900 0000                        |183# CASE7-NEXT: )184# CASE7:      Index: 3185# CASE7-NEXT: Name: bcdefggijklmnopqrstuvwxyzabcdefggi (1)186#      CASE7: SectionData (187# CASE7-NEXT:   0000: EEDDAABB 000000 |188# CASE7-NEXT: )189 190## For string table sections, check we can specify both `Size` and `Content`191## when size is equal to content size.192 193# RUN: yaml2obj --docnum=3 %s \194# RUN:   -DSTRTABCONTENT="01020304" -DSTRTABSIZE=4 \195# RUN:     -DSHSTRTABCONTENT="6162636465666767696a6b6c6d6e6f707172737475767778797a61626364656667676900" -DSHSTRTABSIZE=0x24 \196# RUN:       -DDYNSTRCONTENT="eeddaabb" -DDYNSTRSIZE=4 -o %t8197# RUN: llvm-readobj --section-data -S %t8 | FileCheck %s --check-prefix=CASE6198 199## Check that we report an error when the the value of "Size" is less than the content size.200 201# RUN: not yaml2obj --docnum=3 %s -DSTRTABCONTENT="01020304" -DSTRTABSIZE=3 2>&1 \202# RUN:   | FileCheck %s --check-prefix=CASE8203# RUN: not yaml2obj --docnum=3 %s \204# RUN:   -DSHSTRTABCONTENT="6162636465666767696a6b6c6d6e6f707172737475767778797a61626364656667676900" -DSHSTRTABSIZE=0x23 2>&1 \205# RUN:   | FileCheck %s --check-prefix=CASE8206# RUN: not yaml2obj --docnum=3 %s -DDYNSTRCONTENT="eeddaabb" -DDYNSTRSIZE=0x3 2>&1 \207# RUN:   | FileCheck %s --check-prefix=CASE8208 209# CASE8: Section size must be greater than or equal to the content size210