From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 48) id 3D6F5386197B; Thu, 9 Jul 2020 09:14:09 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 3D6F5386197B DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1594286049; bh=sOTa1d/7HQbBHhdIMQOifaPux1Auda1woP0XkRUlNk4=; h=From:To:Subject:Date:In-Reply-To:References:From; b=ZjZd8dFgalyPrBwGXdR0Awr/spbNsQTabDOnB+QvLD1W1w77pdQSdNdgG6nyZzdb1 NYqjEUGvM+5390WczZ98KvarFopyTwrSzYliOELOjUXqmhb1J+c/vHj1kbE+hK/Jxd NlsNGcsF4UB8CfLo4SwUhQBKSpcF0A/DSZjXbfuM= From: "cvs-commit at gcc dot gnu.org" To: gcc-bugs@gcc.gnu.org Subject: [Bug target/94087] std::random_device often fails when used from multiple threads Date: Thu, 09 Jul 2020 09:14:09 +0000 X-Bugzilla-Reason: CC X-Bugzilla-Type: changed X-Bugzilla-Watch-Reason: None X-Bugzilla-Product: gcc X-Bugzilla-Component: target X-Bugzilla-Version: 10.1.0 X-Bugzilla-Keywords: X-Bugzilla-Severity: normal X-Bugzilla-Who: cvs-commit at gcc dot gnu.org X-Bugzilla-Status: ASSIGNED X-Bugzilla-Resolution: X-Bugzilla-Priority: P3 X-Bugzilla-Assigned-To: redi at gcc dot gnu.org X-Bugzilla-Target-Milestone: 10.2 X-Bugzilla-Flags: X-Bugzilla-Changed-Fields: Message-ID: In-Reply-To: References: Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/ Auto-Submitted: auto-generated MIME-Version: 1.0 X-BeenThere: gcc-bugs@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-bugs mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 09 Jul 2020 09:14:09 -0000 https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D94087 --- Comment #26 from CVS Commits --- The releases/gcc-10 branch has been updated by Jonathan Wakely : https://gcc.gnu.org/g:bbf9d358ae2104a09fc1b61e2b818928b6591831 commit r10-8448-gbbf9d358ae2104a09fc1b61e2b818928b6591831 Author: Jonathan Wakely Date: Tue May 19 16:49:21 2020 +0100 libstdc++: Use RDRAND as fallback if RDSEED keeps failing (PR 94087) It's not difficult for multiple threads to drain the entropy available to the RDSEED instruction, at which point we throw an exception. This change will try to use RDRAND after RDSEED fails repeatedly, and only throw if RDRAND also fails repeatedly. This doesn't guarantee a random value can always be read, but reduces the likelihood of failure when using the RDSEED instruction. PR libstdc++/94087 * src/c++11/random.cc (__x86_rdseed): Allow fallback function t= o be passed in. (__x86_rdseed_rdrand): New function that uses rdseed with rdrand fallback. (random_device::_M_init): Use __x86_rdseed_rdrand when both instructions are available. * testsuite/26_numerics/random/random_device/94087.cc: New test. (cherry picked from commit a2d196e75cef95c2b70734ad02e94f9da0e769fe)=