diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 19ae4cef9fa5..a94334f8ab16 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,5 +1,14 @@ 2020-02-26 Jonathan Wakely + Backport from mainline + 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. + Backport from mainline 2019-10-09 Jonathan Wakely diff --git a/libstdc++-v3/include/bits/c++config b/libstdc++-v3/include/bits/c++config index 7a7e78819ba7..7e0962edd199 100644 --- a/libstdc++-v3/include/bits/c++config +++ b/libstdc++-v3/include/bits/c++config @@ -668,6 +668,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 104 // #define PSTL_VERSION_MAJOR (PSTL_VERSION/100) @@ -686,6 +688,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 8143c129bc62..9c7f53d7073c 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;