# RUN: yaml2obj --docnum=1 %s -o %t # RUN: not llvm-objcopy --gap-fill 1 %t 2>&1 | FileCheck %s --check-prefix=NOT-BINARY # NOT-BINARY: error: '--gap-fill' is only supported for binary output # RUN: not llvm-objcopy -O binary --gap-fill= %t %t.bin 2>&1 | FileCheck %s --check-prefix=BAD-FORMAT # BAD-FORMAT: error: --gap-fill: bad number: # RUN: not llvm-objcopy -O binary --gap-fill=x %t %t.bin 2>&1 | FileCheck %s --check-prefix=BAD-INPUT # BAD-INPUT: error: --gap-fill: bad number: x # RUN: not llvm-objcopy -O binary --gap-fill=0x %t %t.bin 2>&1 | FileCheck %s --check-prefix=BAD-INPUT2 # BAD-INPUT2: error: --gap-fill: bad number: 0x # RUN: not llvm-objcopy -O binary --gap-fill=0x1G %t %t.bin 2>&1 | FileCheck %s --check-prefix=BAD-INPUT3 # BAD-INPUT3: error: --gap-fill: bad number: 0x1G # RUN: not llvm-objcopy -O binary --gap-fill=ff %t %t.bin 2>&1 | FileCheck %s --check-prefix=BAD-INPUT4 # BAD-INPUT4: error: --gap-fill: bad number: ff # RUN: not llvm-objcopy -O binary --gap-fill=0x1122 %t %t-val16 2>&1 | FileCheck %s --check-prefix=TRUNCATED-ERR # TRUNCATED-ERR: error: gap-fill value 0x1122 is out of range (0 to 0xff) ## Test no gap fill with all allocatable output sections. # RUN: llvm-objcopy -O binary %t %t-default # RUN: od -v -Ax -t x1 %t-default | FileCheck %s --check-prefix=DEFAULT --ignore-case --match-full-lines # DEFAULT: {{0*}}00 ee ff 11 22 33 44 aa bb cc dd fe dc ba 00 a1 b2 # DEFAULT-NEXT: {{0*}}10 c3 d4 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # DEFAULT-NEXT: {{0*}}20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # DEFAULT-NEXT: {{0*}}30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # DEFAULT-NEXT: {{0*}}40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # DEFAULT-NEXT: {{0*}}50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # DEFAULT-NEXT: {{0*}}60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # DEFAULT-NEXT: {{0*}}70 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 # DEFAULT-NEXT: {{0*}}80 00 00 89 ab cd ef # DEFAULT-NEXT: {{0*}}86 ## Test gap fill with all allocatable output sections. # RUN: llvm-objcopy -O binary --gap-fill=0xe9 %t %t-filled # RUN: od -v -Ax -t x1 %t-filled | FileCheck %s --check-prefix=FULL --ignore-case --match-full-lines # FULL: {{0*}}00 ee ff 11 22 33 44 aa bb cc dd fe dc ba e9 a1 b2 # FULL-NEXT: {{0*}}10 c3 d4 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 # FULL-NEXT: {{0*}}20 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 # FULL-NEXT: {{0*}}30 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 # FULL-NEXT: {{0*}}40 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 # FULL-NEXT: {{0*}}50 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 # FULL-NEXT: {{0*}}60 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 # FULL-NEXT: {{0*}}70 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 # FULL-NEXT: {{0*}}80 e9 e9 89 ab cd ef # FULL-NEXT: {{0*}}86 ## Test gap fill with a decimal value. # RUN: llvm-objcopy -O binary --gap-fill=99 %t %t-filled-decimal # RUN: od -v -Ax -t x1 %t-filled-decimal | FileCheck %s --check-prefix=DEC --ignore-case --match-full-lines # DEC: {{0*}}00 ee ff 11 22 33 44 aa bb cc dd fe dc ba 63 a1 b2 # DEC-NEXT: {{0*}}10 c3 d4 63 63 63 63 63 63 63 63 63 63 63 63 63 63 # DEC-NEXT: {{0*}}20 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 # DEC-NEXT: {{0*}}30 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 # DEC-NEXT: {{0*}}40 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 # DEC-NEXT: {{0*}}50 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 # DEC-NEXT: {{0*}}60 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 # DEC-NEXT: {{0*}}70 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 63 # DEC-NEXT: {{0*}}80 63 63 89 ab cd ef # DEC-NEXT: {{0*}}86 ## Test gap fill with the last section removed, should be truncated. # RUN: llvm-objcopy -O binary --gap-fill=0xe9 --remove-section=.foo %t %t-filled # RUN: od -v -Ax -t x1 %t-filled | FileCheck %s --check-prefix=REMOVE-LAST-SECTION --ignore-case --match-full-lines # REMOVE-LAST-SECTION: {{0*}}00 ee ff 11 22 33 44 aa bb cc dd fe dc ba e9 a1 b2 # REMOVE-LAST-SECTION-NEXT: {{0*}}10 c3 d4 # REMOVE-LAST-SECTION-NEXT: {{0*}}12 ## Test gap fill with the middle section removed, should be filled. # RUN: llvm-objcopy -O binary --gap-fill=0xe9 --remove-section=.gap2 %t %t-filled # RUN: od -v -Ax -t x1 %t-filled | FileCheck %s --check-prefix=REMOVE-MIDDLE-SECTION --ignore-case --match-full-lines # REMOVE-MIDDLE-SECTION: {{0*}}00 ee ff 11 22 33 44 aa bb cc dd fe dc ba e9 e9 e9 # REMOVE-MIDDLE-SECTION-NEXT: {{0*}}10 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 # REMOVE-MIDDLE-SECTION-NEXT: {{0*}}20 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 # REMOVE-MIDDLE-SECTION-NEXT: {{0*}}30 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 # REMOVE-MIDDLE-SECTION-NEXT: {{0*}}40 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 # REMOVE-MIDDLE-SECTION-NEXT: {{0*}}50 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 # REMOVE-MIDDLE-SECTION-NEXT: {{0*}}60 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 # REMOVE-MIDDLE-SECTION-NEXT: {{0*}}70 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 e9 # REMOVE-MIDDLE-SECTION-NEXT: {{0*}}80 e9 e9 89 ab cd ef # REMOVE-MIDDLE-SECTION-NEXT: {{0*}}86 --- !ELF FileHeader: Class: ELFCLASS64 Data: ELFDATA2LSB Type: ET_EXEC Machine: EM_X86_64 Sections: - Name: .space1 Type: Fill Pattern: 'ABCD' Size: 0x2 - Name: .nogap Type: SHT_PROGBITS Flags: [ SHF_ALLOC ] Address: 0x0102 Size: 0x6 Content: 'EEFF11223344' - Name: .gap1 Type: SHT_PROGBITS Flags: [ SHF_ALLOC, SHF_EXECINSTR ] Address: 0x0108 Content: 'AABBCCDDFEDCBA' - Name: .zero_size Type: SHT_PROGBITS Flags: [ SHF_ALLOC ] Address: 0x0110 Size: 0 - Name: .space2 Type: Fill Pattern: 'DC' Size: 1 - Name: .gap2 Type: SHT_PROGBITS Flags: [ SHF_ALLOC ] Address: 0x0110 Content: 'A1B2C3D4' - Name: .space3 Type: Fill Pattern: 'FE' Size: 0x1 - Name: .nobit_tbss Type: SHT_NOBITS Flags: [ SHF_WRITE, SHF_ALLOC, SHF_TLS ] Address: 0x0180 Size: 0x0018 - Name: .space4 Type: Fill Pattern: '01234567' Size: 0x4 - Name: .foo Type: SHT_PROGBITS Flags: [ SHF_WRITE, SHF_ALLOC ] Address: 0x0184 Content: '89ABCDEF' - Name: .nobit_bss Type: SHT_NOBITS Flags: [ SHF_WRITE, SHF_ALLOC ] Address: 0x018A Size: 0x0008 - Name: .comment Type: SHT_PROGBITS Flags: [ SHF_MERGE, SHF_STRINGS ] EntSize: 0x0001 Content: 4743433A ## In this test, output sections are defined out of order with respect to their ## load addresses. Verify that gaps are still correctly filled. # RUN: yaml2obj --docnum=2 %s -o %t.2 # RUN: llvm-objcopy -O binary --gap-fill=0xe9 %t.2 %t.2.filled # RUN: od -v -Ax -t x1 %t.2.filled | FileCheck --ignore-case --match-full-lines %s # CHECK: {{0*}}00 aa bb cc dd e9 e9 e9 e9 11 22 33 44 --- !ELF FileHeader: Class: ELFCLASS64 Data: ELFDATA2LSB Type: ET_EXEC Machine: EM_X86_64 Sections: - Name: .bss Type: SHT_NOBITS Flags: [ SHF_ALLOC, SHF_WRITE ] Address: 0x0104 Size: 4 - Name: .section1 Type: SHT_PROGBITS Flags: [ SHF_ALLOC, SHF_WRITE ] Address: 0x0108 Content: '11223344' - Name: .section3 Type: SHT_PROGBITS Flags: [ SHF_ALLOC, SHF_WRITE ] Address: 0x0100 Content: 'AABBCCDD'