181 lines
7.9 KiB
Text
181 lines
7.9 KiB
Text
# 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'
|