1*7ddc3205Squic-areg## Check for basic functionality using an input file with 2*7ddc3205Squic-areg## various section types, adresses, data, and no segments. 3*7ddc3205Squic-areg# RUN: yaml2obj %s --docnum=1 -o %t 4*7ddc3205Squic-areg# RUN: llvm-objcopy -O srec %t - | \ 5*7ddc3205Squic-areg# RUN: FileCheck --match-full-lines --strict-whitespace %s --check-prefix=SREC 6*7ddc3205Squic-areg 7*7ddc3205Squic-areg## The record type for the header should be S0 with a 2 byte address 8*7ddc3205Squic-areg## of 0. For an output file named "-" the header data field should contain "2D". 9*7ddc3205Squic-areg## The byte count field should therefore have a value of 4: 2 bytes for address, 10*7ddc3205Squic-areg## 1 byte for output file and 1 byte for checksum. 11*7ddc3205Squic-areg # SREC:S00400002DCE 12*7ddc3205Squic-areg# SREC-NEXT:S31500001000000102030405060708090A0B0C0D0E0F62 13*7ddc3205Squic-areg# SREC-NEXT:S30A0000101010111213147B 14*7ddc3205Squic-areg# SREC-NEXT:S30F00EFFFFF1111111111111111111159 15*7ddc3205Squic-areg# SREC-NEXT:S31000FFFFF83031323334353637383940AC 16*7ddc3205Squic-areg# SREC-NEXT:S30A8000100000010203045B 17*7ddc3205Squic-areg# SREC-NEXT:S70500000000FA 18*7ddc3205Squic-areg 19*7ddc3205Squic-areg## Terminator should contain the entry point. 20*7ddc3205Squic-areg# RUN: llvm-objcopy -O srec --set-start=0xF0000000 %t --only-section=.dummy - 2>&1 | \ 21*7ddc3205Squic-areg# RUN: FileCheck --match-full-lines --strict-whitespace %s --check-prefix=ENTRY 22*7ddc3205Squic-areg## Sign-extended entry point is OK. 23*7ddc3205Squic-areg# RUN: llvm-objcopy -O srec --set-start=0xFFFFFFFFF0000000 %t --only-section=.dummy - 2>&1 | \ 24*7ddc3205Squic-areg# RUN: FileCheck --match-full-lines --strict-whitespace %s --check-prefix=ENTRY 25*7ddc3205Squic-areg 26*7ddc3205Squic-areg # ENTRY:S00400002DCE 27*7ddc3205Squic-areg# ENTRY-NEXT:S705F00000000A 28*7ddc3205Squic-areg 29*7ddc3205Squic-areg## Start address which exceeds 32 bit range triggers an error. 30*7ddc3205Squic-areg# RUN: not llvm-objcopy -O srec --set-start=0xF00000000 %t - 2>&1 | \ 31*7ddc3205Squic-areg# RUN: FileCheck %s --check-prefix=BAD_START 32*7ddc3205Squic-areg 33*7ddc3205Squic-areg# BAD_START: entry point address 0xf00000000 overflows 32 bits 34*7ddc3205Squic-areg 35*7ddc3205Squic-areg## Sign-extended start address which exceeds 32 bit range triggers an error. 36*7ddc3205Squic-areg# RUN: not llvm-objcopy -O srec --set-start=0xFFFFFFFF0F000000 %t - 2>&1 | \ 37*7ddc3205Squic-areg# RUN: FileCheck %s --check-prefix=BAD_EXTENDED_START 38*7ddc3205Squic-areg 39*7ddc3205Squic-areg# BAD_EXTENDED_START: entry point address 0xffffffff0f000000 overflows 32 bits 40*7ddc3205Squic-areg 41*7ddc3205Squic-areg--- !ELF 42*7ddc3205Squic-aregFileHeader: 43*7ddc3205Squic-areg Class: ELFCLASS64 44*7ddc3205Squic-areg Data: ELFDATA2LSB 45*7ddc3205Squic-areg Type: ET_EXEC 46*7ddc3205Squic-areg Machine: EM_X86_64 47*7ddc3205Squic-aregSections: 48*7ddc3205Squic-areg - Name: .data1 49*7ddc3205Squic-areg## Records for this section should come last. 50*7ddc3205Squic-areg Type: SHT_PROGBITS 51*7ddc3205Squic-areg Flags: [ SHF_ALLOC ] 52*7ddc3205Squic-areg Content: "11111111111111111111" 53*7ddc3205Squic-areg Address: 0xEFFFFF 54*7ddc3205Squic-areg - Name: .data2 55*7ddc3205Squic-areg## This section overlaps 24-bit address boundary, so we expect 56*7ddc3205Squic-areg## its record type to be S3. 57*7ddc3205Squic-areg Type: SHT_PROGBITS 58*7ddc3205Squic-areg Flags: [ SHF_ALLOC ] 59*7ddc3205Squic-areg Content: "3031323334353637383940" 60*7ddc3205Squic-areg Address: 0xFFFFF8 61*7ddc3205Squic-areg## Sign-extended addresses are OK. 62*7ddc3205Squic-areg - Name: .data3 63*7ddc3205Squic-areg Type: SHT_PROGBITS 64*7ddc3205Squic-areg Flags: [ SHF_ALLOC ] 65*7ddc3205Squic-areg Address: 0xFFFFFFFF80001000 66*7ddc3205Squic-areg Content: "0001020304" 67*7ddc3205Squic-areg - Name: .text 68*7ddc3205Squic-areg## This section's contents exceed default line length of 16 bytes 69*7ddc3205Squic-areg## so we expect two lines created for it. Records for this section 70*7ddc3205Squic-areg## should appear before records for the previous section. 71*7ddc3205Squic-areg Type: SHT_PROGBITS 72*7ddc3205Squic-areg Flags: [ SHF_ALLOC ] 73*7ddc3205Squic-areg Address: 0x1000 74*7ddc3205Squic-areg Content: "000102030405060708090A0B0C0D0E0F1011121314" 75*7ddc3205Squic-areg - Name: .bss 76*7ddc3205Squic-areg## NOBITS sections are not written. 77*7ddc3205Squic-areg Type: SHT_NOBITS 78*7ddc3205Squic-areg Flags: [ SHF_ALLOC ] 79*7ddc3205Squic-areg Address: 0x10100 80*7ddc3205Squic-areg Size: 0x1000 81*7ddc3205Squic-areg - Name: .dummy 82*7ddc3205Squic-areg## Non-allocatable sections are not written. 83*7ddc3205Squic-areg Type: SHT_PROGBITS 84*7ddc3205Squic-areg Flags: [ ] 85*7ddc3205Squic-areg Address: 0x20FFF8 86*7ddc3205Squic-areg Size: 65536 87*7ddc3205Squic-areg 88*7ddc3205Squic-areg## Check for various error cases. 89*7ddc3205Squic-areg 90*7ddc3205Squic-areg## Check that section address range overlapping 32 bit range 91*7ddc3205Squic-areg## triggers an error. 92*7ddc3205Squic-areg# RUN: yaml2obj %s --docnum=2 -o %t.err 93*7ddc3205Squic-areg# RUN: not llvm-objcopy -O srec --only-section=.text1 %t.err - 2>&1 | \ 94*7ddc3205Squic-areg# RUN: FileCheck %s --check-prefix=BAD-ADDR 95*7ddc3205Squic-areg# RUN: not llvm-objcopy -O srec --only-section=.text2 %t.err - 2>&1 | \ 96*7ddc3205Squic-areg# RUN: FileCheck %s --check-prefix=BAD-ADDR2 97*7ddc3205Squic-areg 98*7ddc3205Squic-areg# BAD-ADDR: section '.text1' address range [0xfffffff8, 0x100000000] is not 32 bit 99*7ddc3205Squic-areg# BAD-ADDR2: section '.text2' address range [0xffffffff0, 0xffffffff4] is not 32 bit 100*7ddc3205Squic-areg 101*7ddc3205Squic-areg## Check that zero length section is not written. 102*7ddc3205Squic-areg# RUN: llvm-objcopy -O srec --only-section=.text %t.err - | \ 103*7ddc3205Squic-areg# RUN: FileCheck --match-full-lines --strict-whitespace --implicit-check-not={{.}} %s --check-prefix=ZERO_SIZE_SEC 104*7ddc3205Squic-areg 105*7ddc3205Squic-areg## There should be no records besides header and terminator. 106*7ddc3205Squic-areg# ZERO_SIZE_SEC:S00400002DCE 107*7ddc3205Squic-areg# ZERO_SIZE_SEC-NEXT:S9030000FC 108*7ddc3205Squic-areg 109*7ddc3205Squic-areg--- !ELF 110*7ddc3205Squic-aregFileHeader: 111*7ddc3205Squic-areg Class: ELFCLASS64 112*7ddc3205Squic-areg Data: ELFDATA2LSB 113*7ddc3205Squic-areg Type: ET_EXEC 114*7ddc3205Squic-areg Machine: EM_X86_64 115*7ddc3205Squic-aregSections: 116*7ddc3205Squic-areg - Name: .text1 117*7ddc3205Squic-areg## Part of section data is in 32-bit address range and part isn't. 118*7ddc3205Squic-areg Type: SHT_PROGBITS 119*7ddc3205Squic-areg Flags: [ SHF_ALLOC] 120*7ddc3205Squic-areg Address: 0xFFFFFFF8 121*7ddc3205Squic-areg Content: "000102030405060708" 122*7ddc3205Squic-areg - Name: .text2 123*7ddc3205Squic-areg ## Entire secion is outside of 32-bit range. 124*7ddc3205Squic-areg Type: SHT_PROGBITS 125*7ddc3205Squic-areg Flags: [ SHF_ALLOC ] 126*7ddc3205Squic-areg Address: 0xFFFFFFFF0 127*7ddc3205Squic-areg Content: "0001020304" 128*7ddc3205Squic-areg 129*7ddc3205Squic-areg## This tests an input file with segments and expects 130*7ddc3205Squic-areg## physical addresses instead of virtual addresses. 131*7ddc3205Squic-areg# RUN: yaml2obj %s --docnum=3 -o %t.seg 132*7ddc3205Squic-areg# RUN: llvm-objcopy -O srec %t.seg - | \ 133*7ddc3205Squic-areg# RUN: FileCheck --match-full-lines --strict-whitespace %s --check-prefix=PADDR 134*7ddc3205Squic-areg 135*7ddc3205Squic-areg # PADDR:S00400002DCE 136*7ddc3205Squic-areg# PADDR-NEXT:S214100000000102030405060708090A0B0C0D0E0F63 137*7ddc3205Squic-areg# PADDR-NEXT:S20910001010111213147C 138*7ddc3205Squic-areg# PADDR-NEXT:S20F10001530313233343536373839407E 139*7ddc3205Squic-areg# PADDR-NEXT:S20810002040414243C1 140*7ddc3205Squic-areg# PADDR-NEXT:S20F10002450515253545556575859600F 141*7ddc3205Squic-areg# PADDR-NEXT:S20720FFF8000000E1 142*7ddc3205Squic-areg# PADDR-NEXT:S804100000EB 143*7ddc3205Squic-areg 144*7ddc3205Squic-areg--- !ELF 145*7ddc3205Squic-areg## This file has a non-contiguous section layout with large gaps. 146*7ddc3205Squic-areg## These sections are all tightly packed into one PT_LOAD segment 147*7ddc3205Squic-areg## starting at physical address 0x100000. Records should use physical addresses. 148*7ddc3205Squic-aregFileHeader: 149*7ddc3205Squic-areg Class: ELFCLASS64 150*7ddc3205Squic-areg Data: ELFDATA2LSB 151*7ddc3205Squic-areg Type: ET_EXEC 152*7ddc3205Squic-areg Machine: EM_X86_64 153*7ddc3205Squic-areg Entry: 0x100000 154*7ddc3205Squic-aregSections: 155*7ddc3205Squic-areg - Name: .text 156*7ddc3205Squic-areg Type: SHT_PROGBITS 157*7ddc3205Squic-areg Flags: [ SHF_ALLOC ] 158*7ddc3205Squic-areg Address: 0x0 159*7ddc3205Squic-areg Content: "000102030405060708090A0B0C0D0E0F1011121314" 160*7ddc3205Squic-areg - Name: .data1 161*7ddc3205Squic-areg Type: SHT_PROGBITS 162*7ddc3205Squic-areg Flags: [ SHF_ALLOC ] 163*7ddc3205Squic-areg Content: "3031323334353637383940" 164*7ddc3205Squic-areg Address: 0xFFF8 165*7ddc3205Squic-areg - Name: .data2 166*7ddc3205Squic-areg Type: SHT_PROGBITS 167*7ddc3205Squic-areg Flags: [ SHF_ALLOC ] 168*7ddc3205Squic-areg Content: "40414243" 169*7ddc3205Squic-areg Address: 0x10100 170*7ddc3205Squic-areg - Name: .data3 171*7ddc3205Squic-areg Type: SHT_PROGBITS 172*7ddc3205Squic-areg Flags: [ SHF_ALLOC ] 173*7ddc3205Squic-areg Content: "5051525354555657585960" 174*7ddc3205Squic-areg Address: 0x10FFF8 175*7ddc3205Squic-areg - Name: .bss 176*7ddc3205Squic-areg Type: SHT_NOBITS 177*7ddc3205Squic-areg Flags: [ SHF_ALLOC ] 178*7ddc3205Squic-areg Address: 0x10100 179*7ddc3205Squic-areg Size: 0x1000 180*7ddc3205Squic-areg - Name: .dummy 181*7ddc3205Squic-areg Type: SHT_PROGBITS 182*7ddc3205Squic-areg Flags: [ SHF_ALLOC ] 183*7ddc3205Squic-areg Address: 0x20FFF8 184*7ddc3205Squic-areg Size: 3 185*7ddc3205Squic-areg - Name: .nonalloc 186*7ddc3205Squic-areg Type: SHT_PROGBITS 187*7ddc3205Squic-areg Flags: [ ] 188*7ddc3205Squic-areg Address: 0x300000 189*7ddc3205Squic-areg Size: 1 190*7ddc3205Squic-aregProgramHeaders: 191*7ddc3205Squic-areg - Type: PT_LOAD 192*7ddc3205Squic-areg Flags: [ PF_X, PF_R ] 193*7ddc3205Squic-areg VAddr: 0xF00000000 194*7ddc3205Squic-areg PAddr: 0x100000 195*7ddc3205Squic-areg FirstSec: .text 196*7ddc3205Squic-areg LastSec: .bss 197