Problem building libstdc++ for the avr target

Jonathan Wakely jwakely@redhat.com
Thu Mar 25 12:36:03 GMT 2021


On 25/03/21 10:27 +0100, Vladimir V wrote:
>Hello.
>
>Recently I tried the 'freestanding' build of the libstdc++ for the avr to
>verify that my fixes were sufficient for it as well.
>Unfortunately, I encountered the following error:
>../../../../libstdc++-v3/libsupc++/new_opa.cc: In function 'void*
>__gnu_cxx::aligned_alloc(std::size_t, std::size_t)':
>../../../../libstdc++-v3/libsupc++/new_opa.cc:97:28: error: 'malloc' was
>not declared in this scope
>   97 |   void* const malloc_ptr = malloc(sz + al);
>
>My investigation showed that in the chain of includes the stdlib.h of the
>avr-libc is not present.
>It looks like includes are resolved in the following way (here are the
>original paths as they are linked from out folders during build):
>new_opa.cc -> libstdc++-v3/include/c_compatibility/stdlib.h ->
>libstdc++-v3/include/c_global/cstdlib
>In cstdlib, for non-hosted builds stdlib.h is not included.
>
>This problem is not present if the non-hosted build is done with
>'with-newlib' flag instead of 'with-avrlibc' (common workaround as the
>avrlibc build was fixed only recently).
>Might it be that some include order depends on the target libc? Or maybe
>some implicit conditions are involved?
>
>Could you please support me with this issue?

I think this is needed:

--- a/libstdc++-v3/libsupc++/new_opa.cc
+++ b/libstdc++-v3/libsupc++/new_opa.cc
@@ -54,6 +54,10 @@ extern "C"
    void *posix_memalign(void **, size_t alignment, size_t size);
  # elif _GLIBCXX_HAVE_MEMALIGN
    void *memalign(size_t alignment, size_t size);
+#else
+  // A freestanding C runtime may not provide "malloc" -- but there is no
+  // other reasonable way to implement "operator new".
+  void *malloc (std::size_t);   with GCC 7.5
  # endif
  }
  #endif





More information about the Libstdc++ mailing list