Skip to content

Commit b609d7d

Browse files
committed
patch libdispatch BlocksRuntime header
libBlocksRuntime does not export the symbols correctly when building on Windows.
1 parent 0c34941 commit b609d7d

File tree

1 file changed

+65
-0
lines changed

1 file changed

+65
-0
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

0 commit comments

Comments
 (0)