Files
clang-p2996/lld/test/MachO/archive.s
Keith Smiley 67090e3446 [lld-macho] Implement -noall_load
This flag is the default, so in ld64 it is not implemented, but it can
be useful to negate previous -all_load arguments. Specifically if your
build system has some global linker flags, that you may want to negate
for specific links. We use something like this today to make sure some
C++ symbols are automatically discovered for all links, which passing
-all_load hides.

Differential Revision: https://reviews.llvm.org/D117629
2022-01-19 13:12:18 -08:00

67 lines
1.8 KiB
ArmAsm

# 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/4.s -o %t/4.o
# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/main.s -o %t/main.o
# RUN: llvm-ar rcs %t/test.a %t/2.o %t/3.o %t/4.o
# RUN: %lld %t/main.o %t/test.a -o %t/test.out
## TODO: Run llvm-nm -p to validate symbol order
# RUN: llvm-nm %t/test.out | FileCheck %s
# CHECK: T _bar
# CHECK: T _boo
# CHECK: T _main
## Linking with the archive first in the command line shouldn't change anything
# RUN: %lld %t/test.a %t/main.o -o %t/test.out
# RUN: llvm-nm %t/test.out | FileCheck %s --check-prefix ARCHIVE-FIRST
# ARCHIVE-FIRST: T _bar
# ARCHIVE-FIRST: T _boo
# ARCHIVE-FIRST: T _main
# RUN: llvm-nm %t/test.out | FileCheck %s --check-prefix VISIBLE
# VISIBLE-NOT: T _undefined
# VISIBLE-NOT: T _unused
# RUN: %lld %t/test.a %t/main.o -o %t/all-load -noall_load -all_load
# RUN: llvm-nm %t/all-load | FileCheck %s --check-prefix ALL-LOAD
# ALL-LOAD: T _bar
# ALL-LOAD: T _boo
# ALL-LOAD: T _main
# ALL-LOAD: T _unused
# RUN: %lld %t/test.a %t/main.o -o %t/no-all-load -all_load -noall_load
# RUN: llvm-nm %t/no-all-load | FileCheck %s --check-prefix NO-ALL-LOAD
# RUN: %lld %t/test.a %t/main.o -o %t/no-all-load-only -noall_load
# RUN: llvm-nm %t/no-all-load-only | FileCheck %s --check-prefix NO-ALL-LOAD
# NO-ALL-LOAD-NOT: T _unused
## Multiple archives defining the same symbols aren't an issue, due to lazy
## loading
# RUN: cp %t/test.a %t/test2.a
# RUN: %lld %t/test.a %t/test2.a %t/main.o -o /dev/null
#--- 2.s
.globl _boo
_boo:
ret
#--- 3.s
.globl _bar
_bar:
ret
#--- 4.s
.globl _undefined, _unused
_unused:
ret
#--- main.s
.globl _main
_main:
callq _boo
callq _bar
ret