From 24d3c1d05083d2620f52a7b209e8431180d2361c Mon Sep 17 00:00:00 2001 From: Shravan Narayan Date: Tue, 15 Oct 2024 00:29:43 -0500 Subject: [PATCH] wasm2c: Cleanup TLS: check for __thread and declare TLS vars only when needed --- wasm2c/wasm-rt-impl.c | 10 ++++++---- wasm2c/wasm-rt-impl.h | 2 ++ wasm2c/wasm-rt.h | 4 ++++ 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/wasm2c/wasm-rt-impl.c b/wasm2c/wasm-rt-impl.c index 456c30257..ed328b02c 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); @@ -162,7 +164,7 @@ static bool os_has_altstack_installed() { /* check for altstack already in place */ stack_t ss; if (sigaltstack(NULL, &ss) != 0) { - perror("sigaltstack failed"); + perror("sigaltstack check failed"); abort(); } @@ -192,7 +194,7 @@ static void os_allocate_and_install_altstack(void) { ss.ss_flags = 0; ss.ss_size = SIGSTKSZ; if (sigaltstack(&ss, NULL) != 0) { - perror("sigaltstack failed"); + perror("sigaltstack install failed"); abort(); } } @@ -205,7 +207,7 @@ static void os_disable_and_deallocate_altstack(void) { /* verify altstack was still in place */ stack_t ss; if (sigaltstack(NULL, &ss) != 0) { - perror("sigaltstack failed"); + perror("sigaltstack uninstall check failed"); abort(); } @@ -219,7 +221,7 @@ static void os_disable_and_deallocate_altstack(void) { /* disable and free */ ss.ss_flags = SS_DISABLE; if (sigaltstack(&ss, NULL) != 0) { - perror("sigaltstack failed"); + perror("sigaltstack uninstall failed"); abort(); } assert(!os_has_altstack_installed()); 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..b1150271d 100644 --- a/wasm2c/wasm-rt.h +++ b/wasm2c/wasm-rt.h @@ -81,6 +81,10 @@ extern "C" { #ifdef _MSC_VER #define WASM_RT_THREAD_LOCAL __declspec(thread) +// We use __thread on POSIXy systems. This is disabled on Apple systems right +// now due to sporadic test failures. +#elif (defined(__GNUC__) || defined(__clang__)) && !defined(__APPLE__) +#define WASM_RT_THREAD_LOCAL __thread #elif defined(WASM_RT_C11_AVAILABLE) #define WASM_RT_THREAD_LOCAL _Thread_local #else