# REQUIRES: x86 ## Test INCLUDE inside SECTIONS { ... }. # RUN: rm -rf %t && split-file %s %t && cd %t # RUN: llvm-mc -filetype=obj -triple=x86_64 a.s -o a.o ## Empty include file. # RUN: cp empty.lds inc.lds # RUN: ld.lld -T a.lds a.o -o out # RUN: llvm-objdump --section-headers out | FileCheck %s --check-prefix=CHECK1 # CHECK1: .data 00000008 0000000000002000 DATA # CHECK1-NEXT: .data3 00000008 0000000000002008 DATA ## Non-empty include file. # RUN: cp full.lds inc.lds # RUN: ld.lld -T a.lds a.o -o out # RUN: llvm-objdump --section-headers out | FileCheck %s --check-prefix=CHECK2 # CHECK2: .data 00000008 0000000000002000 DATA # CHECK2-NEXT: .data2 00000008 0000000000002008 DATA # CHECK2-NEXT: .data3 00000008 0000000000002010 DATA ## An unclosed output section in the include cannot be closed by the outer ## SECTIONS { ... } '}'. # 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 SECTIONS { ... }. # 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 .global _start _start: nop .section .data,"aw" .quad 0 #--- a.lds MEMORY { ROM (rwx): ORIGIN = 0x1000, LENGTH = 0x100 RAM (rwx): ORIGIN = 0x2000, LENGTH = 0x100 } SECTIONS { .text : { *(.text*) } > ROM .data : { *(.data*) } > RAM INCLUDE "inc.lds" .data3 : { QUAD(0) } > RAM } #--- empty.lds #--- full.lds .data2 : { QUAD(0) } > RAM #--- trunc.lds .text : { *(.text*) #--- brace.lds }