67 lines · plain
1# REQUIRES: x86, zlib2 3# RUN: rm -rf %t && split-file %s %t && cd %t4# RUN: llvm-mc -filetype=obj -triple=x86_64 a.s -o a.o5# RUN: ld.lld -T a.lds a.o --compress-sections nonalloc=zlib --compress-sections str=zlib -o out6# RUN: llvm-readelf -SsXz -p str out | FileCheck %s7 8# CHECK: Name Type Address Off Size ES Flg Lk Inf Al9# CHECK: nonalloc PROGBITS 0000000000000000 [[#%x,]] [[#%x,]] 00 C 0 0 110# CHECK-NEXT: str PROGBITS 0000000000000000 [[#%x,]] [[#%x,]] 01 MSC 0 0 111 12# CHECK: 0000000000000000 0 NOTYPE GLOBAL DEFAULT [[#]] (nonalloc) nonalloc_start13# CHECK: 0000000000000063 0 NOTYPE GLOBAL DEFAULT [[#]] (nonalloc) nonalloc_end14# CHECK: String dump of section 'str':15# CHECK-NEXT: [ 0] AAA16# CHECK-NEXT: [ 4] {{a+}}17# CHECK-NEXT: [ 45] BBB18 19## TODO The uncompressed size of 'nonalloc' is dependent on linker script20## commands, which is not handled. We should report an error.21# RUN: ld.lld -T b.lds a.o --compress-sections nonalloc=zlib22 23#--- a.s24.globl _start25_start:26 ret27 28.section nonalloc0,""29.balign 830.quad .text31.quad .text32.space 6433.section nonalloc1,""34.balign 835.quad 4236 37.section str,"MS",@progbits,138 .asciz "AAA"39 .asciz "BBB"40 .fill 64,1,0x6141 .byte 042 43#--- a.lds44SECTIONS {45 .text : { *(.text) }46 c = SIZEOF(.text);47 b = c+1;48 a = b+1;49 nonalloc : {50 nonalloc_start = .;51## In general, using data commands is error-prone. This case is correct, though.52 *(nonalloc*) QUAD(SIZEOF(.text))53 . += a;54 nonalloc_end = .;55 }56 str : { *(str) }57}58 59#--- b.lds60SECTIONS {61 nonalloc : { *(nonalloc*) . += a; }62 .text : { *(.text) }63 a = b+1;64 b = c+1;65 c = SIZEOF(.text);66}67