| # REQUIRES: x86 |
| # RUN: rm -rf %t; split-file %s %t |
| |
| # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/libweak-defines.s -o %t/libweak-defines.o |
| # RUN: %lld -dylib %t/libweak-defines.o -o %t/libweak-defines.dylib |
| # RUN: llvm-readobj --file-headers %t/libweak-defines.dylib | FileCheck %s --check-prefix=WEAK-DEFINES-AND-BINDS |
| |
| # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/binds-to-weak.s -o %t/binds-to-weak.o |
| # RUN: %lld -lSystem -L%t -lweak-defines -o %t/binds-to-weak %t/binds-to-weak.o |
| # RUN: llvm-readobj --file-headers %t/binds-to-weak | FileCheck %s --check-prefix=WEAK-BINDS-ONLY |
| |
| # RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/overrides-weak.s -o %t/overrides-weak.o |
| # RUN: %lld -lSystem -L%t -lweak-defines -o %t/overrides-weak %t/overrides-weak.o |
| # RUN: llvm-readobj --file-headers %t/overrides-weak | FileCheck %s --check-prefix=WEAK-DEFINES-ONLY |
| |
| # WEAK-DEFINES-AND-BINDS: MH_BINDS_TO_WEAK |
| # WEAK-DEFINES-AND-BINDS: MH_WEAK_DEFINES |
| |
| # WEAK-BINDS-ONLY-NOT: MH_WEAK_DEFINES |
| # WEAK-BINDS-ONLY: MH_BINDS_TO_WEAK |
| # WEAK-BINDS-ONLY-NOT: MH_WEAK_DEFINES |
| |
| # WEAK-DEFINES-ONLY-NOT: MH_BINDS_TO_WEAK |
| # WEAK-DEFINES-ONLY: MH_WEAK_DEFINES |
| # WEAK-DEFINES-ONLY-NOT: MH_BINDS_TO_WEAK |
| |
| #--- libweak-defines.s |
| |
| .globl _foo |
| .weak_definition _foo |
| _foo: |
| ret |
| |
| #--- binds-to-weak.s |
| |
| .globl _main |
| _main: |
| callq _foo |
| ret |
| |
| ## Don't generate MH_WEAK_DEFINES for weak locals |
| .weak_definition _weak_local |
| _weak_local: |
| |
| #--- overrides-weak.s |
| |
| .globl _main, _foo |
| _foo: |
| |
| _main: |
| ret |