Message ID | 20211112202305.83D6A203AC@pchp3.se.axis.com |
---|---|
State | New |
Headers | show |
Series | libstdc++: Use GCC_TRY_COMPILE_OR_LINK for getentropy, arc4random | expand |
On Fri, 12 Nov 2021, 20:24 Hans-Peter Nilsson via Libstdc++, < libstdc++@gcc.gnu.org> wrote: > Since r12-5056-g3439657b0286, there has been a regression in > test results; an additional 100 FAILs running the g++ and > libstdc++ testsuite on cris-elf, a newlib target. The > failures are linker errors, not finding a definition for > getentropy. It appears newlib has since 2017-12-03 > declarations of getentropy and arc4random, and provides an > implementation of arc4random using getentropy, but provides no > definition of getentropy, not even a stub yielding ENOSYS. > This is similar to what it does for many other functions too. > > While fixing newlib (like adding said stub) would likely help, > it still leaves older newlib releases hanging. Thankfully, > the libstdc++ configury test can be improved to try linking > where possible; using the bespoke GCC_TRY_COMPILE_OR_LINK > instead of AC_TRY_COMPILE. BTW, I see a lack of consistency; > some tests use AC_TRY_COMPILE and some GCC_TRY_COMPILE_OR_LINK > for no apparent reason, Almost certainly due to me not knowing what I'm doing. but this commit just amends > r12-5056-g3439657b0286. > > Testing for cris-elf is underway and the log says so far the > related regressions are fixed. Ok to commit? > OK, thanks! > libstdc++-v3: > PR libstdc++/103166 > * acinclude.m4 (GLIBCXX_CHECK_GETENTROPY, > GLIBCXX_CHECK_ARC4RANDOM): > Use GCC_TRY_COMPILE_OR_LINK instead of AC_TRY_COMPILE. > * configure: Regenerate. > --- > libstdc++-v3/acinclude.m4 | 4 ++-- > libstdc++-v3/configure | 53 > +++++++++++++++++++++++++++++++++++++++++++++-- > 2 files changed, 53 insertions(+), 4 deletions(-) > > diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4 > index 4adfdf646acb..30bd92d37f23 100644 > --- a/libstdc++-v3/acinclude.m4 > +++ b/libstdc++-v3/acinclude.m4 > @@ -4839,7 +4839,7 @@ AC_DEFUN([GLIBCXX_CHECK_GETENTROPY], [ > AC_LANG_CPLUSPLUS > AC_MSG_CHECKING([for getentropy]) > AC_CACHE_VAL(glibcxx_cv_getentropy, [ > - AC_TRY_COMPILE( > + GCC_TRY_COMPILE_OR_LINK( > [#include <unistd.h>], > [unsigned i; > ::getentropy(&i, sizeof(i));], > @@ -4862,7 +4862,7 @@ AC_DEFUN([GLIBCXX_CHECK_ARC4RANDOM], [ > AC_LANG_CPLUSPLUS > AC_MSG_CHECKING([for arc4random]) > AC_CACHE_VAL(glibcxx_cv_arc4random, [ > - AC_TRY_COMPILE( > + GCC_TRY_COMPILE_OR_LINK( > [#include <stdlib.h>], > [unsigned i = ::arc4random();], > [glibcxx_cv_arc4random=yes], [glibcxx_cv_arc4random=no]) > diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure > index 3a572475546f..3eb391f409f2 100755 > --- a/libstdc++-v3/configure > +++ b/libstdc++-v3/configure > @@ -75445,7 +75445,8 @@ $as_echo_n "checking for getentropy... " >&6; } > $as_echo_n "(cached) " >&6 > else > > - cat confdefs.h - <<_ACEOF >conftest.$ac_ext > + if test x$gcc_no_link = xyes; then > + cat confdefs.h - <<_ACEOF >conftest.$ac_ext > /* end confdefs.h. */ > #include <unistd.h> > int > @@ -75463,6 +75464,30 @@ else > glibcxx_cv_getentropy=no > fi > rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext > +else > + if test x$gcc_no_link = xyes; then > + as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." > "$LINENO" 5 > +fi > +cat confdefs.h - <<_ACEOF >conftest.$ac_ext > +/* end confdefs.h. */ > +#include <unistd.h> > +int > +main () > +{ > +unsigned i; > + ::getentropy(&i, sizeof(i)); > + ; > + return 0; > +} > +_ACEOF > +if ac_fn_cxx_try_link "$LINENO"; then : > + glibcxx_cv_getentropy=yes > +else > + glibcxx_cv_getentropy=no > +fi > +rm -f core conftest.err conftest.$ac_objext \ > + conftest$ac_exeext conftest.$ac_ext > +fi > > fi > > @@ -75496,7 +75521,8 @@ $as_echo_n "checking for arc4random... " >&6; } > $as_echo_n "(cached) " >&6 > else > > - cat confdefs.h - <<_ACEOF >conftest.$ac_ext > + if test x$gcc_no_link = xyes; then > + cat confdefs.h - <<_ACEOF >conftest.$ac_ext > /* end confdefs.h. */ > #include <stdlib.h> > int > @@ -75513,6 +75539,29 @@ else > glibcxx_cv_arc4random=no > fi > rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext > +else > + if test x$gcc_no_link = xyes; then > + as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." > "$LINENO" 5 > +fi > +cat confdefs.h - <<_ACEOF >conftest.$ac_ext > +/* end confdefs.h. */ > +#include <stdlib.h> > +int > +main () > +{ > +unsigned i = ::arc4random(); > + ; > + return 0; > +} > +_ACEOF > +if ac_fn_cxx_try_link "$LINENO"; then : > + glibcxx_cv_arc4random=yes > +else > + glibcxx_cv_arc4random=no > +fi > +rm -f core conftest.err conftest.$ac_objext \ > + conftest$ac_exeext conftest.$ac_ext > +fi > > fi > > -- > 2.11.0 > >
diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4 index 4adfdf646acb..30bd92d37f23 100644 --- a/libstdc++-v3/acinclude.m4 +++ b/libstdc++-v3/acinclude.m4 @@ -4839,7 +4839,7 @@ AC_DEFUN([GLIBCXX_CHECK_GETENTROPY], [ AC_LANG_CPLUSPLUS AC_MSG_CHECKING([for getentropy]) AC_CACHE_VAL(glibcxx_cv_getentropy, [ - AC_TRY_COMPILE( + GCC_TRY_COMPILE_OR_LINK( [#include <unistd.h>], [unsigned i; ::getentropy(&i, sizeof(i));], @@ -4862,7 +4862,7 @@ AC_DEFUN([GLIBCXX_CHECK_ARC4RANDOM], [ AC_LANG_CPLUSPLUS AC_MSG_CHECKING([for arc4random]) AC_CACHE_VAL(glibcxx_cv_arc4random, [ - AC_TRY_COMPILE( + GCC_TRY_COMPILE_OR_LINK( [#include <stdlib.h>], [unsigned i = ::arc4random();], [glibcxx_cv_arc4random=yes], [glibcxx_cv_arc4random=no]) diff --git a/libstdc++-v3/configure b/libstdc++-v3/configure index 3a572475546f..3eb391f409f2 100755 --- a/libstdc++-v3/configure +++ b/libstdc++-v3/configure @@ -75445,7 +75445,8 @@ $as_echo_n "checking for getentropy... " >&6; } $as_echo_n "(cached) " >&6 else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + if test x$gcc_no_link = xyes; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <unistd.h> int @@ -75463,6 +75464,30 @@ else glibcxx_cv_getentropy=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + if test x$gcc_no_link = xyes; then + as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5 +fi +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <unistd.h> +int +main () +{ +unsigned i; + ::getentropy(&i, sizeof(i)); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + glibcxx_cv_getentropy=yes +else + glibcxx_cv_getentropy=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi fi @@ -75496,7 +75521,8 @@ $as_echo_n "checking for arc4random... " >&6; } $as_echo_n "(cached) " >&6 else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + if test x$gcc_no_link = xyes; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> int @@ -75513,6 +75539,29 @@ else glibcxx_cv_arc4random=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + if test x$gcc_no_link = xyes; then + as_fn_error $? "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5 +fi +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <stdlib.h> +int +main () +{ +unsigned i = ::arc4random(); + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + glibcxx_cv_arc4random=yes +else + glibcxx_cv_arc4random=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi fi