156 lines · plain
1# REQUIRES: x86, arm2# RUN: rm -rf %t; split-file %s %t3 4# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/has-objc-symbol.s -o %t/has-objc-symbol.o5# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/has-objc-category.s -o %t/has-objc-category.o6# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/has-objc-symbol-and-category.s -o %t/has-objc-symbol-and-category.o7# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/has-swift.s -o %t/has-swift.o8# RUN: llvm-as %t/has-swift-ir-loaded.ll -o %t/has-swift-ir-loaded.o9# RUN: llvm-as %t/has-swift-ir-not-loaded.ll -o %t/has-swift-ir-not-loaded.o10# RUN: llvm-as %t/has-swift-with-space-ir-loaded.ll -o %t/has-swift-with-space-ir-loaded.o11# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/has-swift-proto.s -o %t/has-swift-proto.o12# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/no-objc.s -o %t/no-objc.o13## Make sure we don't mis-parse a 32-bit file as 64-bit14# RUN: llvm-mc -filetype=obj -triple=armv7-apple-watchos %t/no-objc.s -o %t/wrong-arch.o15# RUN: llvm-ar rcs %t/libHasSomeObjC.a %t/no-objc.o %t/has-objc-symbol.o %t/has-objc-category.o %t/has-swift.o %t/has-swift-proto.o %t/has-swift-ir-loaded.o %t/has-swift-ir-not-loaded.o %t/has-swift-with-space-ir-loaded.o %t/wrong-arch.o16# RUN: llvm-ar rcs %t/libHasSomeObjC2.a %t/no-objc.o %t/has-objc-symbol-and-category.o %t/has-swift.o %t/has-swift-proto.o %t/has-swift-ir-loaded.o %t/has-swift-ir-not-loaded.o %t/has-swift-with-space-ir-loaded.o %t/wrong-arch.o17 18# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/test.s -o %t/test.o19 20# RUN: %lld -lSystem %t/test.o -o %t/test -L%t -lHasSomeObjC -ObjC 21# RUN: llvm-objdump --section-headers --syms %t/test | FileCheck %s --check-prefix=OBJC22 23# RUN: %lld -lSystem %t/test.o -o %t/test -L%t -lHasSomeObjC2 -ObjC24# RUN: llvm-objdump --section-headers --syms %t/test | FileCheck %s --check-prefix=OBJC25 26# RUN: %no-fatal-warnings-lld -lSystem %t/test.o -o %t/test --start-lib %t/no-objc.o %t/has-objc-symbol.o %t/has-objc-category.o %t/has-swift.o %t/has-swift-proto.o %t/has-swift-ir-loaded.o %t/has-swift-ir-not-loaded.o %t/has-swift-with-space-ir-loaded.o %t/wrong-arch.o --end-lib -ObjC 2>&1 \27# RUN: | FileCheck -check-prefix=WARNING %s28# RUN: llvm-objdump --section-headers --syms %t/test | FileCheck %s --check-prefix=OBJC29 30# WARNING: {{.+}}wrong-arch.o has architecture armv7 which is incompatible with target architecture x86_6431# WARNING-NOT: {{.}}32 33# OBJC: Sections:34# OBJC-NEXT: Idx Name Size VMA Type35# OBJC-NEXT: 0 __text {{.*}} TEXT36# OBJC-NEXT: 1 __swift {{.*}} DATA37# OBJC-NEXT: 2 __swift5_fieldmd{{.*}} DATA38# OBJC-NEXT: 3 __swift5_proto {{.*}} DATA39# OBJC-NEXT: 4 __objc_catlist {{.*}} DATA40# OBJC-NEXT: 5 has_objc_symbol {{.*}} DATA41# OBJC-EMPTY:42# OBJC-NEXT: SYMBOL TABLE:43# OBJC-DAG: g O __TEXT,__swift _foo44# OBJC-DAG: g F __TEXT,__text _main45# OBJC-DAG: g F __TEXT,__text _OBJC_CLASS_$_MyObject46# OBJC-DAG: g O __TEXT,__swift5_fieldmd $s7somelib4Blah_pMF47# OBJC-DAG: g O __TEXT,__swift5_proto _baz48 49# RUN: %lld -lSystem %t/test.o -o %t/test -L%t -lHasSomeObjC50# RUN: llvm-objdump --section-headers --syms %t/test | FileCheck %s --check-prefix=NO-OBJC51 52# NO-OBJC: Sections:53# NO-OBJC-NEXT: Idx Name Size VMA Type54# NO-OBJC-NEXT: 0 __text {{.*}} TEXT55# NO-OBJC-EMPTY:56# NO-OBJC-NEXT: SYMBOL TABLE:57# NO-OBJC-NEXT: g F __TEXT,__text _main58# NO-OBJC-NEXT: g F __TEXT,__text __mh_execute_header59# NO-OBJC-NEXT: *UND* dyld_stub_binder60# NO-OBJC-EMPTY:61 62# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/refs-dup.s -o %t/refs-dup.o63# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/refs-objc.s -o %t/refs-objc.o64 65## Check that -ObjC causes has-objc-symbol.o to be loaded first, prior to symbol66## resolution. This matches ld64's behavior.67# RUN: %lld -dylib %t/refs-dup.o %t/refs-objc.o -o %t/refs-dup -L%t -lHasSomeObjC -ObjC68# RUN: llvm-objdump --macho --syms %t/refs-dup | FileCheck %s --check-prefix=DUP-FROM-OBJC69# DUP-FROM-OBJC: g O __DATA,has_objc_symbol _has_dup70 71## Without -ObjC, no-objc.o gets loaded first during symbol resolution, causing72## a duplicate symbol error.73# RUN: not %lld -dylib %t/refs-dup.o %t/refs-objc.o -o %t/refs-dup -L%t \74# RUN: -lHasSomeObjC 2>&1 | FileCheck %s --check-prefix=DUP-ERROR75# DUP-ERROR: error: duplicate symbol: _has_dup76 77## TODO: Load has-objc-symbol.o prior to symbol resolution to match the archive behavior.78# RUN: not %lld -dylib %t/refs-dup.o %t/refs-objc.o -o %t/refs-dup --start-lib %t/no-objc.o \79# RUN: %t/has-objc-symbol.o %t/has-objc-category.o %t/has-swift.o %t/wrong-arch.o --end-lib \80# RUN: -ObjC 2>&1 | FileCheck %s --check-prefix=DUP-ERROR81 82#--- has-objc-symbol.s83.globl _OBJC_CLASS_$_MyObject, _has_dup84_OBJC_CLASS_$_MyObject:85 86.section __DATA,has_objc_symbol87_has_dup:88 89#--- has-objc-category.s90.section __DATA,__objc_catlist91.quad 0x123492 93#--- has-objc-symbol-and-category.s94## Make sure we load this archive member exactly once (i.e. no duplicate symbol95## error).96.globl _OBJC_CLASS_$_MyObject, _has_dup97_OBJC_CLASS_$_MyObject:98 99.section __DATA,has_objc_symbol100_has_dup:101 102.section __DATA,__objc_catlist103.quad 0x1234104 105#--- has-swift.s106.section __TEXT,__swift107.quad 0x1234108 109#--- has-swift-ir-loaded.ll110target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"111target triple = "x86_64-apple-darwin"112 113@foo = global i64 1234, section "__TEXT,__swift"114@llvm.used = appending global [1 x ptr] [ptr @foo]115 116#--- has-swift-ir-not-loaded.ll117target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"118target triple = "x86_64-apple-darwin"119 120@bar = global i64 1234121@llvm.used = appending global [1 x ptr] [ptr @bar]122 123#--- has-swift-with-space-ir-loaded.ll124target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"125target triple = "x86_64-apple-darwin"126 127@baz = global i64 1234, section "__TEXT, __swift5_proto"128@llvm.used = appending global [1 x ptr] [ptr @baz]129 130#--- has-swift-proto.s131.section __TEXT,__swift5_fieldmd132.globl $s7somelib4Blah_pMF133$s7somelib4Blah_pMF:134 135#--- no-objc.s136## This archive member should not be pulled in by -ObjC since it does not137## contain any ObjC-related data.138.globl _has_dup139.section __DATA,foo140.section __DATA,bar141.section __DATA,no_objc142_has_dup:143 144#--- test.s145.globl _main146_main:147 ret148 149#--- refs-dup.s150.data151.quad _has_dup152 153#--- refs-objc.s154.data155.quad _OBJC_CLASS_$_MyObject156