264 lines · yaml
1## Check how yaml2obj produces SHT_LLVM_ADDRSIG sections.2 3## Check we can describe SHT_LLVM_ADDRSIG using the "Symbols" tag. We can define4## symbols either using names or indexes.5 6# RUN: yaml2obj --docnum=1 %s -o %t17# RUN: llvm-readobj --sections --section-data %t1 | FileCheck %s --check-prefix=SYMBOLS8 9# SYMBOLS: Section {10# SYMBOLS: Index: 111# SYMBOLS-NEXT: Name: .llvm_addrsig12# SYMBOLS-NEXT: Type: SHT_LLVM_ADDRSIG13# SYMBOLS-NEXT: Flags [14# SYMBOLS-NEXT: ]15# SYMBOLS-NEXT: Address: 0x016# SYMBOLS-NEXT: Offset: 0x4017# SYMBOLS-NEXT: Size: 418# SYMBOLS-NEXT: Link: 219# SYMBOLS-NEXT: Info: 020# SYMBOLS-NEXT: AddressAlignment: 021# SYMBOLS-NEXT: EntrySize: 022# SYMBOLS-NEXT: SectionData (23# SYMBOLS-NEXT: 0000: 0102010224# SYMBOLS-NEXT: )25# SYMBOLS-NEXT: }26 27--- !ELF28FileHeader:29 Class: ELFCLASS6430 Data: ELFDATA2LSB31 Type: ET_DYN32Sections:33 - Name: .llvm_addrsig34 Type: SHT_LLVM_ADDRSIG35 Symbols: [ foo, bar, 1, 2 ]36Symbols:37 - Name: foo38 Type: STT_FUNC39 Binding: STB_GLOBAL40 - Name: bar41 Type: STT_FUNC42 Binding: STB_GLOBAL43 44## Check we report an error if an unknown symbol is referenced in the45## SHT_LLVM_ADDRSIG section description.46 47# RUN: not yaml2obj --docnum=2 %s 2>&1 | FileCheck %s --check-prefix=SYMBOL-UNKNOWN48 49# SYMBOL-UNKNOWN: error: unknown symbol referenced: 'foo' by YAML section '.llvm_addrsig'50# SYMBOL-UNKNOWN: error: unknown symbol referenced: 'bar' by YAML section '.llvm_addrsig'51 52--- !ELF53FileHeader:54 Class: ELFCLASS6455 Data: ELFDATA2LSB56 Type: ET_DYN57Sections:58 - Name: .llvm_addrsig59 Type: SHT_LLVM_ADDRSIG60 Symbols: [ foo, bar ]61 62## Check we can specify any arbitrary symbol indices.63 64# RUN: yaml2obj --docnum=3 %s -o %t365# RUN: llvm-readobj --sections --section-data %t3 | FileCheck %s --check-prefix=SYMBOL-INDEX66 67# SYMBOL-INDEX: Type: SHT_LLVM_ADDRSIG68# SYMBOL-INDEX: SectionData (69# SYMBOL-INDEX-NEXT: 0000: 00FF01C4 E6888901 FFFFFFFF 0F70# SYMBOL-INDEX-NEXT: )71 72--- !ELF73FileHeader:74 Class: ELFCLASS6475 Data: ELFDATA2LSB76 Type: ET_DYN77Sections:78 - Name: .llvm_addrsig79 Type: SHT_LLVM_ADDRSIG80## 0xFFFFFFFF is a maximum allowed index value.81 Symbols: [ 0, 255, 0x11223344, 0xFFFFFFFF ]82 83## Check that the maximum symbol index size is 32 bits.84 85# RUN: not yaml2obj --docnum=4 %s 2>&1 | FileCheck %s --check-prefix=SYMBOL-INDEX-OVERFLOW86 87# SYMBOL-INDEX-OVERFLOW: error: unknown symbol referenced: '0x1122334455' by YAML section '.llvm_addrsig'88 89--- !ELF90FileHeader:91 Class: ELFCLASS6492 Data: ELFDATA2LSB93 Type: ET_DYN94Sections:95 - Name: .llvm_addrsig96 Type: SHT_LLVM_ADDRSIG97 Symbols: [ 0x1122334455 ]98 99## Check we can use the "Content" tag to specify any data for SHT_LLVM_ADDRSIG sections.100 101# RUN: yaml2obj --docnum=5 %s -o %t5102# RUN: llvm-readobj --sections --section-data %t5 | FileCheck %s --check-prefix=CONTENT103 104# CONTENT: Type: SHT_LLVM_ADDRSIG105# CONTENT: Size:106# CONTENT-SAME: 5107# CONTENT: SectionData (108# CONTENT-NEXT: 0000: 11223344 55109# CONTENT-NEXT: )110 111--- !ELF112FileHeader:113 Class: ELFCLASS64114 Data: ELFDATA2LSB115 Type: ET_DYN116Sections:117 - Name: .llvm_addrsig118 Type: SHT_LLVM_ADDRSIG119 Content: "1122334455"120 121## Check we emit an empty section if neither "Content", "Size" nor "Symbols" were set.122 123# RUN: yaml2obj --docnum=6 %s -o %t6124# RUN: llvm-readelf --sections %t6 | FileCheck %s --check-prefix=NO-TAGS125 126# NO-TAGS: [Nr] Name Type Address Off Size127# NO-TAGS: [ 1] .llvm_addrsig LLVM_ADDRSIG 0000000000000000 000040 000000128 129--- !ELF130FileHeader:131 Class: ELFCLASS64132 Data: ELFDATA2LSB133 Type: ET_DYN134Sections:135 - Name: .llvm_addrsig136 Type: SHT_LLVM_ADDRSIG137 138## "Content" and "Symbols" cannot be used together to describe the SHT_LLVM_ADDRSIG section.139 140# RUN: not yaml2obj --docnum=7 %s 2>&1 | FileCheck %s --check-prefix=CONTENT-SYMBOLS141 142# CONTENT-SYMBOLS: "Symbols" cannot be used with "Content" or "Size"143 144--- !ELF145FileHeader:146 Class: ELFCLASS64147 Data: ELFDATA2LSB148 Type: ET_DYN149Sections:150 - Name: .llvm_addrsig151 Type: SHT_LLVM_ADDRSIG152 Content: ""153 Symbols:154 155## Check we can set an arbitrary sh_link value for SHT_LLVM_ADDRSIG sections.156 157# RUN: yaml2obj --docnum=8 %s -o %t8158# RUN: llvm-readobj --sections %t8 | FileCheck %s --check-prefix=LINK159 160# LINK: Name: .llvm_addrsig161# LINK: Link:162# LINK-SAME: 123{{$}}163 164--- !ELF165FileHeader:166 Class: ELFCLASS64167 Data: ELFDATA2LSB168 Type: ET_DYN169Sections:170 - Name: .llvm_addrsig171 Type: SHT_LLVM_ADDRSIG172 Link: 123173 Content: ""174 175## Check we can use only "Size" to create a SHT_LLVM_ADDRSIG section.176 177# RUN: yaml2obj --docnum=9 %s -o %t9178# RUN: llvm-readobj --sections --section-data %t9 | FileCheck %s --check-prefix=SIZE179 180# SIZE: Name: .llvm_addrsig181# SIZE: Size:182# SIZE-SAME: 17183# SIZE: SectionData (184# SIZE-NEXT: 0000: 00000000 00000000 00000000 00000000 |185# SIZE-NEXT: 0010: 00 |186# SIZE-NEXT: )187 188--- !ELF189FileHeader:190 Class: ELFCLASS64191 Data: ELFDATA2LSB192 Type: ET_EXEC193Sections:194 - Name: .llvm_addrsig195 Type: SHT_LLVM_ADDRSIG196 Size: 0x11197 198## Check we can use "Size" and "Content" together to create a SHT_LLVM_ADDRSIG section.199 200# RUN: yaml2obj --docnum=10 %s -o %t10201# RUN: llvm-readobj --sections --section-data %t10 | FileCheck %s --check-prefix=SIZE-CONTENT202 203# SIZE-CONTENT: Name: .llvm_addrsig_sizegr204# SIZE-CONTENT: Size:205# SIZE-CONTENT-SAME: 5206# SIZE-CONTENT: SectionData (207# SIZE-CONTENT-NEXT: 0000: 11223300 00 |208# SIZE-CONTENT-NEXT: )209 210# SIZE-CONTENT: Name: .llvm_addrsig_sizeeq211# SIZE-CONTENT: Size:212# SIZE-CONTENT-SAME: 3213# SIZE-CONTENT: SectionData (214# SIZE-CONTENT-NEXT: 0000: 112233 |215# SIZE-CONTENT-NEXT: )216 217--- !ELF218FileHeader:219 Class: ELFCLASS64220 Data: ELFDATA2LSB221 Type: ET_EXEC222Sections:223 - Name: .llvm_addrsig_sizegr224 Type: SHT_LLVM_ADDRSIG225 Size: 0x5226 Content: "112233"227 - Name: .llvm_addrsig_sizeeq228 Type: SHT_LLVM_ADDRSIG229 Size: 0x3230 Content: "112233"231 232## Check that when "Size" and "Content" are used together, the size233## must be greater than or equal to the content size.234 235# RUN: not yaml2obj --docnum=11 %s 2>&1 | FileCheck %s --check-prefix=SIZE-CONTENT-ERR236 237# SIZE-CONTENT-ERR: error: Section size must be greater than or equal to the content size238 239--- !ELF240FileHeader:241 Class: ELFCLASS64242 Data: ELFDATA2LSB243 Type: ET_EXEC244Sections:245 - Name: .llvm_addrsig246 Type: SHT_LLVM_ADDRSIG247 Size: 0x1248 Content: "1122"249 250## Check we can't use "Size" and "Symbols" tags together.251 252# RUN: not yaml2obj --docnum=12 %s 2>&1 | FileCheck %s --check-prefix=CONTENT-SYMBOLS253 254--- !ELF255FileHeader:256 Class: ELFCLASS64257 Data: ELFDATA2LSB258 Type: ET_EXEC259Sections:260 - Name: .llvm_addrsig261 Type: SHT_LLVM_ADDRSIG262 Size: 0x1263 Symbols: [ ]264