1*f02a27dfSFangrui Song# REQUIRES: x86 2*f02a27dfSFangrui Song# RUN: rm -rf %t && split-file %s %t && cd %t 3*f02a27dfSFangrui Song# RUN: llvm-mc -filetype=obj -triple=x86_64 a.s -o a.o 4*f02a27dfSFangrui Song# RUN: ld.lld --default-script=def.t b.t -T a.t a.o -o out 5*f02a27dfSFangrui Song# RUN: llvm-readelf -Ss out | FileCheck %s 6*f02a27dfSFangrui Song 7*f02a27dfSFangrui Song# CHECK: Name 8*f02a27dfSFangrui Song# CHECK: .foo2 9*f02a27dfSFangrui Song# CHECK-NEXT: .foo0 10*f02a27dfSFangrui Song# CHECK-NEXT: .foo1 11*f02a27dfSFangrui Song# CHECK: 1: 000000000000000c 0 NOTYPE GLOBAL DEFAULT 4 _start 12*f02a27dfSFangrui Song# CHECK-NEXT: 2: 000000000000002a 0 NOTYPE GLOBAL DEFAULT ABS b 13*f02a27dfSFangrui Song# CHECK-NEXT: 3: 000000000000002a 0 NOTYPE GLOBAL DEFAULT ABS a 14*f02a27dfSFangrui Song# CHECK-EMPTY: 15*f02a27dfSFangrui Song 16*f02a27dfSFangrui Song## In the absence of --script options, the default linker script is read. 17*f02a27dfSFangrui Song# RUN: ld.lld --default-script def.t b.t a.o -o out1 18*f02a27dfSFangrui Song# RUN: llvm-readelf -Ss out1 | FileCheck %s --check-prefix=CHECK1 19*f02a27dfSFangrui Song# RUN: ld.lld -dT def.t b.t a.o -o out1a && cmp out1 out1a 20*f02a27dfSFangrui Song## If multiple -dT options are specified, the last -dT wins. 21*f02a27dfSFangrui Song# RUN: ld.lld -dT a.t -dT def.t b.t a.o -o out1a && cmp out1 out1a 22*f02a27dfSFangrui Song 23*f02a27dfSFangrui Song# RUN: mkdir d && cp def.t d/default.t 24*f02a27dfSFangrui Song# RUN: ld.lld -L d -dT default.t b.t a.o -o out1a && cmp out1 out1a 25*f02a27dfSFangrui Song 26*f02a27dfSFangrui Song# CHECK1: Name 27*f02a27dfSFangrui Song# CHECK1: .foo2 28*f02a27dfSFangrui Song# CHECK1-NEXT: .foo1 29*f02a27dfSFangrui Song# CHECK1-NEXT: .foo0 30*f02a27dfSFangrui Song# CHECK1: 1: 000000000000000c 0 NOTYPE GLOBAL DEFAULT 4 _start 31*f02a27dfSFangrui Song# CHECK1-NEXT: 2: 000000000000002a 0 NOTYPE GLOBAL DEFAULT ABS b 32*f02a27dfSFangrui Song# CHECK1-NEXT: 3: 000000000000002a 0 NOTYPE GLOBAL DEFAULT ABS def 33*f02a27dfSFangrui Song# CHECK1-EMPTY: 34*f02a27dfSFangrui Song 35*f02a27dfSFangrui Song# RUN: not ld.lld --default-script not-exist.t b.t -T a.t a.o 2>&1 | FileCheck %s --check-prefix=ERR 36*f02a27dfSFangrui Song# ERR: error: cannot find linker script not-exist.t 37*f02a27dfSFangrui Song 38*f02a27dfSFangrui Song#--- a.s 39*f02a27dfSFangrui Song.globl _start 40*f02a27dfSFangrui Song_start: 41*f02a27dfSFangrui Song 42*f02a27dfSFangrui Song.section .foo0,"a"; .long 0 43*f02a27dfSFangrui Song.section .foo1,"a"; .long 0 44*f02a27dfSFangrui Song.section .foo2,"a"; .long 0 45*f02a27dfSFangrui Song 46*f02a27dfSFangrui Song#--- a.t 47*f02a27dfSFangrui Songa = 42; 48*f02a27dfSFangrui SongSECTIONS { 49*f02a27dfSFangrui Song .foo2 : {} 50*f02a27dfSFangrui Song .foo0 : {} 51*f02a27dfSFangrui Song .foo1 : {} 52*f02a27dfSFangrui Song} 53*f02a27dfSFangrui Song 54*f02a27dfSFangrui Song#--- b.t 55*f02a27dfSFangrui Songb = 42; 56*f02a27dfSFangrui Song 57*f02a27dfSFangrui Song#--- def.t 58*f02a27dfSFangrui Songdef = 42; 59*f02a27dfSFangrui SongSECTIONS { 60*f02a27dfSFangrui Song .foo2 : {} 61*f02a27dfSFangrui Song .foo1 : {} 62*f02a27dfSFangrui Song .foo0 : {} 63*f02a27dfSFangrui Song} 64