[PATCH] libstdc++-v3: Have aligned_alloc() on Newlib

Szabolcs Nagy szabolcs.nagy@arm.com
Mon Aug 13 12:04:00 GMT 2018


On 09/08/18 10:08, Jonathan Wakely wrote:
> On 09/08/18 06:56 +0200, Sebastian Huber wrote:
>> On 08/08/18 16:33, Jonathan Wakely wrote:
>>> On 08/08/18 16:22 +0200, Ulrich Weigand wrote:
>>>> Jonathan Wakely wrote:
>>>>
>>>>> Aha, so newlib was using memalign previously:
>>>>>
>>>>> @@ -53,20 +54,24 @@ aligned_alloc (std::size_t al, std::size_t sz)
>>>>>  #else
>>>>>  extern "C" void *memalign(std::size_t boundary, std::size_t size);
>>>>>  #endif
>>>>> -#define aligned_alloc memalign
>>>>
>>>> Yes, exactly ... this commit introduced the regression.
>>>>
>>>>> OK, I've regressed the branches then - I'll fix that.
>>>
>>> This should fix it. I'll finish testing and commit it.
>>>
>>> Sebastian, your patch to define HAVE_ALIGNED_ALLOC is OK for
>>> gcc-7-branch and gcc-8-branch, because changing newlib from using
>>> memalign to aligned_alloc is safe.
>>
>> Should I check in my patch in addition to your patch?
> 
> Yes please, on trunk and 7 and 8. It's better to use the standard
> aligned_alloc if available.
> 

but the newlib aligned_alloc is broken on baremetal targets,
it is implemented using posix_memalign which is not provided
by the newlib malloc implementation (except on cygwin)

in libstdc++ test log i see

spawn /B/gcc/xg++ -shared-libgcc -B/B/gcc -nostdinc++ -L/B/aarch64-none-elf/libstdc++-v3/src -L/B/aarch64-none-elf/libstdc++-v3/src/.libs 
-L/B/aarch64-none-elf/libstdc++-v3/libsupc++/.libs -B/P/aarch64-none-elf/bin/ -B/P/aarch64-none-elf/lib/ -isystem /P/aarch64-none-elf/include 
-isystem /P/aarch64-none-elf/sys-include -B/B/aarch64-none-elf/./libstdc++-v3/src/.libs -fmessage-length=0 -fno-show-column -ffunction-sections 
-fdata-sections -g -ffunction-sections -fdata-sections -O2 -DLOCALEDIR="." -nostdinc++ 
-I/B/aarch64-none-elf/libstdc++-v3/include/aarch64-none-elf -I/B/aarch64-none-elf/libstdc++-v3/include -I/S/gcc/libstdc++-v3/libsupc++ 
-I/S/gcc/libstdc++-v3/include/backward -I/S/gcc/libstdc++-v3/testsuite/util 
/S/gcc/libstdc++-v3/testsuite/18_support/aligned_alloc/aligned_alloc.cc -std=gnu++17 -fno-diagnostics-show-caret -fdiagnostics-color=never 
./libtestc++.a -L/B/aarch64-none-elf/libstdc++-v3/src/filesystem/.libs -specs=aem-ve.specs -lm -mcmodel=small -o ./aligned_alloc.exe
/P/aarch64-none-elf/bin/ld: /P/aarch64-none-elf/lib/libg.a(lib_a-aligned_alloc.o): in function `aligned_alloc':
/S/newlib-cygwin/newlib/libc/stdlib/aligned_alloc.c:35: undefined reference to `posix_memalign'
/P/aarch64-none-elf/bin/ld: /S/newlib-cygwin/newlib/libc/stdlib/aligned_alloc.c:35:(.text.aligned_alloc+0x14): relocation truncated to fit: 
R_AARCH64_CALL26 against undefined symbol `posix_memalign'
collect2: error: ld returned 1 exit status


FAIL: 18_support/aligned_alloc/aligned_alloc.cc (test for excess errors)
FAIL: 18_support/new_aligned.cc (test for excess errors)
FAIL: 20_util/allocator/overaligned.cc (test for excess errors)
FAIL: 20_util/memory_resource/2.cc (test for excess errors)
FAIL: 20_util/monotonic_buffer_resource/allocate.cc (test for excess errors)
FAIL: 20_util/monotonic_buffer_resource/deallocate.cc (test for excess errors)
FAIL: 20_util/monotonic_buffer_resource/release.cc (test for excess errors)
FAIL: 20_util/monotonic_buffer_resource/upstream_resource.cc (test for excess errors)
FAIL: 20_util/polymorphic_allocator/resource.cc (test for excess errors)
FAIL: 20_util/polymorphic_allocator/select.cc (test for excess errors)
FAIL: ext/bitmap_allocator/overaligned.cc (test for excess errors)
FAIL: ext/mt_allocator/overaligned.cc (test for excess errors)
FAIL: ext/new_allocator/overaligned.cc (test for excess errors)
FAIL: ext/pool_allocator/overaligned.cc (test for excess errors)
FAIL: g++.dg/cpp1z/aligned-new1.C   (test for excess errors)
FAIL: g++.dg/cpp1z/aligned-new2.C   (test for excess errors)
FAIL: g++.dg/cpp1z/aligned-new5.C  -std=gnu++11 (test for excess errors)
FAIL: g++.dg/cpp1z/aligned-new5.C  -std=gnu++14 (test for excess errors)
FAIL: g++.dg/cpp1z/aligned-new5.C  -std=gnu++98 (test for excess errors)
FAIL: g++.dg/cpp1z/aligned-new6.C  -std=gnu++11 (test for excess errors)
FAIL: g++.dg/cpp1z/aligned-new6.C  -std=gnu++14 (test for excess errors)
FAIL: g++.dg/cpp1z/aligned-new8.C   (test for excess errors)
UNRESOLVED: 18_support/aligned_alloc/aligned_alloc.cc compilation failed to produce executable
UNRESOLVED: 18_support/new_aligned.cc compilation failed to produce executable
UNRESOLVED: 20_util/allocator/overaligned.cc compilation failed to produce executable
UNRESOLVED: 20_util/memory_resource/2.cc compilation failed to produce executable
UNRESOLVED: 20_util/monotonic_buffer_resource/allocate.cc compilation failed to produce executable
UNRESOLVED: 20_util/monotonic_buffer_resource/deallocate.cc compilation failed to produce executable
UNRESOLVED: 20_util/monotonic_buffer_resource/release.cc compilation failed to produce executable
UNRESOLVED: 20_util/monotonic_buffer_resource/upstream_resource.cc compilation failed to produce executable
UNRESOLVED: 20_util/polymorphic_allocator/resource.cc compilation failed to produce executable
UNRESOLVED: 20_util/polymorphic_allocator/select.cc compilation failed to produce executable
UNRESOLVED: ext/bitmap_allocator/overaligned.cc compilation failed to produce executable
UNRESOLVED: ext/mt_allocator/overaligned.cc compilation failed to produce executable
UNRESOLVED: ext/new_allocator/overaligned.cc compilation failed to produce executable
UNRESOLVED: ext/pool_allocator/overaligned.cc compilation failed to produce executable
UNRESOLVED: g++.dg/cpp1z/aligned-new1.C   compilation failed to produce executable
UNRESOLVED: g++.dg/cpp1z/aligned-new2.C   compilation failed to produce executable
UNRESOLVED: g++.dg/cpp1z/aligned-new5.C  -std=gnu++11 compilation failed to produce executable
UNRESOLVED: g++.dg/cpp1z/aligned-new5.C  -std=gnu++14 compilation failed to produce executable
UNRESOLVED: g++.dg/cpp1z/aligned-new5.C  -std=gnu++98 compilation failed to produce executable
UNRESOLVED: g++.dg/cpp1z/aligned-new6.C  -std=gnu++11 compilation failed to produce executable
UNRESOLVED: g++.dg/cpp1z/aligned-new6.C  -std=gnu++14 compilation failed to produce executable
UNRESOLVED: g++.dg/cpp1z/aligned-new8.C   compilation failed to produce executable



More information about the Newlib mailing list