| # REQUIRES: x86 |
| ## Test INCLUDE inside MEMORY { ... }. |
| |
| # 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 -o out |
| # RUN: llvm-objdump --section-headers out | FileCheck %s |
| # CHECK: .data 00000008 0000000000002000 DATA |
| # CHECK: .data2 00000008 0000000000003000 DATA |
| |
| ## An empty INCLUDE between two region declarations is accepted. |
| # RUN: ld.lld -T empty.lds a.o -o empty |
| # RUN: llvm-readelf -Sl empty | FileCheck %s --check-prefix=EMPTY |
| # EMPTY: .text PROGBITS 0000000000001000 {{.*}} AX |
| # EMPTY-NEXT: .data PROGBITS 0000000000002000 {{.*}} WA |
| # EMPTY: LOAD {{.*}} 0x0000000000001000 0x0000000000001000 {{.*}} R E |
| # EMPTY-NEXT: LOAD {{.*}} 0x0000000000002000 0x0000000000002000 {{.*}} RW |
| |
| ## A region declaration truncated mid-expression cannot be completed by the |
| ## parent MEMORY { ... }. |
| # RUN: cp trunc.lds inc.lds |
| # RUN: not ld.lld -T a.lds a.o 2>&1 | FileCheck %s --check-prefix=TRUNC |
| # TRUNC: error: inc.lds:1: unexpected EOF |
| |
| ## A stray '}' in the include cannot close the parent MEMORY { ... }. |
| # RUN: cp brace.lds inc.lds |
| # RUN: not ld.lld -T a.lds a.o 2>&1 | FileCheck %s --check-prefix=BRACE |
| # BRACE: error: inc.lds:1: unexpected EOF |
| |
| #--- a.s |
| .section .text,"ax" |
| .global _start |
| _start: nop |
| |
| .section .data,"aw" |
| .quad 0 |
| |
| #--- a.lds |
| MEMORY { |
| ROM (rwx): ORIGIN = 0x1000, LENGTH = 0x100 |
| RAM (rwx): ORIGIN = 0x2000, LENGTH = 0x100 |
| INCLUDE "inc.lds" |
| } |
| |
| SECTIONS { |
| .text : { *(.text*) } > ROM |
| .data : { *(.data*) } > RAM |
| .data2 : { QUAD(0) } > RAM2 |
| } |
| |
| #--- inc.lds |
| RAM2 (rwx): ORIGIN = 0x3000, LENGTH = 0x100 |
| |
| #--- empty.lds |
| MEMORY { |
| ROM (rx): ORIGIN = 0x1000, LENGTH = 0x100 |
| INCLUDE "inc-empty.lds" |
| RAM (rw): ORIGIN = 0x2000, LENGTH = 0x100 |
| } |
| |
| SECTIONS { |
| .text : { *(.text*) } > ROM |
| .data : { *(.data*) } > RAM |
| } |
| |
| #--- inc-empty.lds |
| |
| #--- trunc.lds |
| RAM3 : ORIGIN = 0x4000, LENGTH |
| |
| #--- brace.lds |
| } |