# REQUIRES: x86 ## Test the GC behavior when the PROVIDE symbol is defined by a relocatable file. # RUN: rm -rf %t && split-file %s %t && cd %t # RUN: llvm-mc -filetype=obj -triple=x86_64 a.s -o a.o # RUN: llvm-mc -filetype=obj -triple=x86_64 b.s -o b.o # RUN: llvm-as c.ll -o c.bc # RUN: ld.lld -T a.t --gc-sections a.o b.o -o a # RUN: llvm-readelf -s a | FileCheck %s # RUN: ld.lld -T a.t -shared a.o b.o c.bc -o a.so # RUN: llvm-readelf -s -r a.so | FileCheck %s --check-prefix=DSO # CHECK: 1: {{.*}} 0 NOTYPE GLOBAL DEFAULT 1 _start # CHECK-NEXT:2: {{.*}} 0 NOTYPE WEAK DEFAULT 2 f3 # CHECK-NOT: {{.}} # DSO: .rela.plt # DSO-NOT: f5 # DSO: Symbol table '.dynsym' # DSO-NOT: f5 # DSO: Symbol table '.symtab' # DSO: {{.*}} 0 NOTYPE LOCAL HIDDEN [[#]] f5 #--- a.s .global _start, f1, f2, bar .weak f3 _start: call f3 .section .text.f1,"ax"; f1: .section .text.f2,"ax"; f2: # referenced by another relocatable file .section .text.f3,"ax"; f3: # live .section .text.bar,"ax"; bar: .comm comm,4,4 #--- b.s call f2 #--- c.ll target triple = "x86_64-unknown-linux-gnu" target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" declare void @f5() define void @f3() { call void @f5() ret void } #--- a.t SECTIONS { . = . + SIZEOF_HEADERS; PROVIDE(f1 = bar+1); PROVIDE(f2 = bar+2); PROVIDE(f3 = bar+3); PROVIDE(f4 = comm+4); PROVIDE_HIDDEN(f5 = bar+5); }