http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54419
--- Comment #25 from Dominique d'Humieres <dominiq at lps dot ens.fr>
2012-09-04 16:14:01 UTC ---
I am now at stage 2 with
--- ../_clean/libstdc++-v3/configure 2012-08-29 10:19:44.000000000 +0200
+++ ../p_work/libstdc++-v3/configure 2012-09-04 17:51:54.000000000 +0200
@@ -3523,11 +3523,11 @@ MAKEINFO=${MAKEINFO-"${am_missing_run}ma
# We need awk for the "check" target. The system "awk" is bad on
# some platforms.
-# Always define AMTAR for backward compatibility.
+# Always define AMTAR for backward compatibility. Yes, it's still used
+# in the wild :-( We should find a proper way to deprecate it ...
+AMTAR='$${TAR-tar}'
-AMTAR=${AMTAR-"${am_missing_run}tar"}
-
-am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
+am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
@@ -70621,6 +70621,31 @@ $as_echo "#define _GLIBCXX_LONG_DOUBLE_C
esac
+ac_cv_x86_rdrand=no
+case "$target" in
+ i?86-*-* | \
+ x86_64-*-*)
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+int
+main ()
+{
+ asm("rdrand %eax");
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+ ac_cv_x86_rdrand=yes
+else
+ ac_cv_x86_rdrand=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+esac
+if test $ac_cv_x86_rdrand = yes; then
+
+$as_echo "#define _GLIBCXX_X86_RDRAND 1" >>confdefs.h
+
+fi
+
# This depends on GLIBCXX_ENABLE_SYMVERS and GLIBCXX_IS_NATIVE.
if $GLIBCXX_IS_NATIVE ; then
--- ../_clean/libstdc++-v3/src/c++11/random.cc 2012-08-30 00:56:27.000000000
+0200
+++ ../p_work/libstdc++-v3/src/c++11/random.cc 2012-09-04 16:25:54.000000000
+0200
@@ -50,7 +50,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul
return __ret;
}
-#if defined __i386__ || defined __x86_64__
+#if (defined __i386__ || defined __x86_64__) && defined _GLIBCXX_X86_RDRAND
unsigned int
__attribute__ ((target("rdrnd")))
__x86_rdrand(void)
@@ -75,7 +75,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul
if (token == "default")
{
-#if defined __i386__ || defined __x86_64__
+#if (defined __i386__ || defined __x86_64__) && defined _GLIBCXX_X86_RDRAND
unsigned int eax, ebx, ecx, edx;
__cpuid(0, eax, ebx, ecx, edx);
// Check for "GenuineIntel"
@@ -119,7 +119,7 @@ namespace std _GLIBCXX_VISIBILITY(defaul
random_device::result_type
random_device::_M_getval()
{
-#if (defined __i386__ || defined __x86_64__)
+#if (defined __i386__ || defined __x86_64__) && defined _GLIBCXX_X86_RDRAND
if (! _M_file)
return __x86_rdrand();
#endif
Jack can you try it on you mac(s)?