112 lines · plain
1; REQUIRES: x862 3;; NOTE: We deviate significantly from ld64's behavior here. We treat common4;; bitcode symbols like regular common symbols, but ld64 gives them different5;; (and IMO very strange) precedence. This test documents the differences.6 7; RUN: rm -rf %t; split-file %s %t8; RUN: opt -module-summary %t/common.ll -o %t/common.o9; RUN: opt -module-summary %t/defined.ll -o %t/defined.o10; RUN: opt -module-summary %t/weak-defined.ll -o %t/weak-defined.o11; RUN: opt -module-summary %t/libfoo.ll -o %t/libfoo.o12; RUN: opt -module-summary %t/refs-foo.ll -o %t/refs-foo.o13; RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/weak-defined.s -o %t/weak-defined-asm.o14 15; RUN: %lld -dylib -dylib %t/libfoo.o -o %t/libfoo.dylib16 17; RUN: llvm-ar rcs %t/defined.a %t/defined.o18; RUN: llvm-ar rcs %t/defined-and-common.a %t/defined.o %t/common.o19; RUN: llvm-ar rcs %t/common-and-defined.a %t/common.o %t/defined.o20; RUN: llvm-ar rcs %t/weak-defined-and-common.a %t/weak-defined.o %t/common.o21; RUN: llvm-ar rcs %t/common-and-weak-defined.a %t/common.o %t/weak-defined.o22 23;; Defined symbols take precedence over common bitcode symbols.24; RUN: %lld -dylib %t/defined.o %t/common.o -o %t/test25; RUN: llvm-objdump --syms %t/test | FileCheck %s --check-prefix=DEFINED26; RUN: %lld -dylib %t/common.o %t/defined.o -o %t/test27; RUN: llvm-objdump --syms %t/test | FileCheck %s --check-prefix=DEFINED28 29;; Defined symbols have the same precedence as common bitcode symbols within30;; an archive.31; RUN: %lld -dylib %t/defined-and-common.a %t/refs-foo.o -o %t/refs-foo32; RUN: llvm-objdump --syms %t/refs-foo | FileCheck %s --check-prefix=DEFINED33; RUN: %lld -dylib %t/common-and-defined.a %t/refs-foo.o -o %t/refs-foo34; RUN: llvm-objdump --syms %t/refs-foo | FileCheck %s --check-prefix=COMMON35 36;; ld64: Weak bitcode symbols have the same precedence as common bitcode symbols.37;; lld: Weak bitcode symbols take precedence over common bitcode symbols.38; RUN: %lld -dylib %t/weak-defined.o %t/common.o -o %t/test39; RUN: llvm-objdump --syms %t/test | FileCheck %s --check-prefix=WEAK-DEFINED40; RUN: %lld -dylib %t/common.o %t/weak-defined.o -o %t/test41; RUN: llvm-objdump --syms %t/test | FileCheck %s --check-prefix=WEAK-DEFINED42 43;; Weak non-bitcode symbols take precedence over common bitcode symbols.44; RUN: %lld -dylib %t/weak-defined-asm.o %t/common.o -o %t/test45; RUN: llvm-objdump --syms %t/test | FileCheck %s --check-prefix=WEAK-DEFINED46; RUN: %lld -dylib %t/common.o %t/weak-defined-asm.o -o %t/test47; RUN: llvm-objdump --syms %t/test | FileCheck %s --check-prefix=WEAK-DEFINED48 49;; ld64: Archive symbols take precedence over common bitcode symbols.50;; lld: Common bitcode symbols take precedence over archive symbols.51; RUN: %lld -dylib %t/defined.a %t/common.o -o %t/test52; RUN: llvm-objdump --syms %t/test | FileCheck %s --check-prefix=COMMON53; COM (ld64): llvm-objdump --syms %t/test | FileCheck %s --check-prefix=DEFINED54; RUN: %lld -dylib %t/common.o %t/defined.a -o %t/test55; RUN: llvm-objdump --syms %t/test | FileCheck %s --check-prefix=COMMON56; COM (ld64): llvm-objdump --syms %t/test | FileCheck %s --check-prefix=DEFINED57 58;; ld64: Dylib symbols take precedence over common bitcode symbols.59;; lld: Common bitcode symbols take precedence over dylib symbols.60; RUN: %lld -dylib %t/libfoo.dylib %t/common.o %t/refs-foo.o -o %t/test61; RUN: llvm-objdump --syms %t/test | FileCheck %s --check-prefix=COMMON62; COM (ld64): llvm-objdump --syms %t/test | FileCheck %s --check-prefix=DYLIB63; RUN: %lld -dylib %t/common.o %t/libfoo.dylib %t/refs-foo.o -o %t/test64; RUN: llvm-objdump --syms %t/test | FileCheck %s --check-prefix=COMMON65; COM (ld64): llvm-objdump --syms %t/test | FileCheck %s --check-prefix=DYLIB66 67; COMMON: g O __DATA,__common _foo68; DEFINED: g O __DATA,__data _foo69; WEAK-DEFINED: w O __DATA,__data _foo70; DYLIB: *UND* _foo71 72;--- common.ll73target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"74target triple = "x86_64-apple-macosx10.15.0"75 76@foo = common global i8 077 78;--- defined.ll79target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"80target triple = "x86_64-apple-macosx10.15.0"81 82@foo = global i8 1283 84;--- weak-defined.ll85target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"86target triple = "x86_64-apple-macosx10.15.0"87 88@foo = weak global i8 1289 90;--- weak-defined.s91.globl _foo92.weak_definition _foo93.data94_foo:95 96;--- libfoo.ll97target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"98target triple = "x86_64-apple-macosx10.15.0"99 100@foo = common global i8 0101 102;--- refs-foo.ll103target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"104target triple = "x86_64-apple-macosx10.15.0"105 106@foo = external global i8107 108define void @f() {109 %1 = load i8, ptr @foo110 ret void111}112