| ## Check for basic functionality using an input file with |
| ## various section types, adresses, data, and no segments. |
| # RUN: yaml2obj %s --docnum=1 -o %t |
| # RUN: llvm-objcopy -O srec %t - | \ |
| # RUN: FileCheck --match-full-lines --strict-whitespace %s --check-prefix=SREC |
| |
| ## The record type for the header should be S0 with a 2 byte address |
| ## of 0. For an output file named "-" the header data field should contain "2D". |
| ## The byte count field should therefore have a value of 4: 2 bytes for address, |
| ## 1 byte for output file and 1 byte for checksum. |
| # SREC:S00400002DCE |
| # SREC-NEXT:S31500001000000102030405060708090A0B0C0D0E0F62 |
| # SREC-NEXT:S30A0000101010111213147B |
| # SREC-NEXT:S30F00EFFFFF1111111111111111111159 |
| # SREC-NEXT:S31000FFFFF83031323334353637383940AC |
| # SREC-NEXT:S30A8000100000010203045B |
| # SREC-NEXT:S70500000000FA |
| |
| ## Terminator should contain the entry point. |
| # RUN: llvm-objcopy -O srec --set-start=0xF0000000 %t --only-section=.dummy - 2>&1 | \ |
| # RUN: FileCheck --match-full-lines --strict-whitespace %s --check-prefix=ENTRY |
| ## Sign-extended entry point is OK. |
| # RUN: llvm-objcopy -O srec --set-start=0xFFFFFFFFF0000000 %t --only-section=.dummy - 2>&1 | \ |
| # RUN: FileCheck --match-full-lines --strict-whitespace %s --check-prefix=ENTRY |
| |
| # ENTRY:S00400002DCE |
| # ENTRY-NEXT:S705F00000000A |
| |
| ## Start address which exceeds 32 bit range triggers an error. |
| # RUN: not llvm-objcopy -O srec --set-start=0xF00000000 %t - 2>&1 | \ |
| # RUN: FileCheck %s --check-prefix=BAD_START |
| |
| # BAD_START: entry point address 0xf00000000 overflows 32 bits |
| |
| ## Sign-extended start address which exceeds 32 bit range triggers an error. |
| # RUN: not llvm-objcopy -O srec --set-start=0xFFFFFFFF0F000000 %t - 2>&1 | \ |
| # RUN: FileCheck %s --check-prefix=BAD_EXTENDED_START |
| |
| # BAD_EXTENDED_START: entry point address 0xffffffff0f000000 overflows 32 bits |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_EXEC |
| Machine: EM_X86_64 |
| Sections: |
| - Name: .data1 |
| ## Records for this section should come last. |
| Type: SHT_PROGBITS |
| Flags: [ SHF_ALLOC ] |
| Content: "11111111111111111111" |
| Address: 0xEFFFFF |
| - Name: .data2 |
| ## This section overlaps 24-bit address boundary, so we expect |
| ## its record type to be S3. |
| Type: SHT_PROGBITS |
| Flags: [ SHF_ALLOC ] |
| Content: "3031323334353637383940" |
| Address: 0xFFFFF8 |
| ## Sign-extended addresses are OK. |
| - Name: .data3 |
| Type: SHT_PROGBITS |
| Flags: [ SHF_ALLOC ] |
| Address: 0xFFFFFFFF80001000 |
| Content: "0001020304" |
| - Name: .text |
| ## This section's contents exceed default line length of 16 bytes |
| ## so we expect two lines created for it. Records for this section |
| ## should appear before records for the previous section. |
| Type: SHT_PROGBITS |
| Flags: [ SHF_ALLOC ] |
| Address: 0x1000 |
| Content: "000102030405060708090A0B0C0D0E0F1011121314" |
| - Name: .bss |
| ## NOBITS sections are not written. |
| Type: SHT_NOBITS |
| Flags: [ SHF_ALLOC ] |
| Address: 0x10100 |
| Size: 0x1000 |
| - Name: .dummy |
| ## Non-allocatable sections are not written. |
| Type: SHT_PROGBITS |
| Flags: [ ] |
| Address: 0x20FFF8 |
| Size: 65536 |
| |
| ## Check for various error cases. |
| |
| ## Check that section address range overlapping 32 bit range |
| ## triggers an error. |
| # RUN: yaml2obj %s --docnum=2 -o %t.err |
| # RUN: not llvm-objcopy -O srec --only-section=.text1 %t.err - 2>&1 | \ |
| # RUN: FileCheck %s --check-prefix=BAD-ADDR |
| # RUN: not llvm-objcopy -O srec --only-section=.text2 %t.err - 2>&1 | \ |
| # RUN: FileCheck %s --check-prefix=BAD-ADDR2 |
| |
| # BAD-ADDR: section '.text1' address range [0xfffffff8, 0x100000000] is not 32 bit |
| # BAD-ADDR2: section '.text2' address range [0xffffffff0, 0xffffffff4] is not 32 bit |
| |
| ## Check that zero length section is not written. |
| # RUN: llvm-objcopy -O srec --only-section=.text %t.err - | \ |
| # RUN: FileCheck --match-full-lines --strict-whitespace --implicit-check-not={{.}} %s --check-prefix=ZERO_SIZE_SEC |
| |
| ## There should be no records besides header and terminator. |
| # ZERO_SIZE_SEC:S00400002DCE |
| # ZERO_SIZE_SEC-NEXT:S9030000FC |
| |
| --- !ELF |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_EXEC |
| Machine: EM_X86_64 |
| Sections: |
| - Name: .text1 |
| ## Part of section data is in 32-bit address range and part isn't. |
| Type: SHT_PROGBITS |
| Flags: [ SHF_ALLOC] |
| Address: 0xFFFFFFF8 |
| Content: "000102030405060708" |
| - Name: .text2 |
| ## Entire secion is outside of 32-bit range. |
| Type: SHT_PROGBITS |
| Flags: [ SHF_ALLOC ] |
| Address: 0xFFFFFFFF0 |
| Content: "0001020304" |
| |
| ## This tests an input file with segments and expects |
| ## physical addresses instead of virtual addresses. |
| # RUN: yaml2obj %s --docnum=3 -o %t.seg |
| # RUN: llvm-objcopy -O srec %t.seg - | \ |
| # RUN: FileCheck --match-full-lines --strict-whitespace %s --check-prefix=PADDR |
| |
| # PADDR:S00400002DCE |
| # PADDR-NEXT:S214100000000102030405060708090A0B0C0D0E0F63 |
| # PADDR-NEXT:S20910001010111213147C |
| # PADDR-NEXT:S20F10001530313233343536373839407E |
| # PADDR-NEXT:S20810002040414243C1 |
| # PADDR-NEXT:S20F10002450515253545556575859600F |
| # PADDR-NEXT:S20720FFF8000000E1 |
| # PADDR-NEXT:S804100000EB |
| |
| --- !ELF |
| ## This file has a non-contiguous section layout with large gaps. |
| ## These sections are all tightly packed into one PT_LOAD segment |
| ## starting at physical address 0x100000. Records should use physical addresses. |
| FileHeader: |
| Class: ELFCLASS64 |
| Data: ELFDATA2LSB |
| Type: ET_EXEC |
| Machine: EM_X86_64 |
| Entry: 0x100000 |
| Sections: |
| - Name: .text |
| Type: SHT_PROGBITS |
| Flags: [ SHF_ALLOC ] |
| Address: 0x0 |
| Content: "000102030405060708090A0B0C0D0E0F1011121314" |
| - Name: .data1 |
| Type: SHT_PROGBITS |
| Flags: [ SHF_ALLOC ] |
| Content: "3031323334353637383940" |
| Address: 0xFFF8 |
| - Name: .data2 |
| Type: SHT_PROGBITS |
| Flags: [ SHF_ALLOC ] |
| Content: "40414243" |
| Address: 0x10100 |
| - Name: .data3 |
| Type: SHT_PROGBITS |
| Flags: [ SHF_ALLOC ] |
| Content: "5051525354555657585960" |
| Address: 0x10FFF8 |
| - Name: .bss |
| Type: SHT_NOBITS |
| Flags: [ SHF_ALLOC ] |
| Address: 0x10100 |
| Size: 0x1000 |
| - Name: .dummy |
| Type: SHT_PROGBITS |
| Flags: [ SHF_ALLOC ] |
| Address: 0x20FFF8 |
| Size: 3 |
| - Name: .nonalloc |
| Type: SHT_PROGBITS |
| Flags: [ ] |
| Address: 0x300000 |
| Size: 1 |
| ProgramHeaders: |
| - Type: PT_LOAD |
| Flags: [ PF_X, PF_R ] |
| VAddr: 0xF00000000 |
| PAddr: 0x100000 |
| FirstSec: .text |
| LastSec: .bss |