From 1c50fe4daeb144e379f53c8ca33d996be5df54ae Mon Sep 17 00:00:00 2001 From: Hugo Melder Date: Mon, 20 Oct 2025 13:05:04 +0200 Subject: [PATCH] BlocksRuntime: Expose NSConcrete* globals on Win32 --- src/BlocksRuntime/Block_private.h | 11 ++++++++++- src/BlocksRuntime/BlocksRuntime.def | 4 ++++ src/BlocksRuntime/data.c | 7 +++++-- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/BlocksRuntime/Block_private.h b/src/BlocksRuntime/Block_private.h index b2e1512ac..df6fa1988 100644 --- a/src/BlocksRuntime/Block_private.h +++ b/src/BlocksRuntime/Block_private.h @@ -197,9 +197,17 @@ BLOCK_EXPORT bool _Block_tryRetain(const void *aBlock); // Callable only from the ARR weak subsystem while in exclusion zone BLOCK_EXPORT bool _Block_isDeallocating(const void *aBlock); - // the raw data space for runtime classes for blocks // class+meta used for stack, malloc, and collectable based blocks +#if defined(_WIN32) +extern void * _NSConcreteMallocBlock[32]; +extern void * _NSConcreteAutoBlock[32]; +extern void * _NSConcreteFinalizingBlock[32]; +extern void * _NSConcreteWeakBlockVariable[32]; +// declared in Block.h +// extern void * _NSConcreteGlobalBlock[32]; +// extern void * _NSConcreteStackBlock[32]; +#else BLOCK_EXPORT void * _NSConcreteMallocBlock[32]; BLOCK_EXPORT void * _NSConcreteAutoBlock[32]; BLOCK_EXPORT void * _NSConcreteFinalizingBlock[32]; @@ -207,6 +215,7 @@ BLOCK_EXPORT void * _NSConcreteWeakBlockVariable[32]; // declared in Block.h // BLOCK_EXPORT void * _NSConcreteGlobalBlock[32]; // BLOCK_EXPORT void * _NSConcreteStackBlock[32]; +#endif // the intercept routines that must be used under GC diff --git a/src/BlocksRuntime/BlocksRuntime.def b/src/BlocksRuntime/BlocksRuntime.def index a3b1aabeb..a4142b28b 100644 --- a/src/BlocksRuntime/BlocksRuntime.def +++ b/src/BlocksRuntime/BlocksRuntime.def @@ -2,3 +2,7 @@ LIBRARY BlocksRuntime EXPORTS _NSConcreteGlobalBlock CONSTANT _NSConcreteStackBlock CONSTANT + _NSConcreteMallocBlock CONSTANT + _NSConcreteAutoBlock CONSTANT + _NSConcreteFinalizingBlock CONSTANT + _NSConcreteWeakBlockVariable CONSTANT diff --git a/src/BlocksRuntime/data.c b/src/BlocksRuntime/data.c index fe4745b04..f96ea2586 100644 --- a/src/BlocksRuntime/data.c +++ b/src/BlocksRuntime/data.c @@ -19,12 +19,15 @@ We keep these in a separate file so that we can include the runtime code in test #if defined(_WIN32) void * _NSConcreteStackBlock[32] = { 0 }; void * _NSConcreteGlobalBlock[32] = { 0 }; +void * _NSConcreteMallocBlock[32] = { 0 }; +void * _NSConcreteAutoBlock[32] = { 0 }; +void * _NSConcreteFinalizingBlock[32] = { 0 }; +void * _NSConcreteWeakBlockVariable[32] = { 0 }; #else BLOCK_ABI void * _NSConcreteStackBlock[32] = { 0 }; BLOCK_ABI void * _NSConcreteGlobalBlock[32] = { 0 }; -#endif - BLOCK_ABI void * _NSConcreteMallocBlock[32] = { 0 }; BLOCK_ABI void * _NSConcreteAutoBlock[32] = { 0 }; BLOCK_ABI void * _NSConcreteFinalizingBlock[32] = { 0 }; BLOCK_ABI void * _NSConcreteWeakBlockVariable[32] = { 0 }; +#endif