From patchwork Thu Nov 13 23:06:20 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Samuel Thibault X-Patchwork-Id: 124210 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 842933858023 for ; Thu, 13 Nov 2025 23:07:31 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 842933858023 X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from sonata.ens-lyon.org (domu-toccata.ens-lyon.fr [140.77.166.138]) by sourceware.org (Postfix) with ESMTPS id 7A03C3858406 for ; Thu, 13 Nov 2025 23:06:26 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 7A03C3858406 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=ens-lyon.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=bounce.ens-lyon.org ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 7A03C3858406 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=140.77.166.138 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1763075186; cv=none; b=qhDVcF8DQeQGIIR5gQOylxyGCAWt02B1MraMxABrdZqFhhYDdOk69D9qi9rm5kzE70IvHnTql89Qagjd5WfXAhtJyrDHmuZd/AP8xdlGUurU3iw/vX+72dig0auYnQBkenDzNPmA6T6Th7LOJViYGohu3ute28sKiDFCq2nMMBA= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1763075186; c=relaxed/simple; bh=43aiLeqrT9swbopE/WrPgs2IwVhQ49Jhp5SNGluKLGw=; h=From:To:Subject:Date:Message-ID:MIME-Version; b=fkj/L81NmdcOjhxldeIrVtymBj5JwJ9lq2HprSnnI5PC4VE31av/khbYMnELa+t+0LsR6sv32aQ+z1UleMjFeWVWK9jbF8ZK9Abf/Xqou2BZJ+LOl9f3Ou6jb93YMZYPYEGCzygfCiFubwtgWHwI4P1xH8ooABvaMpM+LLt1qiE= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 7A03C3858406 Received: from localhost (localhost [127.0.0.1]) by sonata.ens-lyon.org (Postfix) with ESMTP id 3A19BA1AE6; Fri, 14 Nov 2025 00:06:25 +0100 (CET) Received: from sonata.ens-lyon.org ([127.0.0.1]) by localhost (sonata.ens-lyon.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id T5uMMYeeItV1; Fri, 14 Nov 2025 00:06:25 +0100 (CET) Received: from end (aamiens-653-1-40-48.w83-192.abo.wanadoo.fr [83.192.199.48]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by sonata.ens-lyon.org (Postfix) with ESMTPSA id 059EFA0551; Fri, 14 Nov 2025 00:06:25 +0100 (CET) Received: from samy by end with local (Exim 4.98.2) (envelope-from ) id 1vJgOW-00000001NEe-2X2p; Fri, 14 Nov 2025 00:06:24 +0100 From: Samuel Thibault To: libc-alpha@sourceware.org Cc: Samuel Thibault , commit-hurd@gnu.org Subject: [hurd, commited 1/4] htl: move {, _IO_}f{, un, try}lockfile implementation into libc Date: Fri, 14 Nov 2025 00:06:20 +0100 Message-ID: <20251113230623.327626-2-samuel.thibault@ens-lyon.org> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251113230623.327626-1-samuel.thibault@ens-lyon.org> References: <20251113230623.327626-1-samuel.thibault@ens-lyon.org> MIME-Version: 1.0 X-Spam-Status: No, score=-13.0 required=5.0 tests=BAYES_00, GIT_PATCH_0, JMQ_SPF_NEUTRAL, KAM_DMARC_STATUS, KAM_SHORT, RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED, SPF_HELO_PASS, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libc-alpha-bounces~patchwork=sourceware.org@sourceware.org --- htl/Makefile | 5 +- htl/Versions | 4 +- htl/lockfile.c | 53 --------------------- htl/pt-initialize.c | 3 -- include/stdio.h | 6 ++- stdio-common/flockfile.c | 1 + stdio-common/funlockfile.c | 1 + sysdeps/htl/flockfile.c | 18 ++++--- sysdeps/htl/ftrylockfile.c | 17 ++++--- sysdeps/htl/funlockfile.c | 16 +++++-- sysdeps/htl/pthread-functions.h | 3 -- sysdeps/mach/hurd/i386/libc.abilist | 3 ++ sysdeps/mach/hurd/i386/libpthread.abilist | 6 --- sysdeps/mach/hurd/x86_64/libpthread.abilist | 6 --- 14 files changed, 44 insertions(+), 98 deletions(-) delete mode 100644 htl/lockfile.c diff --git a/htl/Makefile b/htl/Makefile index 15cff60d31..2f2ad0cccb 100644 --- a/htl/Makefile +++ b/htl/Makefile @@ -20,7 +20,7 @@ subdir := htl srcdir = . MICROKERNEL := mach -SYSDEPS := lockfile +SYSDEPS := LCLHDRS := @@ -36,7 +36,6 @@ libpthread-routines := \ pt-setname-np \ cancellation \ herrno \ - $(SYSDEPS) \ # libpthread-routine headers := \ @@ -220,8 +219,6 @@ install-lib-ldscripts := libpthread_syms.a include ../Makeconfig -CFLAGS-lockfile.c = -D_IO_MTSAFE_IO - all: # Make this the default target; it will be defined in Rules. subdir_install: $(inst_libdir)/libpthread2.a $(inst_libdir)/libpthread_syms.a diff --git a/htl/Versions b/htl/Versions index b56b185a10..2a83eb1b27 100644 --- a/htl/Versions +++ b/htl/Versions @@ -1,6 +1,7 @@ libc { GLIBC_2.12 { + flockfile; ftrylockfile; funlockfile; pthread_self; __pthread_get_cleanup_stack; __pthread_key_create; @@ -313,12 +314,9 @@ libc { libpthread { GLIBC_2.2.6 { - _IO_flockfile; _IO_ftrylockfile; _IO_funlockfile; __errno_location; __h_errno_location; } GLIBC_2.12 { - flockfile; ftrylockfile; funlockfile; - pthread_atfork; pthread_create; diff --git a/htl/lockfile.c b/htl/lockfile.c deleted file mode 100644 index b76a59a17b..0000000000 --- a/htl/lockfile.c +++ /dev/null @@ -1,53 +0,0 @@ -/* lockfile - Handle locking and unlocking of streams. Hurd pthread version. - Copyright (C) 2000-2025 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - . */ - -#include /* Must come before ! */ -#include - -#undef _IO_flockfile -#undef _IO_funlockfile -#undef _IO_ftrylockfile - -void -_IO_flockfile (FILE *fp) -{ - _IO_lock_lock (*fp->_lock); -} - -void -_IO_funlockfile (FILE *fp) -{ - _IO_lock_unlock (*fp->_lock); -} - -int -_IO_ftrylockfile (FILE *fp) -{ - return __libc_lock_trylock_recursive (*fp->_lock); -} - -#undef flockfile -#undef funlockfile -#undef ftrylockfile - -void flockfile (FILE *) - __attribute__ ((weak, alias ("_IO_flockfile"))); -void funlockfile (FILE *) - __attribute__ ((weak, alias ("_IO_funlockfile"))); -int ftrylockfile (FILE *) - __attribute__ ((weak, alias ("_IO_ftrylockfile"))); diff --git a/htl/pt-initialize.c b/htl/pt-initialize.c index 86fe66fb3a..bc8bb1e501 100644 --- a/htl/pt-initialize.c +++ b/htl/pt-initialize.c @@ -28,9 +28,6 @@ #if IS_IN (libpthread) static const struct pthread_functions pthread_functions = { - .ptr__IO_flockfile = _IO_flockfile, - .ptr__IO_funlockfile = _IO_funlockfile, - .ptr__IO_ftrylockfile = _IO_ftrylockfile, }; #endif /* IS_IN (libpthread) */ diff --git a/include/stdio.h b/include/stdio.h index b892c5b4af..17bb5ffdb6 100644 --- a/include/stdio.h +++ b/include/stdio.h @@ -206,10 +206,12 @@ _Noreturn void __libc_message_wrapper (const char *vmaname, __libc_message_wrapper (__libc_assert_vma_name, __VA_ARGS__) /* Acquire ownership of STREAM. */ -extern void __flockfile (FILE *__stream) attribute_hidden; +extern void __flockfile (FILE *__stream); +libc_hidden_proto (__flockfile) /* Relinquish the ownership granted for STREAM. */ -extern void __funlockfile (FILE *__stream) attribute_hidden; +extern void __funlockfile (FILE *__stream); +libc_hidden_proto (__funlockfile) /* Try to acquire ownership of STREAM but do not block if it is not possible. */ diff --git a/stdio-common/flockfile.c b/stdio-common/flockfile.c index f563390bbc..0c7b95d587 100644 --- a/stdio-common/flockfile.c +++ b/stdio-common/flockfile.c @@ -24,5 +24,6 @@ __flockfile (FILE *stream) { _IO_lock_lock (*stream->_lock); } +libc_hidden_def(__flockfile) weak_alias (__flockfile, flockfile); weak_alias (__flockfile, _IO_flockfile) diff --git a/stdio-common/funlockfile.c b/stdio-common/funlockfile.c index 443364edc7..23f2044d6b 100644 --- a/stdio-common/funlockfile.c +++ b/stdio-common/funlockfile.c @@ -25,5 +25,6 @@ __funlockfile (FILE *stream) { _IO_lock_unlock (*stream->_lock); } +libc_hidden_def(__funlockfile) weak_alias (__funlockfile, _IO_funlockfile) weak_alias (__funlockfile, funlockfile); diff --git a/sysdeps/htl/flockfile.c b/sysdeps/htl/flockfile.c index 0a9cc8874a..86c31f44be 100644 --- a/sysdeps/htl/flockfile.c +++ b/sysdeps/htl/flockfile.c @@ -17,15 +17,21 @@ . */ #include -#include +#include void __flockfile (FILE *stream) { -#ifdef SHARED - __libc_ptf_call (_IO_flockfile, (stream), 0); -#endif + _IO_lock_lock (*stream->_lock); } -weak_alias (__flockfile, _IO_flockfile) -weak_alias (__flockfile, flockfile) +libc_hidden_def(__flockfile) +weak_alias (__flockfile, _IO_flockfile); +#if OTHER_SHLIB_COMPAT (libpthread, GLIBC_2_2_6, GLIBC_2_12) +versioned_symbol (libc, __flockfile, flockfile, GLIBC_2_0); +# if OTHER_SHLIB_COMPAT (libpthread, GLIBC_2_12, GLIBC_2_43) +compat_symbol (libpthread, __flockfile, flockfile, GLIBC_2_12); +# endif +#else +weak_alias (__flockfile, flockfile); +#endif diff --git a/sysdeps/htl/ftrylockfile.c b/sysdeps/htl/ftrylockfile.c index b8acd30ea4..c0e30aa090 100644 --- a/sysdeps/htl/ftrylockfile.c +++ b/sysdeps/htl/ftrylockfile.c @@ -17,17 +17,20 @@ . */ #include -#include +#include int __ftrylockfile (FILE *stream) { -#ifdef SHARED - return __libc_ptf_call (_IO_ftrylockfile, (stream), 0); + return _IO_lock_trylock (*stream->_lock); +} +weak_alias (__ftrylockfile, _IO_ftrylockfile); +#if OTHER_SHLIB_COMPAT (libpthread, GLIBC_2_2_6, GLIBC_2_12) +versioned_symbol (libc, __ftrylockfile, ftrylockfile, GLIBC_2_0); +# if OTHER_SHLIB_COMPAT (libpthread, GLIBC_2_12, GLIBC_2_43) +compat_symbol (libpthread, __ftrylockfile, ftrylockfile, GLIBC_2_12); +# endif #else - return 0; +weak_alias (__ftrylockfile, ftrylockfile); #endif -} -weak_alias (__ftrylockfile, _IO_ftrylockfile) -weak_alias (__ftrylockfile, ftrylockfile) diff --git a/sysdeps/htl/funlockfile.c b/sysdeps/htl/funlockfile.c index c89d17ad27..20039b8482 100644 --- a/sysdeps/htl/funlockfile.c +++ b/sysdeps/htl/funlockfile.c @@ -23,9 +23,15 @@ void __funlockfile (FILE *stream) { -#ifdef SHARED - __libc_ptf_call (_IO_funlockfile, (stream), 0); -#endif + _IO_lock_unlock (*stream->_lock); } -weak_alias (__funlockfile, _IO_funlockfile) -weak_alias (__funlockfile, funlockfile) +libc_hidden_def(__funlockfile) +weak_alias (__funlockfile, _IO_funlockfile); +#if OTHER_SHLIB_COMPAT (libpthread, GLIBC_2_2_6, GLIBC_2_12) +versioned_symbol (libc, __funlockfile, funlockfile, GLIBC_2_0); +# if OTHER_SHLIB_COMPAT (libpthread, GLIBC_2_12, GLIBC_2_43) +compat_symbol (libpthread, __funlockfile, funlockfile, GLIBC_2_12); +# endif +#else +weak_alias (__funlockfile, funlockfile); +#endif diff --git a/sysdeps/htl/pthread-functions.h b/sysdeps/htl/pthread-functions.h index 2b1feb4e04..4fab472e50 100644 --- a/sysdeps/htl/pthread-functions.h +++ b/sysdeps/htl/pthread-functions.h @@ -26,9 +26,6 @@ so if possible avoid breaking it and append new hooks to the end. */ struct pthread_functions { - void (*ptr__IO_flockfile) (FILE *); - void (*ptr__IO_funlockfile) (FILE *); - int (*ptr__IO_ftrylockfile) (FILE *); }; /* Variable in libc.so. */ diff --git a/sysdeps/mach/hurd/i386/libc.abilist b/sysdeps/mach/hurd/i386/libc.abilist index e5bd47ac39..bbd00ed11a 100644 --- a/sysdeps/mach/hurd/i386/libc.abilist +++ b/sysdeps/mach/hurd/i386/libc.abilist @@ -33,6 +33,9 @@ GLIBC_2.12 __pthread_key_create F GLIBC_2.12 __pthread_kill F GLIBC_2.12 __pthread_mutex_transfer_np F GLIBC_2.12 __pthread_self F +GLIBC_2.12 flockfile F +GLIBC_2.12 ftrylockfile F +GLIBC_2.12 funlockfile F GLIBC_2.12 pthread_attr_destroy F GLIBC_2.12 pthread_attr_getdetachstate F GLIBC_2.12 pthread_attr_getguardsize F diff --git a/sysdeps/mach/hurd/i386/libpthread.abilist b/sysdeps/mach/hurd/i386/libpthread.abilist index b9fd3dd489..b0516ddbc1 100644 --- a/sysdeps/mach/hurd/i386/libpthread.abilist +++ b/sysdeps/mach/hurd/i386/libpthread.abilist @@ -4,9 +4,6 @@ GLIBC_2.12 __pthread_spin_lock F GLIBC_2.12 __pthread_spin_trylock F GLIBC_2.12 __pthread_spin_unlock F GLIBC_2.12 _pthread_spin_lock F -GLIBC_2.12 flockfile F -GLIBC_2.12 ftrylockfile F -GLIBC_2.12 funlockfile F GLIBC_2.12 pthread_atfork F GLIBC_2.12 pthread_create F GLIBC_2.12 pthread_spin_destroy F @@ -14,9 +11,6 @@ GLIBC_2.12 pthread_spin_init F GLIBC_2.12 pthread_spin_lock F GLIBC_2.12 pthread_spin_trylock F GLIBC_2.12 pthread_spin_unlock F -GLIBC_2.2.6 _IO_flockfile F -GLIBC_2.2.6 _IO_ftrylockfile F -GLIBC_2.2.6 _IO_funlockfile F GLIBC_2.2.6 __errno_location F GLIBC_2.2.6 __h_errno_location F GLIBC_2.21 pthread_hurd_cond_timedwait_np F diff --git a/sysdeps/mach/hurd/x86_64/libpthread.abilist b/sysdeps/mach/hurd/x86_64/libpthread.abilist index e72dca501b..5724c88a6b 100644 --- a/sysdeps/mach/hurd/x86_64/libpthread.abilist +++ b/sysdeps/mach/hurd/x86_64/libpthread.abilist @@ -1,6 +1,3 @@ -GLIBC_2.38 _IO_flockfile F -GLIBC_2.38 _IO_ftrylockfile F -GLIBC_2.38 _IO_funlockfile F GLIBC_2.38 __errno_location F GLIBC_2.38 __h_errno_location F GLIBC_2.38 __pthread_spin_destroy F @@ -16,9 +13,6 @@ GLIBC_2.38 cnd_init F GLIBC_2.38 cnd_signal F GLIBC_2.38 cnd_timedwait F GLIBC_2.38 cnd_wait F -GLIBC_2.38 flockfile F -GLIBC_2.38 ftrylockfile F -GLIBC_2.38 funlockfile F GLIBC_2.38 mtx_destroy F GLIBC_2.38 mtx_init F GLIBC_2.38 mtx_lock F