; REQUIRES: x86 ;; Show that resolution of weak + global symbols works correctly when one is ;; defined in native object and the other in a bitcode file. ;; The global symbol in both cases should be kept. LTO should throw away the ;; data for the discarded weak symbol defined in bitcode. The data for the ;; weak symbol in a native object will be kept, but will be unlabelled. ; RUN: rm -rf %t.dir ; RUN: split-file %s %t.dir ; RUN: llvm-as %t.dir/1.ll -o %t1.o ; RUN: llvm-mc -triple=x86_64-pc-linux %t.dir/2.s -o %t2.o -filetype=obj ; RUN: ld.lld %t1.o %t2.o -o %t.so -shared ; RUN: llvm-readobj --symbols -S --section-data %t.so | FileCheck %s ; CHECK: Name: .data ; CHECK-NEXT: Type: SHT_PROGBITS ; CHECK-NEXT: Flags [ ; CHECK-NEXT: SHF_ALLOC ; CHECK-NEXT: SHF_WRITE ; CHECK-NEXT: ] ; CHECK-NEXT: Address: 0x[[#%x,ADDR:]] ; CHECK-NEXT: Offset: ; CHECK-NEXT: Size: 12 ; CHECK-NEXT: Link: ; CHECK-NEXT: Info: ; CHECK-NEXT: AddressAlignment: ; CHECK-NEXT: EntrySize: ; CHECK-NEXT: SectionData ( ; CHECK-NEXT: 0000: 09000000 05000000 04000000 |{{.*}}| ; CHECK-NEXT: ) ; CHECK: Name: a{{ }} ; CHECK-NEXT: Value: 0x[[#%x,ADDR]] ; CHECK: Name: b{{ }} ; CHECK-NEXT: Value: 0x[[#%x,ADDR+8]] ;--- 1.ll target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" target triple = "x86_64-unknown-linux-gnu" @a = weak global i32 8 @b = global i32 4 ;--- 2.s .data .global a a: .long 9 .weak b b: .long 5