Files
clang-p2996/lld/test/MachO/tapi-link.s
Keith Smiley 6578e0d1d0 [lld-macho] Remove duplicate minimum version info
At some point PlatformInfo's Target changed types to a type that also
has minimum deployment target info. This caused ambiguity if you tried
to get the target triple from the Target, as the actual minimum version
info was being stored separately. This bulk of this change is changing
the parsing of these values to support this.

Differential Revision: https://reviews.llvm.org/D145263
2023-03-03 13:47:01 -08:00

138 lines
5.5 KiB
ArmAsm

# REQUIRES: x86
# RUN: split-file %s %t --no-leading-lines
# RUN: llvm-mc -filetype obj -triple x86_64-apple-darwin %t/test.s -o %t/test.o
# RUN: %lld -o %t/test -lSystem -lc++ -framework CoreFoundation %t/libNested.tbd %t/libTlvWeak.tbd %t/test.o
# RUN: llvm-objdump --bind --weak-bind --no-show-raw-insn -d -r %t/test | FileCheck %s
## Targeting an arch not listed in the tbd should fallback to an ABI compatible arch
# RUN: %lld -arch x86_64h -o %t/test-compat -lSystem -lc++ -framework CoreFoundation %t/libNested.tbd %t/libTlvWeak.tbd %t/test.o
# RUN: llvm-objdump --bind --weak-bind --no-show-raw-insn -d -r %t/test-compat | FileCheck %s
## Setting LD_DYLIB_CPU_SUBTYPES_MUST_MATCH forces exact target arch match.
# RUN: env LD_DYLIB_CPU_SUBTYPES_MUST_MATCH=1 not %lld -arch x86_64h -o /dev/null -lSystem -lc++ -framework \
# RUN: CoreFoundation %t/libNested.tbd %t/libTlvWeak.tbd %t/test.o 2>&1 | FileCheck %s -check-prefix=INCOMPATIBLE
# INCOMPATIBLE: error: {{.*}}libSystem.tbd(/usr/lib/libSystem.dylib) is incompatible with x86_64h (macOS11.0)
# INCOMPATIBLE-NEXT: error: {{.*}}libc++.tbd(/usr/lib/libc++.dylib) is incompatible with x86_64h (macOS11.0)
# INCOMPATIBLE-NEXT: error: {{.*}}CoreFoundation.tbd(/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation) is incompatible with x86_64h (macOS11.0)
## libReexportSystem.tbd tests that we can reference symbols from a 2nd-level
## tapi document, re-exported by a top-level tapi document, which itself is
## re-exported by another top-level tapi document.
# RUN: %lld -o %t/with-reexport -lSystem -L%t %t/libReexportNested.tbd %t/libTlvWeak.tbd -lc++ -framework CoreFoundation %t/test.o
# RUN: llvm-objdump --bind --weak-bind --no-show-raw-insn -d -r %t/with-reexport | FileCheck %s
# CHECK: Bind table:
# CHECK-DAG: __DATA __data {{.*}} pointer 0 CoreFoundation _OBJC_CLASS_$_NSObject
# CHECK-DAG: __DATA __data {{.*}} pointer 0 CoreFoundation _OBJC_METACLASS_$_NSObject
# CHECK-DAG: __DATA __data {{.*}} pointer 0 CoreFoundation _OBJC_IVAR_$_NSConstantArray._count
# CHECK-DAG: __DATA __data {{.*}} pointer 0 CoreFoundation _OBJC_EHTYPE_$_NSException
# CHECK-DAG: __DATA __data {{.*}} pointer 0 libc++abi ___gxx_personality_v0
# CHECK-DAG: __DATA __data {{.*}} pointer 0 libNested3 _deeply_nested
# CHECK-DAG: __DATA __data {{.*}} pointer 0 libTlvWeak _weak
# CHECK-DAG: __DATA __thread_ptrs {{.*}} pointer 0 libTlvWeak _tlv
# CHECK: Weak bind table:
# CHECK-DAG: __DATA __data {{.*}} pointer 0 _weak
# RUN: llvm-otool -l %t/test | FileCheck --check-prefix=LOAD %s
# RUN: llvm-otool -l %t/with-reexport | \
# RUN: FileCheck --check-prefixes=LOAD,LOAD-REEXPORT %s
# LOAD: cmd LC_LOAD_DYLIB
# LOAD-NEXT: cmdsize
# LOAD-NEXT: name /usr/lib/libSystem.dylib
# LOAD-NEXT: time stamp
# LOAD-NEXT: current version 1.1.1
# LOAD-NEXT: compatibility version
# LOAD-REEXPORT: cmd LC_LOAD_DYLIB
# LOAD-REEXPORT-NEXT: cmdsize
# LOAD-REEXPORT-NEXT: name /usr/lib/libReexportNested.dylib
# LOAD-REEXPORT-NEXT: time stamp
# LOAD-REEXPORT-NEXT: current version 1.0.0
# LOAD-REEXPORT-NEXT: compatibility version
#--- test.s
.section __TEXT,__text
.global _main
_main:
mov _tlv@TLVP(%rip), %rax
ret
.data
.quad _OBJC_CLASS_$_NSObject
.quad _OBJC_METACLASS_$_NSObject
.quad _OBJC_IVAR_$_NSConstantArray._count
.quad _OBJC_EHTYPE_$_NSException
## This symbol is defined in an inner TAPI document within libNested.tbd.
.quad _deeply_nested
## This symbol is defined in libc++abi.tbd, but we are linking test.o against
## libc++.tbd (which re-exports libc++abi). Linking against this symbol verifies
## that .tbd file re-exports can refer not just to TAPI documents within the
## same .tbd file, but to other on-disk files as well.
.quad ___gxx_personality_v0
.quad _weak
## This tests that we can locate a symbol re-exported by a child of a TAPI
## document.
#--- libNested.tbd
--- !tapi-tbd-v3
archs: [ x86_64 ]
uuids: [ 'x86_64: 00000000-0000-0000-0000-000000000000' ]
platform: macosx
install-name: '/usr/lib/libNested.dylib'
exports:
- archs: [ x86_64 ]
re-exports: [ '/usr/lib/libNested2.dylib' ]
--- !tapi-tbd-v3
archs: [ x86_64 ]
uuids: [ 'x86_64: 00000000-0000-0000-0000-000000000001' ]
platform: macosx
install-name: '/usr/lib/libNested2.dylib'
exports:
- archs: [ x86_64 ]
re-exports: [ '/usr/lib/libNested3.dylib' ]
--- !tapi-tbd-v3
archs: [ x86_64 ]
uuids: [ 'x86_64: 00000000-0000-0000-0000-000000000002' ]
platform: macosx
install-name: '/usr/lib/libNested3.dylib'
exports:
- archs: [ x86_64 ]
symbols: [ _deeply_nested ]
...
#--- libReexportNested.tbd
--- !tapi-tbd-v3
archs: [ i386, x86_64 ]
uuids: [ 'i386: 00000000-0000-0000-0000-000000000000', 'x86_64: 00000000-0000-0000-0000-000000000001' ]
platform: macosx
install-name: '/usr/lib/libReexportNested.dylib'
exports:
- archs: [ i386, x86_64 ]
re-exports: [ 'libNested.dylib' ]
...
#--- libTlvWeak.tbd
--- !tapi-tbd
tbd-version: 4
targets: [ x86_64-macos ]
uuids:
- target: x86_64-macos
value: 00000000-0000-0000-0000-000000000000
install-name: '/usr/lib/libTlvWeak.dylib'
current-version: 0001.001.1
exports: # Validate weak & thread-local symbols
- targets: [ x86_64-macos ]
weak-symbols: [ _weak ]
thread-local-symbols: [ _tlv ]
...