Disable use of thread_local
authorBehdad Esfahbod <behdad@behdad.org>
Wed, 30 May 2018 01:21:55 +0000 (18:21 -0700)
committerBehdad Esfahbod <behdad@behdad.org>
Wed, 30 May 2018 01:21:55 +0000 (18:21 -0700)
Clang build was failing with:

/usr/bin/ld: .libs/libharfbuzz_la-hb-blob.o: relocation R_X86_64_PC32 against undefined hidden symbol `_ZTH12_hb_CrapPool' can not be used when making a shared object

Instead of fighting it, just disable use of it.

src/hb-private.hh
src/hb-static.cc

index 0c291a1..9859503 100644 (file)
@@ -588,13 +588,13 @@ static_assert (Namespace::Type::min_size + 1 <= sizeof (_Null##Type), "Null pool
 /* To be fully correct, CrapPool must be thread_local. However, we do not rely on CrapPool
  * for correct operation. It only exist to catch and divert program logic bugs instead of
  * causing bad memory access. So, races there are not actually introducing incorrectness
- * in the code. So maybe disable? Has ~12kb binary size overhead to have it. */
+ * in the code. Has ~12kb binary size overhead to have it, also clang build fails with it. */
 #ifdef HB_NO_VISIBILITY
 static
 #else
 extern HB_INTERNAL
 #endif
-thread_local void * _hb_CrapPool[HB_NULL_POOL_SIZE / sizeof (void *)]
+/*thread_local*/ void * _hb_CrapPool[HB_NULL_POOL_SIZE / sizeof (void *)]
 #ifdef HB_NO_VISIBILITY
 = {}
 #endif
index e60121d..e26e5c8 100644 (file)
@@ -28,5 +28,5 @@
 
 #ifndef HB_NO_VISIBILITY
 void * const _hb_NullPool[HB_NULL_POOL_SIZE / sizeof (void *)] = {};
-thread_local void * _hb_CrapPool[HB_NULL_POOL_SIZE / sizeof (void *)] = {};
+/*thread_local*/ void * _hb_CrapPool[HB_NULL_POOL_SIZE / sizeof (void *)] = {};
 #endif