public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
From: Hans-Peter Nilsson <hp@gcc.gnu.org>
To: gcc-cvs@gcc.gnu.org, libstdc++-cvs@gcc.gnu.org
Subject: [gcc r12-5220] libstdc++: Use GCC_TRY_COMPILE_OR_LINK for getentropy,  arc4random
Date: Sat, 13 Nov 2021 00:46:41 +0000 (GMT)	[thread overview]
Message-ID: <20211113004641.7DBB2385840B@sourceware.org> (raw)

https://gcc.gnu.org/g:60f761c7e54f96a287c73a71d0b09ee2b2f8426d

commit r12-5220-g60f761c7e54f96a287c73a71d0b09ee2b2f8426d
Author: Hans-Peter Nilsson <hp@axis.com>
Date:   Fri Nov 12 18:04:43 2021 +0100

    libstdc++: Use GCC_TRY_COMPILE_OR_LINK for getentropy, arc4random
    
    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.
    
    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.

Diff:
---
 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 4adfdf646ac..30bd92d37f2 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 3a572475546..3eb391f409f 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


                 reply	other threads:[~2021-11-13  0:46 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

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=20211113004641.7DBB2385840B@sourceware.org \
    --to=hp@gcc.gnu.org \
    --cc=gcc-cvs@gcc.gnu.org \
    --cc=libstdc++-cvs@gcc.gnu.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).