From patchwork Tue Apr 26 19:15:20 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adhemerval Zanella Netto X-Patchwork-Id: 53245 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 4DC11385801B for ; Tue, 26 Apr 2022 19:18:03 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 4DC11385801B DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1651000683; bh=0pcdyM2cL5v/J+eSSpJLuO4InMjevcg1MmS8LmmL1KI=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=wimP7ZVw+1pNzdd28lFuhxCQCyGkS42CSe8niMVI8itX7Santuiw793nEox7Pj38a Aw0LwRXmhFQgk11fkgpzKhTHTy+tfClxYmYMuAzD3v16zvFXkdmjbjayxPhIBTb4Z6 HdziLiE+VmBLq7K00CC4gbfjq/jOMY1GfkBA0pF4= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-oi1-x232.google.com (mail-oi1-x232.google.com [IPv6:2607:f8b0:4864:20::232]) by sourceware.org (Postfix) with ESMTPS id E03943858403 for ; Tue, 26 Apr 2022 19:15:32 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org E03943858403 Received: by mail-oi1-x232.google.com with SMTP id s131so2474385oie.1 for ; Tue, 26 Apr 2022 12:15:32 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=0pcdyM2cL5v/J+eSSpJLuO4InMjevcg1MmS8LmmL1KI=; b=h1DSpjMEvCS9LXRo4FSdqHKleuYAUAhNvnrrygd/Xnr8zj94kzOnZa8RIrbq+hu3uC TRtAR/x2yskwtqana/Ag3nA5F32UtEotsJRWmN3wbFbTJFIiMsxTdMdPqfGnVMclNg0f Wc5Dt8tVNszLxsO1phqOZycY1vRUK0RhgGY/kJfkkuhc2nUP5xGtHHUZweBn6duntNNN q0vXxF9O7V86kZd+qRnF89ozOitnQC6nJZIHHeZVIeYpZdMr9meXKu/XzXpWrYXH2cKa 4XFGPCa4np1W+nbaQryYr/6tFOhxILkEb6cBsHC1x7kC8RAaeuEWvFcADscP59FiWMvM HZMg== X-Gm-Message-State: AOAM5327OLuE/eW4eBJUhHtWeL+cbxPKlRFy2RKxNscGeP3zCp/VeABc EyktasvA0lAxXbX4DzaKenZhJ2//waQaiQ== X-Google-Smtp-Source: ABdhPJw9EzbzhbKPM9Nx9W6NRHrm8dAgZa8TABDMGmJNJoqQvn9CofiKSjQO8KhHMMfdoiXCv5DkPw== X-Received: by 2002:a54:4688:0:b0:324:ef47:98b7 with SMTP id k8-20020a544688000000b00324ef4798b7mr10160267oic.29.1651000530175; Tue, 26 Apr 2022 12:15:30 -0700 (PDT) Received: from birita.. ([2804:431:c7ca:4214:745b:d03c:b667:123b]) by smtp.gmail.com with ESMTPSA id 123-20020a4a0181000000b00324a1217e96sm5884129oor.35.2022.04.26.12.15.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Apr 2022 12:15:29 -0700 (PDT) To: libc-alpha@sourceware.org, Florian Weimer Subject: [PATCH v2 1/4] libio: Assume _IO_MTSAFE_IO Date: Tue, 26 Apr 2022 16:15:20 -0300 Message-Id: <20220426191523.833171-2-adhemerval.zanella@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220426191523.833171-1-adhemerval.zanella@linaro.org> References: <20220426191523.833171-1-adhemerval.zanella@linaro.org> MIME-Version: 1.0 X-Spam-Status: No, score=-12.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Adhemerval Zanella via Libc-alpha From: Adhemerval Zanella Netto Reply-To: Adhemerval Zanella Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" It is already set by default on all supported architectures and it is an expectation that stdio works on multi-threaded environments. --- Makeconfig | 2 -- debug/Makefile | 43 ++++++++++++------------------- grp/Makefile | 4 +-- gshadow/Makefile | 4 +-- htl/Makefile | 2 -- hurd/vpprintf.c | 4 --- include/stdio.h | 2 +- libio/Makefile | 2 -- libio/clearerr.c | 4 --- libio/feof.c | 5 ---- libio/ferror.c | 4 --- libio/fileno.c | 2 +- libio/fputc.c | 5 ---- libio/genops.c | 38 --------------------------- libio/getc.c | 6 ----- libio/getchar.c | 7 +---- libio/iofdopen.c | 4 --- libio/iofflush.c | 7 ----- libio/iofgets.c | 7 ----- libio/iofopen.c | 4 --- libio/iofopncook.c | 4 --- libio/iofputs.c | 7 ----- libio/iofread.c | 6 ----- libio/iofwrite.c | 6 +---- libio/iopopen.c | 14 ---------- libio/iovdprintf.c | 2 -- libio/iovsprintf.c | 2 -- libio/libio.h | 26 ++++++------------- libio/libioP.h | 30 +++------------------ libio/memstream.c | 4 --- libio/obprintf.c | 2 -- libio/oldiofdopen.c | 4 --- libio/oldiofopen.c | 4 --- libio/oldiopopen.c | 14 ---------- libio/oldstdfiles.c | 6 ----- libio/putc.c | 5 ---- libio/putchar.c | 5 ---- libio/stdfiles.c | 11 +------- libio/vasprintf.c | 2 -- libio/vsnprintf.c | 2 -- libio/vswprintf.c | 2 -- libio/wgenops.c | 2 -- libio/wmemstream.c | 4 --- nptl/Makefile | 3 --- pwd/Makefile | 1 - shadow/Makefile | 4 +-- stdio-common/Makefile | 2 -- stdio-common/vfprintf-internal.c | 4 --- stdlib/Makefile | 9 ------- stdlib/strfmon_l.c | 2 -- stdlib/strfrom-skeleton.c | 2 -- sysdeps/generic/stdio-lock.h | 4 +-- sysdeps/ieee754/float128/Makefile | 4 --- sysdeps/nptl/libc-lock.h | 2 +- sysdeps/unix/sysv/linux/Makefile | 1 - wcsmbs/Makefile | 2 -- 56 files changed, 43 insertions(+), 317 deletions(-) diff --git a/Makeconfig b/Makeconfig index 0aa5fb0099..14fd013d57 100644 --- a/Makeconfig +++ b/Makeconfig @@ -1377,8 +1377,6 @@ endif # A sysdeps Makeconfig fragment may set libc-reentrant to yes. ifeq (yes,$(libc-reentrant)) defines += -D_LIBC_REENTRANT - -libio-mtsafe = -D_IO_MTSAFE_IO endif # The name to give to a test in test results summaries. diff --git a/debug/Makefile b/debug/Makefile index 96029f32ee..6b7c5a1fcb 100644 --- a/debug/Makefile +++ b/debug/Makefile @@ -68,32 +68,23 @@ elide-routines.o := stack_chk_fail_local CFLAGS-stack_chk_fail.c += $(no-stack-protector) CFLAGS-backtrace.c += -fno-omit-frame-pointer -funwind-tables -CFLAGS-sprintf_chk.c += $(libio-mtsafe) -CFLAGS-snprintf_chk.c += $(libio-mtsafe) -CFLAGS-vsprintf_chk.c += $(libio-mtsafe) -CFLAGS-vsnprintf_chk.c += $(libio-mtsafe) -CFLAGS-asprintf_chk.c += $(libio-mtsafe) -CFLAGS-vasprintf_chk.c += $(libio-mtsafe) -CFLAGS-obprintf_chk.c += $(libio-mtsafe) -CFLAGS-dprintf_chk.c += $(libio-mtsafe) -fexceptions -CFLAGS-vdprintf_chk.c += $(libio-mtsafe) -fexceptions -CFLAGS-printf_chk.c += $(libio-mtsafe) -fexceptions -CFLAGS-fprintf_chk.c += $(libio-mtsafe) -fexceptions -CFLAGS-vprintf_chk.c += $(libio-mtsafe) -fexceptions -CFLAGS-vfprintf_chk.c += $(libio-mtsafe) -fexceptions -CFLAGS-gets_chk.c += $(libio-mtsafe) -fexceptions -CFLAGS-fgets_chk.c += $(libio-mtsafe) -fexceptions -CFLAGS-fgets_u_chk.c += $(libio-mtsafe) -fexceptions -CFLAGS-fread_chk.c += $(libio-mtsafe) -fexceptions -CFLAGS-fread_u_chk.c += $(libio-mtsafe) -fexceptions -CFLAGS-swprintf_chk.c += $(libio-mtsafe) -CFLAGS-vswprintf_chk.c += $(libio-mtsafe) -CFLAGS-wprintf_chk.c += $(libio-mtsafe) -fexceptions -CFLAGS-fwprintf_chk.c += $(libio-mtsafe) -fexceptions -CFLAGS-vwprintf_chk.c += $(libio-mtsafe) -fexceptions -CFLAGS-vfwprintf_chk.c += $(libio-mtsafe) -fexceptions -CFLAGS-fgetws_chk.c += $(libio-mtsafe) -fexceptions -CFLAGS-fgetws_u_chk.c += $(libio-mtsafe) -fexceptions +CFLAGS-dprintf_chk.c += -fexceptions +CFLAGS-vdprintf_chk.c += -fexceptions +CFLAGS-printf_chk.c += -fexceptions +CFLAGS-fprintf_chk.c += -fexceptions +CFLAGS-vprintf_chk.c += -fexceptions +CFLAGS-vfprintf_chk.c += -fexceptions +CFLAGS-gets_chk.c += -fexceptions +CFLAGS-fgets_chk.c += -fexceptions +CFLAGS-fgets_u_chk.c += -fexceptions +CFLAGS-fread_chk.c += -fexceptions +CFLAGS-fread_u_chk.c += -fexceptions +CFLAGS-wprintf_chk.c += -fexceptions +CFLAGS-fwprintf_chk.c += -fexceptions +CFLAGS-vwprintf_chk.c += -fexceptions +CFLAGS-vfwprintf_chk.c += -fexceptions +CFLAGS-fgetws_chk.c += -fexceptions +CFLAGS-fgetws_u_chk.c += -fexceptions CFLAGS-read_chk.c += -fexceptions -fasynchronous-unwind-tables CFLAGS-pread_chk.c += -fexceptions -fasynchronous-unwind-tables CFLAGS-pread64_chk.c += -fexceptions -fasynchronous-unwind-tables diff --git a/grp/Makefile b/grp/Makefile index 48f3914e29..a3dc650cde 100644 --- a/grp/Makefile +++ b/grp/Makefile @@ -52,8 +52,8 @@ CFLAGS-getgrnam_r.c += -fexceptions CFLAGS-getgrent_r.c += -fexceptions CFLAGS-getgrent.c += -fexceptions CFLAGS-fgetgrent.c += -fexceptions -CFLAGS-fgetgrent_r.c += -fexceptions $(libio-mtsafe) -CFLAGS-putgrent.c += -fexceptions $(libio-mtsafe) +CFLAGS-fgetgrent_r.c += -fexceptions +CFLAGS-putgrent.c += -fexceptions CFLAGS-initgroups.c += -fexceptions CFLAGS-getgrgid.c += -fexceptions diff --git a/gshadow/Makefile b/gshadow/Makefile index eff303f538..3f9274ba99 100644 --- a/gshadow/Makefile +++ b/gshadow/Makefile @@ -31,8 +31,8 @@ tests = tst-gshadow tst-putsgent tst-fgetsgent_r CFLAGS-getsgent_r.c += -fexceptions CFLAGS-getsgent.c += -fexceptions CFLAGS-fgetsgent.c += -fexceptions -CFLAGS-fgetsgent_r.c += -fexceptions $(libio-mtsafe) -CFLAGS-putsgent.c += -fexceptions $(libio-mtsafe) +CFLAGS-fgetsgent_r.c += -fexceptions +CFLAGS-putsgent.c += -fexceptions CFLAGS-getsgnam.c += -fexceptions CFLAGS-getsgnam_r.c += -fexceptions diff --git a/htl/Makefile b/htl/Makefile index 0b403e2fca..cdc20141bf 100644 --- a/htl/Makefile +++ b/htl/Makefile @@ -174,8 +174,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/hurd/vpprintf.c b/hurd/vpprintf.c index 67450399f5..7dbd4fca85 100644 --- a/hurd/vpprintf.c +++ b/hurd/vpprintf.c @@ -42,13 +42,9 @@ vpprintf (io_t port, const char *format, va_list arg) struct locked_FILE { struct _IO_cookie_file cfile; -#ifdef _IO_MTSAFE_IO _IO_lock_t lock; -#endif } temp_f; -#ifdef _IO_MTSAFE_IO temp_f.cfile.__fp.file._lock = &temp_f.lock; -#endif _IO_cookie_init (&temp_f.cfile, _IO_NO_READS, (void *) port, (cookie_io_functions_t) { write: do_write }); diff --git a/include/stdio.h b/include/stdio.h index 23b7fd288c..e9a7c77c24 100644 --- a/include/stdio.h +++ b/include/stdio.h @@ -1,5 +1,5 @@ #ifndef _STDIO_H -# if !defined _ISOMAC && defined _IO_MTSAFE_IO +# if !defined _ISOMAC # include # endif diff --git a/libio/Makefile b/libio/Makefile index e97387743f..88b4c20da6 100644 --- a/libio/Makefile +++ b/libio/Makefile @@ -92,8 +92,6 @@ routines += clearerr_u feof_u ferror_u fputc_u getc_u getchar_u \ iofputs_u endif -CPPFLAGS += $(libio-mtsafe) - # Support for exception handling. CFLAGS-fileops.c += -fexceptions CFLAGS-fputc.c += -fexceptions diff --git a/libio/clearerr.c b/libio/clearerr.c index 47d9ceae1a..5aecee096b 100644 --- a/libio/clearerr.c +++ b/libio/clearerr.c @@ -26,7 +26,3 @@ clearerr (FILE *fp) _IO_clearerr (fp); _IO_funlockfile (fp); } - -#ifndef _IO_MTSAFE_IO -weak_alias (clearerr, clearerr_unlocked) -#endif diff --git a/libio/feof.c b/libio/feof.c index d6b95f40e8..7f79b2795e 100644 --- a/libio/feof.c +++ b/libio/feof.c @@ -41,8 +41,3 @@ _IO_feof (FILE *fp) } weak_alias (_IO_feof, feof) - -#ifndef _IO_MTSAFE_IO -#undef feof_unlocked -weak_alias (_IO_feof, feof_unlocked) -#endif diff --git a/libio/ferror.c b/libio/ferror.c index bee2ef8f07..d2489c54d3 100644 --- a/libio/ferror.c +++ b/libio/ferror.c @@ -42,7 +42,3 @@ _IO_ferror (FILE *fp) weak_alias (_IO_ferror, ferror) -#ifndef _IO_MTSAFE_IO -#undef ferror_unlocked -weak_alias (_IO_ferror, ferror_unlocked) -#endif diff --git a/libio/fileno.c b/libio/fileno.c index ec479bedcf..3e5138fa0b 100644 --- a/libio/fileno.c +++ b/libio/fileno.c @@ -46,6 +46,6 @@ libc_hidden_weak (fileno) /* The fileno implementation for libio does not require locking because it only accesses once a single variable and this is already atomic - (at least at thread level). Therefore we don't test _IO_MTSAFE_IO here. */ + (at least at thread level). */ weak_alias (__fileno, fileno_unlocked) diff --git a/libio/fputc.c b/libio/fputc.c index 8143f2c096..d29a9d0aee 100644 --- a/libio/fputc.c +++ b/libio/fputc.c @@ -39,8 +39,3 @@ fputc (int c, FILE *fp) _IO_release_lock (fp); return result; } - -#ifndef _IO_MTSAFE_IO -#undef fputc_unlocked -weak_alias (fputc, fputc_unlocked) -#endif diff --git a/libio/genops.c b/libio/genops.c index 1b629eb695..ccfbcd149d 100644 --- a/libio/genops.c +++ b/libio/genops.c @@ -32,13 +32,10 @@ #include #include -#ifdef _IO_MTSAFE_IO static _IO_lock_t list_all_lock = _IO_lock_initializer; -#endif static FILE *run_fp; -#ifdef _IO_MTSAFE_IO static void flush_cleanup (void *not_used) { @@ -46,7 +43,6 @@ flush_cleanup (void *not_used) _IO_funlockfile (run_fp); _IO_lock_unlock (list_all_lock); } -#endif void _IO_un_link (struct _IO_FILE_plus *fp) @@ -54,12 +50,10 @@ _IO_un_link (struct _IO_FILE_plus *fp) if (fp->file._flags & _IO_LINKED) { FILE **f; -#ifdef _IO_MTSAFE_IO _IO_cleanup_region_start_noarg (flush_cleanup); _IO_lock_lock (list_all_lock); run_fp = (FILE *) fp; _IO_flockfile ((FILE *) fp); -#endif if (_IO_list_all == NULL) ; else if (fp == _IO_list_all) @@ -72,12 +66,10 @@ _IO_un_link (struct _IO_FILE_plus *fp) break; } fp->file._flags &= ~_IO_LINKED; -#ifdef _IO_MTSAFE_IO _IO_funlockfile ((FILE *) fp); run_fp = NULL; _IO_lock_unlock (list_all_lock); _IO_cleanup_region_end (0); -#endif } } libc_hidden_def (_IO_un_link) @@ -88,20 +80,16 @@ _IO_link_in (struct _IO_FILE_plus *fp) if ((fp->file._flags & _IO_LINKED) == 0) { fp->file._flags |= _IO_LINKED; -#ifdef _IO_MTSAFE_IO _IO_cleanup_region_start_noarg (flush_cleanup); _IO_lock_lock (list_all_lock); run_fp = (FILE *) fp; _IO_flockfile ((FILE *) fp); -#endif fp->file._chain = (FILE *) _IO_list_all; _IO_list_all = fp; -#ifdef _IO_MTSAFE_IO _IO_funlockfile ((FILE *) fp); run_fp = NULL; _IO_lock_unlock (list_all_lock); _IO_cleanup_region_end (0); -#endif } } libc_hidden_def (_IO_link_in) @@ -551,10 +539,8 @@ _IO_old_init (FILE *fp, int flags) #if _IO_JUMPS_OFFSET fp->_vtable_offset = 0; #endif -#ifdef _IO_MTSAFE_IO if (fp->_lock != NULL) _IO_lock_init (*fp->_lock); -#endif } void @@ -617,10 +603,8 @@ _IO_default_finish (FILE *fp, int dummy) _IO_un_link ((struct _IO_FILE_plus *) fp); -#ifdef _IO_MTSAFE_IO if (fp->_lock != NULL) _IO_lock_fini (*fp->_lock); -#endif } libc_hidden_def (_IO_default_finish) @@ -687,10 +671,8 @@ _IO_flush_all_lockp (int do_lock) int result = 0; FILE *fp; -#ifdef _IO_MTSAFE_IO _IO_cleanup_region_start_noarg (flush_cleanup); _IO_lock_lock (list_all_lock); -#endif for (fp = (FILE *) _IO_list_all; fp != NULL; fp = fp->_chain) { @@ -711,10 +693,8 @@ _IO_flush_all_lockp (int do_lock) run_fp = NULL; } -#ifdef _IO_MTSAFE_IO _IO_lock_unlock (list_all_lock); _IO_cleanup_region_end (0); -#endif return result; } @@ -733,10 +713,8 @@ _IO_flush_all_linebuffered (void) { FILE *fp; -#ifdef _IO_MTSAFE_IO _IO_cleanup_region_start_noarg (flush_cleanup); _IO_lock_lock (list_all_lock); -#endif for (fp = (FILE *) _IO_list_all; fp != NULL; fp = fp->_chain) { @@ -750,10 +728,8 @@ _IO_flush_all_linebuffered (void) run_fp = NULL; } -#ifdef _IO_MTSAFE_IO _IO_lock_unlock (list_all_lock); _IO_cleanup_region_end (0); -#endif } libc_hidden_def (_IO_flush_all_linebuffered) weak_alias (_IO_flush_all_linebuffered, _flushlbf) @@ -782,10 +758,8 @@ _IO_unbuffer_all (void) { FILE *fp; -#ifdef _IO_MTSAFE_IO _IO_cleanup_region_start_noarg (flush_cleanup); _IO_lock_lock (list_all_lock); -#endif for (fp = (FILE *) _IO_list_all; fp; fp = fp->_chain) { @@ -800,7 +774,6 @@ _IO_unbuffer_all (void) /* Iff stream is un-orientated, it wasn't used. */ && (legacy || fp->_mode != 0)) { -#ifdef _IO_MTSAFE_IO int cnt; #define MAXTRIES 2 for (cnt = 0; cnt < MAXTRIES; ++cnt) @@ -810,7 +783,6 @@ _IO_unbuffer_all (void) /* Give the other thread time to finish up its use of the stream. */ __sched_yield (); -#endif if (! legacy && ! dealloc_buffers && !(fp->_flags & _IO_USER_BUF)) { @@ -826,10 +798,8 @@ _IO_unbuffer_all (void) if (! legacy && fp->_mode > 0) _IO_wsetb (fp, NULL, NULL, 0); -#ifdef _IO_MTSAFE_IO if (cnt < MAXTRIES && fp->_lock != NULL) _IO_lock_unlock (*fp->_lock); -#endif } /* Make sure that never again the wide char functions can be @@ -838,10 +808,8 @@ _IO_unbuffer_all (void) fp->_mode = -1; } -#ifdef _IO_MTSAFE_IO _IO_lock_unlock (list_all_lock); _IO_cleanup_region_end (0); -#endif } @@ -1092,27 +1060,21 @@ libc_hidden_def (_IO_iter_file) void _IO_list_lock (void) { -#ifdef _IO_MTSAFE_IO _IO_lock_lock (list_all_lock); -#endif } libc_hidden_def (_IO_list_lock) void _IO_list_unlock (void) { -#ifdef _IO_MTSAFE_IO _IO_lock_unlock (list_all_lock); -#endif } libc_hidden_def (_IO_list_unlock) void _IO_list_resetlock (void) { -#ifdef _IO_MTSAFE_IO _IO_lock_init (list_all_lock); -#endif } libc_hidden_def (_IO_list_resetlock) diff --git a/libio/getc.c b/libio/getc.c index 55a6cc479a..8c79cf702f 100644 --- a/libio/getc.c +++ b/libio/getc.c @@ -46,9 +46,3 @@ _IO_getc (FILE *fp) weak_alias (_IO_getc, getc) weak_alias (_IO_getc, fgetc) - -#ifndef _IO_MTSAFE_IO -#undef getc_unlocked -weak_alias (_IO_getc, getc_unlocked) -weak_alias (_IO_getc, fgetc_unlocked) -#endif diff --git a/libio/getchar.c b/libio/getchar.c index 6ceff06a84..e0f4f471b3 100644 --- a/libio/getchar.c +++ b/libio/getchar.c @@ -39,9 +39,4 @@ getchar (void) result = _IO_getc_unlocked (stdin); _IO_release_lock (stdin); return result; -} - -#ifndef _IO_MTSAFE_IO -#undef getchar_unlocked -weak_alias (getchar, getchar_unlocked) -#endif +} \ No newline at end of file diff --git a/libio/iofdopen.c b/libio/iofdopen.c index 47b602d3c2..b8d082ebc5 100644 --- a/libio/iofdopen.c +++ b/libio/iofdopen.c @@ -37,9 +37,7 @@ _IO_new_fdopen (int fd, const char *mode) struct locked_FILE { struct _IO_FILE_plus fp; -#ifdef _IO_MTSAFE_IO _IO_lock_t lock; -#endif struct _IO_wide_data wd; } *new_f; int i; @@ -122,9 +120,7 @@ _IO_new_fdopen (int fd, const char *mode) new_f = (struct locked_FILE *) malloc (sizeof (struct locked_FILE)); if (new_f == NULL) return NULL; -#ifdef _IO_MTSAFE_IO new_f->fp.file._lock = &new_f->lock; -#endif _IO_no_init (&new_f->fp.file, 0, 0, &new_f->wd, #if _G_HAVE_MMAP (use_mmap && (read_write & _IO_NO_WRITES)) diff --git a/libio/iofflush.c b/libio/iofflush.c index 5b542664a8..6ea046cf48 100644 --- a/libio/iofflush.c +++ b/libio/iofflush.c @@ -46,10 +46,3 @@ libc_hidden_def (_IO_fflush) weak_alias (_IO_fflush, fflush) libc_hidden_weak (fflush) - -#ifndef _IO_MTSAFE_IO -strong_alias (_IO_fflush, __fflush_unlocked) -libc_hidden_def (__fflush_unlocked) -weak_alias (_IO_fflush, fflush_unlocked) -libc_hidden_weak (fflush_unlocked) -#endif diff --git a/libio/iofgets.c b/libio/iofgets.c index 58d30fca96..f19526de46 100644 --- a/libio/iofgets.c +++ b/libio/iofgets.c @@ -66,10 +66,3 @@ _IO_fgets (char *buf, int n, FILE *fp) } weak_alias (_IO_fgets, fgets) - -# ifndef _IO_MTSAFE_IO -strong_alias (_IO_fgets, __fgets_unlocked) -libc_hidden_def (__fgets_unlocked) -weak_alias (_IO_fgets, fgets_unlocked) -libc_hidden_weak (fgets_unlocked) -# endif diff --git a/libio/iofopen.c b/libio/iofopen.c index e7471fa3ae..777f8c9e1c 100644 --- a/libio/iofopen.c +++ b/libio/iofopen.c @@ -58,17 +58,13 @@ __fopen_internal (const char *filename, const char *mode, int is32) struct locked_FILE { struct _IO_FILE_plus fp; -#ifdef _IO_MTSAFE_IO _IO_lock_t lock; -#endif struct _IO_wide_data wd; } *new_f = (struct locked_FILE *) malloc (sizeof (struct locked_FILE)); if (new_f == NULL) return NULL; -#ifdef _IO_MTSAFE_IO new_f->fp.file._lock = &new_f->lock; -#endif _IO_no_init (&new_f->fp.file, 0, 0, &new_f->wd, &_IO_wfile_jumps); _IO_JUMPS (&new_f->fp) = &_IO_file_jumps; _IO_new_file_init_internal (&new_f->fp); diff --git a/libio/iofopncook.c b/libio/iofopncook.c index e108ad2199..16bcc7f4a3 100644 --- a/libio/iofopncook.c +++ b/libio/iofopncook.c @@ -179,9 +179,7 @@ _IO_fopencookie (void *cookie, const char *mode, struct locked_FILE { struct _IO_cookie_file cfile; -#ifdef _IO_MTSAFE_IO _IO_lock_t lock; -#endif } *new_f; switch (*mode++) @@ -205,9 +203,7 @@ _IO_fopencookie (void *cookie, const char *mode, new_f = (struct locked_FILE *) malloc (sizeof (struct locked_FILE)); if (new_f == NULL) return NULL; -#ifdef _IO_MTSAFE_IO new_f->cfile.__fp.file._lock = &new_f->lock; -#endif _IO_cookie_init (&new_f->cfile, read_write, cookie, io_functions); diff --git a/libio/iofputs.c b/libio/iofputs.c index 999e069877..f8e0ee7200 100644 --- a/libio/iofputs.c +++ b/libio/iofputs.c @@ -44,10 +44,3 @@ libc_hidden_def (_IO_fputs) weak_alias (_IO_fputs, fputs) libc_hidden_weak (fputs) - -# ifndef _IO_MTSAFE_IO -strong_alias (_IO_fputs, __fputs_unlocked) -libc_hidden_def (__fputs_unlocked) -weak_alias (_IO_fputs, fputs_unlocked) -libc_hidden_ver (_IO_fputs, fputs_unlocked) -# endif diff --git a/libio/iofread.c b/libio/iofread.c index d358136953..66f69ac93f 100644 --- a/libio/iofread.c +++ b/libio/iofread.c @@ -42,9 +42,3 @@ _IO_fread (void *buf, size_t size, size_t count, FILE *fp) libc_hidden_def (_IO_fread) weak_alias (_IO_fread, fread) - -# ifndef _IO_MTSAFE_IO -strong_alias (_IO_fread, __fread_unlocked) -libc_hidden_def (__fread_unlocked) -weak_alias (_IO_fread, fread_unlocked) -# endif diff --git a/libio/iofwrite.c b/libio/iofwrite.c index f86b5458da..ff741fec8e 100644 --- a/libio/iofwrite.c +++ b/libio/iofwrite.c @@ -24,6 +24,7 @@ This exception applies to code released by its copyright holders in files containing the exception. */ +#include #include "libioP.h" size_t @@ -49,10 +50,5 @@ _IO_fwrite (const void *buf, size_t size, size_t count, FILE *fp) } libc_hidden_def (_IO_fwrite) -# include weak_alias (_IO_fwrite, fwrite) libc_hidden_weak (fwrite) -# ifndef _IO_MTSAFE_IO -weak_alias (_IO_fwrite, fwrite_unlocked) -libc_hidden_weak (fwrite_unlocked) -# endif diff --git a/libio/iopopen.c b/libio/iopopen.c index 06778cf110..676c739aba 100644 --- a/libio/iopopen.c +++ b/libio/iopopen.c @@ -49,7 +49,6 @@ static const struct _IO_jump_t _IO_proc_jumps; static struct _IO_proc_file *proc_file_chain; -#ifdef _IO_MTSAFE_IO static _IO_lock_t proc_file_chain_lock = _IO_lock_initializer; static void @@ -57,7 +56,6 @@ unlock (void *not_used) { _IO_lock_unlock (proc_file_chain_lock); } -#endif /* POSIX states popen shall ensure that any streams from previous popen() calls that remain open in the parent process should be closed in the new @@ -189,16 +187,12 @@ _IO_new_proc_open (FILE *fp, const char *command, const char *mode) child_pipe_fd) != 0) goto spawn_failure; -#ifdef _IO_MTSAFE_IO _IO_cleanup_region_start_noarg (unlock); _IO_lock_lock (proc_file_chain_lock); -#endif spawn_ok = spawn_process (&fa, fp, command, do_cloexec, pipe_fds, parent_end, child_end, child_pipe_fd); -#ifdef _IO_MTSAFE_IO _IO_lock_unlock (proc_file_chain_lock); _IO_cleanup_region_end (0); -#endif __posix_spawn_file_actions_destroy (&fa); @@ -221,18 +215,14 @@ _IO_new_popen (const char *command, const char *mode) struct locked_FILE { struct _IO_proc_file fpx; -#ifdef _IO_MTSAFE_IO _IO_lock_t lock; -#endif } *new_f; FILE *fp; new_f = (struct locked_FILE *) malloc (sizeof (struct locked_FILE)); if (new_f == NULL) return NULL; -#ifdef _IO_MTSAFE_IO new_f->fpx.file.file._lock = &new_f->lock; -#endif fp = &new_f->fpx.file.file; _IO_init_internal (fp, 0); _IO_JUMPS (&new_f->fpx.file) = &_IO_proc_jumps; @@ -254,10 +244,8 @@ _IO_new_proc_close (FILE *fp) int status = -1; /* Unlink from proc_file_chain. */ -#ifdef _IO_MTSAFE_IO _IO_cleanup_region_start_noarg (unlock); _IO_lock_lock (proc_file_chain_lock); -#endif for ( ; *ptr != NULL; ptr = &(*ptr)->next) { if (*ptr == (_IO_proc_file *) fp) @@ -267,10 +255,8 @@ _IO_new_proc_close (FILE *fp) break; } } -#ifdef _IO_MTSAFE_IO _IO_lock_unlock (proc_file_chain_lock); _IO_cleanup_region_end (0); -#endif if (status < 0 || __close_nocancel (_IO_fileno(fp)) < 0) return -1; diff --git a/libio/iovdprintf.c b/libio/iovdprintf.c index 1e483868c9..4c5a90e58d 100644 --- a/libio/iovdprintf.c +++ b/libio/iovdprintf.c @@ -35,9 +35,7 @@ __vdprintf_internal (int d, const char *format, va_list arg, struct _IO_wide_data wd; int done; -#ifdef _IO_MTSAFE_IO tmpfil.file._lock = NULL; -#endif _IO_no_init (&tmpfil.file, _IO_USER_LOCK, 0, &wd, &_IO_wfile_jumps); _IO_JUMPS (&tmpfil) = &_IO_file_jumps; _IO_new_file_init_internal (&tmpfil); diff --git a/libio/iovsprintf.c b/libio/iovsprintf.c index 72c67bf27b..cbe59f6fec 100644 --- a/libio/iovsprintf.c +++ b/libio/iovsprintf.c @@ -73,9 +73,7 @@ __vsprintf_internal (char *string, size_t maxlen, _IO_strfile sf; int ret; -#ifdef _IO_MTSAFE_IO sf._sbf._f._lock = NULL; -#endif _IO_no_init (&sf._sbf._f, _IO_USER_LOCK, -1, NULL, NULL); /* When called from fortified sprintf/vsprintf, erase the destination buffer and try to detect overflows. When called from regular diff --git a/libio/libio.h b/libio/libio.h index d0184df878..42ff6143af 100644 --- a/libio/libio.h +++ b/libio/libio.h @@ -36,7 +36,7 @@ #include -#if defined _IO_MTSAFE_IO && !defined _IO_lock_t_defined +#if !defined _IO_lock_t_defined # error "Someone forgot to include stdio-lock.h" #endif @@ -198,10 +198,13 @@ extern void _IO_flockfile (FILE *) __THROW; extern void _IO_funlockfile (FILE *) __THROW; extern int _IO_ftrylockfile (FILE *) __THROW; -#define _IO_peekc(_fp) _IO_peekc_unlocked (_fp) -#define _IO_flockfile(_fp) /**/ -#define _IO_funlockfile(_fp) ((void) 0) -#define _IO_ftrylockfile(_fp) /**/ +#define _IO_peekc(_fp) _IO_peekc_locked (_fp) +#define _IO_flockfile(_fp) \ + if (((_fp)->_flags & _IO_USER_LOCK) == 0) _IO_lock_lock (*(_fp)->_lock) +#define _IO_funlockfile(_fp) \ + if (((_fp)->_flags & _IO_USER_LOCK) == 0) _IO_lock_unlock (*(_fp)->_lock) +#define _IO_ftrylockfile(__fp) \ + if (((_fp)->_flags & _IO_USER_LOCK) == 0) _IO_lock_trylock (*(_fp)->_lock) #ifndef _IO_cleanup_region_start #define _IO_cleanup_region_start(_fct, _fp) /**/ #endif @@ -272,17 +275,4 @@ libc_hidden_proto (_IO_padn) libc_hidden_proto (_IO_putc) libc_hidden_proto (_IO_sgetn) -#ifdef _IO_MTSAFE_IO -# undef _IO_peekc -# undef _IO_flockfile -# undef _IO_funlockfile -# undef _IO_ftrylockfile - -# define _IO_peekc(_fp) _IO_peekc_locked (_fp) -# define _IO_flockfile(_fp) \ - if (((_fp)->_flags & _IO_USER_LOCK) == 0) _IO_lock_lock (*(_fp)->_lock) -# define _IO_funlockfile(_fp) \ - if (((_fp)->_flags & _IO_USER_LOCK) == 0) _IO_lock_unlock (*(_fp)->_lock) -#endif /* _IO_MTSAFE_IO */ - #endif /* _LIBIO_H */ diff --git a/libio/libioP.h b/libio/libioP.h index ba4fdbd200..114084b83a 100644 --- a/libio/libioP.h +++ b/libio/libioP.h @@ -803,33 +803,18 @@ extern int __vfwscanf_internal (FILE *fp, const wchar_t *format, va_list argp, extern int _IO_vscanf (const char *, va_list) __THROW; -#ifdef _IO_MTSAFE_IO /* check following! */ -# ifdef _IO_USE_OLD_IO_FILE -# define FILEBUF_LITERAL(CHAIN, FLAGS, FD, WDP) \ +#ifdef _IO_USE_OLD_IO_FILE +# define FILEBUF_LITERAL(CHAIN, FLAGS, FD, WDP) \ { _IO_MAGIC+_IO_LINKED+_IO_IS_FILEBUF+FLAGS, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, (FILE *) CHAIN, FD, \ 0, _IO_pos_BAD, 0, 0, { 0 }, &_IO_stdfile_##FD##_lock } -# else -# define FILEBUF_LITERAL(CHAIN, FLAGS, FD, WDP) \ - { _IO_MAGIC+_IO_LINKED+_IO_IS_FILEBUF+FLAGS, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, (FILE *) CHAIN, FD, \ - 0, _IO_pos_BAD, 0, 0, { 0 }, &_IO_stdfile_##FD##_lock, _IO_pos_BAD,\ - NULL, WDP, 0 } -# endif #else -# ifdef _IO_USE_OLD_IO_FILE -# define FILEBUF_LITERAL(CHAIN, FLAGS, FD, WDP) \ +# define FILEBUF_LITERAL(CHAIN, FLAGS, FD, WDP) \ { _IO_MAGIC+_IO_LINKED+_IO_IS_FILEBUF+FLAGS, \ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, (FILE *) CHAIN, FD, \ - 0, _IO_pos_BAD } -# else -# define FILEBUF_LITERAL(CHAIN, FLAGS, FD, WDP) \ - { _IO_MAGIC+_IO_LINKED+_IO_IS_FILEBUF+FLAGS, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, (FILE *) CHAIN, FD, \ - 0, _IO_pos_BAD, 0, 0, { 0 }, 0, _IO_pos_BAD, \ + 0, _IO_pos_BAD, 0, 0, { 0 }, &_IO_stdfile_##FD##_lock, _IO_pos_BAD,\ NULL, WDP, 0 } -# endif #endif #if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1) @@ -884,13 +869,6 @@ _IO_acquire_lock_fct (FILE **p) _IO_funlockfile (fp); } -#if !defined _IO_MTSAFE_IO && IS_IN (libc) -# define _IO_acquire_lock(_fp) \ - do { -# define _IO_release_lock(_fp) \ - } while (0) -#endif - /* Collect all vtables in a special section for vtable verification. These symbols cover the extent of this section. */ symbol_set_declare (__libc_IO_vtables) diff --git a/libio/memstream.c b/libio/memstream.c index 1ae8cd9544..7ab61876ba 100644 --- a/libio/memstream.c +++ b/libio/memstream.c @@ -66,9 +66,7 @@ __open_memstream (char **bufloc, size_t *sizeloc) struct locked_FILE { struct _IO_FILE_memstream fp; -#ifdef _IO_MTSAFE_IO _IO_lock_t lock; -#endif struct _IO_wide_data wd; } *new_f; char *buf; @@ -76,9 +74,7 @@ __open_memstream (char **bufloc, size_t *sizeloc) new_f = (struct locked_FILE *) malloc (sizeof (struct locked_FILE)); if (new_f == NULL) return NULL; -#ifdef _IO_MTSAFE_IO new_f->fp._sf._sbf._f._lock = &new_f->lock; -#endif buf = calloc (1, BUFSIZ); if (buf == NULL) diff --git a/libio/obprintf.c b/libio/obprintf.c index c220be9adc..ed0f39d85a 100644 --- a/libio/obprintf.c +++ b/libio/obprintf.c @@ -127,9 +127,7 @@ __obstack_vprintf_internal (struct obstack *obstack, const char *format, int size; int room; -#ifdef _IO_MTSAFE_IO new_f.ofile.file.file._lock = NULL; -#endif _IO_no_init (&new_f.ofile.file.file, _IO_USER_LOCK, -1, NULL, NULL); _IO_JUMPS (&new_f.ofile.file) = &_IO_obstack_jumps; diff --git a/libio/oldiofdopen.c b/libio/oldiofdopen.c index 1ce050f1f4..0b0097e9e2 100644 --- a/libio/oldiofdopen.c +++ b/libio/oldiofdopen.c @@ -41,9 +41,7 @@ _IO_old_fdopen (int fd, const char *mode) struct locked_FILE { struct _IO_FILE_complete_plus fp; -#ifdef _IO_MTSAFE_IO _IO_lock_t lock; -#endif } *new_f; int fd_flags; @@ -96,9 +94,7 @@ _IO_old_fdopen (int fd, const char *mode) new_f = (struct locked_FILE *) malloc (sizeof (struct locked_FILE)); if (new_f == NULL) return NULL; -#ifdef _IO_MTSAFE_IO new_f->fp.file._file._lock = &new_f->lock; -#endif _IO_old_init (&new_f->fp.file._file, 0); _IO_JUMPS_FILE_plus (&new_f->fp) = &_IO_old_file_jumps; _IO_old_file_init_internal ((struct _IO_FILE_plus *) &new_f->fp); diff --git a/libio/oldiofopen.c b/libio/oldiofopen.c index c73911fdd8..f3abd9ee07 100644 --- a/libio/oldiofopen.c +++ b/libio/oldiofopen.c @@ -39,16 +39,12 @@ _IO_old_fopen (const char *filename, const char *mode) struct locked_FILE { struct _IO_FILE_complete_plus fp; -#ifdef _IO_MTSAFE_IO _IO_lock_t lock; -#endif } *new_f = (struct locked_FILE *) malloc (sizeof (struct locked_FILE)); if (new_f == NULL) return NULL; -#ifdef _IO_MTSAFE_IO new_f->fp.file._file._lock = &new_f->lock; -#endif _IO_old_init (&new_f->fp.file._file, 0); _IO_JUMPS_FILE_plus (&new_f->fp) = &_IO_old_file_jumps; _IO_old_file_init_internal ((struct _IO_FILE_plus *) &new_f->fp); diff --git a/libio/oldiopopen.c b/libio/oldiopopen.c index f9149413e8..e24acf752e 100644 --- a/libio/oldiopopen.c +++ b/libio/oldiopopen.c @@ -47,7 +47,6 @@ typedef struct _IO_proc_file _IO_proc_file; static struct _IO_proc_file *old_proc_file_chain; -#ifdef _IO_MTSAFE_IO static _IO_lock_t proc_file_chain_lock = _IO_lock_initializer; static void @@ -55,7 +54,6 @@ unlock (void *not_used) { _IO_lock_unlock (proc_file_chain_lock); } -#endif FILE * attribute_compat_text_section @@ -118,16 +116,12 @@ _IO_old_proc_open (FILE *fp, const char *command, const char *mode) _IO_fileno (fp) = parent_end; /* Link into old_proc_file_chain. */ -#ifdef _IO_MTSAFE_IO _IO_cleanup_region_start_noarg (unlock); _IO_lock_lock (proc_file_chain_lock); -#endif ((_IO_proc_file *) fp)->next = old_proc_file_chain; old_proc_file_chain = (_IO_proc_file *) fp; -#ifdef _IO_MTSAFE_IO _IO_lock_unlock (proc_file_chain_lock); _IO_cleanup_region_end (0); -#endif _IO_mask_flags (fp, read_or_write, _IO_NO_READS|_IO_NO_WRITES); return fp; @@ -140,18 +134,14 @@ _IO_old_popen (const char *command, const char *mode) struct locked_FILE { struct _IO_proc_file fpx; -#ifdef _IO_MTSAFE_IO _IO_lock_t lock; -#endif } *new_f; FILE *fp; new_f = (struct locked_FILE *) malloc (sizeof (struct locked_FILE)); if (new_f == NULL) return NULL; -#ifdef _IO_MTSAFE_IO new_f->fpx.file.file._file._lock = &new_f->lock; -#endif fp = &new_f->fpx.file.file._file; _IO_old_init (fp, 0); _IO_JUMPS_FILE_plus (&new_f->fpx.file) = &_IO_old_proc_jumps; @@ -174,10 +164,8 @@ _IO_old_proc_close (FILE *fp) int status = -1; /* Unlink from old_proc_file_chain. */ -#ifdef _IO_MTSAFE_IO _IO_cleanup_region_start_noarg (unlock); _IO_lock_lock (proc_file_chain_lock); -#endif for ( ; *ptr != NULL; ptr = &(*ptr)->next) { if (*ptr == (_IO_proc_file *) fp) @@ -187,10 +175,8 @@ _IO_old_proc_close (FILE *fp) break; } } -#ifdef _IO_MTSAFE_IO _IO_lock_unlock (proc_file_chain_lock); _IO_cleanup_region_end (0); -#endif if (status < 0 || __close (_IO_fileno(fp)) < 0) return -1; diff --git a/libio/oldstdfiles.c b/libio/oldstdfiles.c index 81a7f4f64d..30d8e39ef9 100644 --- a/libio/oldstdfiles.c +++ b/libio/oldstdfiles.c @@ -33,16 +33,10 @@ #define _IO_USE_OLD_IO_FILE #include "libioP.h" -#ifdef _IO_MTSAFE_IO #define DEF_STDFILE(NAME, FD, CHAIN, FLAGS) \ static _IO_lock_t _IO_stdfile_##FD##_lock = _IO_lock_initializer; \ struct _IO_FILE_plus NAME \ = {FILEBUF_LITERAL(CHAIN, FLAGS, FD, NULL), &_IO_old_file_jumps}; -#else -#define DEF_STDFILE(NAME, FD, CHAIN, FLAGS) \ - struct _IO_FILE_plus NAME \ - = {FILEBUF_LITERAL(CHAIN, FLAGS, FD, NULL), &_IO_old_file_jumps}; -#endif DEF_STDFILE(_IO_stdin_, 0, 0, _IO_NO_WRITES); DEF_STDFILE(_IO_stdout_, 1, &_IO_stdin_, _IO_NO_READS); diff --git a/libio/putc.c b/libio/putc.c index 7036c5b6bb..44e30649c9 100644 --- a/libio/putc.c +++ b/libio/putc.c @@ -37,8 +37,3 @@ libc_hidden_def (_IO_putc) #undef putc weak_alias (_IO_putc, putc) - -#ifndef _IO_MTSAFE_IO -#undef putc_unlocked -weak_alias (_IO_putc, putc_unlocked) -#endif diff --git a/libio/putchar.c b/libio/putchar.c index 7eff3d5f94..9aff59c090 100644 --- a/libio/putchar.c +++ b/libio/putchar.c @@ -29,8 +29,3 @@ putchar (int c) _IO_release_lock (stdout); return result; } - -#if defined weak_alias && !defined _IO_MTSAFE_IO -#undef putchar_unlocked -weak_alias (putchar, putchar_unlocked) -#endif diff --git a/libio/stdfiles.c b/libio/stdfiles.c index 31cf72dfd0..b5c1dc4208 100644 --- a/libio/stdfiles.c +++ b/libio/stdfiles.c @@ -32,22 +32,13 @@ #include "libioP.h" -#ifdef _IO_MTSAFE_IO -# define DEF_STDFILE(NAME, FD, CHAIN, FLAGS) \ +#define DEF_STDFILE(NAME, FD, CHAIN, FLAGS) \ static _IO_lock_t _IO_stdfile_##FD##_lock = _IO_lock_initializer; \ static struct _IO_wide_data _IO_wide_data_##FD \ = { ._wide_vtable = &_IO_wfile_jumps }; \ struct _IO_FILE_plus NAME \ = {FILEBUF_LITERAL(CHAIN, FLAGS, FD, &_IO_wide_data_##FD), \ &_IO_file_jumps}; -#else -# define DEF_STDFILE(NAME, FD, CHAIN, FLAGS) \ - static struct _IO_wide_data _IO_wide_data_##FD \ - = { ._wide_vtable = &_IO_wfile_jumps }; \ - struct _IO_FILE_plus NAME \ - = {FILEBUF_LITERAL(CHAIN, FLAGS, FD, &_IO_wide_data_##FD), \ - &_IO_file_jumps}; -#endif DEF_STDFILE(_IO_2_1_stdin_, 0, 0, _IO_NO_WRITES); DEF_STDFILE(_IO_2_1_stdout_, 1, &_IO_2_1_stdin_, _IO_NO_READS); diff --git a/libio/vasprintf.c b/libio/vasprintf.c index 4430a266c6..c90a21cb6f 100644 --- a/libio/vasprintf.c +++ b/libio/vasprintf.c @@ -45,9 +45,7 @@ __vasprintf_internal (char **result_ptr, const char *format, va_list args, string = (char *) malloc (init_string_size); if (string == NULL) return -1; -#ifdef _IO_MTSAFE_IO sf._sbf._f._lock = NULL; -#endif _IO_no_init (&sf._sbf._f, _IO_USER_LOCK, -1, NULL, NULL); _IO_JUMPS (&sf._sbf) = &_IO_str_jumps; _IO_str_init_static_internal (&sf, string, init_string_size, string); diff --git a/libio/vsnprintf.c b/libio/vsnprintf.c index 8dae66761d..5aa01665d8 100644 --- a/libio/vsnprintf.c +++ b/libio/vsnprintf.c @@ -95,9 +95,7 @@ __vsnprintf_internal (char *string, size_t maxlen, const char *format, { _IO_strnfile sf; int ret; -#ifdef _IO_MTSAFE_IO sf.f._sbf._f._lock = NULL; -#endif /* We need to handle the special case where MAXLEN is 0. Use the overflow buffer right from the start. */ diff --git a/libio/vswprintf.c b/libio/vswprintf.c index 5a9ccdff3e..c6f4706573 100644 --- a/libio/vswprintf.c +++ b/libio/vswprintf.c @@ -95,9 +95,7 @@ __vswprintf_internal (wchar_t *string, size_t maxlen, const wchar_t *format, _IO_wstrnfile sf; int ret; struct _IO_wide_data wd; -#ifdef _IO_MTSAFE_IO sf.f._sbf._f._lock = NULL; -#endif if (maxlen == 0) /* Since we have to write at least the terminating L'\0' a buffer diff --git a/libio/wgenops.c b/libio/wgenops.c index e7ea75aed2..96e10f6d1c 100644 --- a/libio/wgenops.c +++ b/libio/wgenops.c @@ -185,10 +185,8 @@ _IO_wdefault_finish (FILE *fp, int dummy) fp->_IO_save_base = NULL; } -#ifdef _IO_MTSAFE_IO if (fp->_lock != NULL) _IO_lock_fini (*fp->_lock); -#endif _IO_un_link ((struct _IO_FILE_plus *) fp); } diff --git a/libio/wmemstream.c b/libio/wmemstream.c index e7f898c7fb..9366ef4aad 100644 --- a/libio/wmemstream.c +++ b/libio/wmemstream.c @@ -67,9 +67,7 @@ open_wmemstream (wchar_t **bufloc, size_t *sizeloc) struct locked_FILE { struct _IO_FILE_wmemstream fp; -#ifdef _IO_MTSAFE_IO _IO_lock_t lock; -#endif struct _IO_wide_data wd; } *new_f; wchar_t *buf; @@ -77,9 +75,7 @@ open_wmemstream (wchar_t **bufloc, size_t *sizeloc) new_f = (struct locked_FILE *) malloc (sizeof (struct locked_FILE)); if (new_f == NULL) return NULL; -#ifdef _IO_MTSAFE_IO new_f->fp._sf._sbf._f._lock = &new_f->lock; -#endif buf = calloc (1, BUFSIZ); if (buf == NULL) diff --git a/nptl/Makefile b/nptl/Makefile index b585663974..a85da416de 100644 --- a/nptl/Makefile +++ b/nptl/Makefile @@ -432,9 +432,6 @@ $(objpfx)multidir.mk: $(common-objpfx)config.make endif -CFLAGS-ftrylockfile.c += $(libio-mtsafe) -CFLAGS-funlockfile.c += $(libio-mtsafe) - link-libc-static := $(common-objpfx)libc.a $(static-gnulib) \ $(common-objpfx)libc.a diff --git a/pwd/Makefile b/pwd/Makefile index 848e7d0e12..da8e84c46c 100644 --- a/pwd/Makefile +++ b/pwd/Makefile @@ -37,6 +37,5 @@ ifeq ($(have-thread-library),yes) CFLAGS-getpwent_r.c += -fexceptions CFLAGS-getpwent.c += -fexceptions CFLAGS-getpw.c += -fexceptions -CFLAGS-fgetpwent_r.c += $(libio-mtsafe) endif diff --git a/shadow/Makefile b/shadow/Makefile index b9faa3aa53..1b4ee5d50f 100644 --- a/shadow/Makefile +++ b/shadow/Makefile @@ -32,8 +32,8 @@ tests = tst-shadow tst-putspent CFLAGS-getspent_r.c += -fexceptions CFLAGS-getspent.c += -fexceptions CFLAGS-fgetspent.c += -fexceptions -CFLAGS-fgetspent_r.c += -fexceptions $(libio-mtsafe) -CFLAGS-putspent.c += -fexceptions $(libio-mtsafe) +CFLAGS-fgetspent_r.c += -fexceptions +CFLAGS-putspent.c += -fexceptions CFLAGS-getspnam.c += -fexceptions CFLAGS-getspnam_r.c += -fexceptions diff --git a/stdio-common/Makefile b/stdio-common/Makefile index a1603e82fe..ddeacb1342 100644 --- a/stdio-common/Makefile +++ b/stdio-common/Makefile @@ -357,8 +357,6 @@ CFLAGS-tst-gets.c += -Wno-deprecated-declarations # the fortified version had the same bug. CFLAGS-tst-bz11319-fortify2.c += -D_FORTIFY_SOURCE=2 -CPPFLAGS += $(libio-mtsafe) - $(objpfx)tst-setvbuf1.out: /dev/null $(objpfx)tst-setvbuf1 $(test-program-cmd) > $@ 2>&1; \ $(evaluate-test) diff --git a/stdio-common/vfprintf-internal.c b/stdio-common/vfprintf-internal.c index 59bd76c890..b915803c66 100644 --- a/stdio-common/vfprintf-internal.c +++ b/stdio-common/vfprintf-internal.c @@ -2141,9 +2141,7 @@ struct helper_file struct _IO_wide_data _wide_data; #endif FILE *_put_stream; -#ifdef _IO_MTSAFE_IO _IO_lock_t lock; -#endif }; static int @@ -2251,9 +2249,7 @@ buffered_vfprintf (FILE *s, const CHAR_T *format, va_list args, #if _IO_JUMPS_OFFSET hp->_vtable_offset = 0; #endif -#ifdef _IO_MTSAFE_IO hp->_lock = NULL; -#endif hp->_flags2 = s->_flags2; _IO_JUMPS (&helper._f) = (struct _IO_jump_t *) &_IO_helper_jumps; diff --git a/stdlib/Makefile b/stdlib/Makefile index 60fc59c12c..1a10b18931 100644 --- a/stdlib/Makefile +++ b/stdlib/Makefile @@ -359,15 +359,6 @@ CFLAGS-system.c += -fexceptions CFLAGS-system.os = -fomit-frame-pointer CFLAGS-fmtmsg.c += -fexceptions -CFLAGS-strfmon.c += $(libio-mtsafe) -CFLAGS-strfmon_l.c += $(libio-mtsafe) - -# The strfrom class of functions call __printf_fp in order to convert the -# floating-point value to characters. This requires the value of IO_MTSAFE_IO. -CFLAGS-strfromd.c += $(libio-mtsafe) -CFLAGS-strfromf.c += $(libio-mtsafe) -CFLAGS-strfroml.c += $(libio-mtsafe) - CFLAGS-tst-bsearch.c += $(stack-align-test-flags) CFLAGS-tst-qsort.c += $(stack-align-test-flags) CFLAGS-tst-makecontext.c += -funwind-tables diff --git a/stdlib/strfmon_l.c b/stdlib/strfmon_l.c index d9b22088c7..e6fb378877 100644 --- a/stdlib/strfmon_l.c +++ b/stdlib/strfmon_l.c @@ -523,9 +523,7 @@ __vstrfmon_l_internal (char *s, size_t maxsize, locale_t loc, out_string (sign_string); /* Print the number. */ -#ifdef _IO_MTSAFE_IO f._sbf._f._lock = NULL; -#endif _IO_init_internal (&f._sbf._f, 0); _IO_JUMPS (&f._sbf) = &_IO_str_jumps; _IO_str_init_static_internal (&f, dest, (s + maxsize) - dest, dest); diff --git a/stdlib/strfrom-skeleton.c b/stdlib/strfrom-skeleton.c index 1fba04bf6a..0ccdd756cd 100644 --- a/stdlib/strfrom-skeleton.c +++ b/stdlib/strfrom-skeleton.c @@ -37,9 +37,7 @@ int STRFROM (char *dest, size_t size, const char *format, FLOAT f) { _IO_strnfile sfile; -#ifdef _IO_MTSAFE_IO sfile.f._sbf._f._lock = NULL; -#endif int done; diff --git a/sysdeps/generic/stdio-lock.h b/sysdeps/generic/stdio-lock.h index cfdaf82577..14cf458bdd 100644 --- a/sysdeps/generic/stdio-lock.h +++ b/sysdeps/generic/stdio-lock.h @@ -27,8 +27,8 @@ __libc_lock_define_recursive (typedef, _IO_lock_t) /* We need recursive (counting) mutexes. */ #ifdef _LIBC_LOCK_RECURSIVE_INITIALIZER # define _IO_lock_initializer _LIBC_LOCK_RECURSIVE_INITIALIZER -#elif _IO_MTSAFE_IO - #error libio needs recursive mutexes for _IO_MTSAFE_IO +#else +# error libio needs recursive mutexes #endif #define _IO_lock_init(_name) __libc_lock_init_recursive (_name) diff --git a/sysdeps/ieee754/float128/Makefile b/sysdeps/ieee754/float128/Makefile index 571a841809..166e630290 100644 --- a/sysdeps/ieee754/float128/Makefile +++ b/sysdeps/ieee754/float128/Makefile @@ -1,10 +1,6 @@ ifeq ($(subdir),stdlib) routines += float1282mpn strfromf128 routines += strtof128 strtof128_l strtof128_nan mpn2float128 - -# The strfrom class of functions call __printf_fp in order to convert the -# floating-point value to characters. This requires the value of IO_MTSAFE_IO. -CFLAGS-strfromf128.c += $(libio-mtsafe) endif ifeq ($(subdir),wcsmbs) diff --git a/sysdeps/nptl/libc-lock.h b/sysdeps/nptl/libc-lock.h index 5af476c48b..c186375c31 100644 --- a/sysdeps/nptl/libc-lock.h +++ b/sysdeps/nptl/libc-lock.h @@ -25,7 +25,7 @@ /* Mutex type. */ -#if defined _LIBC || defined _IO_MTSAFE_IO +#if defined _LIBC # if (!IS_IN (libc) && !IS_IN (libpthread)) || !defined _LIBC typedef struct { pthread_mutex_t mutex; } __libc_lock_recursive_t; # else diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile index ca953804d0..b3bf4217a5 100644 --- a/sysdeps/unix/sysv/linux/Makefile +++ b/sysdeps/unix/sysv/linux/Makefile @@ -317,7 +317,6 @@ tests += tst-affinity tst-affinity-pid tests-static := tst-affinity-static tests += $(tests-static) -CFLAGS-fork.c = $(libio-mtsafe) CFLAGS-getpid.o = -fomit-frame-pointer CFLAGS-getpid.os = -fomit-frame-pointer endif diff --git a/wcsmbs/Makefile b/wcsmbs/Makefile index df9a85f4a9..afb0610b55 100644 --- a/wcsmbs/Makefile +++ b/wcsmbs/Makefile @@ -103,8 +103,6 @@ CFLAGS-isoc99_fwscanf.c += -fexceptions CFLAGS-isoc99_vwscanf.c += -fexceptions CFLAGS-isoc99_vfwscanf.c += -fexceptions -CPPFLAGS += $(libio-mtsafe) - # We need to find the default version of strtold_l in stdlib. CPPFLAGS-wcstold_l.c += -I../stdlib From patchwork Tue Apr 26 19:15:21 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adhemerval Zanella Netto X-Patchwork-Id: 53243 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 469D93858C2C for ; Tue, 26 Apr 2022 19:16:33 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 469D93858C2C DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1651000593; bh=LWQzJm8IYoY2y5lHcl/c5t5u9p4VS8TpcoZyrJ4hT9o=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=vakIQ8HSZ/BTKMnobCh5YKBr4ET/uRqBJFP85AX/VRBXfWL2a6vjIXIx+JtnjcPrY eVcpbPRLGCQ2e9rxCafrCOO0DD+R3OlW6tevLW3XKrWzaqdBO2V0OgEpAcEaD12oNs 4YHl30wJAUdy7Jls3pHF3yec/inaxqYxmMrHBABk= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-ot1-x329.google.com (mail-ot1-x329.google.com [IPv6:2607:f8b0:4864:20::329]) by sourceware.org (Postfix) with ESMTPS id 0FF6A385840C for ; Tue, 26 Apr 2022 19:15:33 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 0FF6A385840C Received: by mail-ot1-x329.google.com with SMTP id i3-20020a056830010300b00605468119c3so13696426otp.11 for ; Tue, 26 Apr 2022 12:15:33 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=LWQzJm8IYoY2y5lHcl/c5t5u9p4VS8TpcoZyrJ4hT9o=; b=dJJCW+2NWct/UCXBj0oGeOqZ1NwxnUhpth6HP2xhBsUNudl0KMOo/6j/duLVbAb+mX irXsqDclaK30Auz/A4RqUG//g8hJIYlgcoUUyA5KSjIoSlCWOlya3T4S40ETFpD85F0q u7hsUb59XiH1aQML47P+4zeIB3WlaX+mi9h256RCvQUdHNonWsi/lU0NqjE4LtiwUZIx NABw2NXpEjWlx59M+Rd/AhbZ+Jk4ElO5qwNvcfN8y2vrkEdeBAFd4rUneZQBML/KLzyT iBYrPBBrHosIqDp1BhGLjBynRXA6BSneQrggUi0e/q6TmNGPdZqr5qTTmI7rMNYhHVTy CuaQ== X-Gm-Message-State: AOAM532dVa+d6EfEVjNqkDzSCh2GEftxO1cPVA8e6iXa4yb1Ffjsetxi 0bAXZb8kN+3qu81iZEXcaQnOfjTThk7CRQ== X-Google-Smtp-Source: ABdhPJw7I4laImgPkSf4qiaQjtVtfkQ1BTbj0vDV2/ANRRaJXvUpniI8h/jhVChSdoStfRbBA3SX8A== X-Received: by 2002:a9d:4799:0:b0:605:6286:10d7 with SMTP id b25-20020a9d4799000000b00605628610d7mr8689015otf.75.1651000531950; Tue, 26 Apr 2022 12:15:31 -0700 (PDT) Received: from birita.. ([2804:431:c7ca:4214:745b:d03c:b667:123b]) by smtp.gmail.com with ESMTPSA id 123-20020a4a0181000000b00324a1217e96sm5884129oor.35.2022.04.26.12.15.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Apr 2022 12:15:31 -0700 (PDT) To: libc-alpha@sourceware.org, Florian Weimer Subject: [PATCH v2 2/4] Consolidate stdio-lock.h Date: Tue, 26 Apr 2022 16:15:21 -0300 Message-Id: <20220426191523.833171-3-adhemerval.zanella@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220426191523.833171-1-adhemerval.zanella@linaro.org> References: <20220426191523.833171-1-adhemerval.zanella@linaro.org> MIME-Version: 1.0 X-Spam-Status: No, score=-12.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Adhemerval Zanella via Libc-alpha From: Adhemerval Zanella Netto Reply-To: Adhemerval Zanella Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" The NPTL replicate the sysdeps/nptl/libc-lock.h recursive lock. Use the Hurd one as generic one, which already uses the __libc_lock functions. The libc_malloc_debug is the only module that uses the __libc_lock_init_recursive directly in the code and it is kept to use the internal lock definitions. Checked on x86_64-linux-gnu and i686-linux-gnu. --- sysdeps/generic/stdio-lock.h | 21 +++----- sysdeps/htl/stdio-lock.h | 57 -------------------- sysdeps/nptl/libc-lock.h | 20 +++---- sysdeps/nptl/stdio-lock.h | 101 ----------------------------------- 4 files changed, 15 insertions(+), 184 deletions(-) delete mode 100644 sysdeps/htl/stdio-lock.h delete mode 100644 sysdeps/nptl/stdio-lock.h diff --git a/sysdeps/generic/stdio-lock.h b/sysdeps/generic/stdio-lock.h index 14cf458bdd..fd61f0b5b7 100644 --- a/sysdeps/generic/stdio-lock.h +++ b/sysdeps/generic/stdio-lock.h @@ -45,20 +45,13 @@ __libc_lock_define_recursive (typedef, _IO_lock_t) #define _IO_cleanup_region_end(_doit) \ __libc_cleanup_region_end (_doit) -#if defined _LIBC && IS_IN (libc) - -# ifdef __EXCEPTIONS -# define _IO_acquire_lock(_fp) \ +#define _IO_acquire_lock(_fp) \ do { \ - FILE *_IO_acquire_lock_file \ - __attribute__((cleanup (_IO_acquire_lock_fct))) \ - = (_fp); \ - _IO_flockfile (_IO_acquire_lock_file); -# else -# define _IO_acquire_lock(_fp) _IO_acquire_lock_needs_exceptions_enabled -# endif -# define _IO_release_lock(_fp) ; } while (0) - -#endif + _IO_cleanup_region_start((void (*) (void *)) &_IO_funlockfile, _fp); \ + _IO_flockfile (_fp); +#define _IO_release_lock(_fp) \ + _IO_funlockfile (_fp); \ + _IO_cleanup_region_end (0); \ + } while (0) #endif /* stdio-lock.h */ diff --git a/sysdeps/htl/stdio-lock.h b/sysdeps/htl/stdio-lock.h deleted file mode 100644 index c0a03c5a13..0000000000 --- a/sysdeps/htl/stdio-lock.h +++ /dev/null @@ -1,57 +0,0 @@ -/* Thread package specific definitions of stream lock type. Hurd version. - Copyright (C) 2000-2022 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 - . */ - -#ifndef _STDIO_LOCK_H -#define _STDIO_LOCK_H 1 - -#include - -__libc_lock_define_recursive (typedef, _IO_lock_t) -#define _IO_lock_t_defined 1 - -/* We need recursive (counting) mutexes. */ -# define _IO_lock_initializer _LIBC_LOCK_RECURSIVE_INITIALIZER - -#define _IO_lock_init(_name) __libc_lock_init_recursive (_name) -#define _IO_lock_fini(_name) __libc_lock_fini_recursive (_name) -#define _IO_lock_lock(_name) __libc_lock_lock_recursive (_name) -#define _IO_lock_trylock(_name) __libc_lock_trylock_recursive (_name) -#define _IO_lock_unlock(_name) __libc_lock_unlock_recursive (_name) - - -#define _IO_cleanup_region_start(_fct, _fp) \ - __libc_cleanup_region_start (((_fp)->_flags & _IO_USER_LOCK) == 0, _fct, _fp) -#define _IO_cleanup_region_start_noarg(_fct) \ - __libc_cleanup_region_start (1, _fct, NULL) -#define _IO_cleanup_region_end(_doit) \ - __libc_cleanup_region_end (_doit) - -#if defined _LIBC && IS_IN (libc) - -# define _IO_acquire_lock(_fp) \ - do { \ - _IO_cleanup_region_start((void (*) (void *)) &_IO_funlockfile, _fp); \ - _IO_flockfile (_fp); -# define _IO_release_lock(_fp) \ - _IO_funlockfile (_fp); \ - _IO_cleanup_region_end (0); \ - } while (0) - -#endif - -#endif /* stdio-lock.h */ diff --git a/sysdeps/nptl/libc-lock.h b/sysdeps/nptl/libc-lock.h index c186375c31..6c2d6acfd1 100644 --- a/sysdeps/nptl/libc-lock.h +++ b/sysdeps/nptl/libc-lock.h @@ -25,14 +25,10 @@ /* Mutex type. */ -#if defined _LIBC -# if (!IS_IN (libc) && !IS_IN (libpthread)) || !defined _LIBC +#if !IS_IN (libc) && !IS_IN (libc_malloc_debug) typedef struct { pthread_mutex_t mutex; } __libc_lock_recursive_t; -# else -typedef struct { int lock; int cnt; void *owner; } __libc_lock_recursive_t; -# endif #else -typedef struct __libc_lock_recursive_opaque__ __libc_lock_recursive_t; +typedef struct { int lock; int cnt; void *owner; } __libc_lock_recursive_t; #endif /* Define a lock variable NAME with storage class CLASS. The lock must be @@ -47,7 +43,7 @@ typedef struct __libc_lock_recursive_opaque__ __libc_lock_recursive_t; /* Define an initialized recursive lock variable NAME with storage class CLASS. */ -#if defined _LIBC && (IS_IN (libc) || IS_IN (libpthread)) +#if IS_IN (libc) || IS_IN (libc_malloc_debug) # define __libc_lock_define_initialized_recursive(CLASS, NAME) \ CLASS __libc_lock_recursive_t NAME = _LIBC_LOCK_RECURSIVE_INITIALIZER; # define _LIBC_LOCK_RECURSIVE_INITIALIZER \ @@ -60,7 +56,7 @@ typedef struct __libc_lock_recursive_opaque__ __libc_lock_recursive_t; #endif /* Initialize a recursive mutex. */ -#if defined _LIBC && (IS_IN (libc) || IS_IN (libpthread)) +#if IS_IN (libc) || IS_IN (libc_malloc_debug) # define __libc_lock_init_recursive(NAME) \ ((void) ((NAME) = (__libc_lock_recursive_t) _LIBC_LOCK_RECURSIVE_INITIALIZER)) #else @@ -78,7 +74,7 @@ typedef struct __libc_lock_recursive_opaque__ __libc_lock_recursive_t; #endif /* Finalize recursive named lock. */ -#if defined _LIBC && (IS_IN (libc) || IS_IN (libpthread)) +#if IS_IN (libc) || IS_IN (libc_malloc_debug) # define __libc_lock_fini_recursive(NAME) ((void) 0) #else # define __libc_lock_fini_recursive(NAME) \ @@ -86,7 +82,7 @@ typedef struct __libc_lock_recursive_opaque__ __libc_lock_recursive_t; #endif /* Lock the recursive named lock variable. */ -#if defined _LIBC && (IS_IN (libc) || IS_IN (libpthread)) +#if IS_IN (libc) || IS_IN (libc_malloc_debug) # define __libc_lock_lock_recursive(NAME) \ do { \ void *self = THREAD_SELF; \ @@ -103,7 +99,7 @@ typedef struct __libc_lock_recursive_opaque__ __libc_lock_recursive_t; #endif /* Try to lock the recursive named lock variable. */ -#if defined _LIBC && (IS_IN (libc) || IS_IN (libpthread)) +#if IS_IN (libc) || IS_IN (libc_malloc_debug) # define __libc_lock_trylock_recursive(NAME) \ ({ \ int result = 0; \ @@ -128,7 +124,7 @@ typedef struct __libc_lock_recursive_opaque__ __libc_lock_recursive_t; #endif /* Unlock the recursive named lock variable. */ -#if defined _LIBC && (IS_IN (libc) || IS_IN (libpthread)) +#if IS_IN (libc) || IS_IN (libc_malloc_debug) /* We do no error checking here. */ # define __libc_lock_unlock_recursive(NAME) \ do { \ diff --git a/sysdeps/nptl/stdio-lock.h b/sysdeps/nptl/stdio-lock.h deleted file mode 100644 index afa0b779c8..0000000000 --- a/sysdeps/nptl/stdio-lock.h +++ /dev/null @@ -1,101 +0,0 @@ -/* Thread package specific definitions of stream lock type. NPTL version. - Copyright (C) 2000-2022 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 - . */ - -#ifndef _STDIO_LOCK_H -#define _STDIO_LOCK_H 1 - -#include -#include - - -typedef struct { int lock; int cnt; void *owner; } _IO_lock_t; -#define _IO_lock_t_defined 1 - -#define _IO_lock_initializer { LLL_LOCK_INITIALIZER, 0, NULL } - -#define _IO_lock_init(_name) \ - ((void) ((_name) = (_IO_lock_t) _IO_lock_initializer)) - -#define _IO_lock_fini(_name) \ - ((void) 0) - -#define _IO_lock_lock(_name) \ - do { \ - void *__self = THREAD_SELF; \ - if ((_name).owner != __self) \ - { \ - lll_lock ((_name).lock, LLL_PRIVATE); \ - (_name).owner = __self; \ - } \ - ++(_name).cnt; \ - } while (0) - -#define _IO_lock_trylock(_name) \ - ({ \ - int __result = 0; \ - void *__self = THREAD_SELF; \ - if ((_name).owner != __self) \ - { \ - if (lll_trylock ((_name).lock) == 0) \ - { \ - (_name).owner = __self; \ - (_name).cnt = 1; \ - } \ - else \ - __result = EBUSY; \ - } \ - else \ - ++(_name).cnt; \ - __result; \ - }) - -#define _IO_lock_unlock(_name) \ - do { \ - if (--(_name).cnt == 0) \ - { \ - (_name).owner = NULL; \ - lll_unlock ((_name).lock, LLL_PRIVATE); \ - } \ - } while (0) - - - -#define _IO_cleanup_region_start(_fct, _fp) \ - __libc_cleanup_region_start (((_fp)->_flags & _IO_USER_LOCK) == 0, _fct, _fp) -#define _IO_cleanup_region_start_noarg(_fct) \ - __libc_cleanup_region_start (1, _fct, NULL) -#define _IO_cleanup_region_end(_doit) \ - __libc_cleanup_region_end (_doit) - -#if defined _LIBC && IS_IN (libc) - -# ifdef __EXCEPTIONS -# define _IO_acquire_lock(_fp) \ - do { \ - FILE *_IO_acquire_lock_file \ - __attribute__((cleanup (_IO_acquire_lock_fct))) \ - = (_fp); \ - _IO_flockfile (_IO_acquire_lock_file); -# else -# define _IO_acquire_lock(_fp) _IO_acquire_lock_needs_exceptions_enabled -# endif -# define _IO_release_lock(_fp) ; } while (0) - -#endif - -#endif /* stdio-lock.h */ From patchwork Tue Apr 26 19:15:22 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adhemerval Zanella Netto X-Patchwork-Id: 53244 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 3ED273857C42 for ; Tue, 26 Apr 2022 19:17:20 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 3ED273857C42 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1651000640; bh=EM1ctNVSM6lio70GvBCs7uD7KunJWjbs6uQuNKDvYyM=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=UD/muwOht2UoDPPY2xw2CF0lrHNY1YdeZOPh+wc8zkvGEAcD40xW8UzBCVu+j8vha Y3IdOQYuv1KtpqXF8jCHAdhDjvXhAVsiEBhIx1ri1SlExXbQRqlTpES70cwq8+s06E o5nn7weLuqmQDMG2GYlvxFDvi+EWS+hTZr5dJCd8= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-oi1-x236.google.com (mail-oi1-x236.google.com [IPv6:2607:f8b0:4864:20::236]) by sourceware.org (Postfix) with ESMTPS id 8669A3857C41 for ; Tue, 26 Apr 2022 19:15:35 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 8669A3857C41 Received: by mail-oi1-x236.google.com with SMTP id y63so1343461oia.7 for ; Tue, 26 Apr 2022 12:15:35 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=EM1ctNVSM6lio70GvBCs7uD7KunJWjbs6uQuNKDvYyM=; b=kI8XmIQq1uWfMTtN4FNMs2DDBh9rSPs9s1zOj7OmjddCDPhxyYb+5n+xLXpUqnF5Aa TDPJ/MAMNhAWF/e7WUQKY2HqDLn2LsFo8xNVRwwiuD6KG30JUiiAYBTmfinGyRD6m1N3 SGQnhto1kd3ENjE8Gv7qF3Ju/vIie0+SB0WkRJi/J/aNmrC3+2MHKtzopsansljOBOTJ dZiy8Ig0G3mGK/VKKAUmCxnhy8UqEwrHgq7P7/3JeS/PCdgIbZImCdwBoGIe0t5Wl+ZF rZYw7c4CxQQ2t+maPGmG9oVBGcnRzWH4hc0ZGL4O76OtwuRcy7NreVz3595FhtzPuKKz tP4Q== X-Gm-Message-State: AOAM533oRV1mxXqeHf89XvmnVAwnfS+uGJQw6d4ZmzHLJ0SL6JfNJcl3 rKKiHt3626GvaTI2+Nx9ynpUy17mLcf/Fg== X-Google-Smtp-Source: ABdhPJzT6wSpGdS+xlNMC8SDLZjW66DJQAmq2dqd/gQzy/PRD6/8MLC1cHWvi5yOt96eIBWIHaz76g== X-Received: by 2002:a05:6808:144c:b0:325:64f3:d428 with SMTP id x12-20020a056808144c00b0032564f3d428mr1690782oiv.210.1651000533882; Tue, 26 Apr 2022 12:15:33 -0700 (PDT) Received: from birita.. ([2804:431:c7ca:4214:745b:d03c:b667:123b]) by smtp.gmail.com with ESMTPSA id 123-20020a4a0181000000b00324a1217e96sm5884129oor.35.2022.04.26.12.15.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Apr 2022 12:15:33 -0700 (PDT) To: libc-alpha@sourceware.org, Florian Weimer Subject: [PATCH v2 3/4] Move libio lock single-thread optimization to generic libc-lock (BZ #27842) Date: Tue, 26 Apr 2022 16:15:22 -0300 Message-Id: <20220426191523.833171-4-adhemerval.zanella@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220426191523.833171-1-adhemerval.zanella@linaro.org> References: <20220426191523.833171-1-adhemerval.zanella@linaro.org> MIME-Version: 1.0 X-Spam-Status: No, score=-12.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Adhemerval Zanella via Libc-alpha From: Adhemerval Zanella Netto Reply-To: Adhemerval Zanella Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" This patch moves the single thread stdio optimization (d2e04918833d9) to the libc-lock. With generic support there is no need to add per-function code to handle the single-thread case, and it allows to removes the _IO_enable_locks (since once process goes multithread the locks will be always used). It also handles the memory streams requirement (de895ddcd7fc), since the SINGLE_THREAD_P already contains te information whether the process is multithread (so there is no need to disable the optimization because such stream are listed in _IO_list_all). Finally it also removed the flockfile uses a read-modify-write operation on _flags2 outside a lock region (BZ #27842). Checked on x86_64-linux-gnu, i686-linux-gnu, and aarch64-linux-gnu. --- libio/Versions | 3 --- libio/feof.c | 2 -- libio/ferror.c | 2 -- libio/fputc.c | 2 -- libio/genops.c | 28 ---------------------------- libio/getc.c | 2 -- libio/getchar.c | 4 +--- libio/iofopncook.c | 2 -- libio/ioungetc.c | 2 -- libio/libio.h | 4 ---- libio/memstream.c | 3 --- libio/putc.c | 2 -- libio/wmemstream.c | 3 --- nptl/pthread_create.c | 3 --- stdio-common/flockfile.c | 1 - sysdeps/mach/libc-lock.h | 9 +++++---- sysdeps/nptl/libc-lock.h | 7 ++++--- 17 files changed, 10 insertions(+), 69 deletions(-) diff --git a/libio/Versions b/libio/Versions index b91a7bc914..b528fae670 100644 --- a/libio/Versions +++ b/libio/Versions @@ -159,9 +159,6 @@ libc { # Used by NPTL and librt __libc_fatal; - # Used by NPTL - _IO_enable_locks; - __fseeko64; __ftello64; } diff --git a/libio/feof.c b/libio/feof.c index 7f79b2795e..41e7beeca7 100644 --- a/libio/feof.c +++ b/libio/feof.c @@ -32,8 +32,6 @@ _IO_feof (FILE *fp) { int result; CHECK_FILE (fp, EOF); - if (!_IO_need_lock (fp)) - return _IO_feof_unlocked (fp); _IO_flockfile (fp); result = _IO_feof_unlocked (fp); _IO_funlockfile (fp); diff --git a/libio/ferror.c b/libio/ferror.c index d2489c54d3..a60efc3f0f 100644 --- a/libio/ferror.c +++ b/libio/ferror.c @@ -32,8 +32,6 @@ _IO_ferror (FILE *fp) { int result; CHECK_FILE (fp, EOF); - if (!_IO_need_lock (fp)) - return _IO_ferror_unlocked (fp); _IO_flockfile (fp); result = _IO_ferror_unlocked (fp); _IO_funlockfile (fp); diff --git a/libio/fputc.c b/libio/fputc.c index d29a9d0aee..c3d66500d1 100644 --- a/libio/fputc.c +++ b/libio/fputc.c @@ -32,8 +32,6 @@ fputc (int c, FILE *fp) { int result; CHECK_FILE (fp, EOF); - if (!_IO_need_lock (fp)) - return _IO_putc_unlocked (c, fp); _IO_acquire_lock (fp); result = _IO_putc_unlocked (c, fp); _IO_release_lock (fp); diff --git a/libio/genops.c b/libio/genops.c index ccfbcd149d..eca50bacbc 100644 --- a/libio/genops.c +++ b/libio/genops.c @@ -488,39 +488,11 @@ _IO_init (FILE *fp, int flags) _IO_init_internal (fp, flags); } -static int stdio_needs_locking; - -/* In a single-threaded process most stdio locks can be omitted. After - _IO_enable_locks is called, locks are not optimized away any more. - It must be first called while the process is still single-threaded. - - This lock optimization can be disabled on a per-file basis by setting - _IO_FLAGS2_NEED_LOCK, because a file can have user-defined callbacks - or can be locked with flockfile and then a thread may be created - between a lock and unlock, so omitting the lock is not valid. - - Here we have to make sure that the flag is set on all existing files - and files created later. */ -void -_IO_enable_locks (void) -{ - _IO_ITER i; - - if (stdio_needs_locking) - return; - stdio_needs_locking = 1; - for (i = _IO_iter_begin (); i != _IO_iter_end (); i = _IO_iter_next (i)) - _IO_iter_file (i)->_flags2 |= _IO_FLAGS2_NEED_LOCK; -} -libc_hidden_def (_IO_enable_locks) - void _IO_old_init (FILE *fp, int flags) { fp->_flags = _IO_MAGIC|flags; fp->_flags2 = 0; - if (stdio_needs_locking) - fp->_flags2 |= _IO_FLAGS2_NEED_LOCK; fp->_IO_buf_base = NULL; fp->_IO_buf_end = NULL; fp->_IO_read_base = NULL; diff --git a/libio/getc.c b/libio/getc.c index 8c79cf702f..18647aa3e1 100644 --- a/libio/getc.c +++ b/libio/getc.c @@ -34,8 +34,6 @@ _IO_getc (FILE *fp) { int result; CHECK_FILE (fp, EOF); - if (!_IO_need_lock (fp)) - return _IO_getc_unlocked (fp); _IO_acquire_lock (fp); result = _IO_getc_unlocked (fp); _IO_release_lock (fp); diff --git a/libio/getchar.c b/libio/getchar.c index e0f4f471b3..4ab1e7b065 100644 --- a/libio/getchar.c +++ b/libio/getchar.c @@ -33,10 +33,8 @@ int getchar (void) { int result; - if (!_IO_need_lock (stdin)) - return _IO_getc_unlocked (stdin); _IO_acquire_lock (stdin); result = _IO_getc_unlocked (stdin); _IO_release_lock (stdin); return result; -} \ No newline at end of file +} diff --git a/libio/iofopncook.c b/libio/iofopncook.c index 16bcc7f4a3..5ecca41717 100644 --- a/libio/iofopncook.c +++ b/libio/iofopncook.c @@ -162,8 +162,6 @@ _IO_cookie_init (struct _IO_cookie_file *cfile, int read_write, _IO_mask_flags (&cfile->__fp.file, read_write, _IO_NO_READS+_IO_NO_WRITES+_IO_IS_APPENDING); - cfile->__fp.file._flags2 |= _IO_FLAGS2_NEED_LOCK; - /* We use a negative number different from -1 for _fileno to mark that this special stream is not associated with a real file, but still has to be treated as such. */ diff --git a/libio/ioungetc.c b/libio/ioungetc.c index 92d5572e21..547953dd16 100644 --- a/libio/ioungetc.c +++ b/libio/ioungetc.c @@ -33,8 +33,6 @@ ungetc (int c, FILE *fp) CHECK_FILE (fp, EOF); if (c == EOF) return EOF; - if (!_IO_need_lock (fp)) - return _IO_sputbackc (fp, (unsigned char) c); _IO_acquire_lock (fp); result = _IO_sputbackc (fp, (unsigned char) c); _IO_release_lock (fp); diff --git a/libio/libio.h b/libio/libio.h index 42ff6143af..e1e8ffdc54 100644 --- a/libio/libio.h +++ b/libio/libio.h @@ -88,7 +88,6 @@ typedef struct #define _IO_FLAGS2_USER_WBUF 8 #define _IO_FLAGS2_NOCLOSE 32 #define _IO_FLAGS2_CLOEXEC 64 -#define _IO_FLAGS2_NEED_LOCK 128 /* _IO_pos_BAD is an off64_t value indicating error, unknown, or EOF. */ #define _IO_pos_BAD ((off64_t) -1) @@ -212,9 +211,6 @@ extern int _IO_ftrylockfile (FILE *) __THROW; #define _IO_cleanup_region_end(_Doit) /**/ #endif -#define _IO_need_lock(_fp) \ - (((_fp)->_flags2 & _IO_FLAGS2_NEED_LOCK) != 0) - extern int _IO_vfscanf (FILE * __restrict, const char * __restrict, __gnuc_va_list, int *__restrict); extern __ssize_t _IO_padn (FILE *, int, __ssize_t); diff --git a/libio/memstream.c b/libio/memstream.c index 7ab61876ba..15022b72ee 100644 --- a/libio/memstream.c +++ b/libio/memstream.c @@ -92,9 +92,6 @@ __open_memstream (char **bufloc, size_t *sizeloc) new_f->fp.bufloc = bufloc; new_f->fp.sizeloc = sizeloc; - /* Disable single thread optimization. BZ 21735. */ - new_f->fp._sf._sbf._f._flags2 |= _IO_FLAGS2_NEED_LOCK; - return (FILE *) &new_f->fp._sf._sbf; } libc_hidden_def (__open_memstream) diff --git a/libio/putc.c b/libio/putc.c index 44e30649c9..f4cc2024b6 100644 --- a/libio/putc.c +++ b/libio/putc.c @@ -25,8 +25,6 @@ _IO_putc (int c, FILE *fp) { int result; CHECK_FILE (fp, EOF); - if (!_IO_need_lock (fp)) - return _IO_putc_unlocked (c, fp); _IO_acquire_lock (fp); result = _IO_putc_unlocked (c, fp); _IO_release_lock (fp); diff --git a/libio/wmemstream.c b/libio/wmemstream.c index 9366ef4aad..abaf421069 100644 --- a/libio/wmemstream.c +++ b/libio/wmemstream.c @@ -94,9 +94,6 @@ open_wmemstream (wchar_t **bufloc, size_t *sizeloc) new_f->fp.bufloc = bufloc; new_f->fp.sizeloc = sizeloc; - /* Disable single thread optimization. BZ 21735. */ - new_f->fp._sf._sbf._f._flags2 |= _IO_FLAGS2_NEED_LOCK; - return (FILE *) &new_f->fp._sf._sbf; } diff --git a/nptl/pthread_create.c b/nptl/pthread_create.c index e7a099acb7..4f45ea36bc 100644 --- a/nptl/pthread_create.c +++ b/nptl/pthread_create.c @@ -740,9 +740,6 @@ __pthread_create_2_1 (pthread_t *newthread, const pthread_attr_t *attr, collect_default_sched (pd); } - if (__glibc_unlikely (__nptl_nthreads == 1)) - _IO_enable_locks (); - /* Pass the descriptor to the caller. */ *newthread = (pthread_t) pd; diff --git a/stdio-common/flockfile.c b/stdio-common/flockfile.c index a5decb450f..49f72c69ab 100644 --- a/stdio-common/flockfile.c +++ b/stdio-common/flockfile.c @@ -22,7 +22,6 @@ void __flockfile (FILE *stream) { - stream->_flags2 |= _IO_FLAGS2_NEED_LOCK; _IO_lock_lock (*stream->_lock); } weak_alias (__flockfile, flockfile); diff --git a/sysdeps/mach/libc-lock.h b/sysdeps/mach/libc-lock.h index 225eb67f5a..ee38948d1e 100644 --- a/sysdeps/mach/libc-lock.h +++ b/sysdeps/mach/libc-lock.h @@ -106,9 +106,9 @@ typedef struct __libc_lock_recursive_opaque__ __libc_lock_recursive_t; __libc_lock_recursive_t *const __lock = &(NAME); \ void *__self = __libc_lock_owner_self (); \ int __r = 0; \ - if (__self == __lock->owner) \ + if (!SINGLE_THREAD_P && __self == __lock->owner) \ ++__lock->cnt; \ - else if ((__r = lll_trylock (__lock->lock)) == 0) \ + else if (!SINGLE_THREAD_P && (__r = lll_trylock (__lock->lock)) == 0) \ __lock->owner = __self, __lock->cnt = 1; \ __r; \ }) @@ -117,7 +117,7 @@ typedef struct __libc_lock_recursive_opaque__ __libc_lock_recursive_t; ({ \ __libc_lock_recursive_t *const __lock = &(NAME); \ void *__self = __libc_lock_owner_self (); \ - if (__self != __lock->owner) \ + if (!SINGLE_THREAD_P && __self != __lock->owner) \ { \ lll_lock (__lock->lock, 0); \ __lock->owner = __self; \ @@ -132,7 +132,8 @@ typedef struct __libc_lock_recursive_opaque__ __libc_lock_recursive_t; if (--__lock->cnt == 0) \ { \ __lock->owner = 0; \ - lll_unlock (__lock->lock, 0); \ + if (!SINGLE_THREAD_P) \ + lll_unlock (__lock->lock, 0); \ } \ }) diff --git a/sysdeps/nptl/libc-lock.h b/sysdeps/nptl/libc-lock.h index 6c2d6acfd1..abd84e71b4 100644 --- a/sysdeps/nptl/libc-lock.h +++ b/sysdeps/nptl/libc-lock.h @@ -86,7 +86,7 @@ typedef struct { int lock; int cnt; void *owner; } __libc_lock_recursive_t; # define __libc_lock_lock_recursive(NAME) \ do { \ void *self = THREAD_SELF; \ - if ((NAME).owner != self) \ + if (!SINGLE_THREAD_P && (NAME).owner != self) \ { \ lll_lock ((NAME).lock, LLL_PRIVATE); \ (NAME).owner = self; \ @@ -104,7 +104,7 @@ typedef struct { int lock; int cnt; void *owner; } __libc_lock_recursive_t; ({ \ int result = 0; \ void *self = THREAD_SELF; \ - if ((NAME).owner != self) \ + if (!SINGLE_THREAD_P && (NAME).owner != self) \ { \ if (lll_trylock ((NAME).lock) == 0) \ { \ @@ -131,7 +131,8 @@ typedef struct { int lock; int cnt; void *owner; } __libc_lock_recursive_t; if (--(NAME).cnt == 0) \ { \ (NAME).owner = NULL; \ - lll_unlock ((NAME).lock, LLL_PRIVATE); \ + if (!SINGLE_THREAD_P) \ + lll_unlock ((NAME).lock, LLL_PRIVATE); \ } \ } while (0) #else From patchwork Tue Apr 26 19:15:23 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adhemerval Zanella Netto X-Patchwork-Id: 53246 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 02F2A3858403 for ; Tue, 26 Apr 2022 19:18:51 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 02F2A3858403 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1651000731; bh=GBkJ03fn46IDj7XMOj2evTp+1Wm9pnDSQaqy9d3ZqOA=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=Z/pcJDUIbacUXr0j9GxVrMZjWeOIDymXNaQ5IHOvKldi/nrfhciWPLVht1HNtwCMu dJgd+nTAEnlGGYLow3VlncLkXTI7vHpBr/UsT7JbTjoAw26xaXZ4piYjWfnFI52ErA YsMtEykJ+3HqVYs1RM/1w+GQp5DlR/S75acCyKps= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-oa1-x32.google.com (mail-oa1-x32.google.com [IPv6:2001:4860:4864:20::32]) by sourceware.org (Postfix) with ESMTPS id ECA4D385801B for ; Tue, 26 Apr 2022 19:15:36 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org ECA4D385801B Received: by mail-oa1-x32.google.com with SMTP id 586e51a60fabf-e5e433d66dso20425913fac.5 for ; Tue, 26 Apr 2022 12:15:36 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=GBkJ03fn46IDj7XMOj2evTp+1Wm9pnDSQaqy9d3ZqOA=; b=OUWd61muT8y4ZHR3Pvs+8/TzT4FYY8hXkGhR2yCChWeZPii0IqqM1hFk0ZCxsjVIjC 7SWvzXpNmBe7bal+fjBPBluLnhv5pMJAXamcEy2AVA/d7A4Sd+PlmZwa7E23v8K1rJLw Z+xS1P55kdTuzHa8Q/iDowhhU00xiNsdzT56HwezfgOtLu69kdPLL8hvHv3D8mZqTEth jVl7jJhY+w+wEZSlWJWr8m0oQ83i1naqSUtG2/zH0N8XrdkCcTHciTTI7mNDUbOQ6XRI pjHhqf0om6tQluq93+o1kWBrgyBsMtvhaj9dHP3VQU6y1BVEDwB1GLl0U7KbgSp1ABM3 lH3g== X-Gm-Message-State: AOAM532/Wk+/c8Vn9sO65tGNg2u0zwvRk6uFR5mmhCByfLFqItuW9K8d qmq3W6JN2+WqGxtwaX4nmFNBwl9R8E18CQ== X-Google-Smtp-Source: ABdhPJzYfvwaf0KPGwEYLoAyZHJzdp9kCyMBMCh86aQzuGG6kFUNlyjCSuPZU605zvEa6qdl+PMzFA== X-Received: by 2002:a05:6870:5620:b0:e9:ff1:c8e8 with SMTP id m32-20020a056870562000b000e90ff1c8e8mr7862886oao.8.1651000535873; Tue, 26 Apr 2022 12:15:35 -0700 (PDT) Received: from birita.. ([2804:431:c7ca:4214:745b:d03c:b667:123b]) by smtp.gmail.com with ESMTPSA id 123-20020a4a0181000000b00324a1217e96sm5884129oor.35.2022.04.26.12.15.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Apr 2022 12:15:35 -0700 (PDT) To: libc-alpha@sourceware.org, Florian Weimer Subject: [PATCH v2 4/4] Assume _LIBC and libc module for libc-lock.h Date: Tue, 26 Apr 2022 16:15:23 -0300 Message-Id: <20220426191523.833171-5-adhemerval.zanella@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220426191523.833171-1-adhemerval.zanella@linaro.org> References: <20220426191523.833171-1-adhemerval.zanella@linaro.org> MIME-Version: 1.0 X-Spam-Status: No, score=-12.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Adhemerval Zanella via Libc-alpha From: Adhemerval Zanella Netto Reply-To: Adhemerval Zanella Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" The libc-lock.h is not used outside glibc nor with modules different than libc or libc_malloc_debug. Checked on x86_64-linux-gnu. --- sysdeps/mach/libc-lock.h | 9 ------ sysdeps/nptl/libc-lock.h | 67 ++++++---------------------------------- 2 files changed, 10 insertions(+), 66 deletions(-) diff --git a/sysdeps/mach/libc-lock.h b/sysdeps/mach/libc-lock.h index ee38948d1e..bb1a492fa9 100644 --- a/sysdeps/mach/libc-lock.h +++ b/sysdeps/mach/libc-lock.h @@ -19,8 +19,6 @@ #ifndef _LIBC_LOCK_H #define _LIBC_LOCK_H 1 -#ifdef _LIBC - #include #include @@ -38,11 +36,6 @@ extern char __libc_lock_self0[0]; #define __libc_lock_owner_self() \ (__LIBC_NO_TLS () ? (void *)&__libc_lock_self0 : THREAD_SELF) -#else -typedef struct __libc_lock_opaque__ __libc_lock_t; -typedef struct __libc_lock_recursive_opaque__ __libc_lock_recursive_t; -#endif - /* Define a lock variable NAME with storage class CLASS. The lock must be initialized with __libc_lock_init before it can be used (or define it with __libc_lock_define_initialized, below). Use `extern' for CLASS to @@ -215,7 +208,6 @@ struct __libc_once /* Get once control variable. */ #define __libc_once_get(ONCE_CONTROL) ((ONCE_CONTROL).done != 0) -#ifdef _LIBC /* We need portable names for some functions. E.g., when they are used as argument to __libc_cleanup_region_start. */ #define __libc_mutex_unlock __libc_lock_unlock @@ -223,6 +215,5 @@ struct __libc_once /* Hide the definitions which are only supposed to be used inside libc in a separate file. This file is not present in the installation! */ # include -#endif #endif /* libc-lock.h */ diff --git a/sysdeps/nptl/libc-lock.h b/sysdeps/nptl/libc-lock.h index abd84e71b4..5c85a250d7 100644 --- a/sysdeps/nptl/libc-lock.h +++ b/sysdeps/nptl/libc-lock.h @@ -25,11 +25,7 @@ /* Mutex type. */ -#if !IS_IN (libc) && !IS_IN (libc_malloc_debug) -typedef struct { pthread_mutex_t mutex; } __libc_lock_recursive_t; -#else typedef struct { int lock; int cnt; void *owner; } __libc_lock_recursive_t; -#endif /* Define a lock variable NAME with storage class CLASS. The lock must be initialized with __libc_lock_init before it can be used (or define it @@ -43,68 +39,36 @@ typedef struct { int lock; int cnt; void *owner; } __libc_lock_recursive_t; /* Define an initialized recursive lock variable NAME with storage class CLASS. */ -#if IS_IN (libc) || IS_IN (libc_malloc_debug) -# define __libc_lock_define_initialized_recursive(CLASS, NAME) \ +#define __libc_lock_define_initialized_recursive(CLASS, NAME) \ CLASS __libc_lock_recursive_t NAME = _LIBC_LOCK_RECURSIVE_INITIALIZER; -# define _LIBC_LOCK_RECURSIVE_INITIALIZER \ +#define _LIBC_LOCK_RECURSIVE_INITIALIZER \ { LLL_LOCK_INITIALIZER, 0, NULL } -#else -# define __libc_lock_define_initialized_recursive(CLASS,NAME) \ - CLASS __libc_lock_recursive_t NAME = _LIBC_LOCK_RECURSIVE_INITIALIZER; -# define _LIBC_LOCK_RECURSIVE_INITIALIZER \ - {PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP} -#endif /* Initialize a recursive mutex. */ -#if IS_IN (libc) || IS_IN (libc_malloc_debug) -# define __libc_lock_init_recursive(NAME) \ +#define __libc_lock_init_recursive(NAME) \ ((void) ((NAME) = (__libc_lock_recursive_t) _LIBC_LOCK_RECURSIVE_INITIALIZER)) -#else -# define __libc_lock_init_recursive(NAME) \ - do { \ - if (__pthread_mutex_init != NULL) \ - { \ - pthread_mutexattr_t __attr; \ - __pthread_mutexattr_init (&__attr); \ - __pthread_mutexattr_settype (&__attr, PTHREAD_MUTEX_RECURSIVE_NP); \ - __pthread_mutex_init (&(NAME).mutex, &__attr); \ - __pthread_mutexattr_destroy (&__attr); \ - } \ - } while (0) -#endif /* Finalize recursive named lock. */ -#if IS_IN (libc) || IS_IN (libc_malloc_debug) -# define __libc_lock_fini_recursive(NAME) ((void) 0) -#else -# define __libc_lock_fini_recursive(NAME) \ - __libc_maybe_call (__pthread_mutex_destroy, (&(NAME).mutex), 0) -#endif +#define __libc_lock_fini_recursive(NAME) ((void) 0) /* Lock the recursive named lock variable. */ -#if IS_IN (libc) || IS_IN (libc_malloc_debug) -# define __libc_lock_lock_recursive(NAME) \ +#define __libc_lock_lock_recursive(NAME) \ do { \ void *self = THREAD_SELF; \ - if (!SINGLE_THREAD_P && (NAME).owner != self) \ + if (!SINGLE_THREAD_P && (NAME).owner != self) \ { \ lll_lock ((NAME).lock, LLL_PRIVATE); \ (NAME).owner = self; \ } \ ++(NAME).cnt; \ } while (0) -#else -# define __libc_lock_lock_recursive(NAME) \ - __libc_maybe_call (__pthread_mutex_lock, (&(NAME).mutex), 0) -#endif /* Try to lock the recursive named lock variable. */ -#if IS_IN (libc) || IS_IN (libc_malloc_debug) -# define __libc_lock_trylock_recursive(NAME) \ +#define __libc_lock_trylock_recursive(NAME) \ ({ \ int result = 0; \ void *self = THREAD_SELF; \ - if (!SINGLE_THREAD_P && (NAME).owner != self) \ + if (!SINGLE_THREAD_P && (NAME).owner != self) \ { \ if (lll_trylock ((NAME).lock) == 0) \ { \ @@ -118,15 +82,10 @@ typedef struct { int lock; int cnt; void *owner; } __libc_lock_recursive_t; ++(NAME).cnt; \ result; \ }) -#else -# define __libc_lock_trylock_recursive(NAME) \ - __libc_maybe_call (__pthread_mutex_trylock, (&(NAME).mutex), 0) -#endif /* Unlock the recursive named lock variable. */ -#if IS_IN (libc) || IS_IN (libc_malloc_debug) /* We do no error checking here. */ -# define __libc_lock_unlock_recursive(NAME) \ +#define __libc_lock_unlock_recursive(NAME) \ do { \ if (--(NAME).cnt == 0) \ { \ @@ -135,10 +94,6 @@ typedef struct { int lock; int cnt; void *owner; } __libc_lock_recursive_t; lll_unlock ((NAME).lock, LLL_PRIVATE); \ } \ } while (0) -#else -# define __libc_lock_unlock_recursive(NAME) \ - __libc_maybe_call (__pthread_mutex_unlock, (&(NAME).mutex), 0) -#endif /* Put the unwind buffer BUFFER on the per-thread callback stack. The caller must fill BUFFER->__routine and BUFFER->__arg before calling @@ -178,8 +133,6 @@ libc_hidden_proto (__libc_cleanup_pop_restore) /* Hide the definitions which are only supposed to be used inside libc in a separate file. This file is not present in the installation! */ -#ifdef _LIBC -# include "libc-lockP.h" -#endif +#include "libc-lockP.h" #endif /* libc-lock.h */