diff --git a/wasm2c/wasm-rt-impl.c b/wasm2c/wasm-rt-impl.c index 456c30257..92616351d 100644 --- a/wasm2c/wasm-rt-impl.c +++ b/wasm2c/wasm-rt-impl.c @@ -73,7 +73,9 @@ WASM_RT_THREAD_LOCAL uint32_t wasm_rt_saved_call_stack_depth; static WASM_RT_THREAD_LOCAL void* g_alt_stack = NULL; #endif +#ifndef WASM_RT_TRAP_HANDLER WASM_RT_THREAD_LOCAL wasm_rt_jmp_buf g_wasm_rt_jmp_buf; +#endif #ifdef WASM_RT_TRAP_HANDLER extern void WASM_RT_TRAP_HANDLER(wasm_rt_trap_t code); diff --git a/wasm2c/wasm-rt-impl.h b/wasm2c/wasm-rt-impl.h index aa6f46d98..ed46b0972 100644 --- a/wasm2c/wasm-rt-impl.h +++ b/wasm2c/wasm-rt-impl.h @@ -27,8 +27,10 @@ extern "C" { #endif +#ifndef WASM_RT_TRAP_HANDLER /** A setjmp buffer used for handling traps. */ extern WASM_RT_THREAD_LOCAL wasm_rt_jmp_buf g_wasm_rt_jmp_buf; +#endif #if WASM_RT_STACK_DEPTH_COUNT /** Saved call stack depth that will be restored in case a trap occurs. */ diff --git a/wasm2c/wasm-rt.h b/wasm2c/wasm-rt.h index 3274a15d2..c5bad6142 100644 --- a/wasm2c/wasm-rt.h +++ b/wasm2c/wasm-rt.h @@ -79,10 +79,13 @@ extern "C" { #endif -#ifdef _MSC_VER -#define WASM_RT_THREAD_LOCAL __declspec(thread) -#elif defined(WASM_RT_C11_AVAILABLE) +#ifdef WASM_RT_C11_AVAILABLE #define WASM_RT_THREAD_LOCAL _Thread_local +#elif defined(_MSC_VER) +#define WASM_RT_THREAD_LOCAL __declspec(thread) +#elif (defined(__GNUC__) || defined(__clang__)) && !defined(__APPLE__) +// Disabled on Apple systems due to sporadic test failures. +#define WASM_RT_THREAD_LOCAL __thread #else #define WASM_RT_THREAD_LOCAL #endif