diff --git a/configure.ac b/configure.ac index a27b22543c..de7c9dab64 100644 --- a/configure.ac +++ b/configure.ac @@ -388,7 +388,7 @@ AC_COMPILE_IFELSE( ], [AC_MSG_FAILURE([stdatomic.h header found, but compilation failed, please fix your toolchain.])]) -AC_CHECK_HEADERS([stdalign.h stdnoreturn.h], +AC_CHECK_HEADERS([stdnoreturn.h], [], [AC_MSG_ERROR([C11 standard headers not found, update your toolchain.])]) diff --git a/lib/isc/Makefile.am b/lib/isc/Makefile.am index c16de9d83d..f6343136ef 100644 --- a/lib/isc/Makefile.am +++ b/lib/isc/Makefile.am @@ -4,7 +4,6 @@ lib_LTLIBRARIES = libisc.la libisc_ladir = $(includedir)/isc libisc_la_HEADERS = \ - include/isc/align.h \ include/isc/ascii.h \ include/isc/assertions.h \ include/isc/async.h \ diff --git a/lib/isc/include/isc/align.h b/lib/isc/include/isc/align.h deleted file mode 100644 index 7b72e9d83f..0000000000 --- a/lib/isc/include/isc/align.h +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright (C) Internet Systems Consortium, Inc. ("ISC") - * - * SPDX-License-Identifier: MPL-2.0 - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, you can obtain one at https://mozilla.org/MPL/2.0/. - * - * See the COPYRIGHT file distributed with this work for additional - * information regarding copyright ownership. - */ - -#pragma once - -#ifdef HAVE_STDALIGN_H -#include -#else /* ifdef HAVE_STDALIGN_H */ -#define alignas(x) __attribute__((__aligned__(x))) -#endif /* ifdef HAVE_STDALIGN_H */ diff --git a/lib/isc/include/isc/quota.h b/lib/isc/include/isc/quota.h index 571cd5b09b..5597b9fda1 100644 --- a/lib/isc/include/isc/quota.h +++ b/lib/isc/include/isc/quota.h @@ -30,7 +30,6 @@ *** Imports. ***/ -#include #include #include #include @@ -57,14 +56,19 @@ ISC_LANG_BEGINDECLS * synchronization between multiple threads (see urcu/wfcqueue.h for * detailed description). */ +STATIC_ASSERT(ISC_OS_CACHELINE_SIZE >= sizeof(struct __cds_wfcq_head), + "ISC_OS_CACHELINE_SIZE smaller than " + "sizeof(struct __cds_wfcq_head)"); struct isc_quota { int magic; atomic_uint_fast32_t max; atomic_uint_fast32_t used; atomic_uint_fast32_t soft; struct { - alignas(ISC_OS_CACHELINE_SIZE) struct cds_wfcq_head head; - alignas(ISC_OS_CACHELINE_SIZE) struct cds_wfcq_tail tail; + struct cds_wfcq_head head; + uint8_t __padding[ISC_OS_CACHELINE_SIZE - + sizeof(struct __cds_wfcq_head)]; + struct cds_wfcq_tail tail; } jobs; ISC_LINK(isc_quota_t) link; }; diff --git a/lib/isc/include/isc/rwlock.h b/lib/isc/include/isc/rwlock.h index c5b95182b4..3ae93d6a3a 100644 --- a/lib/isc/include/isc/rwlock.h +++ b/lib/isc/include/isc/rwlock.h @@ -161,15 +161,23 @@ typedef pthread_rwlock_t isc__rwlock_t; #else /* USE_PTHREAD_RWLOCK */ -#include #include #include +STATIC_ASSERT(ISC_OS_CACHELINE_SIZE >= sizeof(atomic_uint_fast32_t), + "ISC_OS_CACHELINE_SIZE smaller than " + "sizeof(atomic_uint_fast32_t)"); +STATIC_ASSERT(ISC_OS_CACHELINE_SIZE >= sizeof(atomic_int_fast32_t), + "ISC_OS_CACHELINE_SIZE smaller than sizeof(atomic_int_fast32_t)"); + struct isc_rwlock { - alignas(ISC_OS_CACHELINE_SIZE) atomic_uint_fast32_t readers_ingress; - alignas(ISC_OS_CACHELINE_SIZE) atomic_uint_fast32_t readers_egress; - alignas(ISC_OS_CACHELINE_SIZE) atomic_int_fast32_t writers_barrier; - alignas(ISC_OS_CACHELINE_SIZE) atomic_bool writers_lock; + atomic_uint_fast32_t readers_ingress; + uint8_t __padding1[ISC_OS_CACHELINE_SIZE - sizeof(atomic_uint_fast32_t)]; + atomic_uint_fast32_t readers_egress; + uint8_t __padding2[ISC_OS_CACHELINE_SIZE - sizeof(atomic_uint_fast32_t)]; + atomic_int_fast32_t writers_barrier; + uint8_t __padding3[ISC_OS_CACHELINE_SIZE - sizeof(atomic_int_fast32_t)]; + atomic_bool writers_lock; }; typedef struct isc_rwlock isc_rwlock_t; diff --git a/lib/isc/job_p.h b/lib/isc/job_p.h index 06c7bc319e..385ef02b34 100644 --- a/lib/isc/job_p.h +++ b/lib/isc/job_p.h @@ -13,7 +13,6 @@ #pragma once -#include #include #include #include @@ -24,9 +23,15 @@ * mutex, because we are only using enqueue and splice, and those don't need * any synchronization (see urcu/wfcqueue.h for detailed description). */ +STATIC_ASSERT(ISC_OS_CACHELINE_SIZE >= sizeof(struct __cds_wfcq_head), + "ISC_OS_CACHELINE_SIZE smaller than " + "sizeof(struct __cds_wfcq_head)"); + typedef struct isc_jobqueue { - alignas(ISC_OS_CACHELINE_SIZE) struct __cds_wfcq_head head; - alignas(ISC_OS_CACHELINE_SIZE) struct cds_wfcq_tail tail; + struct __cds_wfcq_head head; + uint8_t __padding[ISC_OS_CACHELINE_SIZE - + sizeof(struct __cds_wfcq_head)]; + struct cds_wfcq_tail tail; } isc_jobqueue_t; typedef ISC_LIST(isc_job_t) isc_joblist_t; diff --git a/lib/isc/mem.c b/lib/isc/mem.c index d117decfe3..55debffe55 100644 --- a/lib/isc/mem.c +++ b/lib/isc/mem.c @@ -21,7 +21,6 @@ #include #include -#include #include #include #include