Skip to content

Commit a040485

Browse files
committed
🛠 try to wrangle weak var/function definitions
1 parent 2d8f42c commit a040485

3 files changed

Lines changed: 69 additions & 32 deletions

File tree

‎include/ztd/version/detail/version.c.h‎

Lines changed: 46 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1072,27 +1072,63 @@
10721072
#endif
10731073

10741074
#if ZTD_IS_ON(ZTD_COMPILER_GCC) || ZTD_IS_ON(ZTD_COMPILER_CLANG)
1075-
#define ZTD_ATTR_WEAK_FUNC_I_ __attribute__((weak))
1075+
#define ZTD_ATTR_WEAK_I_ __attribute__((weak))
10761076
#elif (ZTD_HAS_ATTRIBUTE_I_(weak) != 0L)
1077-
#define ZTD_ATTR_WEAK_FUNC_I_ [[weak]]
1077+
#define ZTD_ATTR_WEAK_I_ [[weak]]
10781078
#elif (ZTD_HAS_ATTRIBUTE_I_(gcc::weak) != 0L)
1079-
#define ZTD_ATTR_WEAK_FUNC_I_ [[gcc::weak]]
1079+
#define ZTD_ATTR_WEAK_I_ [[gcc::weak]]
10801080
#elif (ZTD_HAS_ATTRIBUTE_I_(clang::weak) != 0L)
1081-
#define ZTD_ATTR_WEAK_FUNC_I_ [[clang::weak]]
1081+
#define ZTD_ATTR_WEAK_I_ [[clang::weak]]
10821082
#else
1083-
#define ZTD_ATTR_WEAK_FUNC_I_
1083+
#define ZTD_ATTR_WEAK_I_
10841084
#endif
10851085

10861086
#if ZTD_IS_ON(ZTD_COMPILER_GCC) || ZTD_IS_ON(ZTD_COMPILER_CLANG)
1087-
#define ZTD_ATTR_WEAK_I_ __attribute__((weak))
1087+
#define ZTD_ATTR_SELECTANY_I_ __attribute__((selectany))
1088+
#elif ZTD_IS_ON(ZTD_COMPILER_VCXX)
1089+
#define ZTD_ATTR_SELECTANY_I_ declspec(selectany)
10881090
#elif (ZTD_HAS_ATTRIBUTE_I_(weak) != 0L)
1089-
#define ZTD_ATTR_WEAK_I_ [[weak]]
1091+
#define ZTD_ATTR_SELECTANY_I_ [[weak]]
10901092
#elif (ZTD_HAS_ATTRIBUTE_I_(gcc::weak) != 0L)
1091-
#define ZTD_ATTR_WEAK_I_ [[gcc::weak]]
1093+
#define ZTD_ATTR_SELECTANY_I_ [[gcc::weak]]
10921094
#elif (ZTD_HAS_ATTRIBUTE_I_(clang::weak) != 0L)
1093-
#define ZTD_ATTR_WEAK_I_ [[clang::weak]]
1095+
#define ZTD_ATTR_SELECTANY_I_ [[clang::weak]]
10941096
#else
1095-
#define ZTD_ATTR_WEAK_I_
1097+
#define ZTD_ATTR_SELECTANY_I_
1098+
#endif
1099+
1100+
#if defined(ZTD_ATTR_WEAK_VAR)
1101+
#define ZTD_ATTR_WEAK_VAR_I_ ZTD_ATTR_WEAK_VAR
1102+
#elif ZTD_IS_ON(ZTD_COMPILER_GCC) || ZTD_IS_ON(ZTD_COMPILER_CLANG)
1103+
#define ZTD_ATTR_WEAK_VAR_I_ ZTD_ATTR_WEAK_I_
1104+
#elif ZTD_IS_ON(ZTD_COMPILER_VCXX)
1105+
#define ZTD_ATTR_WEAK_VAR_I_ ZTD_ATTR_SELECTANY_I_
1106+
#else
1107+
#define ZTD_ATTR_WEAK_VAR_I_
1108+
#endif
1109+
1110+
#if defined(ZTD_ATTR_WEAK_VAR_DEF)
1111+
#define ZTD_ATTR_WEAK_VAR_DEF_I_ ZTD_ATTR_WEAK_VAR_DEF
1112+
#elif ZTD_IS_ON(ZTD_COMPILER_CLANG) || ZTD_IS_ON(ZTD_COMPILER_GCC)
1113+
#define ZTD_ATTR_WEAK_VAR_DEF_I_ ZTD_ATTR_WEAK_VAR_I_
1114+
#else
1115+
#define ZTD_ATTR_WEAK_VAR_DEF_I_
1116+
#endif
1117+
1118+
#if defined(ZTD_ATTR_WEAK_FUNC_DEF)
1119+
#define ZTD_ATTR_WEAK_FUNC_DEF_I_ ZTD_ATTR_WEAK_FUNC_DEF
1120+
#elif ZTD_IS_ON(ZTD_COMPILER_CLANG)
1121+
#define ZTD_ATTR_WEAK_FUNC_DEF_I_ ZTD_ATTR_WEAK_VAR_I_
1122+
#else
1123+
#define ZTD_ATTR_WEAK_FUNC_DEF_I_
1124+
#endif
1125+
1126+
#if defined(ZTD_ATTR_WEAK_FUNC)
1127+
#define ZTD_ATTR_WEAK_FUNC_I_ ZTD_ATTR_WEAK_FUNC
1128+
#elif ZTD_IS_ON(ZTD_COMPILER_CLANG) || ZTD_IS_ON(ZTD_COMPILER_GCC)
1129+
#define ZTD_ATTR_WEAK_FUNC_I_ ZTD_ATTR_WEAK_VAR_I_
1130+
#else
1131+
#define ZTD_ATTR_WEAK_FUNC_I_
10961132
#endif
10971133

10981134
#if ZTD_IS_ON(ZTD_COMPILER_GCC) || ZTD_IS_ON(ZTD_COMPILER_CLANG)

‎source/include/ztd/blocks/block_private.h‎

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -104,32 +104,32 @@ enum {
104104
/* Runtime entry point called by compiler when assigning objects inside copy helper routines */
105105
ZTD_USE(ZTD_BLOCKS_API_LINKAGE)
106106
ZTD_USE(ZTD_EXTERN_C)
107-
void _Block_object_assign(void* destAddr, const void* object, const int flags) ZTD_USE(ZTD_ATTR_WEAK);
107+
void _Block_object_assign(void* destAddr, const void* object, const int flags) ZTD_USE(ZTD_ATTR_WEAK_FUNC);
108108
/* BLOCK_FIELD_IS_BYREF is only used from within block copy helpers */
109109

110110

111111
/* runtime entry point called by the compiler when disposing of objects inside dispose helper routine */
112112
ZTD_USE(ZTD_BLOCKS_API_LINKAGE)
113-
ZTD_USE(ZTD_EXTERN_C) void _Block_object_dispose(const void* object, const int flags) ZTD_USE(ZTD_ATTR_WEAK);
113+
ZTD_USE(ZTD_EXTERN_C) void _Block_object_dispose(const void* object, const int flags) ZTD_USE(ZTD_ATTR_WEAK_FUNC);
114114

115115

116116

117117
/* Other support functions */
118118

119119
/* Runtime entry to get total size of a closure */
120120
ZTD_USE(ZTD_BLOCKS_API_LINKAGE)
121-
ZTD_USE(ZTD_EXTERN_C) unsigned long int Block_size(void* block_basic) ZTD_USE(ZTD_ATTR_WEAK);
121+
ZTD_USE(ZTD_EXTERN_C) unsigned long int Block_size(void* block_basic) ZTD_USE(ZTD_ATTR_WEAK_FUNC);
122122

123123

124124

125125
/* the raw data space for runtime classes for blocks */
126126
/* class+meta used for stack, malloc, and collectable based blocks */
127-
ZTD_USE(ZTD_BLOCKS_API_LINKAGE) ZTD_USE(ZTD_EXTERN_C) void* _NSConcreteStackBlock[32] ZTD_USE(ZTD_ATTR_WEAK);
128-
ZTD_USE(ZTD_BLOCKS_API_LINKAGE) ZTD_USE(ZTD_EXTERN_C) void* _NSConcreteMallocBlock[32] ZTD_USE(ZTD_ATTR_WEAK);
129-
ZTD_USE(ZTD_BLOCKS_API_LINKAGE) ZTD_USE(ZTD_EXTERN_C) void* _NSConcreteAutoBlock[32] ZTD_USE(ZTD_ATTR_WEAK);
130-
ZTD_USE(ZTD_BLOCKS_API_LINKAGE) ZTD_USE(ZTD_EXTERN_C) void* _NSConcreteFinalizingBlock[32] ZTD_USE(ZTD_ATTR_WEAK);
131-
ZTD_USE(ZTD_BLOCKS_API_LINKAGE) ZTD_USE(ZTD_EXTERN_C) void* _NSConcreteGlobalBlock[32] ZTD_USE(ZTD_ATTR_WEAK);
132-
ZTD_USE(ZTD_BLOCKS_API_LINKAGE) ZTD_USE(ZTD_EXTERN_C) void* _NSConcreteWeakBlockVariable[32] ZTD_USE(ZTD_ATTR_WEAK);
127+
ZTD_USE(ZTD_BLOCKS_API_LINKAGE) ZTD_USE(ZTD_EXTERN_C) void* _NSConcreteStackBlock[32] ZTD_USE(ZTD_ATTR_WEAK_VAR);
128+
ZTD_USE(ZTD_BLOCKS_API_LINKAGE) ZTD_USE(ZTD_EXTERN_C) void* _NSConcreteMallocBlock[32] ZTD_USE(ZTD_ATTR_WEAK_VAR);
129+
ZTD_USE(ZTD_BLOCKS_API_LINKAGE) ZTD_USE(ZTD_EXTERN_C) void* _NSConcreteAutoBlock[32] ZTD_USE(ZTD_ATTR_WEAK_VAR);
130+
ZTD_USE(ZTD_BLOCKS_API_LINKAGE) ZTD_USE(ZTD_EXTERN_C) void* _NSConcreteFinalizingBlock[32] ZTD_USE(ZTD_ATTR_WEAK_VAR);
131+
ZTD_USE(ZTD_BLOCKS_API_LINKAGE) ZTD_USE(ZTD_EXTERN_C) void* _NSConcreteGlobalBlock[32] ZTD_USE(ZTD_ATTR_WEAK_VAR);
132+
ZTD_USE(ZTD_BLOCKS_API_LINKAGE) ZTD_USE(ZTD_EXTERN_C) void* _NSConcreteWeakBlockVariable[32] ZTD_USE(ZTD_ATTR_WEAK_VAR);
133133

134134

135135
/* the intercept routines that must be used under GC */
@@ -138,25 +138,26 @@ ZTD_USE(ZTD_EXTERN_C)
138138
void _Block_use_GC(void* (*alloc)(const unsigned long, const bool isOne, const bool isObject),
139139
void (*setHasRefcount)(const void*, const bool), void (*gc_assign_strong)(void*, void**),
140140
void (*gc_assign_weak)(const void*, void*), void (*gc_memmove)(void*, void*, unsigned long))
141-
ZTD_USE(ZTD_ATTR_WEAK);
141+
ZTD_USE(ZTD_ATTR_WEAK_FUNC);
142142

143143
/* earlier version, now simply transitional */
144144
ZTD_USE(ZTD_BLOCKS_API_LINKAGE)
145145
ZTD_USE(ZTD_EXTERN_C)
146146
void _Block_use_GC5(void* (*alloc)(const unsigned long, const bool isOne, const bool isObject),
147147
void (*setHasRefcount)(const void*, const bool), void (*gc_assign_strong)(void*, void**),
148-
void (*gc_assign_weak)(const void*, void*)) ZTD_USE(ZTD_ATTR_WEAK);
148+
void (*gc_assign_weak)(const void*, void*)) ZTD_USE(ZTD_ATTR_WEAK_FUNC);
149149

150150
ZTD_USE(ZTD_BLOCKS_API_LINKAGE)
151151
ZTD_USE(ZTD_EXTERN_C)
152-
void _Block_use_RR(void (*retain)(const void*), void (*release)(const void*)) ZTD_USE(ZTD_ATTR_WEAK);
152+
void _Block_use_RR(void (*retain)(const void*), void (*release)(const void*)) ZTD_USE(ZTD_ATTR_WEAK_FUNC);
153153

154154
/* make a collectable GC heap based Block. Not useful under non-GC. */
155155
ZTD_USE(ZTD_BLOCKS_API_LINKAGE)
156-
ZTD_USE(ZTD_EXTERN_C) void* _Block_copy_collectable(const void* aBlock) ZTD_USE(ZTD_ATTR_WEAK);
156+
ZTD_USE(ZTD_EXTERN_C) void* _Block_copy_collectable(const void* aBlock) ZTD_USE(ZTD_ATTR_WEAK_FUNC);
157157

158158
/* thread-unsafe diagnostic */
159-
ZTD_USE(ZTD_BLOCKS_API_LINKAGE) ZTD_USE(ZTD_EXTERN_C) const char* _Block_dump(const void* block) ZTD_USE(ZTD_ATTR_WEAK);
159+
ZTD_USE(ZTD_BLOCKS_API_LINKAGE)
160+
ZTD_USE(ZTD_EXTERN_C) const char* _Block_dump(const void* block) ZTD_USE(ZTD_ATTR_WEAK_FUNC);
160161

161162

162163
/* Obsolete */

‎source/ztd/blocks/data.cpp‎

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,14 @@ unified in a common block.
4040

4141
ZTD_USE(ZTD_EXTERN_C_OPEN)
4242

43-
void* _NSConcreteStackBlock[32] ZTD_USE(ZTD_ATTR_WEAK) = { 0 };
44-
void* _NSConcreteMallocBlock[32] ZTD_USE(ZTD_ATTR_WEAK) = { 0 };
45-
void* _NSConcreteAutoBlock[32] ZTD_USE(ZTD_ATTR_WEAK) = { 0 };
46-
void* _NSConcreteFinalizingBlock[32] ZTD_USE(ZTD_ATTR_WEAK) = { 0 };
47-
void* _NSConcreteGlobalBlock[32] ZTD_USE(ZTD_ATTR_WEAK) = { 0 };
48-
void* _NSConcreteWeakBlockVariable[32] ZTD_USE(ZTD_ATTR_WEAK) = { 0 };
49-
50-
void _Block_copy_error(void) ZTD_USE(ZTD_ATTR_WEAK) {
43+
void* _NSConcreteStackBlock[32] ZTD_USE(ZTD_ATTR_WEAK_VAR) = { 0 };
44+
void* _NSConcreteMallocBlock[32] ZTD_USE(ZTD_ATTR_WEAK_VAR) = { 0 };
45+
void* _NSConcreteAutoBlock[32] ZTD_USE(ZTD_ATTR_WEAK_VAR) = { 0 };
46+
void* _NSConcreteFinalizingBlock[32] ZTD_USE(ZTD_ATTR_WEAK_VAR) = { 0 };
47+
void* _NSConcreteGlobalBlock[32] ZTD_USE(ZTD_ATTR_WEAK_VAR) = { 0 };
48+
void* _NSConcreteWeakBlockVariable[32] ZTD_USE(ZTD_ATTR_WEAK_VAR) = { 0 };
49+
50+
void _Block_copy_error(void) ZTD_USE(ZTD_ATTR_WEAK_FUNC_DEF) {
5151
}
5252

5353
ZTD_USE(ZTD_EXTERN_C_CLOSE)

0 commit comments

Comments
 (0)