125 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#--- 1.lds6PHDRS {all PT_LOAD FILEHDR PHDRS ;}7SECTIONS {8 . = 0x10000200;9 .text : {*(.text*)} :all10 .foo : {*(.foo.*)} :"all"11 .data : {*(.data.*)} : "all"}12 13# RUN: ld.lld -o 1 -T 1.lds a.o14# RUN: llvm-readelf -Sl 1 | FileCheck %s15# CHECK: [Nr] Name Type Address Off Size ES Flg Lk Inf Al16# CHECK: [ 1] .text PROGBITS 0000000010000200 000200 000001 00 AX 0 0 417# CHECK-NEXT: [ 2] .foo PROGBITS 0000000010000201 000201 000008 00 WA 0 0 118 19# CHECK: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align20# CHECK-NEXT: LOAD 0x000000 0x0000000010000000 0x0000000010000000 0x000209 0x000209 RWE 0x100021 22#--- 2.lds23## Check that program headers are not written, unless we explicitly tell24## lld to do this.25PHDRS {all PT_LOAD;}26SECTIONS {27 . = 0x10000200;28 /DISCARD/ : {*(.text*)}29 .foo : {*(.foo.*)} :all30}31 32# RUN: ld.lld -o 2 -T 2.lds a.o33# RUN: llvm-readelf -l 2 | FileCheck --check-prefix=NOPHDR %s34# NOPHDR: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align35# NOPHDR-NEXT: LOAD 0x000200 0x0000000010000200 0x0000000010000200 0x000008 0x000008 RW 0x100036 37#--- 3.lds38PHDRS {all PT_LOAD FILEHDR PHDRS ;}39SECTIONS {40 . = 0x10000200;41 .text : {*(.text*)} :all42 .foo : {*(.foo.*)}43 .data : {*(.data.*)} }44 45# RUN: ld.lld -o 3 -T 3.lds a.o46# RUN: llvm-readelf -l 3 | FileCheck --check-prefix=DEFHDR %s47# DEFHDR: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align48# DEFHDR-NEXT: LOAD 0x000000 0x0000000010000000 0x0000000010000000 0x000209 0x000209 RWE 0x100049 50#--- at.lds51## Check the AT(expr)52PHDRS {all PT_LOAD FILEHDR PHDRS AT(0x500 + 0x500) ;}53SECTIONS {54 . = 0x10000200;55 .text : {*(.text*)} :all56 .foo : {*(.foo.*)} :all57 .data : {*(.data.*)} :all}58 59# RUN: ld.lld -o at -T at.lds a.o60# RUN: llvm-readelf -l at | FileCheck --check-prefix=AT %s61# AT: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align62# AT-NEXT: LOAD 0x000000 0x0000000010000000 0x0000000000000a00 0x000209 0x000209 RWE 0x100063 64#--- int.lds65## 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.o70# RUN: llvm-readelf -l int | FileCheck --check-prefix=INT-PHDRS %s71# INT-PHDRS: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align72# INT-PHDRS-NEXT: LOAD 0x000000 0x0000000000000000 0x0000000000000000 0x0000b9 0x0000b9 RWE 0x100073# INT-PHDRS-NEXT: <unknown>: 0x11223344 0x0000b0 0x00000000000000b0 0x00000000000000b0 0x000009 0x000009 RWE 0x474 75#--- unspecified.lds76## Check that error is reported when trying to use phdr which is not listed77## inside PHDRS {} block78## TODO: If script doesn't contain PHDRS {} block then default phdr is always79## 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 %s84# UNSPECIFIED: unspecified.lds:6: program header 'bar' is not listed in PHDRS85 86#--- foohdr.lds87PHDRS { text PT_LOAD FOOHDR; }88 89# RUN: not ld.lld -T foohdr.lds a.o 2>&1 | FileCheck --check-prefix=FOOHDR %s90# FOOHDR: error: foohdr.lds:1: unexpected header attribute: FOOHDR91 92#--- pt_foo.lds93PHDRS { text PT_FOO FOOHDR; }94 95# RUN: not ld.lld -T pt_foo.lds a.o 2>&1 | FileCheck --check-prefix=PTFOO %s --strict-whitespace96# PTFOO:{{.*}}error: pt_foo.lds:1: invalid program header type: PT_FOO97# PTFOO-NEXT:>>> PHDRS { text PT_FOO FOOHDR; }98# PTFOO-NEXT:>>> ^99 100#--- unclosed.lds101PHDRS { text PT_LOAD ;102 103# RUN: not ld.lld -T unclosed.lds a.o 2>&1 | FileCheck --check-prefix=UNCLOSED %s104# UNCLOSED:error: unclosed.lds:1: unexpected EOF105# UNCLOSED-NOT:{{.}}106 107#--- unclosed2.lds108PHDRS { text PT_LOAD109 110# RUN: not ld.lld -T unclosed2.lds a.o 2>&1 | FileCheck --check-prefix=UNCLOSED2 %s111# UNCLOSED2: error: unclosed2.lds:1: unexpected header attribute:112 113#--- a.s114.global _start115_start:116 nop117 118.section .foo.1,"a"119foo1:120 .long 0121 122.section .foo.2,"aw"123foo2:124 .long 0125