File: tapi-link.s

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (137 lines) | stat: -rw-r--r-- 5,599 bytes parent folder | download | duplicates (12)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# 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 ]
...