From a87ae242bb460c7643d0f974b96489b5f73a2d45 Mon Sep 17 00:00:00 2001 From: Koichi Sasada Date: Sun, 24 Dec 2023 14:33:14 +0900 Subject: [PATCH] Use noinline version of accessing current ec On universal.arm64e-darwin22 with clang 15.0.0 (I didn't check details yet) accessing `ruby_current_ec` directly causes assertion violation `VM_ASSERT(ec == rb_current_ec_noinline())` on `rb_current_execution_context()`, maybe because TLS accessing issue. --- thread_pthread.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/thread_pthread.h b/thread_pthread.h index 9ccacbf6604615..20c4b9f9a835b6 100644 --- a/thread_pthread.h +++ b/thread_pthread.h @@ -134,7 +134,7 @@ struct rb_thread_sched { # ifdef __APPLE__ // on Darwin, TLS can not be accessed across .so - struct rb_execution_context_struct *rb_current_ec(void); + NOINLINE(struct rb_execution_context_struct *rb_current_ec(void)); # else RUBY_EXTERN RB_THREAD_LOCAL_SPECIFIER struct rb_execution_context_struct *ruby_current_ec;