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