From f7059af50a31a4d27a04ace0beadb60616f3f971 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Fri, 17 Jan 2025 22:48:10 +0900 Subject: [PATCH] Use no-inline version `rb_current_ec` on Arm64 The TLS across .so issue seems related to Arm64, but not Darwin. --- thread_pthread.h | 4 ++-- vm.c | 2 +- vm_core.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/thread_pthread.h b/thread_pthread.h index dfc8ad4272..b632668a2a 100644 --- a/thread_pthread.h +++ b/thread_pthread.h @@ -133,8 +133,8 @@ struct rb_thread_sched { #ifdef RB_THREAD_LOCAL_SPECIFIER NOINLINE(void rb_current_ec_set(struct rb_execution_context_struct *)); - # ifdef __APPLE__ - // on Darwin, TLS can not be accessed across .so + # if defined(__arm64__) || defined(__aarch64__) + // on Arm64, TLS can not be accessed across .so 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; diff --git a/vm.c b/vm.c index db168e62c0..cff159a663 100644 --- a/vm.c +++ b/vm.c @@ -571,7 +571,7 @@ rb_current_ec_set(rb_execution_context_t *ec) } -#ifdef __APPLE__ +#if defined(__arm64__) || defined(__aarch64__) rb_execution_context_t * rb_current_ec(void) { diff --git a/vm_core.h b/vm_core.h index 8cbf999e3e..961cc3967c 100644 --- a/vm_core.h +++ b/vm_core.h @@ -1977,7 +1977,7 @@ static inline rb_execution_context_t * rb_current_execution_context(bool expect_ec) { #ifdef RB_THREAD_LOCAL_SPECIFIER - #ifdef __APPLE__ + #if defined(__arm64__) || defined(__aarch64__) rb_execution_context_t *ec = rb_current_ec(); #else rb_execution_context_t *ec = ruby_current_ec;