public inbox for libstdc++@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] libstdc++: Use GCC_TRY_COMPILE_OR_LINK for getentropy, arc4random
@ 2021-11-12 20:23 Hans-Peter Nilsson
  2021-11-12 23:43 ` Jonathan Wakely
  0 siblings, 1 reply; 2+ messages in thread
From: Hans-Peter Nilsson @ 2021-11-12 20:23 UTC (permalink / raw)
  To: gcc-patches, libstdc++; +Cc: jwakely

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, 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?

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


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH] libstdc++: Use GCC_TRY_COMPILE_OR_LINK for getentropy, arc4random
  2021-11-12 20:23 [PATCH] libstdc++: Use GCC_TRY_COMPILE_OR_LINK for getentropy, arc4random Hans-Peter Nilsson
@ 2021-11-12 23:43 ` Jonathan Wakely
  0 siblings, 0 replies; 2+ messages in thread
From: Jonathan Wakely @ 2021-11-12 23:43 UTC (permalink / raw)
  To: Hans-Peter Nilsson; +Cc: gcc-patches, libstdc++, Jonathan Wakely

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
>
>

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2021-11-12 23:43 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-11-12 20:23 [PATCH] libstdc++: Use GCC_TRY_COMPILE_OR_LINK for getentropy, arc4random Hans-Peter Nilsson
2021-11-12 23:43 ` Jonathan Wakely

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).