Skip to content

Commit 3c21857

Browse files
committed
Extend and test install_name symbols for back-deployed concurrency.
With these magic symbols, programs that link against the _Concurrency module with a deployment target prior to iOS 15 / macOS 12 / watchOS 8 will reference `libswift_Concurrency.dylib` via rpath. Fixes rdar://81187835.
1 parent 5743040 commit 3c21857

File tree

2 files changed

+69
-0
lines changed

2 files changed

+69
-0
lines changed

stdlib/public/Concurrency/linker-support/magic-symbols-for-install-name.c

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,20 @@
4040

4141
#if TARGET_OS_WATCH
4242
// Check watchOS first, because TARGET_OS_IPHONE includes watchOS.
43+
RPATH_INSTALL_NAME_DIRECTIVE( 2, 0)
44+
RPATH_INSTALL_NAME_DIRECTIVE( 2, 1)
45+
RPATH_INSTALL_NAME_DIRECTIVE( 2, 2)
46+
RPATH_INSTALL_NAME_DIRECTIVE( 3, 0)
47+
RPATH_INSTALL_NAME_DIRECTIVE( 3, 1)
48+
RPATH_INSTALL_NAME_DIRECTIVE( 3, 2)
49+
RPATH_INSTALL_NAME_DIRECTIVE( 4, 0)
50+
RPATH_INSTALL_NAME_DIRECTIVE( 4, 1)
51+
RPATH_INSTALL_NAME_DIRECTIVE( 4, 2)
52+
RPATH_INSTALL_NAME_DIRECTIVE( 4, 3)
53+
RPATH_INSTALL_NAME_DIRECTIVE( 5, 0)
54+
RPATH_INSTALL_NAME_DIRECTIVE( 5, 1)
55+
RPATH_INSTALL_NAME_DIRECTIVE( 5, 2)
56+
RPATH_INSTALL_NAME_DIRECTIVE( 5, 3)
4357
RPATH_INSTALL_NAME_DIRECTIVE( 6, 0)
4458
RPATH_INSTALL_NAME_DIRECTIVE( 6, 1)
4559
RPATH_INSTALL_NAME_DIRECTIVE( 6, 2)
@@ -52,6 +66,32 @@
5266
RPATH_INSTALL_NAME_DIRECTIVE( 7, 5)
5367
RPATH_INSTALL_NAME_DIRECTIVE( 7, 6)
5468
#elif TARGET_OS_IPHONE
69+
RPATH_INSTALL_NAME_DIRECTIVE( 7, 0)
70+
RPATH_INSTALL_NAME_DIRECTIVE( 7, 1)
71+
RPATH_INSTALL_NAME_DIRECTIVE( 8, 0)
72+
RPATH_INSTALL_NAME_DIRECTIVE( 8, 1)
73+
RPATH_INSTALL_NAME_DIRECTIVE( 8, 2)
74+
RPATH_INSTALL_NAME_DIRECTIVE( 8, 3)
75+
RPATH_INSTALL_NAME_DIRECTIVE( 8, 4)
76+
RPATH_INSTALL_NAME_DIRECTIVE( 9, 0)
77+
RPATH_INSTALL_NAME_DIRECTIVE( 9, 1)
78+
RPATH_INSTALL_NAME_DIRECTIVE( 9, 2)
79+
RPATH_INSTALL_NAME_DIRECTIVE( 9, 3)
80+
RPATH_INSTALL_NAME_DIRECTIVE(10, 0)
81+
RPATH_INSTALL_NAME_DIRECTIVE(10, 1)
82+
RPATH_INSTALL_NAME_DIRECTIVE(10, 2)
83+
RPATH_INSTALL_NAME_DIRECTIVE(10, 3)
84+
RPATH_INSTALL_NAME_DIRECTIVE(11, 0)
85+
RPATH_INSTALL_NAME_DIRECTIVE(11, 1)
86+
RPATH_INSTALL_NAME_DIRECTIVE(11, 2)
87+
RPATH_INSTALL_NAME_DIRECTIVE(11, 3)
88+
RPATH_INSTALL_NAME_DIRECTIVE(11, 4)
89+
RPATH_INSTALL_NAME_DIRECTIVE(12, 0)
90+
RPATH_INSTALL_NAME_DIRECTIVE(12, 1)
91+
RPATH_INSTALL_NAME_DIRECTIVE(12, 2)
92+
RPATH_INSTALL_NAME_DIRECTIVE(12, 3)
93+
RPATH_INSTALL_NAME_DIRECTIVE(12, 4)
94+
RPATH_INSTALL_NAME_DIRECTIVE(12, 5)
5595
RPATH_INSTALL_NAME_DIRECTIVE(13, 0)
5696
RPATH_INSTALL_NAME_DIRECTIVE(13, 1)
5797
RPATH_INSTALL_NAME_DIRECTIVE(13, 2)
@@ -68,14 +108,22 @@
68108
RPATH_INSTALL_NAME_DIRECTIVE(14, 5)
69109
RPATH_INSTALL_NAME_DIRECTIVE(14, 6)
70110
RPATH_INSTALL_NAME_DIRECTIVE(14, 7)
111+
RPATH_INSTALL_NAME_DIRECTIVE(14, 8)
71112
#elif TARGET_OS_OSX
113+
RPATH_INSTALL_NAME_DIRECTIVE(10, 9)
114+
RPATH_INSTALL_NAME_DIRECTIVE(10, 10)
115+
RPATH_INSTALL_NAME_DIRECTIVE(10, 11)
116+
RPATH_INSTALL_NAME_DIRECTIVE(10, 12)
117+
RPATH_INSTALL_NAME_DIRECTIVE(10, 13)
72118
RPATH_INSTALL_NAME_DIRECTIVE(10, 15)
119+
RPATH_INSTALL_NAME_DIRECTIVE(10, 14)
73120
RPATH_INSTALL_NAME_DIRECTIVE(11, 0)
74121
RPATH_INSTALL_NAME_DIRECTIVE(11, 1)
75122
RPATH_INSTALL_NAME_DIRECTIVE(11, 2)
76123
RPATH_INSTALL_NAME_DIRECTIVE(11, 3)
77124
RPATH_INSTALL_NAME_DIRECTIVE(11, 4)
78125
RPATH_INSTALL_NAME_DIRECTIVE(11, 5)
126+
RPATH_INSTALL_NAME_DIRECTIVE(11, 6)
79127
#else
80128
#error Unknown target.
81129
#endif
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// RUN: %empty-directory(%t)
2+
// RUN: %target-build-swift -target x86_64-apple-macosx12 %s -o %t/linking_direct
3+
// RUN: %target-build-swift -target x86_64-apple-macosx11 %s -o %t/linking_rpath
4+
// RUN: %target-build-swift -target x86_64-apple-macosx10.10 %s -o %t/linking_rpath_old
5+
6+
// RUN: otool -L %t/linking_direct | %FileCheck -check-prefix CHECK-DIRECT %s
7+
// RUN: otool -L %t/linking_rpath | %FileCheck -check-prefix CHECK-RPATH %s
8+
// RUN: otool -L %t/linking_rpath_old | %FileCheck -check-prefix CHECK-RPATH %s
9+
10+
// REQUIRES: OS=macosx
11+
12+
// CHECK-DIRECT: /usr/lib/swift/libswift_Concurrency.dylib
13+
// CHECK-RPATH: @rpath/libswift_Concurrency.dylib
14+
15+
@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *)
16+
public struct X {
17+
public func f() async -> Int { return 0 }
18+
public func g() async -> Int {
19+
await f()
20+
}
21+
}

0 commit comments

Comments
 (0)