From 94a311abf783de754f0f1b2d4c1f00a9788e795b Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Tue, 16 May 2023 15:09:20 +0100 Subject: libstdc++: Disable cacheline alignment for DJGPP [PR109741] DJGPP (and maybe other targets) uses MAX_OFILE_ALIGNMENT=16 which means that globals (and static objects) can't have alignment greater than 16. This causes an error for the locks defined in src/c++11/shared_ptr.cc because we try to align them to the cacheline size, to avoid false sharing. Add a configure check for the increased alignment, and live with false sharing where we can't increase the alignment. libstdc++-v3/ChangeLog: PR libstdc++/109741 * acinclude.m4 (GLIBCXX_CHECK_ALIGNAS_CACHELINE): Define. * config.h.in: Regenerate. * configure: Regenerate. * configure.ac: Use GLIBCXX_CHECK_ALIGNAS_CACHELINE. * src/c++11/shared_ptr.cc (__gnu_internal::get_mutex): Do not align lock table if not supported. use __GCC_DESTRUCTIVE_SIZE instead of hardcoded 64. --- libstdc++-v3/config.h.in | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'libstdc++-v3/config.h.in') diff --git a/libstdc++-v3/config.h.in b/libstdc++-v3/config.h.in index f91f7eb..bbb2613 100644 --- a/libstdc++-v3/config.h.in +++ b/libstdc++-v3/config.h.in @@ -819,6 +819,10 @@ /* Define if the compiler supports C++11 atomics. */ #undef _GLIBCXX_ATOMIC_BUILTINS +/* Define if global objects can be aligned to + std::hardware_destructive_interference_size. */ +#undef _GLIBCXX_CAN_ALIGNAS_DESTRUCTIVE_SIZE + /* Define to use concept checking code from the boost libraries. */ #undef _GLIBCXX_CONCEPT_CHECKS -- cgit v1.1