1; REQUIRES: x86 2;; Show that resolution of weak + global symbols works correctly when one is 3;; defined in native object and the other in a bitcode file. 4;; The global symbol in both cases should be kept. LTO should throw away the 5;; data for the discarded weak symbol defined in bitcode. The data for the 6;; weak symbol in a native object will be kept, but will be unlabelled. 7 8; RUN: rm -rf %t.dir 9; RUN: split-file %s %t.dir 10; RUN: llvm-as %t.dir/1.ll -o %t1.o 11; RUN: llvm-mc -triple=x86_64-pc-linux %t.dir/2.s -o %t2.o -filetype=obj 12; RUN: ld.lld %t1.o %t2.o -o %t.so -shared 13; RUN: llvm-readobj --symbols -S --section-data %t.so | FileCheck %s 14 15; CHECK: Name: .data 16; CHECK-NEXT: Type: SHT_PROGBITS 17; CHECK-NEXT: Flags [ 18; CHECK-NEXT: SHF_ALLOC 19; CHECK-NEXT: SHF_WRITE 20; CHECK-NEXT: ] 21; CHECK-NEXT: Address: 0x[[#%x,ADDR:]] 22; CHECK-NEXT: Offset: 23; CHECK-NEXT: Size: 12 24; CHECK-NEXT: Link: 25; CHECK-NEXT: Info: 26; CHECK-NEXT: AddressAlignment: 27; CHECK-NEXT: EntrySize: 28; CHECK-NEXT: SectionData ( 29; CHECK-NEXT: 0000: 09000000 05000000 04000000 |{{.*}}| 30; CHECK-NEXT: ) 31 32; CHECK: Name: a{{ }} 33; CHECK-NEXT: Value: 0x[[#%x,ADDR]] 34 35; CHECK: Name: b{{ }} 36; CHECK-NEXT: Value: 0x[[#%x,ADDR+8]] 37 38;--- 1.ll 39target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128" 40target triple = "x86_64-unknown-linux-gnu" 41 42@a = weak global i32 8 43@b = global i32 4 44 45;--- 2.s 46.data 47.global a 48a: 49.long 9 50 51.weak b 52b: 53.long 5 54