From 0ba6a850b597236832140bf57bf6083b6fab93f9 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Fri, 17 Jan 2020 15:49:02 +0000 Subject: [PATCH] libstdc++: Fix freestanding build PR 92376) In a freestanding library we don't install the header, so don't try to include it unless it exists. Explicitly declare aligned alloc functions for freestanding, because doesn't declare them. PR libstdc++/92376 * include/bits/c++config: Only do PSTL config when the header is present, to fix freestanding. * libsupc++/new_opa.cc [!_GLIBCXX_HOSTED]: Declare allocation functions if they were detected by configure. --- libstdc++-v3/ChangeLog | 8 ++++++++ libstdc++-v3/include/bits/c++config | 5 ++++- libstdc++-v3/libsupc++/new_opa.cc | 15 +++++++++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index c37d3b1bfe3..f0d3b1c140f 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,11 @@ +2020-01-17 Jonathan Wakely + + PR libstdc++/92376 + * include/bits/c++config: Only do PSTL config when the header is + present, to fix freestanding. + * libsupc++/new_opa.cc [!_GLIBCXX_HOSTED]: Declare allocation + functions if they were detected by configure. + 2020-01-16 Kai-Uwe Eckhardt Matthew Bauer Jonathan Wakely diff --git a/libstdc++-v3/include/bits/c++config b/libstdc++-v3/include/bits/c++config index 875a5e76890..b1fad59d4b3 100644 --- a/libstdc++-v3/include/bits/c++config +++ b/libstdc++-v3/include/bits/c++config @@ -666,6 +666,8 @@ namespace std // PSTL configuration #if __cplusplus >= 201703L +// This header is not installed for freestanding: +#if __has_include() // Preserved here so we have some idea which version of upstream we've pulled in // #define PSTL_VERSION 9000 @@ -684,6 +686,7 @@ namespace std # define _PSTL_ASSERT_MSG(_Condition, _Message) __glibcxx_assert(_Condition) #include +#endif // __has_include +#endif // C++17 -#endif // End of prewritten config; the settings discovered at configure time follow. diff --git a/libstdc++-v3/libsupc++/new_opa.cc b/libstdc++-v3/libsupc++/new_opa.cc index 4e36fbf589d..8fac193cc7e 100644 --- a/libstdc++-v3/libsupc++/new_opa.cc +++ b/libstdc++-v3/libsupc++/new_opa.cc @@ -43,6 +43,21 @@ extern "C" void *memalign(std::size_t boundary, std::size_t size); using std::new_handler; using std::bad_alloc; +#if ! _GLIBCXX_HOSTED +extern "C" +{ +# if _GLIBCXX_HAVE_ALIGNED_ALLOC + void *aligned_alloc(size_t alignment, size_t size); +# elif _GLIBCXX_HAVE__ALIGNED_MALLOC + void *_aligned_malloc(size_t size, size_t alignment); +# elif _GLIBCXX_HAVE_POSIX_MEMALIGN + void *posix_memalign(void **, size_t alignment, size_t size); +# elif _GLIBCXX_HAVE_MEMALIGN + void *memalign(size_t alignment, size_t size); +# endif +} +#endif + namespace __gnu_cxx { #if _GLIBCXX_HAVE_ALIGNED_ALLOC using ::aligned_alloc; -- 2.30.2