| # REQUIRES: x86 |
| # 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 --default-script=def.t b.t -T a.t a.o -o out |
| # RUN: llvm-readelf -Ss out | FileCheck %s |
| |
| # CHECK: Name |
| # CHECK: .foo2 |
| # CHECK-NEXT: .foo0 |
| # CHECK-NEXT: .foo1 |
| # CHECK: 1: 000000000000000c 0 NOTYPE GLOBAL DEFAULT 4 _start |
| # CHECK-NEXT: 2: 000000000000002a 0 NOTYPE GLOBAL DEFAULT ABS b |
| # CHECK-NEXT: 3: 000000000000002a 0 NOTYPE GLOBAL DEFAULT ABS a |
| # CHECK-EMPTY: |
| |
| ## In the absence of --script options, the default linker script is read. |
| # RUN: ld.lld --default-script def.t b.t a.o -o out1 |
| # RUN: llvm-readelf -Ss out1 | FileCheck %s --check-prefix=CHECK1 |
| # RUN: ld.lld -dT def.t b.t a.o -o out1a && cmp out1 out1a |
| ## If multiple -dT options are specified, the last -dT wins. |
| # RUN: ld.lld -dT a.t -dT def.t b.t a.o -o out1a && cmp out1 out1a |
| |
| # RUN: mkdir d && cp def.t d/default.t |
| # RUN: ld.lld -L d -dT default.t b.t a.o -o out1a && cmp out1 out1a |
| |
| # CHECK1: Name |
| # CHECK1: .foo2 |
| # CHECK1-NEXT: .foo1 |
| # CHECK1-NEXT: .foo0 |
| # CHECK1: 1: 000000000000000c 0 NOTYPE GLOBAL DEFAULT 4 _start |
| # CHECK1-NEXT: 2: 000000000000002a 0 NOTYPE GLOBAL DEFAULT ABS b |
| # CHECK1-NEXT: 3: 000000000000002a 0 NOTYPE GLOBAL DEFAULT ABS def |
| # CHECK1-EMPTY: |
| |
| # RUN: not ld.lld --default-script not-exist.t b.t -T a.t a.o 2>&1 | FileCheck %s --check-prefix=ERR |
| # ERR: error: cannot find linker script not-exist.t |
| |
| #--- a.s |
| .globl _start |
| _start: |
| |
| .section .foo0,"a"; .long 0 |
| .section .foo1,"a"; .long 0 |
| .section .foo2,"a"; .long 0 |
| |
| #--- a.t |
| a = 42; |
| SECTIONS { |
| .foo2 : {} |
| .foo0 : {} |
| .foo1 : {} |
| } |
| |
| #--- b.t |
| b = 42; |
| |
| #--- def.t |
| def = 42; |
| SECTIONS { |
| .foo2 : {} |
| .foo1 : {} |
| .foo0 : {} |
| } |