# REQUIRES: x86 # RUN: rm -rf %t; split-file %s %t # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/2.s -o %t/2.o # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/3.s -o %t/3.o # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/main.s -o %t/main.o # RUN: %lld -lSystem -dylib -install_name %t/my_lib.dylib -o %t/mylib.dylib %t/2.o # RUN: %lld -lSystem %t/2.o %t/main.o -o %t/main # RUN: %lld -lSystem -bundle -bundle_loader %t/main -o %t/bundle.bundle %t/3.o %t/mylib.dylib ## Check bundle.bundle to ensure the `my_func` symbol is from executable # RUN: llvm-nm -m %t/bundle.bundle | FileCheck %s --check-prefix BUNDLE # BUNDLE: (undefined) external my_func (from executable) # RUN: llvm-objdump --macho --lazy-bind %t/bundle.bundle | FileCheck %s --check-prefix BUNDLE-OBJ # BUNDLE-OBJ: segment section address dylib symbol # BUNDLE-OBJ: __DATA __la_symbol_ptr 0x{{[0-9a-f]*}} main-executable my_fun # RUN: %lld -lSystem -bundle -bundle_loader %t/main -o %t/bundle2.bundle %t/3.o %t/2.o ## Check bundle.bundle to ensure the `my_func` symbol is not from executable # RUN: llvm-nm -m %t/bundle2.bundle | FileCheck %s --check-prefix BUNDLE2 # BUNDLE2: (__TEXT,__text) external my_func # Test that bundle_loader can only be used with MachO bundle output. # RUN: not %lld -lSystem -bundle_loader %t/main -o %t/bundle3.bundle 2>&1 | FileCheck %s --check-prefix ERROR # ERROR: -bundle_loader can only be used with MachO bundle output #--- 2.s # my_lib: This contains the exported function .globl my_func my_func: retq #--- 3.s # my_user.s: This is the user/caller of the # exported function .text my_user: callq my_func() retq #--- main.s # main.s: dummy exec/main loads the exported function. # This is basically a way to say `my_user` should get # `my_func` from this executable. .globl _main .text _main: retq