public inbox for newlib@sourceware.org
 help / color / mirror / Atom feed
From: Torbjorn SVENSSON <torbjorn.svensson@foss.st.com>
To: Newlib <newlib@sourceware.org>
Subject: Unable to link C++ application with libstdc++ when newlib is used (gcc 13 and perhaps also 12)
Date: Sat, 17 Sep 2022 19:45:41 +0200	[thread overview]
Message-ID: <e11e6ec0-5848-44ad-78e7-1972c29db0a4@foss.st.com> (raw)

Hello,

I've just tried to run the DejaGNU testsuite on GCC master 
(9ac9fde961f76879f0379ff3b2494a2f9ac915f7) with a rather recent commit 
of newlib (the package was patched by Arm and provided in their 
11.3.rel1 release).
Running the testsuite on arm-none-eabi produces a few hundred UNRESOLVED 
test cases, all related to the absence of an implementation of getentropy.

Looking at the current master of newlib 
(eb5c631ead537ac5640d7e4b1ea0edbef344d6d9), there is still no 
implementation, so I suspect that the same error would be visible if I 
switched to the official newlib tree.

In commit 3439657b02869299685d259c3a77aa38714565b7, the use of 
getentropy was introduced in GCC and the changeset enables the use after 
checking that the getentropy function is defined in unistd.h. In the 
case of newlib, the definition exists in unistd.h, but there is no 
common implementation for it. There are 2 specific implementations for 
RTEMS and cygwin, but nothing common.


I suppose the origin of the problem is the definition of the getentropy 
function in the newlib provided unistd.h, but what is the appropriate 
fix for it?
- Create a stub function that just returns -1 and sets errno=ENOSYS?
- Remove the getentropy definition from common unistd.h and place it in 
a fragment for cygwin and RTEMS?
- Any other solution that I've overlooked?



Here is an example of how the error looks like for the GCC testsuite:
Testing g++.robertl/eb77.C,  -std=c++20
doing compile
Executing on host: /build/gcc-13-2709-g9ac9fde961f/bin/arm-none-eabi-g++ 
  /build/src/gcc/gcc/testsuite/g++.old-deja/g++.robertl/eb77.C  -mthumb 
-march=armv6s-m -mcpu=cortex-m0 -mfloat-abi=soft 
-fdiagnostics-plain-output   -fmessage-length=0  -std=c++20 
-pedantic-errors -Wno-long-long        -Wl,--start-group -lc -lm 
-Wl,--end-group --specs=nosys.specs -Wl,--allow-multiple-definition 
-Wl,-u,_isatty,-u,_fstat   -Wl,-wrap,exit -Wl,-wrap,_exit -Wl,-wrap,main 
-Wl,-wrap,abort -Wl,g++_tg.o -lm -o ./eb77.exe    (timeout = 800)
spawn -ignore SIGHUP 
/build/gcc-13-2709-g9ac9fde961f/bin/arm-none-eabi-g++ 
/build/src/gcc/gcc/testsuite/g++.old-deja/g++.robertl/eb77.C -mthumb 
-march=armv6s-m -mcpu=cortex-m0 -mfloat-abi=soft 
-fdiagnostics-plain-output -fmessage-length=0 -std=c++20 
-pedantic-errors -Wno-long-long -Wl,--start-group -lc -lm 
-Wl,--end-group --specs=nosys.specs -Wl,--allow-multiple-definition 
-Wl,-u,_isatty,-u,_fstat -Wl,-wrap,exit -Wl,-wrap,_exit -Wl,-wrap,main 
-Wl,-wrap,abort -Wl,g++_tg.o -lm -o ./eb77.exe
pid is 28414 -28414
/build/gcc-13-2709-g9ac9fde961f/bin/../lib/gcc/arm-none-eabi/13.0.0/../../../../arm-none-eabi/bin/ld: 
/build/gcc-13-2709-g9ac9fde961f/bin/../lib/gcc/arm-none-eabi/13.0.0/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libstdc++.a(random.o): 
in function `std::(anonymous namespace)::__libc_getentropy(void*)':
(.text._ZNSt12_GLOBAL__N_117__libc_getentropyEPv+0x8): undefined 
reference to `getentropy'
/build/gcc-13-2709-g9ac9fde961f/bin/../lib/gcc/arm-none-eabi/13.0.0/../../../../arm-none-eabi/bin/ld: 
/build/gcc-13-2709-g9ac9fde961f/bin/../lib/gcc/arm-none-eabi/13.0.0/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libstdc++.a(random.o): 
in function 
`std::random_device::_M_init(std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> > const&)':
(.text._ZNSt13random_device7_M_initERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE+0x58): 
undefined reference to `getentropy'
/build/gcc-13-2709-g9ac9fde961f/bin/../lib/gcc/arm-none-eabi/13.0.0/../../../../arm-none-eabi/bin/ld: 
/build/gcc-13-2709-g9ac9fde961f/bin/../lib/gcc/arm-none-eabi/13.0.0/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc.a(libc_a-arc4random.o): 
in function `_rs_stir':
(.text._rs_stir+0x8): undefined reference to `getentropy'
collect2: error: ld returned 1 exit status
pid is -1
close result is 28414 exp6 0 1
output is 
/build/gcc-13-2709-g9ac9fde961f/bin/../lib/gcc/arm-none-eabi/13.0.0/../../../../arm-none-eabi/bin/ld: 
/build/gcc-13-2709-g9ac9fde961f/bin/../lib/gcc/arm-none-eabi/13.0.0/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libstdc++.a(random.o): 
in function `std::(anonymous namespace)::__libc_getentropy(void*)':
(.text._ZNSt12_GLOBAL__N_117__libc_getentropyEPv+0x8): undefined 
reference to `getentropy'
/build/gcc-13-2709-g9ac9fde961f/bin/../lib/gcc/arm-none-eabi/13.0.0/../../../../arm-none-eabi/bin/ld: 
/build/gcc-13-2709-g9ac9fde961f/bin/../lib/gcc/arm-none-eabi/13.0.0/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libstdc++.a(random.o): 
in function 
`std::random_device::_M_init(std::__cxx11::basic_string<char, 
std::char_traits<char>, std::allocator<char> > const&)':
(.text._ZNSt13random_device7_M_initERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE+0x58): 
undefined reference to `getentropy'
/build/gcc-13-2709-g9ac9fde961f/bin/../lib/gcc/arm-none-eabi/13.0.0/../../../../arm-none-eabi/bin/ld: 
/build/gcc-13-2709-g9ac9fde961f/bin/../lib/gcc/arm-none-eabi/13.0.0/../../../../arm-none-eabi/lib/thumb/v6-m/nofp/libc.a(libc_a-arc4random.o): 
in function `_rs_stir':
(.text._rs_stir+0x8): undefined reference to `getentropy'
collect2: error: ld returned 1 exit status
  status 1
compiler exited with status 1
FAIL: g++.old-deja/g++.robertl/eb77.C  -std=c++20 (test for excess errors)
Excess errors:
(.text._ZNSt12_GLOBAL__N_117__libc_getentropyEPv+0x8): undefined 
reference to `getentropy'
(.text._ZNSt13random_device7_M_initERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE+0x58): 
undefined reference to `getentropy'
(.text._rs_stir+0x8): undefined reference to `getentropy'
UNRESOLVED: g++.old-deja/g++.robertl/eb77.C  -std=c++20 compilation 
failed to produce executable


Kind regards,
Torbjörn

             reply	other threads:[~2022-09-17 17:45 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-17 17:45 Torbjorn SVENSSON [this message]
2022-09-17 20:47 ` Christophe Lyon
2022-09-18  8:53   ` Torbjorn SVENSSON
2022-09-19 15:28 ` Sebastian Huber
2022-09-19 16:07   ` Torbjorn SVENSSON

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=e11e6ec0-5848-44ad-78e7-1972c29db0a4@foss.st.com \
    --to=torbjorn.svensson@foss.st.com \
    --cc=newlib@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).