Require C11 thread_local keyword and <threads.h> header

Change the autoconf check to require C11 <threads.h> header and
thread_local keyword.
This commit is contained in:
Ondřej Surý
2023-01-10 12:48:03 +01:00
parent 20fd0cc60b
commit 1c456c0284
6 changed files with 14 additions and 89 deletions

View File

@@ -311,10 +311,9 @@ AC_CHECK_HEADERS([fcntl.h regex.h sys/time.h unistd.h sys/mman.h sys/sockio.h sy
#
# Check for thread local storage
#
# NOTE: OpenBSD doesn't ship <threads.h>, so we can't require it (yet).
#
AC_CHECK_HEADERS([threads.h])
AX_TLS([AS_IF([test "$ac_cv_tls" != "thread_local"],
[AC_DEFINE_UNQUOTED([thread_local], [$ac_cv_tls], [Define if the compiler uses a different keyword than thread_local for TLS variables])])],
[AC_MSG_ERROR([Thread Local Storage support required, update your toolchain to build BIND 9])])
AC_C_CONST
AC_C_INLINE

View File

@@ -20,24 +20,18 @@ found in the ISC Knowledgebase:
https://kb.isc.org/docs/supported-platforms
In general, this version of BIND will build and run on any
POSIX-compliant system with a modern C compiler, BSD-style
POSIX-compliant system with a modern C11 (or better) compiler, BSD-style
sockets with RFC-compliant IPv6 support, POSIX-compliant threads, and
the :ref:`required libraries <build_dependencies>`.
The following C11 features are required in BIND 9:
The following C11 features are required to compile BIND 9:
- Atomic operations support, either in the form of C11 atomics or
**__atomic** builtin operations.
- Atomic operations support defined in <stdatomic.h>
- Thread Local Storage support, either in the form of C11
**_Thread_local**/**thread_local**, or the **__thread** GCC
extension.
- Thread Local Storage support defined in <threads.h>
The C11 variants are preferred.
The following C23 features are required in BIND 9.
- C23-style attributes - namely [[maybe_unused]] attribute.
Where it makes sense, BIND 9 uses C-standard fixes introduced by C17 update
of the C11 standard.
ISC regularly tests BIND on many operating systems and architectures,
but lacks the resources to test all of them. Consequently, ISC is only
@@ -74,7 +68,7 @@ regularly by ISC.
- NetBSD
- Other Linux distributions still supported by their vendors, such as:
- Ubuntu 20.10+
- Ubuntu 22.10+
- Gentoo
- Arch Linux

View File

@@ -16,8 +16,11 @@
/*! \file */
#include <pthread.h>
#if HAVE_THREADS_H
#include <threads.h>
#else
#define thread_local _Thread_local
#endif
#if defined(HAVE_PTHREAD_NP_H)

View File

@@ -17,6 +17,7 @@
#include <openssl/opensslv.h>
#include <isc/iterated_hash.h>
#include <isc/thread.h>
#include <isc/util.h>
#if OPENSSL_VERSION_NUMBER < 0x30000000L || OPENSSL_API_LEVEL < 30000

View File

@@ -16,6 +16,7 @@
#include <unistd.h>
#include <isc/lang.h>
#include <isc/thread.h>
#include <isc/tid.h>
#include <isc/util.h>

View File

@@ -1,73 +0,0 @@
# SPDX-License-Identifier: GPL-3.0-or-later WITH Autoconf-exception-3.0
#
# ===========================================================================
# 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 <ajw05@aber.ac.uk>
# Copyright (c) 2010 Diego Elio Petteno` <flameeyes@gmail.com>
#
# 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 <https://www.gnu.org/licenses/>.
#
# 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 <stdlib.h>],
[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],[[:]])])
])