1# REQUIRES: x86 2# RUN: rm -rf %t && split-file %s %t && cd %t 3# RUN: llvm-mc -filetype=obj -triple=x86_64 a.s -o a.o 4 5#--- 1.lds 6PHDRS {all PT_LOAD FILEHDR PHDRS ;} 7SECTIONS { 8 . = 0x10000200; 9 .text : {*(.text*)} :all 10 .foo : {*(.foo.*)} :"all" 11 .data : {*(.data.*)} : "all"} 12 13# RUN: ld.lld -o 1 -T 1.lds a.o 14# RUN: llvm-readelf -Sl 1 | FileCheck %s 15# CHECK: [Nr] Name Type Address Off Size ES Flg Lk Inf Al 16# CHECK: [ 1] .text PROGBITS 0000000010000200 000200 000001 00 AX 0 0 4 17# CHECK-NEXT: [ 2] .foo PROGBITS 0000000010000201 000201 000008 00 WA 0 0 1 18 19# CHECK: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align 20# CHECK-NEXT: LOAD 0x000000 0x0000000010000000 0x0000000010000000 0x000209 0x000209 RWE 0x1000 21 22#--- 2.lds 23## Check that program headers are not written, unless we explicitly tell 24## lld to do this. 25PHDRS {all PT_LOAD;} 26SECTIONS { 27 . = 0x10000200; 28 /DISCARD/ : {*(.text*)} 29 .foo : {*(.foo.*)} :all 30} 31 32# RUN: ld.lld -o 2 -T 2.lds a.o 33# RUN: llvm-readelf -l 2 | FileCheck --check-prefix=NOPHDR %s 34# NOPHDR: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align 35# NOPHDR-NEXT: LOAD 0x000200 0x0000000010000200 0x0000000010000200 0x000008 0x000008 RW 0x1000 36 37#--- 3.lds 38PHDRS {all PT_LOAD FILEHDR PHDRS ;} 39SECTIONS { 40 . = 0x10000200; 41 .text : {*(.text*)} :all 42 .foo : {*(.foo.*)} 43 .data : {*(.data.*)} } 44 45# RUN: ld.lld -o 3 -T 3.lds a.o 46# RUN: llvm-readelf -l 3 | FileCheck --check-prefix=DEFHDR %s 47# DEFHDR: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align 48# DEFHDR-NEXT: LOAD 0x000000 0x0000000010000000 0x0000000010000000 0x000209 0x000209 RWE 0x1000 49 50#--- at.lds 51## Check the AT(expr) 52PHDRS {all PT_LOAD FILEHDR PHDRS AT(0x500 + 0x500) ;} 53SECTIONS { 54 . = 0x10000200; 55 .text : {*(.text*)} :all 56 .foo : {*(.foo.*)} :all 57 .data : {*(.data.*)} :all} 58 59# RUN: ld.lld -o at -T at.lds a.o 60# RUN: llvm-readelf -l at | FileCheck --check-prefix=AT %s 61# AT: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align 62# AT-NEXT: LOAD 0x000000 0x0000000010000000 0x0000000000000a00 0x000209 0x000209 RWE 0x1000 63 64#--- int.lds 65## Check the numetic values for PHDRS. 66PHDRS {text PT_LOAD FILEHDR PHDRS; foo 0x11223344; } 67SECTIONS { . = SIZEOF_HEADERS; .foo : { *(.foo* .text*) } : text : foo} 68 69# RUN: ld.lld -o int -T int.lds a.o 70# RUN: llvm-readelf -l int | FileCheck --check-prefix=INT-PHDRS %s 71# INT-PHDRS: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align 72# INT-PHDRS-NEXT: LOAD 0x000000 0x0000000000000000 0x0000000000000000 0x0000b9 0x0000b9 RWE 0x1000 73# INT-PHDRS-NEXT: <unknown>: 0x11223344 0x0000b0 0x00000000000000b0 0x00000000000000b0 0x000009 0x000009 RWE 0x4 74 75#--- unspecified.lds 76## Check that error is reported when trying to use phdr which is not listed 77## inside PHDRS {} block 78## TODO: If script doesn't contain PHDRS {} block then default phdr is always 79## created and error is not reported. 80PHDRS { all PT_LOAD; } 81SECTIONS { .baz : {*(.foo.*)} :bar } 82 83# RUN: not ld.lld -T unspecified.lds a.o 2>&1 | FileCheck --check-prefix=UNSPECIFIED %s 84# UNSPECIFIED: unspecified.lds:6: program header 'bar' is not listed in PHDRS 85 86#--- foohdr.lds 87PHDRS { text PT_LOAD FOOHDR; } 88 89# RUN: not ld.lld -T foohdr.lds a.o 2>&1 | FileCheck --check-prefix=FOOHDR %s 90# FOOHDR: error: foohdr.lds:1: unexpected header attribute: FOOHDR 91 92#--- pt_foo.lds 93PHDRS { text PT_FOO FOOHDR; } 94 95# RUN: not ld.lld -T pt_foo.lds a.o 2>&1 | FileCheck --check-prefix=PTFOO %s --strict-whitespace 96# PTFOO:{{.*}}error: pt_foo.lds:1: invalid program header type: PT_FOO 97# PTFOO-NEXT:>>> PHDRS { text PT_FOO FOOHDR; } 98# PTFOO-NEXT:>>> ^ 99 100#--- unclosed.lds 101PHDRS { text PT_LOAD ; 102 103# RUN: not ld.lld -T unclosed.lds a.o 2>&1 | FileCheck --check-prefix=UNCLOSED %s 104# UNCLOSED:error: unclosed.lds:1: unexpected EOF 105# UNCLOSED-NOT:{{.}} 106 107#--- unclosed2.lds 108PHDRS { text PT_LOAD 109 110# RUN: not ld.lld -T unclosed2.lds a.o 2>&1 | FileCheck --check-prefix=UNCLOSED2 %s 111# UNCLOSED2: error: unclosed2.lds:1: unexpected header attribute: 112 113#--- a.s 114.global _start 115_start: 116 nop 117 118.section .foo.1,"a" 119foo1: 120 .long 0 121 122.section .foo.2,"aw" 123foo2: 124 .long 0 125