1183b0dadSJez Ng# REQUIRES: x86, arm 2a817594dSJez Ng# RUN: rm -rf %t; split-file %s %t 3cf918c80SJez Ng 4cf918c80SJez Ng# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/has-objc-symbol.s -o %t/has-objc-symbol.o 5cf918c80SJez Ng# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/has-objc-category.s -o %t/has-objc-category.o 69b5148d4SJez Ng# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/has-objc-symbol-and-category.s -o %t/has-objc-symbol-and-category.o 7cf918c80SJez Ng# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/has-swift.s -o %t/has-swift.o 8*141391adSNuri Amari# RUN: llvm-as %t/has-swift-ir-loaded.ll -o %t/has-swift-ir-loaded.o 9*141391adSNuri Amari# RUN: llvm-as %t/has-swift-ir-not-loaded.ll -o %t/has-swift-ir-not-loaded.o 10d64bad8fSTapan Thaker# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/has-swift-proto.s -o %t/has-swift-proto.o 11cf918c80SJez Ng# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/no-objc.s -o %t/no-objc.o 12001ba653SJez Ng## Make sure we don't mis-parse a 32-bit file as 64-bit 13001ba653SJez Ng# RUN: llvm-mc -filetype=obj -triple=armv7-apple-watchos %t/no-objc.s -o %t/wrong-arch.o 14*141391adSNuri Amari# 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/wrong-arch.o 15*141391adSNuri Amari# 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/wrong-arch.o 16cf918c80SJez Ng 17cf918c80SJez Ng# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/test.s -o %t/test.o 189b5148d4SJez Ng 19001ba653SJez Ng# RUN: %lld -lSystem %t/test.o -o %t/test -L%t -lHasSomeObjC -ObjC 20cf918c80SJez Ng# RUN: llvm-objdump --section-headers --syms %t/test | FileCheck %s --check-prefix=OBJC 21cf918c80SJez Ng 229b5148d4SJez Ng# RUN: %lld -lSystem %t/test.o -o %t/test -L%t -lHasSomeObjC2 -ObjC 239b5148d4SJez Ng# RUN: llvm-objdump --section-headers --syms %t/test | FileCheck %s --check-prefix=OBJC 249b5148d4SJez Ng 25*141391adSNuri Amari# 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/wrong-arch.o --end-lib -ObjC 2>&1 \ 265ba90632SVy Nguyen# RUN: | FileCheck -check-prefix=WARNING %s 270aae2bf3SFangrui Song# RUN: llvm-objdump --section-headers --syms %t/test | FileCheck %s --check-prefix=OBJC 280aae2bf3SFangrui Song 295ba90632SVy Nguyen# WARNING: {{.+}}wrong-arch.o has architecture armv7 which is incompatible with target architecture x86_64 305ba90632SVy Nguyen# WARNING-NOT: {{.}} 315ba90632SVy Nguyen 32cf918c80SJez Ng# OBJC: Sections: 33cf918c80SJez Ng# OBJC-NEXT: Idx Name Size VMA Type 34cf918c80SJez Ng# OBJC-NEXT: 0 __text {{.*}} TEXT 35cf918c80SJez Ng# OBJC-NEXT: 1 __swift {{.*}} DATA 36d64bad8fSTapan Thaker# OBJC-NEXT: 2 __swift5_fieldmd{{.*}} DATA 37d64bad8fSTapan Thaker# OBJC-NEXT: 3 __objc_catlist {{.*}} DATA 38d64bad8fSTapan Thaker# OBJC-NEXT: 4 has_objc_symbol {{.*}} DATA 39cf918c80SJez Ng# OBJC-EMPTY: 40cf918c80SJez Ng# OBJC-NEXT: SYMBOL TABLE: 41*141391adSNuri Amari# OBJC-DAG: g O __TEXT,__swift _foo 420aae2bf3SFangrui Song# OBJC-DAG: g F __TEXT,__text _main 430aae2bf3SFangrui Song# OBJC-DAG: g F __TEXT,__text _OBJC_CLASS_$_MyObject 44d64bad8fSTapan Thaker# OBJC-DAG: g O __TEXT,__swift5_fieldmd $s7somelib4Blah_pMF 45cf918c80SJez Ng 46001ba653SJez Ng# RUN: %lld -lSystem %t/test.o -o %t/test -L%t -lHasSomeObjC 47cf918c80SJez Ng# RUN: llvm-objdump --section-headers --syms %t/test | FileCheck %s --check-prefix=NO-OBJC 48cf918c80SJez Ng 49cf918c80SJez Ng# NO-OBJC: Sections: 50cf918c80SJez Ng# NO-OBJC-NEXT: Idx Name Size VMA Type 51cf918c80SJez Ng# NO-OBJC-NEXT: 0 __text {{.*}} TEXT 52cf918c80SJez Ng# NO-OBJC-EMPTY: 53cf918c80SJez Ng# NO-OBJC-NEXT: SYMBOL TABLE: 54cf918c80SJez Ng# NO-OBJC-NEXT: g F __TEXT,__text _main 55fd28f718SJez Ng# NO-OBJC-NEXT: g F __TEXT,__text __mh_execute_header 56c10947b5SNico Weber# NO-OBJC-NEXT: *UND* dyld_stub_binder 5747fdaa32SJez Ng# NO-OBJC-EMPTY: 58cf918c80SJez Ng 599b5148d4SJez Ng# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/refs-dup.s -o %t/refs-dup.o 609b5148d4SJez Ng# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/refs-objc.s -o %t/refs-objc.o 619b5148d4SJez Ng 629b5148d4SJez Ng## Check that -ObjC causes has-objc-symbol.o to be loaded first, prior to symbol 639b5148d4SJez Ng## resolution. This matches ld64's behavior. 649b5148d4SJez Ng# RUN: %lld -dylib %t/refs-dup.o %t/refs-objc.o -o %t/refs-dup -L%t -lHasSomeObjC -ObjC 659b5148d4SJez Ng# RUN: llvm-objdump --macho --syms %t/refs-dup | FileCheck %s --check-prefix=DUP-FROM-OBJC 669b5148d4SJez Ng# DUP-FROM-OBJC: g O __DATA,has_objc_symbol _has_dup 679b5148d4SJez Ng 689b5148d4SJez Ng## Without -ObjC, no-objc.o gets loaded first during symbol resolution, causing 699b5148d4SJez Ng## a duplicate symbol error. 709b5148d4SJez Ng# RUN: not %lld -dylib %t/refs-dup.o %t/refs-objc.o -o %t/refs-dup -L%t \ 719b5148d4SJez Ng# RUN: -lHasSomeObjC 2>&1 | FileCheck %s --check-prefix=DUP-ERROR 729b5148d4SJez Ng# DUP-ERROR: error: duplicate symbol: _has_dup 739b5148d4SJez Ng 740aae2bf3SFangrui Song## TODO: Load has-objc-symbol.o prior to symbol resolution to match the archive behavior. 750aae2bf3SFangrui Song# RUN: not %lld -dylib %t/refs-dup.o %t/refs-objc.o -o %t/refs-dup --start-lib %t/no-objc.o \ 760aae2bf3SFangrui Song# RUN: %t/has-objc-symbol.o %t/has-objc-category.o %t/has-swift.o %t/wrong-arch.o --end-lib \ 77ea32faeaSVincent Lee# RUN: -ObjC 2>&1 | FileCheck %s --check-prefix=DUP-ERROR 780aae2bf3SFangrui Song 79cf918c80SJez Ng#--- has-objc-symbol.s 809b5148d4SJez Ng.globl _OBJC_CLASS_$_MyObject, _has_dup 81cf918c80SJez Ng_OBJC_CLASS_$_MyObject: 82cf918c80SJez Ng 839b5148d4SJez Ng.section __DATA,has_objc_symbol 849b5148d4SJez Ng_has_dup: 859b5148d4SJez Ng 86cf918c80SJez Ng#--- has-objc-category.s 87cf918c80SJez Ng.section __DATA,__objc_catlist 88cf918c80SJez Ng.quad 0x1234 89cf918c80SJez Ng 909b5148d4SJez Ng#--- has-objc-symbol-and-category.s 919b5148d4SJez Ng## Make sure we load this archive member exactly once (i.e. no duplicate symbol 929b5148d4SJez Ng## error). 939b5148d4SJez Ng.globl _OBJC_CLASS_$_MyObject, _has_dup 949b5148d4SJez Ng_OBJC_CLASS_$_MyObject: 959b5148d4SJez Ng 969b5148d4SJez Ng.section __DATA,has_objc_symbol 979b5148d4SJez Ng_has_dup: 989b5148d4SJez Ng 999b5148d4SJez Ng.section __DATA,__objc_catlist 1009b5148d4SJez Ng.quad 0x1234 1019b5148d4SJez Ng 102cf918c80SJez Ng#--- has-swift.s 103cf918c80SJez Ng.section __TEXT,__swift 104cf918c80SJez Ng.quad 0x1234 105cf918c80SJez Ng 106*141391adSNuri Amari#--- has-swift-ir-loaded.ll 107*141391adSNuri Amaritarget datalayout = "e-m:o-i64:64-i128:128-n32:64-S128" 108*141391adSNuri Amaritarget triple = "x86_64-apple-darwin" 109*141391adSNuri Amari 110*141391adSNuri Amari@foo = global i64 1234, section "__TEXT,__swift" 111*141391adSNuri Amari@llvm.used = appending global [1 x ptr] [ptr @foo] 112*141391adSNuri Amari 113*141391adSNuri Amari#--- has-swift-ir-not-loaded.ll 114*141391adSNuri Amaritarget datalayout = "e-m:o-i64:64-i128:128-n32:64-S128" 115*141391adSNuri Amaritarget triple = "x86_64-apple-darwin" 116*141391adSNuri Amari 117*141391adSNuri Amari@bar = global i64 1234 118*141391adSNuri Amari@llvm.used = appending global [1 x ptr] [ptr @bar] 119*141391adSNuri Amari 120d64bad8fSTapan Thaker#--- has-swift-proto.s 121d64bad8fSTapan Thaker.section __TEXT,__swift5_fieldmd 122d64bad8fSTapan Thaker.globl $s7somelib4Blah_pMF 123d64bad8fSTapan Thaker$s7somelib4Blah_pMF: 124d64bad8fSTapan Thaker 125cf918c80SJez Ng#--- no-objc.s 1269b5148d4SJez Ng## This archive member should not be pulled in by -ObjC since it does not 1279b5148d4SJez Ng## contain any ObjC-related data. 1289b5148d4SJez Ng.globl _has_dup 129cf918c80SJez Ng.section __DATA,foo 130001ba653SJez Ng.section __DATA,bar 1319b5148d4SJez Ng.section __DATA,no_objc 1329b5148d4SJez Ng_has_dup: 133001ba653SJez Ng 134cf918c80SJez Ng#--- test.s 135cf918c80SJez Ng.globl _main 136cf918c80SJez Ng_main: 137cf918c80SJez Ng ret 1389b5148d4SJez Ng 1399b5148d4SJez Ng#--- refs-dup.s 1409b5148d4SJez Ng.data 1419b5148d4SJez Ng.quad _has_dup 1429b5148d4SJez Ng 1439b5148d4SJez Ng#--- refs-objc.s 1449b5148d4SJez Ng.data 1459b5148d4SJez Ng.quad _OBJC_CLASS_$_MyObject 146