137 lines · plain
1# REQUIRES: x862# RUN: rm -rf %t && split-file %s %t && cd %t3# RUN: llvm-mc -filetype=obj -triple=x86_64 a.s -o a.o4 5## .jcr is a relro section and should be placed before other RW sections.6## .bss is SHT_NOBITS section and should be last RW section, so some space7## in ELF file could be saved.8# RUN: ld.lld a.o -T text-rw.lds -o text-rw9# RUN: llvm-readelf -S text-rw | FileCheck %s --check-prefix=TEXT-RW10# TEXT-RW: .interp PROGBITS 00000000000002{{..}} 011# TEXT-RW-NEXT: .note.my NOTE 00000000000002{{..}} 012# TEXT-RW-NEXT: .text PROGBITS 00000000000002{{..}} 013# TEXT-RW-NEXT: .mytext PROGBITS 00000000000002{{..}} 014# TEXT-RW-NEXT: .jcr PROGBITS 00000000000002{{..}} 015# TEXT-RW-NEXT: .rw1 PROGBITS 0000000000001{{...}} 016# TEXT-RW-NEXT: .rw2 PROGBITS 0000000000001{{...}} 017# TEXT-RW-NEXT: .rw3 PROGBITS 0000000000001{{...}} 018# TEXT-RW-NEXT: .bss NOBITS 0000000000001{{...}} 019 20# RUN: ld.lld a.o -T only-text.lds -o only-text21# RUN: llvm-readelf -S only-text | FileCheck %s --check-prefix=ONLY-TEXT22# ONLY-TEXT: .interp PROGBITS 00000000000002{{..}} 023# ONLY-TEXT-NEXT: .note.my NOTE 00000000000002{{..}} 024# ONLY-TEXT-NEXT: .text PROGBITS 00000000000002{{..}} 025# ONLY-TEXT-NEXT: .mytext PROGBITS 00000000000002{{..}} 026# ONLY-TEXT-NEXT: .jcr PROGBITS 00000000000002{{..}} 027# ONLY-TEXT-NEXT: .rw1 PROGBITS 00000000000002{{..}} 028# ONLY-TEXT-NEXT: .rw2 PROGBITS 00000000000002{{..}} 029# ONLY-TEXT-NEXT: .rw3 PROGBITS 00000000000002{{..}} 030# ONLY-TEXT-NEXT: .bss NOBITS 00000000000002{{..}} 031 32# RUN: ld.lld a.o -T text-align.lds -o text-align33# RUN: llvm-readelf -S text-align | FileCheck %s --check-prefix=TEXT-ALIGN34# TEXT-ALIGN: .interp PROGBITS 00000000000002{{..}} 035# TEXT-ALIGN-NEXT: .note.my NOTE 00000000000002{{..}} 036# TEXT-ALIGN-NEXT: .text PROGBITS 00000000000002{{..}} 037# TEXT-ALIGN-NEXT: .mytext PROGBITS 0000000000001000 038# TEXT-ALIGN-NEXT: .jcr PROGBITS 0000000000001{{...}} 039# TEXT-ALIGN-NEXT: .rw1 PROGBITS 0000000000001{{...}} 040# TEXT-ALIGN-NEXT: .rw2 PROGBITS 0000000000001{{...}} 041# TEXT-ALIGN-NEXT: .rw3 PROGBITS 0000000000001{{...}} 042# TEXT-ALIGN-NEXT: .bss NOBITS 0000000000001{{...}} 043 44# RUN: ld.lld a.o -T only-rw.lds -o only-rw45# RUN: llvm-readelf -S only-rw | FileCheck %s --check-prefix=ONLY-RW46# ONLY-RW: .interp PROGBITS 00000000000002{{..}} 047# ONLY-RW-NEXT: .note.my NOTE 00000000000002{{..}} 048# ONLY-RW-NEXT: .text PROGBITS 00000000000002{{..}} 049# ONLY-RW-NEXT: .mytext PROGBITS 00000000000002{{..}} 050# ONLY-RW-NEXT: .jcr PROGBITS 00000000000002{{..}} 051# ONLY-RW-NEXT: .rw1 PROGBITS 00000000000002{{..}} 052# ONLY-RW-NEXT: .rw2 PROGBITS 0000000000001{{...}} 053# ONLY-RW-NEXT: .rw3 PROGBITS 0000000000001{{...}} 054# ONLY-RW-NEXT: .bss NOBITS 0000000000001{{...}} 055 56# RUN: ld.lld a.o -T rw-text.lds -o rw-text57# RUN: llvm-readelf -S rw-text | FileCheck %s --check-prefix=RW-TEXT58# RW-TEXT: .jcr PROGBITS 00000000000002{{..}} 059# RW-TEXT-NEXT: .rw1 PROGBITS 00000000000002{{..}} 060# RW-TEXT-NEXT: .rw2 PROGBITS 00000000000002{{..}} 061# RW-TEXT-NEXT: .rw3 PROGBITS 00000000000002{{..}} 062# RW-TEXT-NEXT: .bss NOBITS 00000000000002{{..}} 063# RW-TEXT-NEXT: .interp PROGBITS 00000000000002{{..}} 064# RW-TEXT-NEXT: .note.my NOTE 00000000000002{{..}} 065# RW-TEXT-NEXT: .text PROGBITS 0000000000001{{...}} 066# RW-TEXT-NEXT: .mytext PROGBITS 0000000000001{{...}} 067 68# RUN: ld.lld a.o -T rw-text-rw.lds -o rw-text-rw69# RUN: llvm-readelf -S rw-text-rw | FileCheck %s --check-prefix=RW-TEXT-RW70# RW-TEXT-RW: .jcr PROGBITS 00000000000002{{..}} 071# RW-TEXT-RW-NEXT: .rw1 PROGBITS 00000000000002{{..}} 072# RW-TEXT-RW-NEXT: .interp PROGBITS 00000000000002{{..}} 073# RW-TEXT-RW-NEXT: .note.my NOTE 00000000000002{{..}} 074# RW-TEXT-RW-NEXT: .text PROGBITS 0000000000001{{...}} 075# RW-TEXT-RW-NEXT: .mytext PROGBITS 0000000000001{{...}} 076# RW-TEXT-RW-NEXT: .rw2 PROGBITS 0000000000002{{...}} 077# RW-TEXT-RW-NEXT: .rw3 PROGBITS 0000000000002{{...}} 078# RW-TEXT-RW-NEXT: .bss NOBITS 0000000000002{{...}} 079 80#--- a.s81.section .rw1, "aw"; .byte 082.section .rw2, "aw"; .byte 083.section .rw3, "aw"; .byte 084.section .jcr, "aw"; .byte 085.section .bss, "aw",@nobits; .byte 086.section .note.my, "a", @note; .byte 087.section .interp, "a", @progbits; .byte 088.text; nop89.section .mytext,"ax"; nop90 91#--- text-rw.lds92SECTIONS {93 . = SIZEOF_HEADERS;94 .text : { *(.text) }95 . = ALIGN(CONSTANT(MAXPAGESIZE));96 .rw1 : { *(.rw1) }97 .rw2 : { *(.rw2) }98}99 100#--- only-text.lds101SECTIONS {102 . = SIZEOF_HEADERS;103 .text : { *(.text) }104}105 106#--- text-align.lds107SECTIONS {108 . = SIZEOF_HEADERS;109 .text : { *(.text) }110 . = ALIGN(CONSTANT(MAXPAGESIZE));111}112 113#--- only-rw.lds114SECTIONS {115 . = SIZEOF_HEADERS;116 .rw1 : { *(.rw1) }117 . = ALIGN(CONSTANT(MAXPAGESIZE));118}119 120#--- rw-text.lds121SECTIONS {122 . = SIZEOF_HEADERS;123 .rw1 : { *(.rw1) }124 . = ALIGN(CONSTANT(MAXPAGESIZE));125 .text : { *(.text) }126}127 128#--- rw-text-rw.lds129SECTIONS {130 . = SIZEOF_HEADERS;131 .rw1 : { *(.rw1) }132 . = ALIGN(CONSTANT(MAXPAGESIZE));133 .text : { *(.text) }134 . = ALIGN(CONSTANT(MAXPAGESIZE));135 .rw2 : { *(.rw2) }136}137