From patchwork Sun Sep 9 19:43:04 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerald Pfeifer X-Patchwork-Id: 182647 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) by ozlabs.org (Postfix) with SMTP id 1F4FF2C0088 for ; Mon, 10 Sep 2012 05:43:25 +1000 (EST) Comment: DKIM? See http://www.dkim.org DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; d=gcc.gnu.org; s=default; x=1347824607; h=Comment: DomainKey-Signature:Received:Received:Received:Received:Date: From:To:cc:Subject:In-Reply-To:Message-ID:References: MIME-Version:Content-Type:Mailing-List:Precedence:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:Sender: Delivered-To; bh=51Muhv2ACUTDg+JRieRNWdTh/7g=; b=GOl7Obfkc9Dqh8e CBvbZziYlOaCEU5Zl1V+SxNRMG6ipJtDfnlzew3uHKu5G32PWYpKXBAj6RLPtiia TnJSdW/UsBzgENpWT2dUsTKu3xQ//Wz4/1RDdm53Vlr+R9LlQ7iI68b+azn0jSND WxxQEVQInCnhyvMnAni1VmaySZcw= Comment: DomainKeys? See http://antispam.yahoo.com/domainkeys DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=default; d=gcc.gnu.org; h=Received:Received:X-SWARE-Spam-Status:X-Spam-Check-By:Received:Received:Date:From:To:cc:Subject:In-Reply-To:Message-ID:References:MIME-Version:Content-Type:X-IsSubscribed:Mailing-List:Precedence:List-Id:List-Unsubscribe:List-Archive:List-Post:List-Help:Sender:Delivered-To; b=O2naux3X67MU+axLDhK3QR1oQax9z59zG7amqUTMkJmgZrL1IweVoj5DnBWRiE E4SxVC0mAZhPtdDjArVSk44D7pR6L2xVfAJmvvUW9P+mgB8tjYuAssHtQ3S53/I5 AvwscstPoUq+zp7lJAM9/HUP6vewKXdzn2HBvKW/MNbhg=; Received: (qmail 11119 invoked by alias); 9 Sep 2012 19:43:22 -0000 Received: (qmail 11106 invoked by uid 22791); 9 Sep 2012 19:43:21 -0000 X-SWARE-Spam-Status: No, hits=-51.7 required=5.0 tests=AWL, BAYES_00, KHOP_THREADED X-Spam-Check-By: sourceware.org Received: from ainaz.pair.com (HELO ainaz.pair.com) (209.68.2.66) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sun, 09 Sep 2012 19:43:07 +0000 Received: from [192.168.0.129] (vie-188-118-240-184.dsl.sil.at [188.118.240.184]) by ainaz.pair.com (Postfix) with ESMTPSA id BAB7A3F40F; Sun, 9 Sep 2012 15:43:05 -0400 (EDT) Date: Sun, 9 Sep 2012 21:43:04 +0200 (CEST) From: Gerald Pfeifer To: Jonathan Wakely cc: libstdc++ , gcc-patches , Ulrich Drepper , Dominique d'Humieres , Jack Howarth Subject: Re: [v3] fix bootstrap/54419 In-Reply-To: Message-ID: References: MIME-Version: 1.0 X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org On Sun, 9 Sep 2012, Jonathan Wakely wrote: > I've committed the patch from > http://gcc.gnu.org/ml/gcc-patches/2012-09/msg00466.html (with some > fixes to the changelog entry) > > 2012-09-09 Ulrich Drepper > Dominique d'Humieres > Jack Howarth > > PR bootstrap/54419 > * acinclude.m4: Define GLIBCXX_CHECK_X86_RDRAND. > * configure.ac: Use GLIBCXX_CHECK_X86_RDRAND to test for rdrand > support in assembler. > * src/c++11/random.cc (__x86_rdrand): Depend on _GLIBCXX_X86_RDRAND. > (random_device::_M_init): Likewise. > (random_device::_M_getval): Likewise. > * configure: Regenerated. > * config.h.in: Regenerated. amd64-unknown-freebsd8.3 doesn't like this, I'm afraid: configure: visibility supported: yes checking for rdrand support in assembler... eval: ${+...}: Bad substitution gmake[2]: *** [configure-stage1-target-libstdc++-v3] Error 2 Note, this is BSD sh, not bash. I'll admit that I had a look, and did not find the culprit right away. Gerald commit 5202106d9ddcfd92989bfa6c11f7e9b2ea61cd10 Author: Jonathan Wakely Date: Sun Sep 9 17:28:50 2012 +0100 2012-09-09 Ulrich Drepper Dominique d'Humieres Jack Howarth PR bootstrap/54419 * acinclude.m4: Define GLIBCXX_CHECK_X86_RDRAND. * configure.ac: Use GLIBCXX_CHECK_X86_RDRAND to test for rdrand support in assembler. * src/c++11/random.cc (__x86_rdrand): Depend on _GLIBCXX_X86_RDRAND. (random_device::_M_init): Likewise. (random_device::_M_getval): Likewise. * configure: Regenerated. * config.h.in: Regenerated. diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4 index 1179407..267302d 100644 --- a/libstdc++-v3/acinclude.m4 +++ b/libstdc++-v3/acinclude.m4 @@ -3360,6 +3360,26 @@ AC_DEFUN([AC_LC_MESSAGES], [ ]) dnl +dnl Check whether rdrand is supported in the assembler. +AC_DEFUN([GLIBCXX_CHECK_X86_RDRAND], [ + AC_MSG_CHECKING([for rdrand support in assembler]) + AC_CACHE_VAL($ac_cv_x86_rdrand, [ + ac_cv_x86_rdrand=no + case "$target" in + i?86-*-* | \ + x86_64-*-*) + AC_TRY_COMPILE(, [asm("rdrand %eax");], + [ac_cv_x86_rdrand=yes], [ac_cv_x86_rdrand=no]) + esac + ]) + if test $ac_cv_x86_rdrand = yes; then + AC_DEFINE(_GLIBCXX_X86_RDRAND, 1, + [ Defined if as can handle rdrand. ]) + fi + AC_MSG_RESULT($ac_cv_x86_rdrand) +]) + +dnl dnl Check whether get_nprocs is available in , and define _GLIBCXX_USE_GET_NPROCS. dnl AC_DEFUN([GLIBCXX_CHECK_GET_NPROCS], [ diff --git a/libstdc++-v3/configure.ac b/libstdc++-v3/configure.ac index 5c86bb9..555f380 100644 --- a/libstdc++-v3/configure.ac +++ b/libstdc++-v3/configure.ac @@ -330,6 +330,9 @@ case "$target" in esac GLIBCXX_CONDITIONAL(GLIBCXX_LDBL_COMPAT, test $ac_ldbl_compat = yes) +# Check if assembler supports rdrand opcode. +GLIBCXX_CHECK_X86_RDRAND + # This depends on GLIBCXX_ENABLE_SYMVERS and GLIBCXX_IS_NATIVE. GLIBCXX_CONFIGURE_TESTSUITE diff --git a/libstdc++-v3/src/c++11/random.cc b/libstdc++-v3/src/c++11/random.cc index 3b05318..4342df4 100644 --- a/libstdc++-v3/src/c++11/random.cc +++ b/libstdc++-v3/src/c++11/random.cc @@ -50,7 +50,7 @@ namespace std _GLIBCXX_VISIBILITY(default) 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(default) 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; // Check availability of cpuid and, for now at least, also the // CPU signature for Intel's @@ -118,7 +118,7 @@ namespace std _GLIBCXX_VISIBILITY(default) 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