From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-4.2 required=3.0 tests=ALL_TRUSTED,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF, T_SCC_BODY_TEXT_LINE shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id 9E70E1F54E for ; Tue, 23 Aug 2022 09:14:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=80x24.org; s=selector1; t=1661246093; bh=XtswuRjJWBQpnrPqpFXHpKYdGgIrGfjZjSiSQCS6Nrw=; h=From:To:Subject:Date:From; b=ii/JJtDLUH3HtTr5x5paEmVXF5jkQJD0CiKg7iAvYk+EWJSqObI2ebcDO5q1vYGY1 doHM8bI7P6qxSSuf1a5Jhy0azE5dUH1Fxw/ZXWOx/o+8JGLc3WG2lhVcaPjpYxkV/c E3j3BBySsGHRee5Cg1+x5B+llkwC/iqmBtIxgpt0= From: Eric Wong To: Subject: [PATCH] support --enabled-shared builds of Ruby Date: Tue, 23 Aug 2022 09:14:53 +0000 Message-Id: <20220823091453.31338-1-e@80x24.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: Most GNU/Linux distros build Ruby with --enable-shared, so it makes sense to support it properly even if it's not the default favored by ruby-core. __attribute__((weak)) on a local function is not weak enough for the shared library, so we add the extra check for the function's existence to have_ec_p(), instead. Tested with ruby 2.7.4p191 (2021-07-07 revision a21a3b7d23) [x86_64-linux-gnu] on Debian 11 (bullseye) as well as default builds w/o --enable-shared. Note: FreeBSD 12.3 appears broken with mwrap and I no longer have older FreeBSD systems handy. --- ext/mwrap/mwrap.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/ext/mwrap/mwrap.c b/ext/mwrap/mwrap.c index 85b847b..9d90298 100644 --- a/ext/mwrap/mwrap.c +++ b/ext/mwrap/mwrap.c @@ -32,7 +32,6 @@ static ID id_uminus; const char *rb_source_location_cstr(int *line); /* requires 2.6.0dev */ -extern int __attribute__((weak)) ruby_thread_has_gvl_p(void); #ifdef HAVE_RUBY_RACTOR_H /* Ruby 3.0+ */ extern MWRAP_TSD void * __attribute__((weak)) ruby_current_ec; @@ -45,6 +44,7 @@ extern size_t __attribute__((weak)) rb_gc_count(void); extern VALUE __attribute__((weak)) rb_cObject; extern VALUE __attribute__((weak)) rb_eTypeError; extern VALUE __attribute__((weak)) rb_yield(VALUE); +int __attribute__((weak)) ruby_thread_has_gvl_p(void); static size_t total_bytes_inc, total_bytes_dec; @@ -64,11 +64,6 @@ enum { #define IS_HEAP_PAGE_BODY ((struct src_loc *)-1) -int __attribute__((weak)) ruby_thread_has_gvl_p(void) -{ - return 0; -} - #ifdef __FreeBSD__ void *__malloc(size_t); void __free(void *); @@ -238,8 +233,8 @@ static char *int2str(int num, char *dst, size_t * size) */ static int has_ec_p(void) { - return (ruby_thread_has_gvl_p() && ruby_current_vm_ptr && - ruby_current_ec); + return ruby_thread_has_gvl_p && ruby_thread_has_gvl_p() && + ruby_current_vm_ptr && ruby_current_ec; } struct acc {