• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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