Skip to content

Commit 056c119

Browse files
committed
Add blocks rt patches for libobjc2 and libdispatch
libBlocksRuntime does not export the symbols correctly when building on Windows. Additionally, libobjc2 has some CMake configuration bugs.
1 parent f0392f4 commit 056c119

File tree

4 files changed

+445
-38
lines changed

4 files changed

+445
-38
lines changed
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
diff --git a/src/BlocksRuntime/Block_private.h b/src/BlocksRuntime/Block_private.h
2+
index b2e1512..df6fa19 100644
3+
--- a/src/BlocksRuntime/Block_private.h
4+
+++ b/src/BlocksRuntime/Block_private.h
5+
@@ -197,9 +197,17 @@ BLOCK_EXPORT bool _Block_tryRetain(const void *aBlock);
6+
// Callable only from the ARR weak subsystem while in exclusion zone
7+
BLOCK_EXPORT bool _Block_isDeallocating(const void *aBlock);
8+
9+
-
10+
// the raw data space for runtime classes for blocks
11+
// class+meta used for stack, malloc, and collectable based blocks
12+
+#if defined(_WIN32)
13+
+extern void * _NSConcreteMallocBlock[32];
14+
+extern void * _NSConcreteAutoBlock[32];
15+
+extern void * _NSConcreteFinalizingBlock[32];
16+
+extern void * _NSConcreteWeakBlockVariable[32];
17+
+// declared in Block.h
18+
+// extern void * _NSConcreteGlobalBlock[32];
19+
+// extern void * _NSConcreteStackBlock[32];
20+
+#else
21+
BLOCK_EXPORT void * _NSConcreteMallocBlock[32];
22+
BLOCK_EXPORT void * _NSConcreteAutoBlock[32];
23+
BLOCK_EXPORT void * _NSConcreteFinalizingBlock[32];
24+
@@ -207,6 +215,7 @@ BLOCK_EXPORT void * _NSConcreteWeakBlockVariable[32];
25+
// declared in Block.h
26+
// BLOCK_EXPORT void * _NSConcreteGlobalBlock[32];
27+
// BLOCK_EXPORT void * _NSConcreteStackBlock[32];
28+
+#endif
29+
30+
31+
// the intercept routines that must be used under GC
32+
diff --git a/src/BlocksRuntime/BlocksRuntime.def b/src/BlocksRuntime/BlocksRuntime.def
33+
index a3b1aab..a4142b2 100644
34+
--- a/src/BlocksRuntime/BlocksRuntime.def
35+
+++ b/src/BlocksRuntime/BlocksRuntime.def
36+
@@ -2,3 +2,7 @@ LIBRARY BlocksRuntime
37+
EXPORTS
38+
_NSConcreteGlobalBlock CONSTANT
39+
_NSConcreteStackBlock CONSTANT
40+
+ _NSConcreteMallocBlock CONSTANT
41+
+ _NSConcreteAutoBlock CONSTANT
42+
+ _NSConcreteFinalizingBlock CONSTANT
43+
+ _NSConcreteWeakBlockVariable CONSTANT
44+
diff --git a/src/BlocksRuntime/data.c b/src/BlocksRuntime/data.c
45+
index fe4745b..f96ea25 100644
46+
--- a/src/BlocksRuntime/data.c
47+
+++ b/src/BlocksRuntime/data.c
48+
@@ -19,12 +19,15 @@ We keep these in a separate file so that we can include the runtime code in test
49+
#if defined(_WIN32)
50+
void * _NSConcreteStackBlock[32] = { 0 };
51+
void * _NSConcreteGlobalBlock[32] = { 0 };
52+
+void * _NSConcreteMallocBlock[32] = { 0 };
53+
+void * _NSConcreteAutoBlock[32] = { 0 };
54+
+void * _NSConcreteFinalizingBlock[32] = { 0 };
55+
+void * _NSConcreteWeakBlockVariable[32] = { 0 };
56+
#else
57+
BLOCK_ABI void * _NSConcreteStackBlock[32] = { 0 };
58+
BLOCK_ABI void * _NSConcreteGlobalBlock[32] = { 0 };
59+
-#endif
60+
-
61+
BLOCK_ABI void * _NSConcreteMallocBlock[32] = { 0 };
62+
BLOCK_ABI void * _NSConcreteAutoBlock[32] = { 0 };
63+
BLOCK_ABI void * _NSConcreteFinalizingBlock[32] = { 0 };
64+
BLOCK_ABI void * _NSConcreteWeakBlockVariable[32] = { 0 };
65+
+#endif

patches/libdispatch-own-blocksruntime.patch

Lines changed: 0 additions & 36 deletions
This file was deleted.

0 commit comments

Comments
 (0)