+2017-05-23 Xi Ruoyao <ryxi@stu.xidian.edu.cn>
+ Jonathan Wakely <jwakely@redhat.com>
+
+ PR libstdc++/67578
+ * acinclude.m4: Bump libtool_VERSION.
+ * config/abi/pre/gnu.ver: Create GLIBCXX_3.4.24 with new symbol.
+ * config.h.in: Regenerate.
+ * configure: Regenerate.
+ * configure.ac: Add test for <linux/random.h>.
+ * doc/xml/manual/abi.xml: Document new library version.
+ * include/bits/random.h (random_device::entropy)
+ [_GLIBCXX_USE_RANDOM_TR1]: Add call to new _M_getentropy member.
+ (random_device::_M_getentropy): Declare.
+ * src/c++11/random.cc (random_device::_M_getentropy): Define.
+ * testsuite/util/testsuite_abi.cc: Add GLIBCXX_3.4.24 to known
+ versions, and make it the latest version.
+
2017-05-23 Xi Ruoyao <ryxi@stu.xidian.edu.cn>
PR libstdc++/67214
fi
# For libtool versioning info, format is CURRENT:REVISION:AGE
-libtool_VERSION=6:23:0
+libtool_VERSION=6:24:0
# Everything parsed; figure out what files and settings to use.
case $enable_symvers in
/* Define if futex syscall is available. */
#undef HAVE_LINUX_FUTEX
+/* Define to 1 if you have the <linux/random.h> header file. */
+#undef HAVE_LINUX_RANDOM_H
+
/* Define to 1 if you have the <locale.h> header file. */
#undef HAVE_LOCALE_H
} GLIBCXX_3.4.22;
+GLIBCXX_3.4.24 {
+
+ # std::random_device::_M_getentropy() const
+ _ZNKSt13random_device13_M_getentropyEv;
+
+} GLIBCXX_3.4.23;
+
# Symbols in the support library (libsupc++) have their own tag.
CXXABI_1.3 {
locale.h machine/endian.h machine/param.h nan.h stdint.h stdlib.h string.h \
strings.h sys/ipc.h sys/isa_defs.h sys/machine.h sys/param.h \
sys/resource.h sys/sem.h sys/stat.h sys/time.h sys/types.h unistd.h \
-wchar.h wctype.h
+wchar.h wctype.h linux/random.h
do :
as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
fi
# For libtool versioning info, format is CURRENT:REVISION:AGE
-libtool_VERSION=6:23:0
+libtool_VERSION=6:24:0
# Everything parsed; figure out what files and settings to use.
case $enable_symvers in
locale.h machine/endian.h machine/param.h nan.h stdint.h stdlib.h string.h \
strings.h sys/ipc.h sys/isa_defs.h sys/machine.h sys/param.h \
sys/resource.h sys/sem.h sys/stat.h sys/time.h sys/types.h unistd.h \
-wchar.h wctype.h])
+wchar.h wctype.h linux/random.h])
# Only do link tests if native. Else, hardcode.
if $GLIBCXX_IS_NATIVE; then
<listitem><para>GCC 5.1.0: libstdc++.so.6.0.21</para></listitem>
<listitem><para>GCC 6.1.0: libstdc++.so.6.0.22</para></listitem>
<listitem><para>GCC 7.1.0: libstdc++.so.6.0.23</para></listitem>
+ <listitem><para>GCC 8.0.0: libstdc++.so.6.0.24</para></listitem>
</itemizedlist>
<para>
Note 1: Error should be libstdc++.so.3.0.3.
<listitem><para>GCC 5.1.0: GLIBCXX_3.4.21, CXXABI_1.3.9</para></listitem>
<listitem><para>GCC 6.1.0: GLIBCXX_3.4.22, CXXABI_1.3.10</para></listitem>
<listitem><para>GCC 7.1.0: GLIBCXX_3.4.23, CXXABI_1.3.11</para></listitem>
+ <listitem><para>GCC 8.0.0: GLIBCXX_3.4.24, CXXABI_1.3.11</para></listitem>
</itemizedlist>
</listitem>
double
entropy() const noexcept
- { return 0.0; }
+ {
+#ifdef _GLIBCXX_USE_RANDOM_TR1
+ return this->_M_getentropy();
+#else
+ return 0.0;
+#endif
+ }
result_type
operator()()
result_type _M_getval();
result_type _M_getval_pretr1();
+ double _M_getentropy() const noexcept;
union
{
# include <unistd.h>
#endif
+#ifdef _GLIBCXX_HAVE_SYS_IOCTL_H
+# include <sys/ioctl.h>
+#endif
+
+#ifdef _GLIBCXX_HAVE_LINUX_RANDOM_H
+# include <linux/random.h>
+#endif
+
namespace std _GLIBCXX_VISIBILITY(default)
{
namespace
return _M_mt();
}
+ double
+ random_device::_M_getentropy() const noexcept
+ {
+#if defined _GLIBCXX_HAVE_SYS_IOCTL_H && defined RNDGETENTCNT
+ if (!_M_file)
+ return 0.0;
+
+ const int fd = fileno(static_cast<FILE*>(_M_file));
+ if (fd < 0)
+ return 0.0;
+
+ int ent;
+ if (ioctl(fd, RNDGETENTCNT, &ent) < 0)
+ return 0.0;
+
+ if (ent < 0)
+ return 0.0;
+
+ if (static_cast<unsigned>(ent) > sizeof(result_type) * 8)
+ return static_cast<double>(sizeof(result_type) * 8);
+
+ return static_cast<double>(ent);
+#else
+ return 0.0;
+#endif
+ }
+
template class mersenne_twister_engine<
uint_fast32_t,
32, 624, 397, 31,
known_versions.push_back("GLIBCXX_LDBL_3.4.21");
known_versions.push_back("GLIBCXX_3.4.22");
known_versions.push_back("GLIBCXX_3.4.23");
+ known_versions.push_back("GLIBCXX_3.4.24");
known_versions.push_back("CXXABI_1.3");
known_versions.push_back("CXXABI_LDBL_1.3");
known_versions.push_back("CXXABI_1.3.1");
test.version_status = symbol::incompatible;
// Check that added symbols are added in the latest pre-release version.
- bool latestp = (test.version_name == "GLIBCXX_3.4.23"
+ bool latestp = (test.version_name == "GLIBCXX_3.4.24"
|| test.version_name == "CXXABI_1.3.11"
|| test.version_name == "CXXABI_FLOAT128"
|| test.version_name == "CXXABI_TM_1");