From 61c752c228f3bb64b38647d5816b93563da4d1a4 Mon Sep 17 00:00:00 2001 From: gbaraldi Date: Wed, 13 Aug 2025 14:04:40 -0300 Subject: [PATCH 1/2] Make libunwind more compatible if we don't load our own copy --- src/threading.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/threading.c b/src/threading.c index 38116ce7e7ea1..be7dde775dc1d 100644 --- a/src/threading.c +++ b/src/threading.c @@ -403,7 +403,10 @@ jl_ptls_t jl_init_threadtls(int16_t tid) #if !defined(_OS_WINDOWS_) && !defined(JL_DISABLE_LIBUNWIND) && !defined(LLVMLIBUNWIND) // ensures libunwind TLS space for this thread is allocated eagerly // to make unwinding async-signal-safe even when using thread local caches. - unw_ensure_tls(); + void(*jl_unw_ensure_tls)(void) = NULL; + jl_dlsym(jl_exe_handle, "unw_ensure_tls", (void**)&jl_unw_ensure_tls, 0); + if (jl_unw_ensure_tls) + jl_unw_ensure_tls(); #endif return ptls; From ae5a7bb2783febae1a95ff31c1f5ee312afd5b3d Mon Sep 17 00:00:00 2001 From: gbaraldi Date: Fri, 15 Aug 2025 14:29:15 -0300 Subject: [PATCH 2/2] Make analyzegc happy --- src/threading.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/threading.c b/src/threading.c index be7dde775dc1d..eb04b46283b7a 100644 --- a/src/threading.c +++ b/src/threading.c @@ -313,10 +313,7 @@ JL_DLLEXPORT uint64_t jl_get_ptls_rng(void) JL_NOTSAFEPOINT return jl_current_task->ptls->rngseed; } - -#if !defined(_OS_WINDOWS_) && !defined(JL_DISABLE_LIBUNWIND) && !defined(LLVMLIBUNWIND) - extern int unw_ensure_tls (void); -#endif +typedef void (*unw_tls_ensure_func)(void) JL_NOTSAFEPOINT; // get thread local rng JL_DLLEXPORT void jl_set_ptls_rng(uint64_t new_seed) JL_NOTSAFEPOINT @@ -403,7 +400,7 @@ jl_ptls_t jl_init_threadtls(int16_t tid) #if !defined(_OS_WINDOWS_) && !defined(JL_DISABLE_LIBUNWIND) && !defined(LLVMLIBUNWIND) // ensures libunwind TLS space for this thread is allocated eagerly // to make unwinding async-signal-safe even when using thread local caches. - void(*jl_unw_ensure_tls)(void) = NULL; + unw_tls_ensure_func jl_unw_ensure_tls = NULL; jl_dlsym(jl_exe_handle, "unw_ensure_tls", (void**)&jl_unw_ensure_tls, 0); if (jl_unw_ensure_tls) jl_unw_ensure_tls();