Make sections larger so that compressed content will be smaller than uncompressed content. Add a few dedicated tests where compressed content is larger.
67 lines
1.7 KiB
ArmAsm
67 lines
1.7 KiB
ArmAsm
# REQUIRES: x86, zlib
|
|
|
|
# RUN: rm -rf %t && split-file %s %t && cd %t
|
|
# RUN: llvm-mc -filetype=obj -triple=x86_64 a.s -o a.o
|
|
# RUN: ld.lld -T a.lds a.o --compress-sections nonalloc=zlib --compress-sections str=zlib -o out
|
|
# RUN: llvm-readelf -SsXz -p str out | FileCheck %s
|
|
|
|
# CHECK: Name Type Address Off Size ES Flg Lk Inf Al
|
|
# CHECK: nonalloc PROGBITS 0000000000000000 [[#%x,]] [[#%x,]] 00 C 0 0 1
|
|
# CHECK-NEXT: str PROGBITS 0000000000000000 [[#%x,]] [[#%x,]] 01 MSC 0 0 1
|
|
|
|
# CHECK: 0000000000000000 0 NOTYPE GLOBAL DEFAULT [[#]] (nonalloc) nonalloc_start
|
|
# CHECK: 0000000000000063 0 NOTYPE GLOBAL DEFAULT [[#]] (nonalloc) nonalloc_end
|
|
# CHECK: String dump of section 'str':
|
|
# CHECK-NEXT: [ 0] AAA
|
|
# CHECK-NEXT: [ 4] {{a+}}
|
|
# CHECK-NEXT: [ 45] BBB
|
|
|
|
## TODO The uncompressed size of 'nonalloc' is dependent on linker script
|
|
## commands, which is not handled. We should report an error.
|
|
# RUN: ld.lld -T b.lds a.o --compress-sections nonalloc=zlib
|
|
|
|
#--- a.s
|
|
.globl _start
|
|
_start:
|
|
ret
|
|
|
|
.section nonalloc0,""
|
|
.balign 8
|
|
.quad .text
|
|
.quad .text
|
|
.space 64
|
|
.section nonalloc1,""
|
|
.balign 8
|
|
.quad 42
|
|
|
|
.section str,"MS",@progbits,1
|
|
.asciz "AAA"
|
|
.asciz "BBB"
|
|
.fill 64,1,0x61
|
|
.byte 0
|
|
|
|
#--- a.lds
|
|
SECTIONS {
|
|
.text : { *(.text) }
|
|
c = SIZEOF(.text);
|
|
b = c+1;
|
|
a = b+1;
|
|
nonalloc : {
|
|
nonalloc_start = .;
|
|
## In general, using data commands is error-prone. This case is correct, though.
|
|
*(nonalloc*) QUAD(SIZEOF(.text))
|
|
. += a;
|
|
nonalloc_end = .;
|
|
}
|
|
str : { *(str) }
|
|
}
|
|
|
|
#--- b.lds
|
|
SECTIONS {
|
|
nonalloc : { *(nonalloc*) . += a; }
|
|
.text : { *(.text) }
|
|
a = b+1;
|
|
b = c+1;
|
|
c = SIZEOF(.text);
|
|
}
|