| # 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 | |
| } |