140 lines · plain
1# REQUIRES: x862## FIXME: We appear to emit LC_LOAD_DYLIBs in a different order on Windows.3# UNSUPPORTED: system-windows4# RUN: rm -rf %t; split-file %s %t5# RUN: mkdir -p %t/usr/lib/system6# RUN: mkdir -p %t/System/Library/Frameworks/Foo.framework/Versions/A7# RUN: mkdir -p %t/System/Library/Frameworks/Foo.framework/Frameworks/Bar.framework/Versions/A8# RUN: mkdir -p %t/Baz.framework/Versions/A9 10# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/libfoo.s -o %t/libfoo.o11# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/libtoplevel.s -o %t/libtoplevel.o12# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/libsublevel.s -o %t/libsublevel.o13# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/framework-foo.s -o %t/framework-foo.o14# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/framework-bar.s -o %t/framework-bar.o15# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/framework-baz.s -o %t/framework-baz.o16## libunused will be used to verify that we load implicit dylibs even if we17## don't use any symbols they contain.18# RUN: echo "" | llvm-mc -filetype=obj -triple=x86_64-apple-darwin -o %t/libunused.o19# RUN: echo "" | llvm-mc -filetype=obj -triple=x86_64-apple-darwin -o %t/reexporter.o20 21# RUN: %lld -dylib -lSystem %t/libfoo.o -o %t/libfoo.dylib22# RUN: %lld -dylib -lSystem %t/libtoplevel.o -o %t/usr/lib/libtoplevel.dylib -install_name /usr/lib/libtoplevel.dylib23# RUN: %lld -dylib -lSystem %t/libsublevel.o -o %t/usr/lib/system/libsublevel.dylib -install_name /usr/lib/system/libsublevel.dylib24# RUN: %lld -dylib -lSystem %t/libunused.o -o %t/usr/lib/libunused.dylib -install_name /usr/lib/libunused.dylib25 26## Bar.framework is nested within Foo.framework.27# RUN: %lld -dylib -lSystem %t/framework-bar.o -o %t/System/Library/Frameworks/Foo.framework/Frameworks/Bar.framework/Versions/A/Bar \28# RUN: -install_name /System/Library/Frameworks/Foo.framework/Frameworks/Bar.framework/Versions/A/Bar29# RUN: ln -sf Versions/A/Bar \30# RUN: %t/System/Library/Frameworks/Foo.framework/Frameworks/Bar.framework/Bar31 32## Have Foo re-export Bar.33# RUN: %lld -dylib -F %t/System/Library/Frameworks/Foo.framework/Frameworks \34# RUN: -framework Bar -sub_umbrella Bar -lSystem %t/framework-foo.o -o %t/System/Library/Frameworks/Foo.framework/Versions/A/Foo \35# RUN: -install_name /System/Library/Frameworks/Foo.framework/Versions/A/Foo36# RUN: ln -sf Versions/A/Foo %t/System/Library/Frameworks/Foo.framework/Foo37 38# RUN: %lld -dylib -lSystem %t/framework-baz.o -o %t/Baz.framework/Versions/A/Baz \39# RUN: -install_name %t/Baz.framework/Versions/A/Baz40# RUN: ln -sf Versions/A/Baz %t/Baz.framework/Baz41 42# RUN: %lld -dylib -syslibroot %t -framework Foo -F %t -framework Baz \43# RUN: -lc++ -ltoplevel -lunused %t/usr/lib/system/libsublevel.dylib %t/libfoo.dylib \44# RUN: -sub_library libc++ -sub_library libfoo -sub_library libtoplevel \45# RUN: -sub_library libsublevel -sub_library libunused \46# RUN: -sub_umbrella Baz -sub_umbrella Foo \47# RUN: %t/reexporter.o -o %t/libreexporter.dylib48 49# RUN: llvm-mc -filetype obj -triple x86_64-apple-darwin %t/test.s -o %t/test.o50# RUN: %lld -syslibroot %t -o %t/test -lSystem -L%t -lreexporter %t/test.o51# RUN: llvm-objdump --bind --no-show-raw-insn -d %t/test | FileCheck %s52# CHECK: Bind table:53# CHECK-DAG: __DATA __data {{.*}} pointer 0 libreexporter _foo54# CHECK-DAG: __DATA __data {{.*}} pointer 0 libtoplevel _toplevel55# CHECK-DAG: __DATA __data {{.*}} pointer 0 libreexporter _sublevel56# CHECK-DAG: __DATA __data {{.*}} pointer 0 Foo _framework_foo57# CHECK-DAG: __DATA __data {{.*}} pointer 0 Foo _framework_bar58# CHECK-DAG: __DATA __data {{.*}} pointer 0 libreexporter _framework_baz59# CHECK-DAG: __DATA __data {{.*}} pointer 0 libc++abi ___gxx_personality_v060 61# RUN: llvm-otool -l %t/test | FileCheck %s \62# RUN: --check-prefix=LOAD -DDIR=%t --implicit-check-not LC_LOAD_DYLIB63## Check that we don't create duplicate LC_LOAD_DYLIBs.64# RUN: %lld -syslibroot %t -o %t/test -lSystem -L%t -lreexporter -ltoplevel %t/test.o65# RUN: llvm-otool -l %t/test | FileCheck %s \66# RUN: --check-prefix=LOAD -DDIR=%t --implicit-check-not LC_LOAD_DYLIB67 68# LOAD: cmd LC_LOAD_DYLIB69# LOAD-NEXT: cmdsize70# LOAD-NEXT: name /usr/lib/libSystem.dylib71# LOAD: cmd LC_LOAD_DYLIB72# LOAD-NEXT: cmdsize73# LOAD-NEXT: name [[DIR]]/libreexporter.dylib74# LOAD: cmd LC_LOAD_DYLIB75# LOAD-NEXT: cmdsize76# LOAD-NEXT: name /System/Library/Frameworks/Foo.framework/Versions/A/Foo77# LOAD: cmd LC_LOAD_DYLIB78# LOAD-NEXT: cmdsize79# LOAD-NEXT: name /usr/lib/libc++abi.dylib80# LOAD: cmd LC_LOAD_DYLIB81# LOAD-NEXT: cmdsize82# LOAD-NEXT: name /usr/lib/libtoplevel.dylib83 84# RUN: %lld -no_implicit_dylibs -syslibroot %t -o %t/no-implicit -lSystem -L%t -lreexporter %t/test.o85# RUN: llvm-objdump --bind --no-show-raw-insn -d %t/no-implicit | FileCheck %s --check-prefix=NO-IMPLICIT86# NO-IMPLICIT: Bind table:87# NO-IMPLICIT-DAG: __DATA __data {{.*}} pointer 0 libreexporter _foo88# NO-IMPLICIT-DAG: __DATA __data {{.*}} pointer 0 libreexporter _toplevel89# NO-IMPLICIT-DAG: __DATA __data {{.*}} pointer 0 libreexporter _sublevel90# NO-IMPLICIT-DAG: __DATA __data {{.*}} pointer 0 libreexporter _framework_foo91# NO-IMPLICIT-DAG: __DATA __data {{.*}} pointer 0 libreexporter _framework_bar92# NO-IMPLICIT-DAG: __DATA __data {{.*}} pointer 0 libreexporter _framework_baz93# NO-IMPLICIT-DAG: __DATA __data {{.*}} pointer 0 libreexporter ___gxx_personality_v094 95#--- libfoo.s96.data97.globl _foo98_foo:99 100#--- libtoplevel.s101.data102.globl _toplevel103_toplevel:104 105#--- libsublevel.s106.data107.globl _sublevel108_sublevel:109 110#--- framework-foo.s111.data112.globl _framework_foo113_framework_foo:114 115#--- framework-bar.s116.data117.globl _framework_bar118_framework_bar:119 120#--- framework-baz.s121.data122.globl _framework_baz123_framework_baz:124 125#--- test.s126.text127.globl _main128 129_main:130 ret131 132.data133 .quad _foo134 .quad _toplevel135 .quad _sublevel136 .quad _framework_foo137 .quad _framework_bar138 .quad _framework_baz139 .quad ___gxx_personality_v0140