1## Test that yaml2obj emits a .debug_str_offsets section when requested. 2 3## a) Generate and verify a little endian .debug_str_offsets section. 4 5# RUN: yaml2obj -DENDIAN=ELFDATA2LSB --docnum=1 %s -o %t1.le.o 6# RUN: llvm-readobj --sections --section-data %t1.le.o | \ 7# RUN: FileCheck -DSIZE=48 -DADDRALIGN=1 %s --check-prefixes=SHDR,DWARF-LE 8 9# SHDR: Index: 1 10# SHDR-NEXT: Name: .debug_str_offsets (1) 11# SHDR-NEXT: Type: SHT_PROGBITS (0x1) 12# SHDR-NEXT: Flags [ (0x0) 13# SHDR-NEXT: ] 14# SHDR-NEXT: Address: 0x0 15# SHDR-NEXT: Offset: 0x40 16# SHDR-NEXT: Size: [[SIZE]] 17# SHDR-NEXT: Link: 0 18# SHDR-NEXT: Info: 0 19# SHDR-NEXT: AddressAlignment: [[ADDRALIGN]] 20# SHDR-NEXT: EntrySize: 0 21# DWARF-LE-NEXT: SectionData ( 22# DWARF-LE-NEXT: 0000: 0C000000 05000000 78563412 21436587 |........xV4.!Ce.| 23## ^------- unit_length (4-byte) 24## ^--- version (2-byte) 25## ^--- padding (2-byte) 26## ^------- offsets[0] (4-byte) 27## ^------- offsets[1] (4-byte) 28# DWARF-LE-NEXT: 0010: FFFFFFFF 14000000 00000000 05000000 |................| 29## ^------------------------- unit_length (12-byte) 30## ^--- version (2-byte) 31## ^--- padding (2-byte) 32# DWARF-LE-NEXT: 0020: F0DEBC9A 78563412 89674523 01EFCDAB |....xV4..gE#....| 33## ^---------------- offsets[0] (8-byte) 34## ^---------------- offsets[1] (8-byte) 35# DWARF-LE-NEXT: ) 36 37--- !ELF 38FileHeader: 39 Class: ELFCLASS64 40 Data: [[ENDIAN]] 41 Type: ET_EXEC 42DWARF: 43 debug_str_offsets: 44 - Offsets: 45 - 0x12345678 46 - 0x87654321 47 - Format: DWARF64 48 Offsets: 49 - 0x123456789abcdef0 50 - 0xabcdef0123456789 51 52## b) Generate and verify a big endian .debug_str_offsets section. 53 54# RUN: yaml2obj -DENDIAN=ELFDATA2MSB --docnum=1 %s -o %t1.be.o 55# RUN: llvm-readobj --sections --section-data %t1.be.o | \ 56# RUN: FileCheck -DSIZE=48 -DADDRALIGN=1 %s --check-prefixes=SHDR,DWARF-BE 57 58# DWARF-BE-NEXT: SectionData ( 59# DWARF-BE-NEXT: 0000: 0000000C 00050000 12345678 87654321 |.........4Vx.eC!| 60## ^------- unit_length (4-byte) 61## ^--- version (2-byte) 62## ^--- padding (2-byte) 63## ^------- offsets[0] (4-byte) 64## ^------- offsets[1] (4-byte) 65# DWARF-BE-NEXT: 0010: FFFFFFFF 00000000 00000014 00050000 |................| 66## ^------------------------- unit_length (12-byte) 67## ^--- version (2-byte) 68## ^--- padding (2-byte) 69# DWARF-BE-NEXT: 0020: 12345678 9ABCDEF0 ABCDEF01 23456789 |.4Vx........#Eg.| 70## ^---------------- offsets[0] (8-byte) 71## ^---------------- offsets[1] (8-byte) 72# DWARF-BE-NEXT: ) 73 74## c) Test that the length, version and padding fields can be overwritten. 75 76# RUN: yaml2obj --docnum=2 %s -o %t2.o 77# RUN: llvm-readelf --hex-dump=.debug_str_offsets %t2.o | \ 78# RUN: FileCheck %s --check-prefix=OVERWRITE 79 80# OVERWRITE: Hex dump of section '.debug_str_offsets': 81# OVERWRITE-NEXT: 0x00000000 34120000 06001200 4....... 82## ^------- unit_length (4-byte) 83## ^--- version (2-byte) 84## ^--- padding (2-bye) 85 86--- !ELF 87FileHeader: 88 Class: ELFCLASS64 89 Data: ELFDATA2LSB 90 Type: ET_EXEC 91DWARF: 92 debug_str_offsets: 93 - Length: 0x1234 94 Version: 6 95 Padding: 0x12 96 97## d) Test that an empty 'Offsets' field is allowed. 98 99# RUN: yaml2obj --docnum=3 %s -o %t3.o 100# RUN: llvm-readelf --hex-dump=.debug_str_offsets %t3.o | \ 101# RUN: FileCheck %s --check-prefix=EMPTY-OFFSETS 102 103# EMPTY-OFFSETS: Hex dump of section '.debug_str_offsets': 104# EMPTY-OFFSETS-NEXT: 0x00000000 04000000 05000000 ........ 105## ^------- unit_length (4-byte) 106## ^--- version (2-byte) 107## ^--- padding (2-byte) 108 109--- !ELF 110FileHeader: 111 Class: ELFCLASS64 112 Data: ELFDATA2LSB 113 Type: ET_EXEC 114DWARF: 115 debug_str_offsets: 116 - Offsets: [] 117 118## e) Test that the .debug_str_offsets section header is emitted if the "debug_str_offsets" is empty. 119 120# RUN: yaml2obj --docnum=4 %s -o %t4.o 121# RUN: llvm-readobj --sections --section-data %t4.o | \ 122# RUN: FileCheck -DSIZE=0 -DADDRALIGN=1 %s --check-prefixes=SHDR,EMPTY-CONTENT 123 124# EMPTY-CONTENT-NEXT: SectionData ( 125# EMPTY-CONTENT-NEXT: ) 126 127--- !ELF 128FileHeader: 129 Class: ELFCLASS64 130 Data: ELFDATA2LSB 131 Type: ET_EXEC 132DWARF: 133 debug_str_offsets: [] 134 135## f) Generate the .debug_str_offsets section from raw section content. 136 137# RUN: yaml2obj --docnum=5 %s -o %t5.o 138# RUN: llvm-readobj --sections --section-data %t5.o | \ 139# RUN: FileCheck %s -DADDRALIGN=0 -DSIZE=3 --check-prefixes=SHDR,ARBITRARY-CONTENT 140 141# ARBITRARY-CONTENT: SectionData ( 142# ARBITRARY-CONTENT-NEXT: 0000: 112233 143# ARBITRARY-CONTENT-NEXT: ) 144 145--- !ELF 146FileHeader: 147 Class: ELFCLASS64 148 Data: ELFDATA2LSB 149 Type: ET_EXEC 150Sections: 151 - Name: .debug_str_offsets 152 Type: SHT_PROGBITS 153 Content: "112233" 154 155## g) Generate the .debug_str_offsets section when the "Size" is specified. 156 157# RUN: yaml2obj --docnum=6 %s -o %t6.o 158# RUN: llvm-readelf --hex-dump=.debug_str_offsets %t6.o | \ 159# RUN: FileCheck %s --check-prefix=SIZE 160 161# SIZE: Hex dump of section '.debug_str_offsets': 162# SIZE-NEXT: 0x00000000 00000000 00000000 00000000 00000000 ................ 163# SIZE-EMPTY: 164 165--- !ELF 166FileHeader: 167 Class: ELFCLASS64 168 Data: ELFDATA2LSB 169 Type: ET_EXEC 170Sections: 171 - Name: .debug_str_offsets 172 Type: SHT_PROGBITS 173 Size: 0x10 174 175## h) Test that yaml2obj emits an error message when both the "Size" and the 176## "debug_str_offsets" entry are specified at the same time. 177 178# RUN: not yaml2obj --docnum=7 %s 2>&1 | FileCheck %s --check-prefix=ERROR 179 180# ERROR: yaml2obj: error: cannot specify section '.debug_str_offsets' contents in the 'DWARF' entry and the 'Content' or 'Size' in the 'Sections' entry at the same time 181 182--- !ELF 183FileHeader: 184 Class: ELFCLASS64 185 Data: ELFDATA2LSB 186 Type: ET_EXEC 187Sections: 188 - Name: .debug_str_offsets 189 Type: SHT_PROGBITS 190 Size: 0x10 191DWARF: 192 debug_str_offsets: 193 - Offsets: [] 194 195## i) Test that yaml2obj emits an error message when both the "Content" and the 196## "debug_str_offsets" entry are specified at the same time. 197 198# RUN: not yaml2obj --docnum=8 %s 2>&1 | FileCheck %s --check-prefix=ERROR 199 200--- !ELF 201FileHeader: 202 Class: ELFCLASS64 203 Data: ELFDATA2LSB 204 Type: ET_EXEC 205Sections: 206 - Name: .debug_str_offsets 207 Type: SHT_PROGBITS 208 Content: "00" 209DWARF: 210 debug_str_offsets: 211 - Offsets: [] 212 213## j) Test that all the properties can be overridden by the section header when 214## the "debug_str_offsets" entry doesn't exist. 215 216# RUN: yaml2obj --docnum=9 %s -o %t9.o 217# RUN: llvm-readelf --sections %t9.o | FileCheck %s --check-prefix=OVERRIDDEN 218 219# OVERRIDDEN: [Nr] Name Type Address Off Size ES Flg Lk Inf Al 220# OVERRIDDEN: [ 1] .debug_str_offsets STRTAB 0000000000002020 000050 000008 01 A 2 1 2 221# OVERRIDDEN-NEXT: [ 2] .sec STRTAB 0000000000000000 000058 000000 00 0 0 0 222 223--- !ELF 224FileHeader: 225 Class: ELFCLASS64 226 Data: ELFDATA2LSB 227 Type: ET_EXEC 228Sections: 229 - Name: .debug_str_offsets 230 Type: SHT_STRTAB ## SHT_PROGBITS by default. 231 Flags: [SHF_ALLOC] ## 0 by default. 232 Link: .sec ## 0 by default. 233 EntSize: 1 ## 0 by default. 234 Info: 1 ## 0 by default. 235 AddressAlign: 2 ## 0 by default. 236 Address: 0x2020 ## 0x00 by default. 237 Offset: 0x50 ## 0x40 for the first section. 238 Size: 0x08 ## Set the "Size" so that we can reuse the check tag "OVERRIDDEN". 239 - Name: .sec ## Linked by .debug_str_offsets. 240 Type: SHT_STRTAB 241 242## k) Test that all the properties can be overridden by the section header when 243## the "debug_str_offsets" entry exists. 244 245# RUN: yaml2obj --docnum=10 %s -o %t10.o 246# RUN: llvm-readelf --sections %t10.o | FileCheck %s --check-prefix=OVERRIDDEN 247 248--- !ELF 249FileHeader: 250 Class: ELFCLASS64 251 Data: ELFDATA2LSB 252 Type: ET_EXEC 253Sections: 254 - Name: .debug_str_offsets 255 Type: SHT_STRTAB ## SHT_PROGBITS by default. 256 Flags: [SHF_ALLOC] ## 0 by default. 257 Link: .sec ## 0 by default. 258 EntSize: 1 ## 0 by default. 259 Info: 1 ## 0 by default. 260 AddressAlign: 2 ## 1 by default. 261 Address: 0x2020 ## 0x00 by default. 262 Offset: 0x50 ## 0x40 for the first section. 263 - Name: .sec ## Linked by .debug_str_offsets. 264 Type: SHT_STRTAB 265DWARF: 266 debug_str_offsets: 267 - Offsets: [] 268