From patchwork Fri Nov 3 23:43:26 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 79049 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 F37FB3858404 for ; Fri, 3 Nov 2023 23:44:59 +0000 (GMT) X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from omta040.useast.a.cloudfilter.net (omta040.useast.a.cloudfilter.net [44.202.169.39]) by sourceware.org (Postfix) with ESMTPS id B46B13858D32 for ; Fri, 3 Nov 2023 23:44:39 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org B46B13858D32 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=tromey.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=tromey.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org B46B13858D32 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=44.202.169.39 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699055082; cv=none; b=XWyhsJcWk12jBsOx1GBXwxcLJUKcBk2WOTBC+gbo/ZiXV/Kckf1WXT9zodPkAZQSuh7w67a5x0WFPTeHRxa05PwJdmPFgB0N0ClaZWM2l1eiRI9unYq8MJFnJITcsDqugklqwhPiExwHAWe4M3pYiNOOqsuj90hrQwfaDG81Mno= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1699055082; c=relaxed/simple; bh=dLmhB5bcstD9Rn4H1aCFk0PWudLfsNA179aK/f3gnNs=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=m3nSsstfvpB/PLSCFHQmYAlNtXPfGclg8A3lQQErnmUD/iFXYoyYEunXzInBegLw6eC4iK+fbbpoTXzXg/2bsIQ/YtgBet+DUakPHZQUFab6w47wEDTNH0w2xzv1KRWyOqn1xymgg/ku9d+bh2C82r2B+fOw0mXDHfnKSCvUAYM= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from eig-obgw-5008a.ext.cloudfilter.net ([10.0.29.246]) by cmsmtp with ESMTPS id yueUqWT2v6nOZz3qBqiXdx; Fri, 03 Nov 2023 23:44:39 +0000 Received: from box5379.bluehost.com ([162.241.216.53]) by cmsmtp with ESMTPS id z3qAqHmYVpPpmz3qAqkHES; Fri, 03 Nov 2023 23:44:39 +0000 X-Authority-Analysis: v=2.4 cv=MJVzJeVl c=1 sm=1 tr=0 ts=654585e7 a=ApxJNpeYhEAb1aAlGBBbmA==:117 a=ApxJNpeYhEAb1aAlGBBbmA==:17 a=OWjo9vPv0XrRhIrVQ50Ab3nP57M=:19 a=dLZJa+xiwSxG16/P+YVxDGlgEgI=:19 a=BNY50KLci1gA:10 a=Qbun_eYptAEA:10 a=mDV3o1hIAAAA:8 a=XdqZ4cliAAAA:8 a=pGLkceISAAAA:8 a=CCpqsmhAAAAA:8 a=5JsGgGeeAAAA:8 a=XeANjFRrTiWt3Jvz1FgA:9 a=ltZsjtQbrK4A:10 a=oMpoQSSvEVgA:10 a=SoiLLS1ZxkEA:10 a=_FVE-zBwftR9WsbkzFJk:22 a=qTJ0VMzASRcIAPwaksZq:22 a=ul9cdbp4aOFLsgKbc677:22 a=XCW6AE13j0ClpUA85ybB:22 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tromey.com; s=default; h=Content-Transfer-Encoding:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=Tzoespd9tXcTrJnNMEWc0H9NvmUWnzZ/1BQmxGMhDzM=; b=FuA+q3wVY4L2DUQz5Ov8nv1ffX Beu/y/xe+z02cHhNdHmr09sxHf2GUOg3IV6LODqH5DAaenLWCfrvls2LcvjMtLaeI1GWBrfmk9crP L7fub5eepPqmfUoaKPF4Ym/Ql; Received: from [161.98.8.3] (port=34612 helo=prentzel.ci.boulder.co.us) by box5379.bluehost.com with esmtpsa (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96.2) (envelope-from ) id 1qz3qA-003zS0-0f; Fri, 03 Nov 2023 17:44:38 -0600 From: Tom Tromey To: binutils@sourceware.org Cc: Tom Tromey Subject: [PATCH v2 2/3] Make various error-related globals thread-local Date: Fri, 3 Nov 2023 17:43:26 -0600 Message-ID: <20231103234355.2012158-3-tom@tromey.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20231103234355.2012158-1-tom@tromey.com> References: <20231103234355.2012158-1-tom@tromey.com> MIME-Version: 1.0 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - box5379.bluehost.com X-AntiAbuse: Original Domain - sourceware.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - tromey.com X-BWhitelist: no X-Source-IP: 161.98.8.3 X-Source-L: No X-Exim-ID: 1qz3qA-003zS0-0f X-Source: X-Source-Args: X-Source-Dir: X-Source-Sender: (prentzel.ci.boulder.co.us) [161.98.8.3]:34612 X-Source-Auth: tom+tromey.com X-Email-Count: 5 X-Org: HG=bhshared;ORG=bluehost; X-Source-Cap: ZWx5bnJvYmk7ZWx5bnJvYmk7Ym94NTM3OS5ibHVlaG9zdC5jb20= X-Local-Domain: yes X-CMAE-Envelope: MS4xfOsAunSjUGkj+f2XIfnIwWFLOEfSdWH3v83qL85AGerwVsxcsICpqK/KVZmr3taMaPbD5JYk25cTWM92BDqwnbiuJYlNXUnQY/Hg4p7ZeTx/+xmTkURM Lq9MSRNjK/KzoD4xCKesYXbOOYEhu2sIHqV2WrItaBDJ2d+VL1jIw/zgUxRErLwBTUUpSZbqiZnq6Xl+QAOnlTY1NA7FAvsNXx4= X-Spam-Status: No, score=-3023.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, GIT_PATCH_0, JMQ_SPF_NEUTRAL, KAM_ASCII_DIVIDERS, KAM_SHORT, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE 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: binutils@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: binutils-bounces+patchwork=sourceware.org@sourceware.org This changes bfd_error et al to be thread-local. * Makefile.in: Regenerate. * aclocal.m4: Include ax_tls.m4. * ax_tls.m4: New file. * bfd.c: (bfd_error, input_error, input_bfd, _bfd_error_buf): Now thread-local. (bfd_asprintf): Update docs. * config.in, configure: Regenerate. * configure.ac: Call AX_TLS. * po/bfd.pot: Regenerate. --- bfd/Makefile.in | 6 ++-- bfd/aclocal.m4 | 1 + bfd/ax_tls.m4 | 71 ++++++++++++++++++++++++++++++++++++++++++++++++ bfd/bfd.c | 12 ++++---- bfd/config.in | 3 ++ bfd/configure | 51 ++++++++++++++++++++++++++++++++++ bfd/configure.ac | 2 ++ bfd/po/bfd.pot | 56 +++++++++++++++++++------------------- 8 files changed, 166 insertions(+), 36 deletions(-) create mode 100644 bfd/ax_tls.m4 diff --git a/bfd/Makefile.in b/bfd/Makefile.in index 8d09f6fa4af..cf227d09c27 100644 --- a/bfd/Makefile.in +++ b/bfd/Makefile.in @@ -129,9 +129,9 @@ am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \ $(top_srcdir)/../config/zstd.m4 $(top_srcdir)/../libtool.m4 \ $(top_srcdir)/../ltoptions.m4 $(top_srcdir)/../ltsugar.m4 \ $(top_srcdir)/../ltversion.m4 $(top_srcdir)/../lt~obsolete.m4 \ - $(top_srcdir)/bfd.m4 $(top_srcdir)/warning.m4 \ - $(top_srcdir)/acinclude.m4 $(top_srcdir)/version.m4 \ - $(top_srcdir)/configure.ac + $(top_srcdir)/ax_tls.m4 $(top_srcdir)/bfd.m4 \ + $(top_srcdir)/warning.m4 $(top_srcdir)/acinclude.m4 \ + $(top_srcdir)/version.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ diff --git a/bfd/aclocal.m4 b/bfd/aclocal.m4 index 09b849dfc87..e0142ae724e 100644 --- a/bfd/aclocal.m4 +++ b/bfd/aclocal.m4 @@ -1187,6 +1187,7 @@ m4_include([../ltoptions.m4]) m4_include([../ltsugar.m4]) m4_include([../ltversion.m4]) m4_include([../lt~obsolete.m4]) +m4_include([ax_tls.m4]) m4_include([bfd.m4]) m4_include([warning.m4]) m4_include([acinclude.m4]) diff --git a/bfd/ax_tls.m4 b/bfd/ax_tls.m4 new file mode 100644 index 00000000000..fb184fe201b --- /dev/null +++ b/bfd/ax_tls.m4 @@ -0,0 +1,71 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_tls.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_TLS([action-if-found], [action-if-not-found]) +# +# DESCRIPTION +# +# Provides a test for the compiler support of thread local storage (TLS) +# extensions. Defines TLS if it is found. Currently knows about C++11, +# GCC/ICC, and MSVC. I think SunPro uses the same as GCC, and Borland +# apparently supports either. +# +# LICENSE +# +# Copyright (c) 2008 Alan Woodland +# Copyright (c) 2010 Diego Elio Petteno` +# +# This program is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# This program 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 General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see . +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +#serial 15 + +AC_DEFUN([AX_TLS], [ + AC_MSG_CHECKING([for thread local storage (TLS) class]) + AC_CACHE_VAL([ac_cv_tls], + [for ax_tls_keyword in thread_local _Thread_local __thread '__declspec(thread)' none; do + AS_CASE([$ax_tls_keyword], + [none], [ac_cv_tls=none ; break], + [AC_COMPILE_IFELSE([AC_LANG_PROGRAM( + [#include ], + [static $ax_tls_keyword int bar;] + )], + [ac_cv_tls=$ax_tls_keyword ; break], + [ac_cv_tls=none] + )] + ) + done ] + ) + AC_MSG_RESULT([$ac_cv_tls]) + + AS_IF([test "$ac_cv_tls" != "none"], + [AC_DEFINE_UNQUOTED([TLS],[$ac_cv_tls],[If the compiler supports a TLS storage class, define it to that here]) + m4_ifnblank([$1],[$1],[[:]])], + [m4_ifnblank([$2],[$2],[[:]])]) +]) diff --git a/bfd/bfd.c b/bfd/bfd.c index 08980ae52b7..2cf8361caa2 100644 --- a/bfd/bfd.c +++ b/bfd/bfd.c @@ -691,6 +691,8 @@ SECTION The easiest way to report a BFD error to the user is to use <>. + The BFD error is thread-local. + SUBSECTION Type <> @@ -728,10 +730,10 @@ CODE_FRAGMENT . */ -static bfd_error_type bfd_error; -static bfd_error_type input_error; -static bfd *input_bfd; -static char *_bfd_error_buf; +static TLS bfd_error_type bfd_error; +static TLS bfd_error_type input_error; +static TLS bfd *input_bfd; +static TLS char *_bfd_error_buf; const char *const bfd_errmsgs[] = { @@ -920,7 +922,7 @@ DESCRIPTION Primarily for error reporting, this function is like libiberty's xasprintf except that it can return NULL on no memory and the returned string should not be freed. Uses a - single malloc'd buffer managed by libbfd, _bfd_error_buf. + thread-local malloc'd buffer managed by libbfd, _bfd_error_buf. Be aware that a call to this function frees the result of any previous call. bfd_errmsg (bfd_error_on_input) also calls this function. diff --git a/bfd/config.in b/bfd/config.in index 7ff3eeebf8b..0ba104f4431 100644 --- a/bfd/config.in +++ b/bfd/config.in @@ -285,6 +285,9 @@ /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS +/* If the compiler supports a TLS storage class, define it to that here */ +#undef TLS + /* Name of host specific header file to include in trad-core.c. */ #undef TRAD_HEADER diff --git a/bfd/configure b/bfd/configure index f0a07ff675f..de94019bd9c 100755 --- a/bfd/configure +++ b/bfd/configure @@ -13283,6 +13283,57 @@ $as_echo "#define USE_BINARY_FOPEN 1" >>confdefs.h ;; esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for thread local storage (TLS) class" >&5 +$as_echo_n "checking for thread local storage (TLS) class... " >&6; } + if ${ac_cv_tls+:} false; then : + $as_echo_n "(cached) " >&6 +else + for ax_tls_keyword in thread_local _Thread_local __thread '__declspec(thread)' none; do + case $ax_tls_keyword in #( + none) : + ac_cv_tls=none ; break ;; #( + *) : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +static $ax_tls_keyword int bar; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_tls=$ax_tls_keyword ; break +else + ac_cv_tls=none + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ;; +esac + done + +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_tls" >&5 +$as_echo "$ac_cv_tls" >&6; } + + if test "$ac_cv_tls" != "none"; then : + +cat >>confdefs.h <<_ACEOF +#define TLS $ac_cv_tls +_ACEOF + + : +else + : +fi + + # Link in zlib/zstd if we can. This allows us to read compressed debug sections. # This is used only by compress.c. diff --git a/bfd/configure.ac b/bfd/configure.ac index d1e7e3a4bf3..42678065e57 100644 --- a/bfd/configure.ac +++ b/bfd/configure.ac @@ -233,6 +233,8 @@ AC_CHECK_DECLS([___lc_codepage_func], [], [], [[#include ]]) BFD_BINARY_FOPEN +AX_TLS + # Link in zlib/zstd if we can. This allows us to read compressed debug sections. # This is used only by compress.c. AM_ZLIB diff --git a/bfd/po/bfd.pot b/bfd/po/bfd.pot index 2ef0eaae4f4..9aa34703883 100644 --- a/bfd/po/bfd.pot +++ b/bfd/po/bfd.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: https://sourceware.org/bugzilla/\n" -"POT-Creation-Date: 2023-11-03 16:51-0600\n" +"POT-Creation-Date: 2023-11-03 16:55-0600\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -138,115 +138,115 @@ msgstr "" msgid "Writing updated armap timestamp" msgstr "" -#: bfd.c:738 +#: bfd.c:740 msgid "no error" msgstr "" -#: bfd.c:739 +#: bfd.c:741 msgid "system call error" msgstr "" -#: bfd.c:740 +#: bfd.c:742 msgid "invalid bfd target" msgstr "" -#: bfd.c:741 +#: bfd.c:743 msgid "file in wrong format" msgstr "" -#: bfd.c:742 +#: bfd.c:744 msgid "archive object file in wrong format" msgstr "" -#: bfd.c:743 +#: bfd.c:745 msgid "invalid operation" msgstr "" -#: bfd.c:744 +#: bfd.c:746 msgid "memory exhausted" msgstr "" -#: bfd.c:745 +#: bfd.c:747 msgid "no symbols" msgstr "" -#: bfd.c:746 +#: bfd.c:748 msgid "archive has no index; run ranlib to add one" msgstr "" -#: bfd.c:747 +#: bfd.c:749 msgid "no more archived files" msgstr "" -#: bfd.c:748 +#: bfd.c:750 msgid "malformed archive" msgstr "" -#: bfd.c:749 +#: bfd.c:751 msgid "DSO missing from command line" msgstr "" -#: bfd.c:750 +#: bfd.c:752 msgid "file format not recognized" msgstr "" -#: bfd.c:751 +#: bfd.c:753 msgid "file format is ambiguous" msgstr "" -#: bfd.c:752 +#: bfd.c:754 msgid "section has no contents" msgstr "" -#: bfd.c:753 +#: bfd.c:755 msgid "nonrepresentable section on output" msgstr "" -#: bfd.c:754 +#: bfd.c:756 msgid "symbol needs debug section which does not exist" msgstr "" -#: bfd.c:755 +#: bfd.c:757 msgid "bad value" msgstr "" -#: bfd.c:756 +#: bfd.c:758 msgid "file truncated" msgstr "" -#: bfd.c:757 +#: bfd.c:759 msgid "file too big" msgstr "" -#: bfd.c:758 +#: bfd.c:760 msgid "sorry, cannot handle this file" msgstr "" -#: bfd.c:759 +#: bfd.c:761 #, c-format msgid "error reading %s: %s" msgstr "" -#: bfd.c:760 +#: bfd.c:762 msgid "#" msgstr "" -#: bfd.c:1890 +#: bfd.c:1892 #, c-format msgid "BFD %s assertion fail %s:%d" msgstr "" -#: bfd.c:1903 +#: bfd.c:1905 #, c-format msgid "BFD %s internal error, aborting at %s:%d in %s\n" msgstr "" -#: bfd.c:1908 +#: bfd.c:1910 #, c-format msgid "BFD %s internal error, aborting at %s:%d\n" msgstr "" -#: bfd.c:1910 +#: bfd.c:1912 msgid "Please report this bug.\n" msgstr ""