2005-04-08 08:59:08 +08:00
|
|
|
# Process this file with autoreconf to produce a configure script.
|
2000-04-22 04:33:34 +08:00
|
|
|
|
2003-08-11 13:26:58 +08:00
|
|
|
AC_INIT(package-unused, version-unused,, libstdc++)
|
[multiple changes]
2012-01-20 Benjamin Kosnik <bkoz@redhat.com>
PR libstdc++/49829
Add libc++98convenience.la, libc++11convenience.la.
* src/c++98: New directory.
* src/c++11: New directory.
* acinclude.m4: (GLIBCXX_CONFIGURE): Add src-c++98, src-c++11.
* configure: Regenerated.
* Makefile.am (hosted_source): Add src-c++98, src-c++11 to SUBDIRS.
* Makefile.in: Regenerate.
* libsupc++/Makefile.am (AM_CXXFLAGS): USe XTEMPLATE_FLAGS for
-fno-implicit-templates.
* libsupc++/Makefile.in: Regenerate.
* src/Makefile.am (inst_sources): Move... C++11 files into
separate directory for libstdc++11convenience.la. Files are:
fstream-inst.cc, string-inst.cc, wlocale-inst.cc, wstring-inst.cc).
(sources): Move C++11 files. Files are: compatibility-c++0x.cc,
compatibility-atomic-c++0x.cc, debug.cc, functexcept.cc,
functional.cc, hash_c++0x.cc, hashtable_c++0x.cc, limits.cc,
system_error.cc, placeholders.cc, regex.cc, shared_ptr.cc,
mutex.cc, condition_variable.cc, chrono.cc, thread.cc, future.cc.
(libstdc++convenience.la): Add new target.
(SUBDIRS): Add c++11, c++98.
* src/Makefile.in: Regenerate.
* src/c++11/Makefile.am: New.
* src/c++11/Makefile.in: Generate.
* src/c++98/Makefile.am: New, C++98 files.
* src/c++98/Makefile.in: Generate.
2012-01-23 Benjamin Kosnik <bkoz@redhat.com>
PR libstdc++/49829
Add libc++98convenience.la, libc++11convenience.la.
* src/c++98: New directory.
* src/c++11: New directory.
* acinclude.m4: (GLIBCXX_CONFIGURE): Add src-c++98, src-c++11.
* configure: Regenerated.
* Makefile.am (hosted_source): Add src-c++98, src-c++11 to SUBDIRS.
* Makefile.in: Regenerate.
* libsupc++/Makefile.am (AM_CXXFLAGS): USe XTEMPLATE_FLAGS for
-fno-implicit-templates.
* libsupc++/Makefile.in: Regenerate.
* src/Makefile.am (inst_sources): Move... C++11 files into
separate directory for libstdc++11convenience.la. Files are:
fstream-inst.cc, string-inst.cc, wlocale-inst.cc, wstring-inst.cc).
(sources): Move C++11 files. Files are: compatibility-c++0x.cc,
compatibility-atomic-c++0x.cc, debug.cc, functexcept.cc,
functional.cc, hash_c++0x.cc, hashtable_c++0x.cc, limits.cc,
system_error.cc, placeholders.cc, regex.cc, shared_ptr.cc,
mutex.cc, condition_variable.cc, chrono.cc, thread.cc, future.cc.
(libstdc++convenience.la): Add new target.
(SUBDIRS): Add c++11, c++98.
* src/Makefile.in: Regenerate.
* src/c++11/Makefile.am: New.
* src/c++11/Makefile.in: Generate.
* src/c++98/Makefile.am: New, C++98 files.
* src/c++98/Makefile.in: Generate.
From-SVN: r183457
2012-01-24 07:12:01 +08:00
|
|
|
AC_CONFIG_SRCDIR(src/shared/hashtable-aux.cc)
|
2003-08-05 10:00:18 +08:00
|
|
|
AC_CONFIG_HEADER(config.h)
|
2001-02-02 05:08:05 +08:00
|
|
|
|
2002-05-08 12:38:00 +08:00
|
|
|
# This works around the fact that libtool configuration may change LD
|
|
|
|
# for this particular configuration, but some shells, instead of
|
|
|
|
# keeping the changes in LD private, export them just because LD is
|
2002-06-19 03:07:12 +08:00
|
|
|
# exported. Only used at the end of this file.
|
2003-08-05 10:00:18 +08:00
|
|
|
### am handles this now? ORIGINAL_LD_FOR_MULTILIBS=$LD
|
2002-05-08 12:38:00 +08:00
|
|
|
|
2003-08-05 10:00:18 +08:00
|
|
|
# Find the rest of the source tree framework.
|
2004-06-15 22:47:55 +08:00
|
|
|
AM_ENABLE_MULTILIB(, ..)
|
2002-06-26 11:53:45 +08:00
|
|
|
|
2001-08-10 14:50:34 +08:00
|
|
|
# Gets build, host, target, *_vendor, *_cpu, *_os, etc.
|
2002-06-19 03:07:12 +08:00
|
|
|
#
|
|
|
|
# You will slowly go insane if you do not grok the following fact: when
|
|
|
|
# building v3 as part of the compiler, the top-level /target/ becomes the
|
2003-08-05 10:00:18 +08:00
|
|
|
# library's /host/. configure then causes --target to default to --host,
|
2002-06-19 03:07:12 +08:00
|
|
|
# exactly like any other package using autoconf. Therefore, 'target' and
|
|
|
|
# 'host' will always be the same. This makes sense both for native and
|
|
|
|
# cross compilers, just think about it for a little while. :-)
|
|
|
|
#
|
|
|
|
# Also, if v3 is being configured as part of a cross compiler, the top-level
|
|
|
|
# configure script will pass the "real" host as $with_cross_host.
|
|
|
|
#
|
2003-08-05 10:00:18 +08:00
|
|
|
# Do not delete or change the following two lines. For why, see
|
|
|
|
# http://gcc.gnu.org/ml/libstdc++/2003-07/msg00451.html
|
2000-04-22 04:33:34 +08:00
|
|
|
AC_CANONICAL_SYSTEM
|
2003-08-05 10:00:18 +08:00
|
|
|
target_alias=${target_alias-$host_alias}
|
|
|
|
|
|
|
|
# Handy for debugging:
|
|
|
|
#AC_MSG_NOTICE($build / $host / $target / $host_alias / $target_alias); sleep 5
|
|
|
|
|
acinclude.m4 (GLIBCXX_EXPORT_INCLUDES): Remove LIBMATH_INCLUDES and LIBSUPCXX_INCLUDES.
2003-08-17 Phil Edwards <pme@gcc.gnu.org>
* acinclude.m4 (GLIBCXX_EXPORT_INCLUDES): Remove LIBMATH_INCLUDES
and LIBSUPCXX_INCLUDES. Re-purpose TOPLEVEL_INCLUDES to refer to
things from the top level.
* configure.ac (GLIBCXX_IS_NATIVE): Determine earlier and re-order.
Comment out the conditionals for CANADIAN and GLIBCXX_BUILD_LIBMATH
(currently unused). Strip the fake-VPATH shell fragment from
automake-generated rules, if present.
* linkage.m4: Add comment.
* fragment.am: New file, containing factored-out common settings.
(AM_CPPFLAGS): Absorb the deprecated INCLUDES variable contents.
* Makefile.am: Include fragment.am. Remove common variables.
* include/Makefile.am: Likewise.
* libmath/Makefile.am: Likewise.
* libsupc++/Makefile.am: Likewise.
* po/Makefile.am: Likewise. Print rules during check.
* src/Makefile.am: Likewise.
* testsuite/Makefile.am: Likewise.
* aclocal.m4, configure, Makefile.in, include/Makefile.in,
libmath/Makefile.in, libsupc++/Makefile.in, po/Makefile.in,
src/Makefile.in, testsuite/Makefile.in: Regenerate.
From-SVN: r70522
2003-08-18 04:23:12 +08:00
|
|
|
if test "$build" != "$host"; then
|
|
|
|
# We are being configured with some form of cross compiler.
|
|
|
|
GLIBCXX_IS_NATIVE=false
|
2005-08-04 07:17:06 +08:00
|
|
|
case "$host","$target" in
|
|
|
|
# Darwin crosses can use the host system's libraries and headers,
|
|
|
|
# because of the fat library support. Of course, it must be the
|
|
|
|
# same version of Darwin on both sides. Allow the user to
|
|
|
|
# just say --target=foo-darwin without a version number to mean
|
|
|
|
# "the version on this system".
|
|
|
|
*-*-darwin*,*-*-darwin*)
|
|
|
|
hostos=`echo $host | sed 's/.*-darwin/darwin/'`
|
|
|
|
targetos=`echo $target | sed 's/.*-darwin/darwin/'`
|
2023-05-19 01:21:50 +08:00
|
|
|
if test $hostos = $targetos || test $targetos = darwin ; then
|
2005-08-04 07:17:06 +08:00
|
|
|
GLIBCXX_IS_NATIVE=true
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
|
|
|
|
*)
|
|
|
|
GCC_NO_EXECUTABLES
|
|
|
|
;;
|
|
|
|
esac
|
acinclude.m4 (GLIBCXX_EXPORT_INCLUDES): Remove LIBMATH_INCLUDES and LIBSUPCXX_INCLUDES.
2003-08-17 Phil Edwards <pme@gcc.gnu.org>
* acinclude.m4 (GLIBCXX_EXPORT_INCLUDES): Remove LIBMATH_INCLUDES
and LIBSUPCXX_INCLUDES. Re-purpose TOPLEVEL_INCLUDES to refer to
things from the top level.
* configure.ac (GLIBCXX_IS_NATIVE): Determine earlier and re-order.
Comment out the conditionals for CANADIAN and GLIBCXX_BUILD_LIBMATH
(currently unused). Strip the fake-VPATH shell fragment from
automake-generated rules, if present.
* linkage.m4: Add comment.
* fragment.am: New file, containing factored-out common settings.
(AM_CPPFLAGS): Absorb the deprecated INCLUDES variable contents.
* Makefile.am: Include fragment.am. Remove common variables.
* include/Makefile.am: Likewise.
* libmath/Makefile.am: Likewise.
* libsupc++/Makefile.am: Likewise.
* po/Makefile.am: Likewise. Print rules during check.
* src/Makefile.am: Likewise.
* testsuite/Makefile.am: Likewise.
* aclocal.m4, configure, Makefile.in, include/Makefile.in,
libmath/Makefile.in, libsupc++/Makefile.in, po/Makefile.in,
src/Makefile.in, testsuite/Makefile.in: Regenerate.
From-SVN: r70522
2003-08-18 04:23:12 +08:00
|
|
|
else
|
|
|
|
GLIBCXX_IS_NATIVE=true
|
|
|
|
fi
|
|
|
|
|
2022-09-27 18:20:33 +08:00
|
|
|
# In the case that we're building without headers, we won't have <stdio.h>
|
|
|
|
# available. In these cases, we have to instruct autotools to never include
|
|
|
|
# <stdio.h> as a part of default headers.
|
|
|
|
m4_version_prereq([2.70], [], [
|
|
|
|
if test "x$with_headers" = "xno"; then
|
|
|
|
ac_includes_default=`echo "$ac_includes_default" | sed '/^#include <stdio.h>$/d'`
|
|
|
|
fi
|
|
|
|
])
|
|
|
|
|
2003-08-05 10:00:18 +08:00
|
|
|
# Sets up automake. Must come after AC_CANONICAL_SYSTEM. Each of the
|
|
|
|
# following is magically included in AUTOMAKE_OPTIONS in each Makefile.am.
|
|
|
|
# 1.x: minimum required version
|
|
|
|
# no-define: PACKAGE and VERSION will not be #define'd in config.h (a bunch
|
|
|
|
# of other PACKAGE_* variables will, however, and there's nothing
|
2003-08-11 13:26:58 +08:00
|
|
|
# we can do about that; they come from AC_INIT).
|
2003-08-05 10:00:18 +08:00
|
|
|
# foreign: we don't follow the normal rules for GNU packages (no COPYING
|
|
|
|
# file in the top srcdir, etc, etc), so stop complaining.
|
|
|
|
# no-dependencies: turns off auto dependency generation (just for now)
|
2010-05-05 02:58:11 +08:00
|
|
|
# no-dist: we don't want 'dist' and related rules.
|
2003-12-17 07:44:53 +08:00
|
|
|
# -Wall: turns on all automake warnings...
|
|
|
|
# -Wno-portability: ...except this one, since GNU make is now required.
|
2010-05-05 02:58:11 +08:00
|
|
|
AM_INIT_AUTOMAKE([1.9.3 no-define foreign no-dependencies no-dist -Wall -Wno-portability -Wno-override])
|
2005-04-08 08:59:08 +08:00
|
|
|
AH_TEMPLATE(PACKAGE, [Name of package])
|
|
|
|
AH_TEMPLATE(VERSION, [Version number of package])
|
2003-08-05 10:00:18 +08:00
|
|
|
|
2009-08-15 15:02:33 +08:00
|
|
|
# -fno-builtin must be present here so that a non-conflicting form of
|
|
|
|
# std::exit can be guessed by AC_PROG_CXX, and used in later tests.
|
|
|
|
|
|
|
|
save_CXXFLAGS="$CXXFLAGS"
|
|
|
|
CXXFLAGS="$CXXFLAGS -fno-builtin"
|
|
|
|
AC_PROG_CC
|
|
|
|
AC_PROG_CXX
|
|
|
|
CXXFLAGS="$save_CXXFLAGS"
|
|
|
|
|
2019-10-04 23:08:23 +08:00
|
|
|
AC_SYS_LARGEFILE
|
|
|
|
|
2009-08-15 15:02:33 +08:00
|
|
|
# Runs configure.host, and assorted other critical bits. Sets
|
2003-08-05 10:00:18 +08:00
|
|
|
# up critical shell variables.
|
|
|
|
GLIBCXX_CONFIGURE
|
|
|
|
|
2012-09-20 10:10:22 +08:00
|
|
|
# Libtool setup.
|
libstdc++: Fix and simplify freestanding configuration [PR103866]
This fixes the --disable-hosted-libstdcxx build so that it works with
--without-headers. Currently you need to also use --with-newlib, which
is confusing for users who aren't actually using newlib.
The AM_PROG_LIBTOOL checks are currently skipped for --with-newlib and
--with-avrlibc builds, with this change they are also skipped when using
--without-headers. It would be nice if using --disable-hosted-libstdcxx
automatically skipped those checks, but GLIBCXX_ENABLE_HOSTED comes too
late to make the AM_PROG_LIBTOOL checks depend on $is_hosted.
The checks for EOF, SEEK_CUR etc. cause the build to fail if there is no
<stdio.h> available. Unlike most headers, which get a HAVE_FOO_H macro,
<stdio.h> is in autoconf's default includes, so every check tries to
include it unconditionally. This change skips those checks for
freestanding builds.
Similarly, the checks for <stdint.h> types done by GCC_HEADER_STDINT try
to include <stdio.h> and fail for --without-headers builds. This change
skips the use of GCC_HEADER_STDINT for freestanding. We can probably
stop using GCC_HEADER_STDINT entirely, since only one file uses the
gstdint.h header that is generated, and that could easily be changed to
use <stdint.h> instead. That can wait for stage 1.
We also need to skip the GLIBCXX_CROSSCONFIG stage if --without-headers
was used, since we don't have any of the functions it deals with.
The end result of the changes above is that it should not be necessary
for a --disable-hosted-libstdcxx --without-headers build to also use
--with-newlib.
Finally, compile libsupc++ with -ffreestanding when --without-headers is
used, so that <stdint.h> will use <gcc-stdint.h> instead of expecting it
to come from libc.
libstdc++-v3/ChangeLog:
PR libstdc++/103866
* acinclude.m4 (GLIBCXX_COMPUTE_STDIO_INTEGER_CONSTANTS): Do
nothing for freestanding builds.
(GLIBCXX_ENABLE_HOSTED): Define FREESTANDING_FLAGS.
* configure.ac: Do not use AC_LIBTOOL_DLOPEN when configured
with --without-headers. Do not use GCC_HEADER_STDINT for
freestanding builds.
* libsupc++/Makefile.am (HOSTED_CXXFLAGS): Use -ffreestanding
for freestanding builds.
* configure: Regenerate.
* Makefile.in: Regenerate.
* doc/Makefile.in: Regenerate.
* include/Makefile.in: Regenerate.
* libsupc++/Makefile.in: Regenerate.
* po/Makefile.in: Regenerate.
* python/Makefile.in: Regenerate.
* src/Makefile.in: Regenerate.
* src/c++11/Makefile.in: Regenerate.
* src/c++17/Makefile.in: Regenerate.
* src/c++20/Makefile.in: Regenerate.
* src/c++98/Makefile.in: Regenerate.
* src/filesystem/Makefile.in: Regenerate.
* testsuite/Makefile.in: Regenerate.
2022-01-06 21:54:53 +08:00
|
|
|
if test "x${with_newlib}" != "xyes" &&
|
|
|
|
test "x${with_avrlibc}" != "xyes" &&
|
|
|
|
test "x$with_headers" != "xno"; then
|
2008-05-16 06:54:29 +08:00
|
|
|
AC_LIBTOOL_DLOPEN
|
|
|
|
fi
|
2000-07-26 14:51:38 +08:00
|
|
|
AM_PROG_LIBTOOL
|
2010-12-06 08:50:04 +08:00
|
|
|
ACX_LT_HOST_FLAGS
|
2000-10-31 09:56:19 +08:00
|
|
|
AC_SUBST(enable_shared)
|
|
|
|
AC_SUBST(enable_static)
|
2021-03-28 21:48:17 +08:00
|
|
|
AM_CONDITIONAL([ENABLE_DARWIN_AT_RPATH], [test x$enable_darwin_at_rpath = xyes])
|
2024-02-09 01:54:31 +08:00
|
|
|
os_is_darwin=no
|
|
|
|
case ${host_os} in
|
|
|
|
darwin*) os_is_darwin=yes ;;
|
|
|
|
*) ;;
|
|
|
|
esac
|
|
|
|
AM_CONDITIONAL([OS_IS_DARWIN], [test x${os_is_darwin} = xyes])
|
2001-06-01 17:22:05 +08:00
|
|
|
|
Commit the vtable verification feature.
Commit the vtable verification feature. This feature is designed to
detect, at run time, if/when the vtable pointer in a C++ object has
been corrupted, before allowing virtual calls through that pointer.
If pointer corruption is detected, execution of the program is halted.
libstdc++-v3 ChangeLog:
2013-08-06 Caroline Tice <cmtice@google.com>
* fragment.am: Add XTEMPLATE_FLAGS.
* configure.ac: Add definitions for --enable-vtable-verify.
* acinclude.m4: Add --enable-vtable-verify and
--disable-vtable-verify; define --enable-vtable-verify; define
VTV_CXXFLAGS, VTV_PCH_CXXFLAGS and VTV_CXXLINKFLAGS.
* config/abi/pre/gnu.ver: Export symbols for vtable verification.
* libsupc++/Makefile.am: Define vtv_sources and add it to
libsupc___la_SOURCES and libsupc__convenience_la_SOURCES.
* libsupc++/vtv_stubs.cc: New file.
* include/Makefile.am: Add VTV_PCH_CXXFLAGS to PCHFLAGS.
* src/Makefile.am: Add VTV_CXXFLAGS to AM_CXXFLAGS; add
VTV_CXXLINKFLAGS to CXXLINK.
* src/c++98/Makefile.am: Comment out XTEMPLATE_FLAGS; add VTV_CXXFLAGS
to AM_CXXFLAGS; add VTV_CXXXLINKFLAGS to CXXLINK.
* src/C++11/Makefile.am: Ditto.
* doc/xml/manual/configure.xml: Add entry for --enable-vtable-verify.
* scripts/testsuite_flags.in: Add cxxvtvflags to Usage; cause
cxxvtvflags to use VTV_CXXFLAGS and VTV_CXXLINKFLAGS.
* testsuite/lib/libstdc++.exp: Add cxxvtvflags; add code to locate
libvtv if --enable-vtable-verify was used; set cxxvtvflags; add
cxxvtvflags to cxx_final.
* testsuite/18_support/bad_exception/23591_thread-1.c: Add
-fvtable-verify=none to compiler flags.
* testsuite/17_intro/freestanding.cc: Add -fvtable-verify=none
to compiler flags.
* configure: Regenerated.
* Makefile.in: Regenerated.
* python/Makefile.in: Regenerated.
* include/Makefile.in: Regenerated.
* libsupc++/Makefile.in: Regenerated.
* config.h.in: Regenerated.
* po/Makefile.in: Regenerated.
* src/Makefile.in: Regenerated.
* src/c++98/Makefile.in: Regenerated.
* src/c++11/Makefile.in: Regenerated.
* doc/Makefile.in: Regenerated.
* testsuite/Makefile.in: Regenerated.
top level ChangeLog:
2013-08-06 Caroline Tice <cmtice@google.com>
* configure.ac: Add target-libvtv to target_libraries; disable libvtv
on non-linux systems; add target-libvtv to noconfigdirs; add
libsupc++/.libs to C++ library search paths.
* configure: Regenerated.
* Makefile.def: Add libvtv to target_modules; make libvtv depend on
libstdc++ and libgcc.
* Makefile.in: Regenerated.
include/ChangeLog:
2013-08-06 Caroline Tice <cmtice@google.com>
* vtv-change-permission.h: New file.
contrib/ChangeLog:
2013-08-06 Caroline Tice4 <cmtice@google.com>
* gcc_update: Add libvtv files.
libgcc/ChangeLog:
2013-08-06 Caroline Tice <cmtice@google.com>
config.host (extra_parts): Add vtv_start.o, vtv_end.o
vtv_start_preinit.o and vtv_end_preinit.o.
configure.ac: Add code to check/set enable_vtable_verify.
Makefile.in: Add rules to build vtv_*.o, if enable_vtable_verify is
true.
vtv_start_preinit.c: New file.
vtv_end_preinit.c: New file.
vtv_start.c: New file.
vtv_end.c: New file.
configure: Regenerated.
gcc/ChangeLog:
2013-08-06 Caroline Tice <cmtice@google.com>
* gcc.c (VTABLE_VERIFICATION_SPEC): New definition.
(LINK_COMMAND_SPEC): Add VTABLE_VERIFICATION_SPEC.
* tree-pass.h: Add pass_vtable_verify.
* varasm.c (assemble_variable): Add code to properly set the comdat
section and name for the .vtable_map_vars section.
(assemble_vtyv_preinit_initializer): New function.
(default_sectin_type_flags): Make sure .vtable_map_vars section has
LINK_ONCE flag.
* output.h: Add function decl for assemble_vtv_preinit_initializer.
* vtable-verify.c: New file.
* vtable-verify.h: New file.
* flag-types.h (enum vtv_priority): Defintions for flag_vtable_verify
initialiation levels.
* timevar.def (TV_VTABLE_VERIFICATION): New definition.
* passes.def: Insert pass_vtable_verify.
* aclocal.m4: Reorder includes.
* doc/invoke.texi: Add documentation for the flags -fvtable-verify=,
-fvtv-debug and -fvtv-counts.
* config/gnu-user.h (GNU_USER_TARGET_STARTFILE_SPEC): Add vtv_start*.o,
as appropriate, if -fvtable-verify=... is used.
(GNU_USER_TARGET_ENDFILE_SPEC): Add vtv_end*.o as appropriate, if
-fvtable-verify=... is used.
* Makefile.in (OBJS): Add vtable-verify.o to list.
(vtable-verify.o): Add new build rule.
(GTFILES): Add vtable-verify.c to list.
* common.opt (fvtable-verify=): New flag.
(vtv_priority): Values for fvtable-verify= flag.
(fvtv-counts): New flag.
(fvtv-debug): New flag.
* tree.h (save_vtable_map_decl): New extern function decl.
gcc/cp/ChangeLog:
2013-08-06 Caroline Tice <cmtice@google.com>
* Make-lang.in (*CXX_AND_OBJCXX_OBJS): Add vtable-class-hierarchy.o to
list.
(vtable-class-hierarchy.o): Add build rule.
* cp-tree.h (vtv_start_verification_constructor_init_function): New
extern function decl.
(vtv_finish_verification_constructor_init_function): New extern
function decl.
(build_vtbl_address): New extern function decl.
(get_mangled_vtable_map_var_name): New extern function decl.
(vtv_compute_class_hierarchy_transitive_closure): New extern function
decl.
(vtv_generate_init_routine): New extern function decl.
(vtv_save_class_info): New extern function decl.
(vtv_recover_class_info): New extern function decl.
(vtv_build_vtable_verify_fndecl): New extern function decl.
* class.c (finish_struct_1): Add call to vtv_save_class_info if
flag_vtable_verify is true.
* config-lang.in: Add vtable-class-hierarchy.c to gtfiles list.
* vtable-class-hierarchy.c: New file.
* mangle.c (get_mangled_vtable_map_var_name): New function.
* decl2.c (start_objects): Update function comment.
(cp_write_global_declarations): Call vtv_recover_class_info,
vtv_compute_class_hierarchy_transitive_closure and
vtv_build_vtable_verify_fndecl, before calling
finalize_compilation_unit, and call vtv_generate_init_rount after, IFF
flag_vtable_verify is true.
(vtv_start_verification_constructor_init_function): New function.
(vtv_finish_verification_constructor_init_function): New function.
* init.c (build_vtbl_address): Remove static qualifier from function.
libvtv/ChangeLog:
2013-08-06 Caroline Tice <cmtice@google.com>
Initial check-in of new vtable verification feature.
* configure.ac : New file.
* acinclude.m4 : New file.
* Makefile.am : New file.
* aclocal.m4 : New file.
* configure.tgt : New file.
* configure: New file (generated).
* Makefile.in: New file (generated).
* vtv_set.h : New file.
* vtv_utils.cc : New file.
* vtv_utils.h : New file.
* vtv_malloc.cc : New file.
* vtv_rts.cc : New file.
* vtv_malloc.h : New file.
* vtv_rts.h : New file.
* vtv_fail.cc : New file.
* vtv_fail.h : New file.
* vtv_map.h : New file.
* scripts/run-testsuite.sh : New file.
* scripts/sum-vtv-counts.c : New file.
* testsuite/parts-test-main.h : New file.
* testusite/dataentry.cc : New file.
* testsuite/temp_deriv.cc : New file.
* testsuite/register_pair.cc : New file.
* testsuite/virtual_inheritance.cc : New file.
* testsuite/field-test.cc : New file.
* testsuite/nested_vcall_test.cc : New file.
* testsuite/template-list-iostream.cc : New file.
* testsuite/register_pair_inserts.cc : New file.
* testsuite/register_pair_inserts_mt.cc : New file.
* testsuite/event.list : New file.
* testsuite/parts-test-extra-parts-views.cc : New file.
* testsuite/parts-test-extra-parts-views.h : New file.
* testsuite/environment-fail-32.s : New file.
* testsuite/parts-test-extra-parts.h : New file.
* testsuite/temp_deriv2.cc : New file.
* testsuite/dlopen_mt.cc : New file.
* testsuite/event.h : New file.
* testsuite/template-list.cc : New file.
* testsuite/replace-fail.cc : New file.
* testsuite/Makefile.am : New file.
* testsuite/Makefile.in: New file (generated).
* testsuite/mempool_negative.c : New file.
* testsuite/parts-test-main.cc : New file.
* testsuite/event-private.cc : New file.
* testsuite/thunk.cc : New file.
* testsuite/event-defintiions.cc : New file.
* testsuite/event-private.h : New file.
* testsuite/parts-test.list : New file.
* testusite/register_pair_mt.cc : New file.
* testsuite/povray-derived.cc : New file.
* testsuite/event-main.cc : New file.
* testsuite/environment.cc : New file.
* testsuite/template-list2.cc : New file.
* testsuite/thunk_vtable_map_attack.cc : New file.
* testsuite/parts-test-extra-parts.cc : New file.
* testsuite/environment-fail-64.s : New file.
* testsuite/dlopen.cc : New file.
* testsuite/so.cc : New file.
* testsuite/temp_deriv3.cc : New file.
* testsuite/const_vtable.cc : New file.
* testsuite/mempool_positive.c : New file.
* testsuite/dup_name.cc : New file.
From-SVN: r201555
2013-08-07 11:38:59 +08:00
|
|
|
if test "$enable_vtable_verify" = yes; then
|
|
|
|
predep_objects_CXX="${predep_objects_CXX} ${glibcxx_builddir}/../libgcc/vtv_start.o"
|
|
|
|
postdep_objects_CXX="${postdep_objects_CXX} ${glibcxx_builddir}/../libgcc/vtv_end.o"
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
2012-09-20 10:10:22 +08:00
|
|
|
# libtool variables for C++ shared and position-independent compiles.
|
|
|
|
#
|
|
|
|
# Use glibcxx_lt_pic_flag to designate the automake variable
|
|
|
|
# used to encapsulate the default libtool approach to creating objects
|
|
|
|
# with position-independent code. Default: -prefer-pic.
|
|
|
|
#
|
|
|
|
# Use glibcxx_compiler_shared_flag to designate a compile-time flags for
|
|
|
|
# creating shared objects. Default: -D_GLIBCXX_SHARED.
|
|
|
|
#
|
|
|
|
# Use glibcxx_compiler_pic_flag to designate a compile-time flags for
|
|
|
|
# creating position-independent objects. This varies with the target
|
|
|
|
# hardware and operating system, but is often: -DPIC -fPIC.
|
|
|
|
if test "$enable_shared" = yes; then
|
|
|
|
glibcxx_lt_pic_flag="-prefer-pic"
|
|
|
|
glibcxx_compiler_pic_flag="$lt_prog_compiler_pic_CXX"
|
|
|
|
glibcxx_compiler_shared_flag="-D_GLIBCXX_SHARED"
|
|
|
|
|
|
|
|
else
|
|
|
|
glibcxx_lt_pic_flag=
|
|
|
|
glibcxx_compiler_pic_flag=
|
|
|
|
glibcxx_compiler_shared_flag=
|
|
|
|
fi
|
|
|
|
AC_SUBST(glibcxx_lt_pic_flag)
|
|
|
|
AC_SUBST(glibcxx_compiler_pic_flag)
|
|
|
|
AC_SUBST(glibcxx_compiler_shared_flag)
|
|
|
|
|
|
|
|
# Override the libtool's pic_flag and pic_mode.
|
|
|
|
# Do this step after AM_PROG_LIBTOOL, but before AC_OUTPUT.
|
|
|
|
# NB: this impacts --with-pic and --without-pic.
|
|
|
|
lt_prog_compiler_pic_CXX="$glibcxx_compiler_pic_flag $glibcxx_compiler_shared_flag"
|
|
|
|
pic_mode='default'
|
|
|
|
|
2010-01-16 22:46:57 +08:00
|
|
|
# Eliminate -lstdc++ addition to postdeps for cross compiles.
|
|
|
|
postdeps_CXX=`echo " $postdeps_CXX " | sed 's, -lstdc++ ,,g'`
|
|
|
|
|
acinclude.m4 (GLIBCXX_CONDITIONAL): New macro.
2003-08-27 Phil Edwards <pme@gcc.gnu.org>
* acinclude.m4 (GLIBCXX_CONDITIONAL): New macro. Wrap
AM_CONDITIONAL. Replace all calls to AM_CONDITIONAL with this one.
(GLIBCXX_ENABLE_HOSTED): New macro, sets new variable is_hosted,
used elsewhere in this file.
(GLIBCXX_EVALUATE_CONDITIONALS): New macro...
* configure.ac: ...called here to expand all conditionals.
* Makefile.am: Conditionalize SUBDIRS on GLIBCXX_HOSTED.
* include/Makefile.am: Remove redundant gxx_include_dir assignment.
(install-freestanding-headers): New target, a subset of
install-headers. Conditionalize install-data-local on GLIBCXX_HOSTED.
* aclocal.m4, configure, Makefile.in, include/Makefile.in,
libmath/Makefile.in, libsupc++/Makefile.in, po/Makefile.in,
src/Makefile.in, testsuite/Makefile.in: Regenerated.
From-SVN: r70854
2003-08-28 03:06:56 +08:00
|
|
|
# Possibly disable most of the library.
|
2005-03-24 13:45:45 +08:00
|
|
|
## TODO: Consider skipping unncessary tests altogether in this case, rather
|
acinclude.m4 (GLIBCXX_CONDITIONAL): New macro.
2003-08-27 Phil Edwards <pme@gcc.gnu.org>
* acinclude.m4 (GLIBCXX_CONDITIONAL): New macro. Wrap
AM_CONDITIONAL. Replace all calls to AM_CONDITIONAL with this one.
(GLIBCXX_ENABLE_HOSTED): New macro, sets new variable is_hosted,
used elsewhere in this file.
(GLIBCXX_EVALUATE_CONDITIONALS): New macro...
* configure.ac: ...called here to expand all conditionals.
* Makefile.am: Conditionalize SUBDIRS on GLIBCXX_HOSTED.
* include/Makefile.am: Remove redundant gxx_include_dir assignment.
(install-freestanding-headers): New target, a subset of
install-headers. Conditionalize install-data-local on GLIBCXX_HOSTED.
* aclocal.m4, configure, Makefile.in, include/Makefile.in,
libmath/Makefile.in, libsupc++/Makefile.in, po/Makefile.in,
src/Makefile.in, testsuite/Makefile.in: Regenerated.
From-SVN: r70854
2003-08-28 03:06:56 +08:00
|
|
|
## than just ignoring the results. Faster /and/ more correct, win win.
|
|
|
|
GLIBCXX_ENABLE_HOSTED
|
|
|
|
|
2012-09-10 07:08:48 +08:00
|
|
|
# Enable descriptive messages to standard output on termination.
|
|
|
|
GLIBCXX_ENABLE_VERBOSE
|
|
|
|
|
2007-08-24 00:16:41 +08:00
|
|
|
# Enable compiler support that doesn't require linking.
|
acinclude.m4 (GLIBCXX_CONDITIONAL): New macro.
2003-08-27 Phil Edwards <pme@gcc.gnu.org>
* acinclude.m4 (GLIBCXX_CONDITIONAL): New macro. Wrap
AM_CONDITIONAL. Replace all calls to AM_CONDITIONAL with this one.
(GLIBCXX_ENABLE_HOSTED): New macro, sets new variable is_hosted,
used elsewhere in this file.
(GLIBCXX_EVALUATE_CONDITIONALS): New macro...
* configure.ac: ...called here to expand all conditionals.
* Makefile.am: Conditionalize SUBDIRS on GLIBCXX_HOSTED.
* include/Makefile.am: Remove redundant gxx_include_dir assignment.
(install-freestanding-headers): New target, a subset of
install-headers. Conditionalize install-data-local on GLIBCXX_HOSTED.
* aclocal.m4, configure, Makefile.in, include/Makefile.in,
libmath/Makefile.in, libsupc++/Makefile.in, po/Makefile.in,
src/Makefile.in, testsuite/Makefile.in: Regenerated.
From-SVN: r70854
2003-08-28 03:06:56 +08:00
|
|
|
GLIBCXX_ENABLE_PCH($is_hosted)
|
2008-04-26 02:37:22 +08:00
|
|
|
GLIBCXX_ENABLE_THREADS
|
2009-01-05 07:02:02 +08:00
|
|
|
GLIBCXX_ENABLE_ATOMIC_BUILTINS
|
PR libstdc++/67843 set shared_ptr lock policy at build-time
This resolves a longstanding issue where the lock policy for shared_ptr
reference counting depends on compilation options when the header is
included, so that different -march options can cause ABI changes. For
example, objects compiled with -march=armv7 will use atomics to
synchronize reference counts, and objects compiled with -march=armv5t
will use a mutex. That means the shared_ptr control block will have a
different layout in different objects, causing ODR violations and
undefined behaviour. This was the root cause of PR libstdc++/42734 as
well as PR libstdc++/67843.
The solution is to decide on the lock policy at build time, when
libstdc++ is configured. The configure script checks for the
availability of the necessary atomic built-ins for the target and fixes
that choice permanently. Different -march flags used to compile user
code will not cause changes to the lock policy. This results in an ABI
change for certain compilations, but only where there was already an ABI
incompatibility between the libstdc++.so library and objects built with
an incompatible -march option. In general, this means a more stable ABI
that isn't silently altered when -march flags make addition atomic ops
available.
To force a target to use "atomic" or "mutex" the new configure option
--with-libstdcxx-lock-policy can be used.
In order to turn ODR violations into linker errors, the uses of
shared_ptr in filesystem directory iterators have been replaced
with __shared_ptr, and explicit instantiations are declared. This
ensures that object files using those types cannot link to libstdc++
libs unless they use the same lock policy.
PR libstdc++/67843
* acinclude.m4 (GLIBCXX_ENABLE_LOCK_POLICY): Add new macro
that defines _GLIBCXX_HAVE_ATOMIC_LOCK_POLICY.
* config.h.in: Regenerate.
* configure: Regenerate.
* configure.ac: Use GLIBCXX_ENABLE_LOCK_POLICY.
* doc/xml/manual/configure.xml: Document new configure option.
* include/bits/fs_dir.h (directory_iterator): Use __shared_ptr
instead of shared_ptr.
(recursive_directory_iterator): Likewise.
(__shared_ptr<_Dir>): Add explicit instantiation declaration.
(__shared_ptr<recursive_directory_iterator::_Dir_stack>): Likewise.
* include/bits/shared_ptr_base.h (__allocate_shared, __make_shared):
Add default template argument for _Lock_policy template parameter.
* include/ext/concurrence.h (__default_lock_policy): Check macro
_GLIBCXX_HAVE_ATOMIC_LOCK_POLICY instead of checking if the current
target supports the builtins for compare-and-swap.
* src/filesystem/std-dir.cc (__shared_ptr<_Dir>): Add explicit
instantiation definition.
(__shared_ptr<recursive_directory_iterator::_Dir_stack>): Likewise.
(directory_iterator, recursive_directory_iterator): Use __make_shared
instead of make_shared.
From-SVN: r266533
2018-11-28 07:25:56 +08:00
|
|
|
GLIBCXX_ENABLE_LOCK_POLICY
|
2009-10-06 01:42:00 +08:00
|
|
|
GLIBCXX_ENABLE_DECIMAL_FLOAT
|
2021-05-04 19:07:09 +08:00
|
|
|
GLIBCXX_ENABLE_FLOAT128
|
2014-11-19 04:20:53 +08:00
|
|
|
if test "$enable_float128" = yes; then
|
|
|
|
port_specific_symbol_files="$port_specific_symbol_files \$(top_srcdir)/config/abi/pre/float128.ver"
|
|
|
|
fi
|
2008-04-26 02:37:22 +08:00
|
|
|
|
2008-08-28 18:22:19 +08:00
|
|
|
# Checks for compiler support that doesn't require linking.
|
2008-04-26 02:37:22 +08:00
|
|
|
GLIBCXX_CHECK_COMPILER_FEATURES
|
2000-04-22 04:33:34 +08:00
|
|
|
|
2008-08-26 06:52:47 +08:00
|
|
|
# Enable all the variable C++ runtime options that don't require linking.
|
2003-07-05 12:05:45 +08:00
|
|
|
GLIBCXX_ENABLE_CSTDIO
|
|
|
|
GLIBCXX_ENABLE_CLOCALE
|
2004-03-13 14:54:25 +08:00
|
|
|
GLIBCXX_ENABLE_ALLOCATOR
|
2003-08-05 10:00:18 +08:00
|
|
|
GLIBCXX_ENABLE_CHEADERS($c_model) dnl c_model from configure.host
|
2003-07-05 12:05:45 +08:00
|
|
|
GLIBCXX_ENABLE_LONG_LONG([yes])
|
2005-03-24 13:45:45 +08:00
|
|
|
GLIBCXX_ENABLE_WCHAR_T([yes])
|
2006-04-16 17:06:46 +08:00
|
|
|
GLIBCXX_ENABLE_C99([yes])
|
2003-08-05 10:00:18 +08:00
|
|
|
GLIBCXX_ENABLE_CONCEPT_CHECKS([no])
|
2022-01-20 03:29:42 +08:00
|
|
|
GLIBCXX_ENABLE_DEBUG_FLAGS(["-g3 -O0 -D_GLIBCXX_ASSERTIONS"])
|
2003-07-05 12:05:45 +08:00
|
|
|
GLIBCXX_ENABLE_DEBUG([no])
|
2008-04-25 07:30:10 +08:00
|
|
|
GLIBCXX_ENABLE_PARALLEL([yes])
|
2003-08-05 10:00:18 +08:00
|
|
|
GLIBCXX_ENABLE_CXX_FLAGS
|
2004-09-28 16:58:35 +08:00
|
|
|
GLIBCXX_ENABLE_FULLY_DYNAMIC_STRING([no])
|
2011-03-05 05:51:56 +08:00
|
|
|
GLIBCXX_ENABLE_EXTERN_TEMPLATE([yes])
|
2012-02-16 03:56:07 +08:00
|
|
|
GLIBCXX_ENABLE_PYTHON
|
2018-07-17 21:18:47 +08:00
|
|
|
GLIBCXX_ENABLE_WERROR([no])
|
Commit the vtable verification feature.
Commit the vtable verification feature. This feature is designed to
detect, at run time, if/when the vtable pointer in a C++ object has
been corrupted, before allowing virtual calls through that pointer.
If pointer corruption is detected, execution of the program is halted.
libstdc++-v3 ChangeLog:
2013-08-06 Caroline Tice <cmtice@google.com>
* fragment.am: Add XTEMPLATE_FLAGS.
* configure.ac: Add definitions for --enable-vtable-verify.
* acinclude.m4: Add --enable-vtable-verify and
--disable-vtable-verify; define --enable-vtable-verify; define
VTV_CXXFLAGS, VTV_PCH_CXXFLAGS and VTV_CXXLINKFLAGS.
* config/abi/pre/gnu.ver: Export symbols for vtable verification.
* libsupc++/Makefile.am: Define vtv_sources and add it to
libsupc___la_SOURCES and libsupc__convenience_la_SOURCES.
* libsupc++/vtv_stubs.cc: New file.
* include/Makefile.am: Add VTV_PCH_CXXFLAGS to PCHFLAGS.
* src/Makefile.am: Add VTV_CXXFLAGS to AM_CXXFLAGS; add
VTV_CXXLINKFLAGS to CXXLINK.
* src/c++98/Makefile.am: Comment out XTEMPLATE_FLAGS; add VTV_CXXFLAGS
to AM_CXXFLAGS; add VTV_CXXXLINKFLAGS to CXXLINK.
* src/C++11/Makefile.am: Ditto.
* doc/xml/manual/configure.xml: Add entry for --enable-vtable-verify.
* scripts/testsuite_flags.in: Add cxxvtvflags to Usage; cause
cxxvtvflags to use VTV_CXXFLAGS and VTV_CXXLINKFLAGS.
* testsuite/lib/libstdc++.exp: Add cxxvtvflags; add code to locate
libvtv if --enable-vtable-verify was used; set cxxvtvflags; add
cxxvtvflags to cxx_final.
* testsuite/18_support/bad_exception/23591_thread-1.c: Add
-fvtable-verify=none to compiler flags.
* testsuite/17_intro/freestanding.cc: Add -fvtable-verify=none
to compiler flags.
* configure: Regenerated.
* Makefile.in: Regenerated.
* python/Makefile.in: Regenerated.
* include/Makefile.in: Regenerated.
* libsupc++/Makefile.in: Regenerated.
* config.h.in: Regenerated.
* po/Makefile.in: Regenerated.
* src/Makefile.in: Regenerated.
* src/c++98/Makefile.in: Regenerated.
* src/c++11/Makefile.in: Regenerated.
* doc/Makefile.in: Regenerated.
* testsuite/Makefile.in: Regenerated.
top level ChangeLog:
2013-08-06 Caroline Tice <cmtice@google.com>
* configure.ac: Add target-libvtv to target_libraries; disable libvtv
on non-linux systems; add target-libvtv to noconfigdirs; add
libsupc++/.libs to C++ library search paths.
* configure: Regenerated.
* Makefile.def: Add libvtv to target_modules; make libvtv depend on
libstdc++ and libgcc.
* Makefile.in: Regenerated.
include/ChangeLog:
2013-08-06 Caroline Tice <cmtice@google.com>
* vtv-change-permission.h: New file.
contrib/ChangeLog:
2013-08-06 Caroline Tice4 <cmtice@google.com>
* gcc_update: Add libvtv files.
libgcc/ChangeLog:
2013-08-06 Caroline Tice <cmtice@google.com>
config.host (extra_parts): Add vtv_start.o, vtv_end.o
vtv_start_preinit.o and vtv_end_preinit.o.
configure.ac: Add code to check/set enable_vtable_verify.
Makefile.in: Add rules to build vtv_*.o, if enable_vtable_verify is
true.
vtv_start_preinit.c: New file.
vtv_end_preinit.c: New file.
vtv_start.c: New file.
vtv_end.c: New file.
configure: Regenerated.
gcc/ChangeLog:
2013-08-06 Caroline Tice <cmtice@google.com>
* gcc.c (VTABLE_VERIFICATION_SPEC): New definition.
(LINK_COMMAND_SPEC): Add VTABLE_VERIFICATION_SPEC.
* tree-pass.h: Add pass_vtable_verify.
* varasm.c (assemble_variable): Add code to properly set the comdat
section and name for the .vtable_map_vars section.
(assemble_vtyv_preinit_initializer): New function.
(default_sectin_type_flags): Make sure .vtable_map_vars section has
LINK_ONCE flag.
* output.h: Add function decl for assemble_vtv_preinit_initializer.
* vtable-verify.c: New file.
* vtable-verify.h: New file.
* flag-types.h (enum vtv_priority): Defintions for flag_vtable_verify
initialiation levels.
* timevar.def (TV_VTABLE_VERIFICATION): New definition.
* passes.def: Insert pass_vtable_verify.
* aclocal.m4: Reorder includes.
* doc/invoke.texi: Add documentation for the flags -fvtable-verify=,
-fvtv-debug and -fvtv-counts.
* config/gnu-user.h (GNU_USER_TARGET_STARTFILE_SPEC): Add vtv_start*.o,
as appropriate, if -fvtable-verify=... is used.
(GNU_USER_TARGET_ENDFILE_SPEC): Add vtv_end*.o as appropriate, if
-fvtable-verify=... is used.
* Makefile.in (OBJS): Add vtable-verify.o to list.
(vtable-verify.o): Add new build rule.
(GTFILES): Add vtable-verify.c to list.
* common.opt (fvtable-verify=): New flag.
(vtv_priority): Values for fvtable-verify= flag.
(fvtv-counts): New flag.
(fvtv-debug): New flag.
* tree.h (save_vtable_map_decl): New extern function decl.
gcc/cp/ChangeLog:
2013-08-06 Caroline Tice <cmtice@google.com>
* Make-lang.in (*CXX_AND_OBJCXX_OBJS): Add vtable-class-hierarchy.o to
list.
(vtable-class-hierarchy.o): Add build rule.
* cp-tree.h (vtv_start_verification_constructor_init_function): New
extern function decl.
(vtv_finish_verification_constructor_init_function): New extern
function decl.
(build_vtbl_address): New extern function decl.
(get_mangled_vtable_map_var_name): New extern function decl.
(vtv_compute_class_hierarchy_transitive_closure): New extern function
decl.
(vtv_generate_init_routine): New extern function decl.
(vtv_save_class_info): New extern function decl.
(vtv_recover_class_info): New extern function decl.
(vtv_build_vtable_verify_fndecl): New extern function decl.
* class.c (finish_struct_1): Add call to vtv_save_class_info if
flag_vtable_verify is true.
* config-lang.in: Add vtable-class-hierarchy.c to gtfiles list.
* vtable-class-hierarchy.c: New file.
* mangle.c (get_mangled_vtable_map_var_name): New function.
* decl2.c (start_objects): Update function comment.
(cp_write_global_declarations): Call vtv_recover_class_info,
vtv_compute_class_hierarchy_transitive_closure and
vtv_build_vtable_verify_fndecl, before calling
finalize_compilation_unit, and call vtv_generate_init_rount after, IFF
flag_vtable_verify is true.
(vtv_start_verification_constructor_init_function): New function.
(vtv_finish_verification_constructor_init_function): New function.
* init.c (build_vtbl_address): Remove static qualifier from function.
libvtv/ChangeLog:
2013-08-06 Caroline Tice <cmtice@google.com>
Initial check-in of new vtable verification feature.
* configure.ac : New file.
* acinclude.m4 : New file.
* Makefile.am : New file.
* aclocal.m4 : New file.
* configure.tgt : New file.
* configure: New file (generated).
* Makefile.in: New file (generated).
* vtv_set.h : New file.
* vtv_utils.cc : New file.
* vtv_utils.h : New file.
* vtv_malloc.cc : New file.
* vtv_rts.cc : New file.
* vtv_malloc.h : New file.
* vtv_rts.h : New file.
* vtv_fail.cc : New file.
* vtv_fail.h : New file.
* vtv_map.h : New file.
* scripts/run-testsuite.sh : New file.
* scripts/sum-vtv-counts.c : New file.
* testsuite/parts-test-main.h : New file.
* testusite/dataentry.cc : New file.
* testsuite/temp_deriv.cc : New file.
* testsuite/register_pair.cc : New file.
* testsuite/virtual_inheritance.cc : New file.
* testsuite/field-test.cc : New file.
* testsuite/nested_vcall_test.cc : New file.
* testsuite/template-list-iostream.cc : New file.
* testsuite/register_pair_inserts.cc : New file.
* testsuite/register_pair_inserts_mt.cc : New file.
* testsuite/event.list : New file.
* testsuite/parts-test-extra-parts-views.cc : New file.
* testsuite/parts-test-extra-parts-views.h : New file.
* testsuite/environment-fail-32.s : New file.
* testsuite/parts-test-extra-parts.h : New file.
* testsuite/temp_deriv2.cc : New file.
* testsuite/dlopen_mt.cc : New file.
* testsuite/event.h : New file.
* testsuite/template-list.cc : New file.
* testsuite/replace-fail.cc : New file.
* testsuite/Makefile.am : New file.
* testsuite/Makefile.in: New file (generated).
* testsuite/mempool_negative.c : New file.
* testsuite/parts-test-main.cc : New file.
* testsuite/event-private.cc : New file.
* testsuite/thunk.cc : New file.
* testsuite/event-defintiions.cc : New file.
* testsuite/event-private.h : New file.
* testsuite/parts-test.list : New file.
* testusite/register_pair_mt.cc : New file.
* testsuite/povray-derived.cc : New file.
* testsuite/event-main.cc : New file.
* testsuite/environment.cc : New file.
* testsuite/template-list2.cc : New file.
* testsuite/thunk_vtable_map_attack.cc : New file.
* testsuite/parts-test-extra-parts.cc : New file.
* testsuite/environment-fail-64.s : New file.
* testsuite/dlopen.cc : New file.
* testsuite/so.cc : New file.
* testsuite/temp_deriv3.cc : New file.
* testsuite/const_vtable.cc : New file.
* testsuite/mempool_positive.c : New file.
* testsuite/dup_name.cc : New file.
From-SVN: r201555
2013-08-07 11:38:59 +08:00
|
|
|
GLIBCXX_ENABLE_VTABLE_VERIFY([no])
|
2000-04-22 04:33:34 +08:00
|
|
|
|
2008-08-28 18:22:19 +08:00
|
|
|
# Checks for operating systems support that doesn't require linking.
|
2012-03-02 15:13:55 +08:00
|
|
|
GLIBCXX_CHECK_STDIO_PROTO
|
2015-11-24 21:15:43 +08:00
|
|
|
GLIBCXX_CHECK_MATH11_PROTO
|
2015-09-04 19:13:34 +08:00
|
|
|
GLIBCXX_CHECK_UCHAR_H
|
2002-11-21 15:34:30 +08:00
|
|
|
|
2008-08-17 18:19:34 +08:00
|
|
|
# For LFS support.
|
|
|
|
GLIBCXX_CHECK_LFS
|
|
|
|
|
|
|
|
# For showmanyc_helper().
|
|
|
|
AC_CHECK_HEADERS(sys/ioctl.h sys/filio.h)
|
|
|
|
GLIBCXX_CHECK_POLL
|
|
|
|
GLIBCXX_CHECK_S_ISREG_OR_S_IFREG
|
|
|
|
|
|
|
|
# For xsputn_2().
|
|
|
|
AC_CHECK_HEADERS(sys/uio.h)
|
|
|
|
GLIBCXX_CHECK_WRITEV
|
|
|
|
|
2013-11-01 01:12:35 +08:00
|
|
|
# Check for fenv.h and complex.h before GLIBCXX_CHECK_C99_TR1
|
|
|
|
# so that the check is done with the C compiler (not C++).
|
|
|
|
# Checking with C++ can break a canadian cross build if either
|
|
|
|
# file does not exist in C but does in C++.
|
|
|
|
AC_CHECK_HEADERS(fenv.h complex.h)
|
|
|
|
|
2008-08-12 18:41:26 +08:00
|
|
|
# For C99 support to TR1.
|
|
|
|
GLIBCXX_CHECK_C99_TR1
|
|
|
|
|
2010-07-27 18:36:50 +08:00
|
|
|
# For the EOF, SEEK_CUR, and SEEK_END integer constants.
|
|
|
|
GLIBCXX_COMPUTE_STDIO_INTEGER_CONSTANTS
|
2002-11-21 15:34:30 +08:00
|
|
|
|
2008-08-24 08:25:22 +08:00
|
|
|
# For gettimeofday support.
|
|
|
|
GLIBCXX_CHECK_GETTIMEOFDAY
|
|
|
|
|
2009-01-15 22:01:04 +08:00
|
|
|
# For clock_gettime, nanosleep and sched_yield support.
|
2013-05-22 16:12:45 +08:00
|
|
|
GLIBCXX_ENABLE_LIBSTDCXX_TIME
|
2008-08-24 08:25:22 +08:00
|
|
|
|
2014-01-24 05:17:15 +08:00
|
|
|
# Check for tmpnam which is obsolescent in POSIX.1-2008
|
|
|
|
GLIBCXX_CHECK_TMPNAM
|
|
|
|
|
2019-09-05 06:43:29 +08:00
|
|
|
# For pthread_cond_clockwait
|
|
|
|
GLIBCXX_CHECK_PTHREAD_COND_CLOCKWAIT
|
|
|
|
|
2019-12-03 00:23:01 +08:00
|
|
|
# For pthread_mutex_clocklock
|
|
|
|
GLIBCXX_CHECK_PTHREAD_MUTEX_CLOCKLOCK
|
|
|
|
|
2019-12-03 00:23:10 +08:00
|
|
|
# For pthread_rwlock_clockrdlock and pthread_rwlock_clockwrlock
|
|
|
|
GLIBCXX_CHECK_PTHREAD_RWLOCK_CLOCKLOCK
|
|
|
|
|
2008-08-17 20:30:55 +08:00
|
|
|
AC_LC_MESSAGES
|
|
|
|
|
2011-05-29 01:27:01 +08:00
|
|
|
# For hardware_concurrency
|
|
|
|
AC_CHECK_HEADERS(sys/sysinfo.h)
|
|
|
|
GLIBCXX_CHECK_GET_NPROCS
|
|
|
|
AC_CHECK_HEADERS(unistd.h)
|
|
|
|
GLIBCXX_CHECK_SC_NPROCESSORS_ONLN
|
2011-11-07 21:45:03 +08:00
|
|
|
GLIBCXX_CHECK_SC_NPROC_ONLN
|
|
|
|
GLIBCXX_CHECK_PTHREADS_NUM_PROCESSORS_NP
|
|
|
|
GLIBCXX_CHECK_SYSCTL_HW_NCPU
|
2013-04-10 04:55:17 +08:00
|
|
|
GLIBCXX_CHECK_SDT_H
|
2011-05-29 01:27:01 +08:00
|
|
|
|
2008-08-17 18:19:34 +08:00
|
|
|
# Check for available headers.
|
2010-01-10 16:25:23 +08:00
|
|
|
AC_CHECK_HEADERS([endian.h execinfo.h float.h fp.h ieeefp.h inttypes.h \
|
|
|
|
locale.h machine/endian.h machine/param.h nan.h stdint.h stdlib.h string.h \
|
2008-08-17 18:19:34 +08:00
|
|
|
strings.h sys/ipc.h sys/isa_defs.h sys/machine.h sys/param.h \
|
2013-04-10 04:55:17 +08:00
|
|
|
sys/resource.h sys/sem.h sys/stat.h sys/time.h sys/types.h unistd.h \
|
2018-01-19 03:52:16 +08:00
|
|
|
wchar.h wctype.h linux/types.h])
|
|
|
|
|
|
|
|
AC_CHECK_HEADERS([linux/random.h], [], [],
|
|
|
|
[[#ifdef HAVE_LINUX_TYPES_H
|
|
|
|
# include <linux/types.h>
|
|
|
|
#endif
|
|
|
|
]])
|
2008-08-17 18:19:34 +08:00
|
|
|
|
libstdc++: Add std::from_chars for floating-point types
This adds the missing std::from_chars overloads for floating-point
types, as required for C++17 conformance.
The implementation is a hack and not intended to be used in the long
term. Rather than parsing the string directly, this determines the
initial portion of the string that matches the pattern determined by the
chars_format parameter, then creates a NTBS to be parsed by strtod (or
strtold or strtof).
Because creating a NTBS requires allocating memory, but std::from_chars
is noexcept, we need to be careful to minimise allocation. Even after
being careful, allocation failure is still possible, and so a
non-conforming std::no_more_memory error code might be returned.
Because strtod et al depend on the current locale, but std::from_chars
does not, we change the current thread's locale to "C" using newlocale
and uselocale before calling strtod, and restore it afterwards.
Because strtod doesn't have the equivalent of a std::chars_format
parameter, it has to examine the input to determine the format in use,
even though the std::from_chars code has already parsed it once (or
twice for large input strings!)
By replacing the use of strtod we could avoid allocation, avoid changing
locale, and use optimised code paths specific to each std::chars_format
case. We would also get more portable behaviour, rather than depending
on the presence of uselocale, and on any bugs or quirks of the target
libc's strtod. Replacing strtod is a project for a later date.
libstdc++-v3/ChangeLog:
* acinclude.m4 (libtool_VERSION): Bump version.
* config.h.in: Regenerate.
* config/abi/pre/gnu.ver: Add GLIBCXX_3.4.29 version and new
exports.
* config/os/gnu-linux/ldbl-extra.ver: Add _GLIBCXX_LDBL_3.4.29
version and new export.
* configure: Regenerate.
* configure.ac: Check for <xlocale.h> and uselocale.
* crossconfig.m4: Add macro or checks for uselocale.
* include/std/charconv (from_chars): Declare overloads for
float, double, and long double.
* src/c++17/Makefile.am: Add new file.
* src/c++17/Makefile.in: Regenerate.
* src/c++17/floating_from_chars.cc: New file.
(from_chars): Define for float, double, and long double.
* testsuite/20_util/from_chars/1_c++20_neg.cc: Prune extra
diagnostics caused by new overloads.
* testsuite/20_util/from_chars/1_neg.cc: Likewise.
* testsuite/20_util/from_chars/2.cc: Check leading '+'.
* testsuite/20_util/from_chars/4.cc: New test.
* testsuite/20_util/from_chars/5.cc: New test.
* testsuite/util/testsuite_abi.cc: Add new symbol versions.
2020-07-21 06:49:27 +08:00
|
|
|
AC_CHECK_HEADERS([xlocale.h])
|
|
|
|
|
2008-04-25 07:30:10 +08:00
|
|
|
# Only do link tests if native. Else, hardcode.
|
2023-06-07 22:54:17 +08:00
|
|
|
if $GLIBCXX_IS_NATIVE; then
|
2000-04-22 04:33:34 +08:00
|
|
|
|
acinclude.m4 (GLIBCXX_EXPORT_INCLUDES): Remove LIBMATH_INCLUDES and LIBSUPCXX_INCLUDES.
2003-08-17 Phil Edwards <pme@gcc.gnu.org>
* acinclude.m4 (GLIBCXX_EXPORT_INCLUDES): Remove LIBMATH_INCLUDES
and LIBSUPCXX_INCLUDES. Re-purpose TOPLEVEL_INCLUDES to refer to
things from the top level.
* configure.ac (GLIBCXX_IS_NATIVE): Determine earlier and re-order.
Comment out the conditionals for CANADIAN and GLIBCXX_BUILD_LIBMATH
(currently unused). Strip the fake-VPATH shell fragment from
automake-generated rules, if present.
* linkage.m4: Add comment.
* fragment.am: New file, containing factored-out common settings.
(AM_CPPFLAGS): Absorb the deprecated INCLUDES variable contents.
* Makefile.am: Include fragment.am. Remove common variables.
* include/Makefile.am: Likewise.
* libmath/Makefile.am: Likewise.
* libsupc++/Makefile.am: Likewise.
* po/Makefile.am: Likewise. Print rules during check.
* src/Makefile.am: Likewise.
* testsuite/Makefile.am: Likewise.
* aclocal.m4, configure, Makefile.in, include/Makefile.in,
libmath/Makefile.in, libsupc++/Makefile.in, po/Makefile.in,
src/Makefile.in, testsuite/Makefile.in: Regenerate.
From-SVN: r70522
2003-08-18 04:23:12 +08:00
|
|
|
# We can do more elaborate tests that assume a working linker.
|
|
|
|
CANADIAN=no
|
|
|
|
|
|
|
|
GLIBCXX_CHECK_LINKER_FEATURES
|
|
|
|
GLIBCXX_CHECK_MATH_SUPPORT
|
|
|
|
GLIBCXX_CHECK_STDLIB_SUPPORT
|
|
|
|
|
2018-10-16 22:49:29 +08:00
|
|
|
# For /dev/random and /dev/urandom for std::random_device.
|
|
|
|
GLIBCXX_CHECK_DEV_RANDOM
|
2006-06-10 07:37:28 +08:00
|
|
|
|
2005-11-22 14:54:08 +08:00
|
|
|
# For TLS support.
|
|
|
|
GCC_CHECK_TLS
|
|
|
|
|
2017-01-04 23:41:19 +08:00
|
|
|
AC_CHECK_FUNCS(__cxa_thread_atexit_impl __cxa_thread_atexit)
|
2016-09-10 05:22:15 +08:00
|
|
|
AC_CHECK_FUNCS(aligned_alloc posix_memalign memalign _aligned_malloc)
|
Add support for opening file streams from wide character strings
C++17 added new overloads to <fstream> class templates to support
opening files from wide character strings "on systems where
filesystem::path::value_type is not char". This patch adds those
overloads conditional on _wfopen being available, and enables them for
pre-C++17 modes as well.
Add support for opening file streams from wide character strings.
* config/io/basic_file_stdio.cc [_GLIBCXX_HAVE__WFOPEN]
(__basic_file<char>::open(const wchar_t*, ios_base::openmode)):
Define new overload.
* config/io/basic_file_stdio.h [_GLIBCXX_HAVE__WFOPEN]
(__basic_file<char>::open(const wchar_t*, ios_base::openmode)):
Declare new overload.
* configure.ac: Check for _wfopen.
* crossconfig.m4: Likewise.
* configure: Regenerate.
* config.h.in: Regenerate.
* include/bits/fstream.tcc [_GLIBCXX_HAVE__WFOPEN]
(basic_filebuf<C,T>::open(const wchar_t*, ios_base::openmode)):
Define new overload.
* include/std/fstream [_GLIBCXX_HAVE__WFOPEN]
(basic_filebuf<C,T>::open(const wchar_t*, ios_base::openmode)):
Declare new overload.
[_GLIBCXX_HAVE__WFOPEN]
(basic_ifstream<C,T>::basic_ifstream(const wchar_t*, openmode))
(basic_ifstream<C,T>::basic_open(const wchar_t*, openmode))
(basic_ofstream<C,T>::basic_ifstream(const wchar_t*, openmode))
(basic_ofstream<C,T>::basic_open(const wchar_t*, openmode))
(basic_fstream<C,T>::basic_ifstream(const wchar_t*, openmode))
(basic_fstream<C,T>::basic_open(const wchar_t*, openmode)): Define
new overloads.
* testsuite/27_io/basic_filebuf/open/wchar_t/1.cc: New.
* testsuite/27_io/basic_ifstream/cons/wchar_t/1.cc: New.
* testsuite/27_io/basic_ifstream/open/wchar_t/1.cc: New.
* testsuite/27_io/basic_ofstream/cons/wchar_t/1.cc: New.
* testsuite/27_io/basic_ofstream/open/wchar_t/1.cc: New.
* testsuite/27_io/basic_fstream/cons/wchar_t/1.cc: New.
* testsuite/27_io/basic_fstream/open/wchar_t/1.cc: New.
From-SVN: r260479
2018-05-22 01:18:35 +08:00
|
|
|
AC_CHECK_FUNCS(_wfopen)
|
2021-07-30 20:56:14 +08:00
|
|
|
AC_CHECK_FUNCS(secure_getenv)
|
2013-02-26 12:39:04 +08:00
|
|
|
|
2019-02-14 22:10:25 +08:00
|
|
|
# C11 functions for C++17 library
|
|
|
|
AC_CHECK_FUNCS(timespec_get)
|
|
|
|
|
2019-03-12 00:28:11 +08:00
|
|
|
# For Networking TS.
|
|
|
|
AC_CHECK_FUNCS(sockatmark)
|
|
|
|
|
libstdc++: Add std::from_chars for floating-point types
This adds the missing std::from_chars overloads for floating-point
types, as required for C++17 conformance.
The implementation is a hack and not intended to be used in the long
term. Rather than parsing the string directly, this determines the
initial portion of the string that matches the pattern determined by the
chars_format parameter, then creates a NTBS to be parsed by strtod (or
strtold or strtof).
Because creating a NTBS requires allocating memory, but std::from_chars
is noexcept, we need to be careful to minimise allocation. Even after
being careful, allocation failure is still possible, and so a
non-conforming std::no_more_memory error code might be returned.
Because strtod et al depend on the current locale, but std::from_chars
does not, we change the current thread's locale to "C" using newlocale
and uselocale before calling strtod, and restore it afterwards.
Because strtod doesn't have the equivalent of a std::chars_format
parameter, it has to examine the input to determine the format in use,
even though the std::from_chars code has already parsed it once (or
twice for large input strings!)
By replacing the use of strtod we could avoid allocation, avoid changing
locale, and use optimised code paths specific to each std::chars_format
case. We would also get more portable behaviour, rather than depending
on the presence of uselocale, and on any bugs or quirks of the target
libc's strtod. Replacing strtod is a project for a later date.
libstdc++-v3/ChangeLog:
* acinclude.m4 (libtool_VERSION): Bump version.
* config.h.in: Regenerate.
* config/abi/pre/gnu.ver: Add GLIBCXX_3.4.29 version and new
exports.
* config/os/gnu-linux/ldbl-extra.ver: Add _GLIBCXX_LDBL_3.4.29
version and new export.
* configure: Regenerate.
* configure.ac: Check for <xlocale.h> and uselocale.
* crossconfig.m4: Add macro or checks for uselocale.
* include/std/charconv (from_chars): Declare overloads for
float, double, and long double.
* src/c++17/Makefile.am: Add new file.
* src/c++17/Makefile.in: Regenerate.
* src/c++17/floating_from_chars.cc: New file.
(from_chars): Define for float, double, and long double.
* testsuite/20_util/from_chars/1_c++20_neg.cc: Prune extra
diagnostics caused by new overloads.
* testsuite/20_util/from_chars/1_neg.cc: Likewise.
* testsuite/20_util/from_chars/2.cc: Check leading '+'.
* testsuite/20_util/from_chars/4.cc: New test.
* testsuite/20_util/from_chars/5.cc: New test.
* testsuite/util/testsuite_abi.cc: Add new symbol versions.
2020-07-21 06:49:27 +08:00
|
|
|
# Non-standard functions used by C++17 std::from_chars
|
|
|
|
AC_CHECK_FUNCS(uselocale)
|
|
|
|
|
2007-02-14 19:07:17 +08:00
|
|
|
# For iconv support.
|
|
|
|
AM_ICONV
|
|
|
|
|
2023-06-07 22:54:17 +08:00
|
|
|
else
|
2000-12-13 17:25:44 +08:00
|
|
|
|
2002-06-19 03:07:12 +08:00
|
|
|
# This lets us hard-code the functionality we know we'll have in the cross
|
|
|
|
# target environment. "Let" is a sugar-coated word placed on an especially
|
|
|
|
# dull and tedious hack, actually.
|
|
|
|
#
|
2003-07-05 12:05:45 +08:00
|
|
|
# Here's why GLIBCXX_CHECK_MATH_SUPPORT, and other autoconf macros
|
2002-06-19 03:07:12 +08:00
|
|
|
# that involve linking, can't be used:
|
|
|
|
# "cannot open sim-crt0.o"
|
|
|
|
# "cannot open crt0.o"
|
|
|
|
# etc. All this is because there currently exists no unified, consistent
|
|
|
|
# way for top level CC information to be passed down to target directories:
|
|
|
|
# newlib includes, newlib linking info, libgloss versus newlib crt0.o, etc.
|
|
|
|
# When all of that is done, all of this hokey, excessive AC_DEFINE junk for
|
|
|
|
# crosses can be removed.
|
|
|
|
|
|
|
|
# If Canadian cross, then don't pick up tools from the build directory.
|
acinclude.m4 (GLIBCXX_EXPORT_INCLUDES): Remove LIBMATH_INCLUDES and LIBSUPCXX_INCLUDES.
2003-08-17 Phil Edwards <pme@gcc.gnu.org>
* acinclude.m4 (GLIBCXX_EXPORT_INCLUDES): Remove LIBMATH_INCLUDES
and LIBSUPCXX_INCLUDES. Re-purpose TOPLEVEL_INCLUDES to refer to
things from the top level.
* configure.ac (GLIBCXX_IS_NATIVE): Determine earlier and re-order.
Comment out the conditionals for CANADIAN and GLIBCXX_BUILD_LIBMATH
(currently unused). Strip the fake-VPATH shell fragment from
automake-generated rules, if present.
* linkage.m4: Add comment.
* fragment.am: New file, containing factored-out common settings.
(AM_CPPFLAGS): Absorb the deprecated INCLUDES variable contents.
* Makefile.am: Include fragment.am. Remove common variables.
* include/Makefile.am: Likewise.
* libmath/Makefile.am: Likewise.
* libsupc++/Makefile.am: Likewise.
* po/Makefile.am: Likewise. Print rules during check.
* src/Makefile.am: Likewise.
* testsuite/Makefile.am: Likewise.
* aclocal.m4, configure, Makefile.in, include/Makefile.in,
libmath/Makefile.in, libsupc++/Makefile.in, po/Makefile.in,
src/Makefile.in, testsuite/Makefile.in: Regenerate.
From-SVN: r70522
2003-08-18 04:23:12 +08:00
|
|
|
# Used only in GLIBCXX_EXPORT_INCLUDES.
|
2003-08-05 10:00:18 +08:00
|
|
|
if test -n "$with_cross_host" &&
|
2003-08-28 08:24:52 +08:00
|
|
|
test x"$build_alias" != x"$with_cross_host" &&
|
2003-08-05 10:00:18 +08:00
|
|
|
test x"$build" != x"$target";
|
|
|
|
then
|
2000-04-22 04:33:34 +08:00
|
|
|
CANADIAN=yes
|
|
|
|
else
|
|
|
|
CANADIAN=no
|
|
|
|
fi
|
|
|
|
|
2001-12-04 06:28:57 +08:00
|
|
|
# Construct crosses by hand, eliminating bits that need ld...
|
2003-07-05 12:05:45 +08:00
|
|
|
# GLIBCXX_CHECK_MATH_SUPPORT
|
2001-12-04 06:28:57 +08:00
|
|
|
|
2003-08-05 10:00:18 +08:00
|
|
|
# First, test for "known" system libraries. We may be using newlib even
|
|
|
|
# on a hosted environment.
|
2023-06-07 22:54:17 +08:00
|
|
|
if test "x${with_newlib}" = "xyes"; then
|
2003-08-05 10:00:18 +08:00
|
|
|
os_include_dir="os/newlib"
|
|
|
|
AC_DEFINE(HAVE_HYPOT)
|
|
|
|
|
|
|
|
# GLIBCXX_CHECK_STDLIB_SUPPORT
|
run_doxygen: Allow doxygen 1.7.1 again.
2010-12-31 Benjamin Kosnik <bkoz@redhat.com>
* scripts/run_doxygen: Allow doxygen 1.7.1 again.
* doc/xml/manual/build_hacking.xml: Update.
* doc/xml/images/confdeps.dot: Same.
* doc/xml/images/confdeps.png: Same.
* configure.ac: Define BUILD_INFO, BUILD_XML, BUILD_HTML,
BUILD_MAN, BUILD_PDF, BUILD_EPUB conditionally.
* Makefile.am (xml, html, pdf, man, info, pd, dvi, epub): Define,
and install rules.
* doc/Makefile.am: Same. Add stamp rules.
(doc-epub-docbook): Add.
(stamp-xml-single-docbook): Make set too.
* configure: Regenerate.
* Makefile.in: Same.
* doc/Makefile.in: Same.
* include/Makefile.in: Same.
* libsupc++/Makefile.in: Same.
* po/Makefile.in: Same.
* python/Makefile.in: Same.
* src/Makefile.in: Same.
* testsuite/Makefile.in: Same.
* aclocal.m4: Same.
2010-12-31 Benjamin Kosnik <bkoz@redhat.com>
* doc/doxygen/user.cfg.in: Disable PDF_HYPERLINKS.
From-SVN: r168382
2011-01-01 06:20:22 +08:00
|
|
|
AC_DEFINE(HAVE_STRTOF)
|
2003-08-05 10:00:18 +08:00
|
|
|
|
|
|
|
AC_DEFINE(HAVE_ACOSF)
|
|
|
|
AC_DEFINE(HAVE_ASINF)
|
|
|
|
AC_DEFINE(HAVE_ATAN2F)
|
|
|
|
AC_DEFINE(HAVE_ATANF)
|
|
|
|
AC_DEFINE(HAVE_CEILF)
|
|
|
|
AC_DEFINE(HAVE_COSF)
|
|
|
|
AC_DEFINE(HAVE_COSHF)
|
|
|
|
AC_DEFINE(HAVE_EXPF)
|
|
|
|
AC_DEFINE(HAVE_FABSF)
|
|
|
|
AC_DEFINE(HAVE_FLOORF)
|
|
|
|
AC_DEFINE(HAVE_FMODF)
|
|
|
|
AC_DEFINE(HAVE_FREXPF)
|
libstdc++-v3: do not duplicate some math functions when using newlib
When running the libstdc++ testsuite on AArch64 RTEMS, we noticed
that about 25 tests are failing during the link, due to the "sqrtl"
function being defined twice:
- once inside RTEMS' libm;
- once inside our libstdc++.
One test that fails, for instance, would be 26_numerics/complex/13450.cc.
In comparing libm and libstdc++, we found that libstc++ also
duplicates "hypotf", and "hypotl".
For "sqrtl" and "hypotl", the symbosl come a unit called
from math_stubs_long_double.cc, while "hypotf" comes from
the equivalent unit for the float version, called math_stubs_float.cc.
Those units are always compiled in libstdc++ and provide our own
version of various math routines when those are missing from
the target system. The definition of those symbols is predicated
on the existance of various macros provided by c++config.h, which
themselves are predicated by the corresponding HAVE_xxx macros
in config.h.
One key element behind what's happening, here, is that the target
uses newlib, and therefore GCC was configured --with-newlib.
The section of libstdc++v3's configure script that handles which math
functions are available has a newlib-specific section, and that
section provides a hardcoded list of symbols.
For "hypotf", this commit fixes the issue by doing the same
as for the other routines already declared in that section.
I verified by inspection in the newlib code that this function
should always be present, so hardcoding it in our configure
script should not be an issue.
For the math routines handling doubles ("sqrtl" and "hypotl"),
however, I do not believe we can assume that newlib's libm
will always provide them. Therefore, this commit fixes that
part of the issue by ading a compile-check for "sqrtl" and "hypotl".
And while at it, we also include checks for all the other math
functions that math_stubs_long_double.cc re-implements, allowing
us to be resilient to future newlib enhancements adding support
for more functions.
libstdc++-v3/ChangeLog:
* configure.ac ["x${with_newlib}" = "xyes"]: Define
HAVE_HYPOTF. Add compile-checks for various long double
math functions as well.
* configure: Regenerate.
2023-06-16 14:23:44 +08:00
|
|
|
AC_DEFINE(HAVE_HYPOTF)
|
2003-08-05 10:00:18 +08:00
|
|
|
AC_DEFINE(HAVE_LDEXPF)
|
|
|
|
AC_DEFINE(HAVE_LOG10F)
|
|
|
|
AC_DEFINE(HAVE_LOGF)
|
|
|
|
AC_DEFINE(HAVE_MODFF)
|
|
|
|
AC_DEFINE(HAVE_POWF)
|
|
|
|
AC_DEFINE(HAVE_SINF)
|
|
|
|
AC_DEFINE(HAVE_SINHF)
|
|
|
|
AC_DEFINE(HAVE_SQRTF)
|
|
|
|
AC_DEFINE(HAVE_TANF)
|
|
|
|
AC_DEFINE(HAVE_TANHF)
|
2003-12-30 03:26:16 +08:00
|
|
|
|
libstdc++-v3: do not duplicate some math functions when using newlib
When running the libstdc++ testsuite on AArch64 RTEMS, we noticed
that about 25 tests are failing during the link, due to the "sqrtl"
function being defined twice:
- once inside RTEMS' libm;
- once inside our libstdc++.
One test that fails, for instance, would be 26_numerics/complex/13450.cc.
In comparing libm and libstdc++, we found that libstc++ also
duplicates "hypotf", and "hypotl".
For "sqrtl" and "hypotl", the symbosl come a unit called
from math_stubs_long_double.cc, while "hypotf" comes from
the equivalent unit for the float version, called math_stubs_float.cc.
Those units are always compiled in libstdc++ and provide our own
version of various math routines when those are missing from
the target system. The definition of those symbols is predicated
on the existance of various macros provided by c++config.h, which
themselves are predicated by the corresponding HAVE_xxx macros
in config.h.
One key element behind what's happening, here, is that the target
uses newlib, and therefore GCC was configured --with-newlib.
The section of libstdc++v3's configure script that handles which math
functions are available has a newlib-specific section, and that
section provides a hardcoded list of symbols.
For "hypotf", this commit fixes the issue by doing the same
as for the other routines already declared in that section.
I verified by inspection in the newlib code that this function
should always be present, so hardcoding it in our configure
script should not be an issue.
For the math routines handling doubles ("sqrtl" and "hypotl"),
however, I do not believe we can assume that newlib's libm
will always provide them. Therefore, this commit fixes that
part of the issue by ading a compile-check for "sqrtl" and "hypotl".
And while at it, we also include checks for all the other math
functions that math_stubs_long_double.cc re-implements, allowing
us to be resilient to future newlib enhancements adding support
for more functions.
libstdc++-v3/ChangeLog:
* configure.ac ["x${with_newlib}" = "xyes"]: Define
HAVE_HYPOTF. Add compile-checks for various long double
math functions as well.
* configure: Regenerate.
2023-06-16 14:23:44 +08:00
|
|
|
dnl # Support for the long version of some math libraries depends on
|
|
|
|
dnl # architecture and newlib version. So test for their availability
|
|
|
|
dnl # rather than hardcoding that information.
|
|
|
|
GLIBCXX_CHECK_MATH_DECLS([
|
|
|
|
acosl asinl atan2l atanl ceill coshl cosl expl fabsl floorl fmodl
|
|
|
|
frexpl hypotl ldexpl log10l logl modfl powl sinhl sinl sqrtl
|
|
|
|
tanhl tanl])
|
|
|
|
|
2024-08-14 01:23:43 +08:00
|
|
|
# Support for iconv in newlib is configurable.
|
|
|
|
AC_TRY_COMPILE([#include <newlib.h>], [
|
|
|
|
#ifndef _ICONV_ENABLED
|
|
|
|
#error
|
|
|
|
#endif], [ac_newlib_iconv_enabled=yes], [ac_newlib_iconv_enabled=no])
|
|
|
|
if test "$ac_newlib_iconv_enabled" = yes; then
|
|
|
|
AC_DEFINE(HAVE_ICONV)
|
|
|
|
fi
|
|
|
|
|
2016-09-23 22:34:51 +08:00
|
|
|
AC_DEFINE(HAVE_MEMALIGN)
|
Enable some features for RTEMS in libstdc++
Remove RTEMS support from crossconfig.m4 since this code is not used due to
"with_newlib" being "yes".
libstdc++-v3/ChangeLog:
* configure: Regnerate.
* configure.ac (newlib, *-rtems*): Enable TLS support for all RTEMS
targets except bfin, lm32, mips, moxie, or1k, and v850.
For all RTEMS targets, define HAVE_ALIGNED_ALLOC, HAVE_AT_QUICK_EXIT,
HAVE_LINK, HAVE_POLL, HAVE_QUICK_EXIT, HAVE_READLINK, HAVE_SETENV,
HAVE_SLEEP, HAVE_SOCKATMARK, HAVE_STRERROR_L, HAVE_SYMLINK,
HAVE_TRUNCATE, and HAVE_USLEEP.
* crossconfig.m4 (*-rtems*): Remove.
2022-06-08 14:44:36 +08:00
|
|
|
|
|
|
|
case "${target}" in
|
|
|
|
*-rtems*)
|
|
|
|
case "${target}" in
|
|
|
|
bfin* | lm32* | mips* | moxie* | or1k* | v850*)
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
AC_DEFINE(HAVE_TLS)
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
AC_DEFINE(HAVE_ALIGNED_ALLOC)
|
|
|
|
AC_DEFINE(HAVE_AT_QUICK_EXIT)
|
|
|
|
AC_DEFINE(HAVE_LINK)
|
|
|
|
AC_DEFINE(HAVE_QUICK_EXIT)
|
|
|
|
AC_DEFINE(HAVE_READLINK)
|
|
|
|
AC_DEFINE(HAVE_SETENV)
|
|
|
|
AC_DEFINE(HAVE_SLEEP)
|
|
|
|
AC_DEFINE(HAVE_SOCKATMARK)
|
|
|
|
AC_DEFINE(HAVE_STRERROR_L)
|
|
|
|
AC_DEFINE(HAVE_SYMLINK)
|
|
|
|
AC_DEFINE(HAVE_TRUNCATE)
|
|
|
|
AC_DEFINE(HAVE_USLEEP)
|
2024-05-30 15:01:15 +08:00
|
|
|
|
|
|
|
# These functions are defined in librtemscpu. We don't use
|
|
|
|
# -qrtems during configure, so we don't link that in, and fail
|
|
|
|
# to find them.
|
|
|
|
glibcxx_cv_chdir=yes
|
|
|
|
glibcxx_cv_chmod=yes
|
|
|
|
glibcxx_cv_mkdir=yes
|
Enable some features for RTEMS in libstdc++
Remove RTEMS support from crossconfig.m4 since this code is not used due to
"with_newlib" being "yes".
libstdc++-v3/ChangeLog:
* configure: Regnerate.
* configure.ac (newlib, *-rtems*): Enable TLS support for all RTEMS
targets except bfin, lm32, mips, moxie, or1k, and v850.
For all RTEMS targets, define HAVE_ALIGNED_ALLOC, HAVE_AT_QUICK_EXIT,
HAVE_LINK, HAVE_POLL, HAVE_QUICK_EXIT, HAVE_READLINK, HAVE_SETENV,
HAVE_SLEEP, HAVE_SOCKATMARK, HAVE_STRERROR_L, HAVE_SYMLINK,
HAVE_TRUNCATE, and HAVE_USLEEP.
* crossconfig.m4 (*-rtems*): Remove.
2022-06-08 14:44:36 +08:00
|
|
|
;;
|
|
|
|
esac
|
2023-06-07 22:54:17 +08:00
|
|
|
elif test "x$with_headers" != "xno"; then
|
2005-04-06 08:05:51 +08:00
|
|
|
GLIBCXX_CROSSCONFIG
|
2023-06-07 22:54:17 +08:00
|
|
|
fi
|
2001-12-04 06:28:57 +08:00
|
|
|
|
|
|
|
# At some point, we should differentiate between architectures
|
|
|
|
# like x86, which have long double versions, and alpha/powerpc/etc.,
|
|
|
|
# which don't. For the time being, punt.
|
2023-06-07 22:54:17 +08:00
|
|
|
if test x"long_double_math_on_this_cpu" = x"yes"; then
|
2001-12-04 06:28:57 +08:00
|
|
|
AC_DEFINE(HAVE_ACOSL)
|
|
|
|
AC_DEFINE(HAVE_ASINL)
|
|
|
|
AC_DEFINE(HAVE_ATAN2L)
|
|
|
|
AC_DEFINE(HAVE_ATANL)
|
|
|
|
AC_DEFINE(HAVE_CEILL)
|
|
|
|
AC_DEFINE(HAVE_COSL)
|
|
|
|
AC_DEFINE(HAVE_COSHL)
|
|
|
|
AC_DEFINE(HAVE_EXPL)
|
|
|
|
AC_DEFINE(HAVE_FABSL)
|
|
|
|
AC_DEFINE(HAVE_FLOORL)
|
|
|
|
AC_DEFINE(HAVE_FMODL)
|
|
|
|
AC_DEFINE(HAVE_FREXPL)
|
|
|
|
AC_DEFINE(HAVE_LDEXPL)
|
|
|
|
AC_DEFINE(HAVE_LOG10L)
|
|
|
|
AC_DEFINE(HAVE_LOGL)
|
|
|
|
AC_DEFINE(HAVE_MODFL)
|
|
|
|
AC_DEFINE(HAVE_POWL)
|
|
|
|
AC_DEFINE(HAVE_SINCOSL)
|
|
|
|
AC_DEFINE(HAVE_SINL)
|
|
|
|
AC_DEFINE(HAVE_SINHL)
|
|
|
|
AC_DEFINE(HAVE_SQRTL)
|
|
|
|
AC_DEFINE(HAVE_TANL)
|
|
|
|
AC_DEFINE(HAVE_TANHL)
|
2023-06-07 22:54:17 +08:00
|
|
|
fi
|
|
|
|
fi
|
2000-04-22 04:33:34 +08:00
|
|
|
|
2008-11-13 05:35:46 +08:00
|
|
|
# Check for _Unwind_GetIPInfo.
|
|
|
|
GCC_CHECK_UNWIND_GETIPINFO
|
|
|
|
|
2008-01-09 00:14:49 +08:00
|
|
|
GCC_LINUX_FUTEX([AC_DEFINE(HAVE_LINUX_FUTEX, 1, [Define if futex syscall is available.])])
|
|
|
|
|
2003-07-05 12:05:45 +08:00
|
|
|
GLIBCXX_ENABLE_SYMVERS([yes])
|
2011-09-27 08:02:54 +08:00
|
|
|
AC_SUBST(libtool_VERSION)
|
|
|
|
|
2011-11-08 22:07:27 +08:00
|
|
|
GLIBCXX_ENABLE_LIBSTDCXX_VISIBILITY([yes])
|
2001-08-07 11:38:33 +08:00
|
|
|
|
New std::string implementation.
* acinclude.m4 (GLIBCXX_ENABLE_LIBSTDCXX_CXX11_ABI): Remove.
(GLIBCXX_ENABLE_LIBSTDCXX_DUAL_ABI, GLIBCXX_DEFAULT_ABI): Add.
* configure.ac: Use new macros.
* configure: Regenerate.
* Makefile.in: Regenerate.
* doc/Makefile.in: Regenerate.
* libsupc++/Makefile.in: Regenerate.
* po/Makefile.in: Regenerate.
* src/Makefile.in: Regenerate.
* testsuite/Makefile.in: Regenerate.
* include/Makefile.am: Set _GLIBCXX_USE_DUAL_ABI.
* include/Makefile.in: Regenerate.
* config/abi/pre/gnu.ver: Export symbols related to new std::string.
Tighten old patterns to not match new symbols.
* config/locale/generic/monetary_members.cc: Guard some definitions
to not compile with new ABI.
* config/locale/gnu/monetary_members.cc: Likewise.
* config/locale/gnu/numeric_members.cc: Prevent double-free.
* config/os/gnu-linux/ldbl-extra.ver: Add new __gnu_cxx_ldbl128
exports. Tighten old patterns.
* doc/xml/manual/configure.xml: Document new configure options.
* doc/html/*: Regenerate.
* include/bits/basic_string.h (__cxx11::basic_string): Define new
non-reference-counted implementation in inline namespace __cxx11.
(stoi, stol, stoll, stof, stod, stold, to_string): Conditionally use
inline namespace.
(literals::string_literals::operator"): Conditionally use abi-tag.
* include/bits/basic_string.tcc (__cxx11::basic_string): Define.
* include/bits/c++config: Define _GLIBCXX_USE_DUAL_ABI and
LDBL_CXX11_ABI namespace macros.
* include/bits/locale_classes.h (locale::name()): Use abi_tag when
new ABI is in use.
(locale::_S_twinned_facets): New static member.
(locale::facet::__shim): Declare new type.
(locale::_facet::_M_sso_shim, locale::_facet::_M_cow_shim): New
functions for creating shims.
(locale::_Impl::_M_facet_unchecked): New member function for use
during construction.
(locale::_Impl::_M_init_extra): New member functions to create second
version of some facets.
(collate, collate_byname): Use abi_tag when new ABI is in use.
* include/bits/locale_facets.h: Add _GLIBCXX_NUM_CXX11_FACETS macro.
(numpunct, numpunct_byname): Use __cxx11 namespace.
(num_get::_M_extract_float, num_get::_M_extract_int): Use abi_tag
when new ABI is in use.
(num_get::__do_get, num_put::__do_put): Do not declare long double
compat functions for new ABI.
* include/bits/locale_facets.tcc (num_get, num_put): Use abi_tag on
definitions.
(numpunct, numpunct_byname): Qualify explicit instantiations.
* include/bits/locale_facets_nonio.h (time_get, time_get_byname,
moneypunct, moneypunct_byname, money_get, money_put, messages,
messages_byname): Use new inline namespace macros.
(money_get::__do_get, money_put::__do_put): Do not declare long
double compat functions for new ABI.
* include/bits/locale_facets_nonio.tcc (money_get, money_put): Use
new namespace macros.
(money_get::__do_get, money_put::__do_put): Do not define for new ABI.
* include/bits/localefwd.h (numpunct, numpunct_byname, collate,
collate_byname, time_get, time_get_byname, moneypunct,
moneypunct_byname, money_get, money_put, messages, messages_byname):
Use new namespace macros.
* include/bits/regex.h: Use inline namespace macros.
* include/bits/stl_list.h (_List_base, list): Use inline namespace
instead of abi-tag.
* include/bits/stringfwd.h (basic_string): Use namespace macros.
* include/std/iosfwd (basic_stringbuf, basic_istringstream,
basic_ostringstream, basic_stringstream): Likewise.
* include/std/sstream: Likewise.
(basic_stringbuf::__xfer_bufptrs): Update streambuf pointers on move.
* include/std/stdexcept (__cow_string, __sso_string): New types for
indirectly using std::string with either ABI.
(logic_error, runtime_error): Replace std::string member with
__cow_string when new ABI is in use. Declare non-inline copy
constructor and assignment operator. Declare const char* constructors.
(domain_error, invalid_argument, length_error, out_of_range,
range_error, overflow_error, underflow_error): Declare const char*
constructors.
* include/std/system_error (error_category): Replace with new
definition in inline namespace _V2.
(error_code::message, error_condition::message): Use abi_tag on
functions returning std::string.
* python/libstdcxx/v6/printers.py (StdStringPrinter): Handle new ABI.
* src/c++11/Makefile.am: Add new files.
* src/c++11/Makefile.in: Regenerate.
* src/c++11/compatibility-c++0x.cc: Compile with old std::string ABI.
Define old error_category symbols.
* src/c++11/cow-fstream-inst.cc: New. Instantiate fstream members
using old std::string ABI.
* src/c++11/cow-locale_init.cc (locale::_Impl::_M_init_extra): Define.
* src/c++11/cow-shim_facets.cc: Define shim facets using old ABI.
* src/c++11/cow-sstream-inst.cc: Instantiate stringstreams using old
std::string ABI.
* src/c++11/cow-stdexcept.cc: Define new constructors and assignment
operators.
(__cow_string, error_category::_M_message): Define.
* src/c++11/cow-string-inst.cc: Explicit instantiations using old
std::string. Include src/c++98/istream-string.cc.
* src/c++11/cow-wstring-inst.cc: Explicit instantiations using old
std::wstring.
* src/c++11/cxx11-hash_tr1.cc: Explicit instantiations using new
string.
* src/c++11/cxx11-ios_failure.cc: Add sanity check.
* src/c++11/cxx11-locale-inst.cc: Instantiate facets using new
std::string.
* src/c++11/cxx11-shim_facets.cc: Define shim facets using new ABI.
* src/c++11/cxx11-stdexcept.cc: Define constructors taking new
std::string.
* src/c++11/cxx11-wlocale-inst.cc: Instantiate facets using
new std::wstring.
* src/c++11/fstream-inst.cc: Compile with new ABI.
* src/c++11/functexcept.cc: Compile with old ABI.
* src/c++11/random.cc: Compile with new ABI.
* src/c++11/sstream-inst.cc: Compile with new ABI.
* src/c++11/string-inst.cc: Explicit instantiations for new string.
* src/c++11/system_error.cc (__sso_string, error_category::_M_message):
Define.
* src/c++11/wstring-inst.cc: Compile with new ABI.
* src/c++98/Makefile.am: Compile some host files twice for old and
new std::string. Add new files.
* src/c++98/Makefile.in: Regenerate.
* src/c++98/compatibility-ldbl.cc: Compile with old ABI.
* src/c++98/compatibility.cc: Likewise.
* src/c++98/concept-inst.cc: Likewise.
* src/c++98/hash_tr1.cc: Likewise.
* src/c++98/istream-string.cc: New file defining functions that
work with istream and std::string moved from ...
* src/c++98/istream.cc: ... here.
* src/c++98/cow-istream-string.cc: Recompile istream-string.cc with
old ABI.
* src/c++98/locale-inst.cc: Adjust facet instantiations to work for
either ABI.
* src/c++98/locale.cc (locale::_M_install_facet,
locale::_M_install_cache): Handle twinned facets.
* src/c++98/locale-facets.cc: Compile with old std::string ABI.
(__verify_grouping): Define new overload and old std::string version.
* src/c++98/locale_init.cc: Initialize twinned facets.
* src/c++98/localename.cc: Likewise.
* src/c++98/misc-inst.cc: Instantiate C++98-only std::string members.
(__verify_grouping): Define new std::string version.
* src/c++98/stdexcept.cc: Compile with old std::string ABI.
* src/c++98/wlocale-inst.cc: Likewise.
* testsuite/18_support/50594.cc: Adjust to work with SSO strings.
* testsuite/21_strings/basic_string/capacity/1.cc: Likewise.
* testsuite/21_strings/basic_string/capacity/char/1.cc: Likewise.
* testsuite/21_strings/basic_string/capacity/char/18654.cc: Likewise.
* testsuite/21_strings/basic_string/capacity/char/2.cc: Likewise.
* testsuite/21_strings/basic_string/capacity/wchar_t/1.cc: Likewise.
* testsuite/21_strings/basic_string/capacity/wchar_t/18654.cc:
Likewise.
* testsuite/21_strings/headers/string/synopsis.cc: Use inline
namespace macros.
* testsuite/23_containers/headers/list/synopsis.cc: Likewise.
* testsuite/27_io/basic_ios/copyfmt/char/1.cc: Set dg-options so
correct exception type can be caught.
* testsuite/27_io/basic_ios/exceptions/char/1.cc: Likewise.
* testsuite/27_io/basic_istream/extractors_arithmetic/char/
exceptions_failbit.cc: Likewise.
* testsuite/27_io/basic_istream/extractors_arithmetic/wchar_t/
exceptions_failbit.cc: Likewise.
* testsuite/27_io/basic_istream/extractors_other/char/
exceptions_null.cc: Likewise.
* testsuite/27_io/basic_istream/extractors_other/wchar_t/
exceptions_null.cc: Likewise.
* testsuite/27_io/basic_istream/sentry/char/12297.cc: Likewise.
* testsuite/27_io/basic_istream/sentry/wchar_t/12297.cc: Likewise.
* testsuite/27_io/basic_ostream/inserters_other/char/
exceptions_null.cc: Likewise.
* testsuite/27_io/basic_ostream/inserters_other/wchar_t/
exceptions_null.cc: Likewise.
* testsuite/27_io/ios_base/storage/2.cc: Likewise.
* testsuite/27_io/ios_base/failure/cxx11.cc: Disable for old ABI.
* testsuite/ext/profile/mutex_extensions_neg.cc: Adjust dg-error.
* testsuite/libstdc++-prettyprinters/libfundts.cc: Use old ABI.
* testsuite/libstdc++-prettyprinters/simple.cc: Likewise.
* testsuite/libstdc++-prettyprinters/simple11.cc: Likewise.
* testsuite/libstdc++-prettyprinters/whatis.cc: Likewise.
* testsuite/util/exception/safety.h: Adjust member function types
for new std::string.
* testsuite/util/testsuite_abi.cc: Add new version and ignore
__float128 symbols in __cxx11 namespace.
From-SVN: r218964
2014-12-20 02:16:39 +08:00
|
|
|
GLIBCXX_ENABLE_LIBSTDCXX_DUAL_ABI([yes])
|
|
|
|
GLIBCXX_DEFAULT_ABI
|
re PR libstdc++/49561 ([C++0x] std::list::size complexity)
PR libstdc++/49561
* acinclude.m4 (GLIBCXX_ENABLE_LIBSTDCXX_CXX11_ABI): Define.
* configure.ac: Use GLIBCXX_ENABLE_LIBSTDCXX_CXX11_ABI.
* configure: Regenerate.
* include/Makefile.am (stamp-cxx11-abi): New target.
(c++config.h): Set _GLIBCXX_USE_CXX11_ABI macro.
* include/Makefile.in: Regenerate.
* include/bits/c++config: Add _GLIBCXX_USE_CXX11_ABI placeholder and
define _GLIBCXX_DEFAULT_ABI_TAG.
* include/bits/list.tcc (list::emplace(const_iterator, _Args&...)):
Increment size.
(list::emplace(const_iterator, const value_type&)): Likewise.
(list::merge(list&), list::merge(list&, _StrictWeakOrdering)): Adjust
list sizes.
* include/bits/stl_list.h (_List_base, list): Add ABI tag macro.
(_List_base::_M_size): New data member in cxx11 ABI mode.
(_List_base::_S_distance(_List_node_base*, _List_node_base*)): New
function.
(_List_base::_M_get_size(), _List_base::_M_set_size(size_t),
_List_base::_M_inc_size(size_t), _List_base::_M_dec_size(size_t),
_List_base::_M_distance, _List_base::_M_node_count): New functions for
accessing list size correctly for the ABI mode.
(_List_base::_List_base(_List_base&&)): Copy size and reset source.
(_List_base::_M_init()): Initialize size member.
(list::size()): Use _List_base::_M_node_count.
(list::swap(list&)): Swap sizes.
(list::splice(iterator, list&)): Update sizes.
(list::splice(iterator, list&, iterator)): Likewise.
(list::insert(iterator, const value_type&)): Update size.
(list::insert(iterator, _Args&&...)): Likewise.
(list::_M_erase(iterator)): Likewise.
* testsuite/23_containers/list/requirements/dr438/assign_neg.cc:
Adjust.
* testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc:
Adjust.
* testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc:
Adjust.
* testsuite/23_containers/list/requirements/dr438/insert_neg.cc:
Adjust.
* testsuite/ext/profile/mutex_extensions_neg.cc: Adjust.
From-SVN: r216094
2014-10-10 23:33:57 +08:00
|
|
|
|
configure.ac (_GLIBCXX_LONG_DOUBLE_COMPAT): New check.
2006-02-07 Jakub Jelinek <jakub@redhat.com>
Benjamin Kosnik <bkoz@redhat.com>
* configure.ac (_GLIBCXX_LONG_DOUBLE_COMPAT): New check.
If true, set also port_specific_symbol_files and create
as_symver_specs.
(GLIBCXX_LDBL_COMPAT): New GLIBCXX_CONDITIONAL.
* configure: Rebuilt.
* config.h.in: Rebuilt.
* config/os/gnu-linux/ldbl-extra.ver: New file.
* config/abi/pre/gnu.ver: Make sure no __float128 symbols are
exported.
* include/bits/c++config (_GLIBCXX_LONG_DOUBLE_COMPAT,
_GLIBCXX_LDBL_NAMESPACE, _GLIBCXX_BEGIN_LDBL_NAMESPACE,
_GLIBCXX_END_LDBL_NAMESPACE): Define.
* include/bits/localefwd.h: Use them to conditionally scope facets.
* include/bits/locale_facets.h: Surround std::{money,num}_{get,put}
with _GLIBCXX_BEGIN_LDBL_NAMESPACE and _GLIBCXX_END_LDBL_NAMESPACE.
Surround std::{money,num}_{get,put}
with _GLIBCXX_BEGIN_LDBL_NAMESPACE and _GLIBCXX_END_LDBL_NAMESPACE.
[_GLIBCXX_LONG_DOUBLE_COMPAT] (std::money_get): Add __do_get method.
[_GLIBCXX_LONG_DOUBLE_COMPAT] (std::money_put): Add __do_put method.
[_GLIBCXX_LONG_DOUBLE_COMPAT] (std::num_get): Add __do_get method.
[_GLIBCXX_LONG_DOUBLE_COMPAT] (std::num_put): Add __do_put method.
* include/bits/locale_facets.tcc: Surround std::{money,num}_{get,put}
with _GLIBCXX_BEGIN_LDBL_NAMESPACE and _GLIBCXX_END_LDBL_NAMESPACE.
(std::money_get::__do_get, std::money_put::__do_put,
std::num_get::__do_get, std::num_put::__do_put): New
specializations.
* include/Makefile.am: Conditionally define
_GLIBCXX_LONG_DOUBLE_COMPAT in c++config.
* include/Makefile.in: Regenerate.
* src/locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT] (_GLIBCXX_LOC_ID,
_GLIBCXX_SYNC_ID): Define, use them.
* src/compatibility-ldbl.cc: New file.
* src/complex_io.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Add compatibility
symbols.
* src/limits.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/locale-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/locale-misc-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/istream-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/ostream-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/wlocale-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/compatibility.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* config/locale/generic/c_locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]:
Likewise.
* config/locale/gnu/c_locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]:
Likewise.
* src/Makefile.am (libstdc++-symbol.ver): Append instead of
insert in the middle if port specific symbol file requests it.
(ldbl_compat_sources): New variable.
(sources): Use it.
(compatibility-ldbl.lo, compatibility-ldbl.o): New rules.
* src/Makefile.in: Rebuilt.
* testsuite/testsuite_abi.cc: Recognize GLIBCXX_LDBL_3.4,
GLIBCXX_LDBL_3.4.7, CXXABI_LDBL_1.3.
Co-Authored-By: Benjamin Kosnik <bkoz@redhat.com>
From-SVN: r110725
2006-02-08 06:23:58 +08:00
|
|
|
ac_ldbl_compat=no
|
libstdc++: Add C++ runtime support for new 128-bit long double format
This adds support for the new __ieee128 long double format on
powerpc64le targets.
Most of the complexity comes from wanting a single libstdc++.so library
that contains the symbols needed by code compiled with both
-mabi=ibmlongdouble and -mabi=ieeelongdouble (and not forgetting
-mlong-double-64 as well!)
In a few places this just requires an extra overload, for example
std::from_chars has to be overloaded for both forms of long double.
That can be done in a single translation unit that defines overloads
for 'long double' and also '__ieee128', so that user code including
<charconv> will be able to link to a definition for either type of long
double. Those are the easy cases.
The difficult parts are (as for the std::string ABI transition) the I/O
and locale facets. In order to be able to write either form of long
double to an ostream such as std::cout we need the locale to contain a
std::num_put facet that can handle both forms. The same approach is
taken as was already done for supporting 64-bit long double and 128-bit
long double: adding extra overloads of do_put to the facet class. On
targets where the new long double code is enabled, the facets that are
registered in the locale at program startup have additional overloads so
that they can work with any long double type. Where this fails to work
is if user code installs its own facet, which will probably not have the
additional overloads and so will only be able to output one or the other
type. In practice the number of users expecting to be able to use their
own locale facets in code using a mix of -mabi=ibmlongdouble and
-mabi=ieeelongdouble is probably close to zero.
libstdc++-v3/ChangeLog:
* Makefile.in: Regenerate.
* config.h.in: Regenerate.
* config/abi/pre/gnu.ver: Make patterns less greedy.
* config/os/gnu-linux/ldbl-ieee128-extra.ver: New file with patterns
for IEEE128 long double symbols.
* configure: Regenerate.
* configure.ac: Enable alternative 128-bit long double format on
powerpc64*-*-linux*.
* doc/Makefile.in: Regenerate.
* fragment.am: Regenerate.
* include/Makefile.am: Set _GLIBCXX_LONG_DOUBLE_ALT128_COMPAT.
* include/Makefile.in: Regenerate.
* include/bits/c++config: Define inline namespace for new long
double symbols. Don't define _GLIBCXX_USE_FLOAT128 when it's the
same type as long double.
* include/bits/locale_classes.h [_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT]
(locale::_Impl::_M_init_extra_ldbl128): Declare new member function.
* include/bits/locale_facets.h (_GLIBCXX_NUM_FACETS): Simplify by
only counting narrow character facets.
(_GLIBCXX_NUM_CXX11_FACETS): Likewise.
(_GLIBCXX_NUM_LBDL_ALT128_FACETS): New.
[_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT] (num_get::__do_get): Define
vtable placeholder for __ibm128 long double type.
[_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT && __LONG_DOUBLE_IEEE128__]
(num_get::__do_get): Declare vtable placeholder for __ibm128 long
double type.
[_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT && __LONG_DOUBLE_IEEE128__]
(num_put::__do_put): Likewise.
* include/bits/locale_facets.tcc
[_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT && __LONG_DOUBLE_IEEE128__]
(num_get::__do_get, num_put::__do_put): Define.
* include/bits/locale_facets_nonio.h
[_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT && __LONG_DOUBLE_IEEE128__]
(money_get::__do_get): Declare vtable placeholder for __ibm128 long
double type.
[_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT && __LONG_DOUBLE_IEEE128__]
(money_put::__do_put): Likewise.
* include/bits/locale_facets_nonio.tcc
[_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT && __LONG_DOUBLE_IEEE128__]
(money_get::__do_get, money_put::__do_put): Define.
* include/ext/numeric_traits.h [_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT]
(__numeric_traits<__ibm128>, __numeric_traits<__ieee128>): Define.
* libsupc++/Makefile.in: Regenerate.
* po/Makefile.in: Regenerate.
* python/Makefile.in: Regenerate.
* src/Makefile.am: Add compatibility-ldbl-alt128.cc and
compatibility-ldbl-alt128-cxx11.cc sources and recipes for objects.
* src/Makefile.in: Regenerate.
* src/c++11/Makefile.in: Regenerate.
* src/c++11/compatibility-ldbl-alt128-cxx11.cc: New file defining
symbols using the old 128-bit long double format, for the cxx11 ABI.
* src/c++11/compatibility-ldbl-alt128.cc: Likewise, for the
gcc4-compatible ABI.
* src/c++11/compatibility-ldbl-facets-aliases.h: New header for long
double compat aliases.
* src/c++11/cow-locale_init.cc: Add comment.
* src/c++11/cxx11-locale-inst.cc: Define C and C_is_char
unconditionally.
* src/c++11/cxx11-wlocale-inst.cc: Add sanity check. Include
locale-inst.cc directly, not via cxx11-locale-inst.cc.
* src/c++11/locale-inst-monetary.h: New header for monetary
category instantiations.
* src/c++11/locale-inst-numeric.h: New header for numeric category
instantiations.
* src/c++11/locale-inst.cc: Include new headers for monetary,
numeric, and long double definitions.
* src/c++11/wlocale-inst.cc: Remove long double compat aliases that
are defined in new header now.
* src/c++17/Makefile.am: Use -mabi=ibmlongdouble for
floating_from_chars.cc.
* src/c++17/Makefile.in: Regenerate.
* src/c++17/floating_from_chars.cc (from_chars_impl): Add
if-constexpr branch for __ieee128.
(from_chars): Overload for __ieee128.
* src/c++20/Makefile.in: Regenerate.
* src/c++98/Makefile.in: Regenerate.
* src/c++98/locale_init.cc (num_facets): Adjust calculation.
(locale::_Impl::_Impl(size_t)): Call _M_init_extra_ldbl128.
* src/c++98/localename.cc (num_facets): Adjust calculation.
(locale::_Impl::_Impl(const char*, size_t)): Call
_M_init_extra_ldbl128.
* src/filesystem/Makefile.in: Regenerate.
* testsuite/Makefile.in: Regenerate.
* testsuite/util/testsuite_abi.cc: Add new symbol versions.
Allow new symbols to be added to GLIBCXX_IEEE128_3.4.29 and
CXXABI_IEEE128_1.3.13 too.
* testsuite/26_numerics/complex/abi_tag.cc: Add u9__ieee128 to
regex matching expected symbols.
2020-12-17 07:25:01 +08:00
|
|
|
ac_ldbl_alt128_compat=no
|
|
|
|
ac_ldbl_ieee128_default=no
|
2016-09-29 06:03:17 +08:00
|
|
|
LONG_DOUBLE_COMPAT_FLAGS="-mlong-double-64"
|
libstdc++: Add C++ runtime support for new 128-bit long double format
This adds support for the new __ieee128 long double format on
powerpc64le targets.
Most of the complexity comes from wanting a single libstdc++.so library
that contains the symbols needed by code compiled with both
-mabi=ibmlongdouble and -mabi=ieeelongdouble (and not forgetting
-mlong-double-64 as well!)
In a few places this just requires an extra overload, for example
std::from_chars has to be overloaded for both forms of long double.
That can be done in a single translation unit that defines overloads
for 'long double' and also '__ieee128', so that user code including
<charconv> will be able to link to a definition for either type of long
double. Those are the easy cases.
The difficult parts are (as for the std::string ABI transition) the I/O
and locale facets. In order to be able to write either form of long
double to an ostream such as std::cout we need the locale to contain a
std::num_put facet that can handle both forms. The same approach is
taken as was already done for supporting 64-bit long double and 128-bit
long double: adding extra overloads of do_put to the facet class. On
targets where the new long double code is enabled, the facets that are
registered in the locale at program startup have additional overloads so
that they can work with any long double type. Where this fails to work
is if user code installs its own facet, which will probably not have the
additional overloads and so will only be able to output one or the other
type. In practice the number of users expecting to be able to use their
own locale facets in code using a mix of -mabi=ibmlongdouble and
-mabi=ieeelongdouble is probably close to zero.
libstdc++-v3/ChangeLog:
* Makefile.in: Regenerate.
* config.h.in: Regenerate.
* config/abi/pre/gnu.ver: Make patterns less greedy.
* config/os/gnu-linux/ldbl-ieee128-extra.ver: New file with patterns
for IEEE128 long double symbols.
* configure: Regenerate.
* configure.ac: Enable alternative 128-bit long double format on
powerpc64*-*-linux*.
* doc/Makefile.in: Regenerate.
* fragment.am: Regenerate.
* include/Makefile.am: Set _GLIBCXX_LONG_DOUBLE_ALT128_COMPAT.
* include/Makefile.in: Regenerate.
* include/bits/c++config: Define inline namespace for new long
double symbols. Don't define _GLIBCXX_USE_FLOAT128 when it's the
same type as long double.
* include/bits/locale_classes.h [_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT]
(locale::_Impl::_M_init_extra_ldbl128): Declare new member function.
* include/bits/locale_facets.h (_GLIBCXX_NUM_FACETS): Simplify by
only counting narrow character facets.
(_GLIBCXX_NUM_CXX11_FACETS): Likewise.
(_GLIBCXX_NUM_LBDL_ALT128_FACETS): New.
[_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT] (num_get::__do_get): Define
vtable placeholder for __ibm128 long double type.
[_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT && __LONG_DOUBLE_IEEE128__]
(num_get::__do_get): Declare vtable placeholder for __ibm128 long
double type.
[_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT && __LONG_DOUBLE_IEEE128__]
(num_put::__do_put): Likewise.
* include/bits/locale_facets.tcc
[_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT && __LONG_DOUBLE_IEEE128__]
(num_get::__do_get, num_put::__do_put): Define.
* include/bits/locale_facets_nonio.h
[_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT && __LONG_DOUBLE_IEEE128__]
(money_get::__do_get): Declare vtable placeholder for __ibm128 long
double type.
[_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT && __LONG_DOUBLE_IEEE128__]
(money_put::__do_put): Likewise.
* include/bits/locale_facets_nonio.tcc
[_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT && __LONG_DOUBLE_IEEE128__]
(money_get::__do_get, money_put::__do_put): Define.
* include/ext/numeric_traits.h [_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT]
(__numeric_traits<__ibm128>, __numeric_traits<__ieee128>): Define.
* libsupc++/Makefile.in: Regenerate.
* po/Makefile.in: Regenerate.
* python/Makefile.in: Regenerate.
* src/Makefile.am: Add compatibility-ldbl-alt128.cc and
compatibility-ldbl-alt128-cxx11.cc sources and recipes for objects.
* src/Makefile.in: Regenerate.
* src/c++11/Makefile.in: Regenerate.
* src/c++11/compatibility-ldbl-alt128-cxx11.cc: New file defining
symbols using the old 128-bit long double format, for the cxx11 ABI.
* src/c++11/compatibility-ldbl-alt128.cc: Likewise, for the
gcc4-compatible ABI.
* src/c++11/compatibility-ldbl-facets-aliases.h: New header for long
double compat aliases.
* src/c++11/cow-locale_init.cc: Add comment.
* src/c++11/cxx11-locale-inst.cc: Define C and C_is_char
unconditionally.
* src/c++11/cxx11-wlocale-inst.cc: Add sanity check. Include
locale-inst.cc directly, not via cxx11-locale-inst.cc.
* src/c++11/locale-inst-monetary.h: New header for monetary
category instantiations.
* src/c++11/locale-inst-numeric.h: New header for numeric category
instantiations.
* src/c++11/locale-inst.cc: Include new headers for monetary,
numeric, and long double definitions.
* src/c++11/wlocale-inst.cc: Remove long double compat aliases that
are defined in new header now.
* src/c++17/Makefile.am: Use -mabi=ibmlongdouble for
floating_from_chars.cc.
* src/c++17/Makefile.in: Regenerate.
* src/c++17/floating_from_chars.cc (from_chars_impl): Add
if-constexpr branch for __ieee128.
(from_chars): Overload for __ieee128.
* src/c++20/Makefile.in: Regenerate.
* src/c++98/Makefile.in: Regenerate.
* src/c++98/locale_init.cc (num_facets): Adjust calculation.
(locale::_Impl::_Impl(size_t)): Call _M_init_extra_ldbl128.
* src/c++98/localename.cc (num_facets): Adjust calculation.
(locale::_Impl::_Impl(const char*, size_t)): Call
_M_init_extra_ldbl128.
* src/filesystem/Makefile.in: Regenerate.
* testsuite/Makefile.in: Regenerate.
* testsuite/util/testsuite_abi.cc: Add new symbol versions.
Allow new symbols to be added to GLIBCXX_IEEE128_3.4.29 and
CXXABI_IEEE128_1.3.13 too.
* testsuite/26_numerics/complex/abi_tag.cc: Add u9__ieee128 to
regex matching expected symbols.
2020-12-17 07:25:01 +08:00
|
|
|
LONG_DOUBLE_128_FLAGS=
|
|
|
|
LONG_DOUBLE_ALT128_COMPAT_FLAGS=
|
configure.ac (_GLIBCXX_LONG_DOUBLE_COMPAT): New check.
2006-02-07 Jakub Jelinek <jakub@redhat.com>
Benjamin Kosnik <bkoz@redhat.com>
* configure.ac (_GLIBCXX_LONG_DOUBLE_COMPAT): New check.
If true, set also port_specific_symbol_files and create
as_symver_specs.
(GLIBCXX_LDBL_COMPAT): New GLIBCXX_CONDITIONAL.
* configure: Rebuilt.
* config.h.in: Rebuilt.
* config/os/gnu-linux/ldbl-extra.ver: New file.
* config/abi/pre/gnu.ver: Make sure no __float128 symbols are
exported.
* include/bits/c++config (_GLIBCXX_LONG_DOUBLE_COMPAT,
_GLIBCXX_LDBL_NAMESPACE, _GLIBCXX_BEGIN_LDBL_NAMESPACE,
_GLIBCXX_END_LDBL_NAMESPACE): Define.
* include/bits/localefwd.h: Use them to conditionally scope facets.
* include/bits/locale_facets.h: Surround std::{money,num}_{get,put}
with _GLIBCXX_BEGIN_LDBL_NAMESPACE and _GLIBCXX_END_LDBL_NAMESPACE.
Surround std::{money,num}_{get,put}
with _GLIBCXX_BEGIN_LDBL_NAMESPACE and _GLIBCXX_END_LDBL_NAMESPACE.
[_GLIBCXX_LONG_DOUBLE_COMPAT] (std::money_get): Add __do_get method.
[_GLIBCXX_LONG_DOUBLE_COMPAT] (std::money_put): Add __do_put method.
[_GLIBCXX_LONG_DOUBLE_COMPAT] (std::num_get): Add __do_get method.
[_GLIBCXX_LONG_DOUBLE_COMPAT] (std::num_put): Add __do_put method.
* include/bits/locale_facets.tcc: Surround std::{money,num}_{get,put}
with _GLIBCXX_BEGIN_LDBL_NAMESPACE and _GLIBCXX_END_LDBL_NAMESPACE.
(std::money_get::__do_get, std::money_put::__do_put,
std::num_get::__do_get, std::num_put::__do_put): New
specializations.
* include/Makefile.am: Conditionally define
_GLIBCXX_LONG_DOUBLE_COMPAT in c++config.
* include/Makefile.in: Regenerate.
* src/locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT] (_GLIBCXX_LOC_ID,
_GLIBCXX_SYNC_ID): Define, use them.
* src/compatibility-ldbl.cc: New file.
* src/complex_io.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Add compatibility
symbols.
* src/limits.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/locale-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/locale-misc-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/istream-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/ostream-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/wlocale-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/compatibility.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* config/locale/generic/c_locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]:
Likewise.
* config/locale/gnu/c_locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]:
Likewise.
* src/Makefile.am (libstdc++-symbol.ver): Append instead of
insert in the middle if port specific symbol file requests it.
(ldbl_compat_sources): New variable.
(sources): Use it.
(compatibility-ldbl.lo, compatibility-ldbl.o): New rules.
* src/Makefile.in: Rebuilt.
* testsuite/testsuite_abi.cc: Recognize GLIBCXX_LDBL_3.4,
GLIBCXX_LDBL_3.4.7, CXXABI_LDBL_1.3.
Co-Authored-By: Benjamin Kosnik <bkoz@redhat.com>
From-SVN: r110725
2006-02-08 06:23:58 +08:00
|
|
|
case "$target" in
|
2007-04-19 20:11:07 +08:00
|
|
|
powerpc*-*-linux* | \
|
configure.ac (_GLIBCXX_LONG_DOUBLE_COMPAT): New check.
2006-02-07 Jakub Jelinek <jakub@redhat.com>
Benjamin Kosnik <bkoz@redhat.com>
* configure.ac (_GLIBCXX_LONG_DOUBLE_COMPAT): New check.
If true, set also port_specific_symbol_files and create
as_symver_specs.
(GLIBCXX_LDBL_COMPAT): New GLIBCXX_CONDITIONAL.
* configure: Rebuilt.
* config.h.in: Rebuilt.
* config/os/gnu-linux/ldbl-extra.ver: New file.
* config/abi/pre/gnu.ver: Make sure no __float128 symbols are
exported.
* include/bits/c++config (_GLIBCXX_LONG_DOUBLE_COMPAT,
_GLIBCXX_LDBL_NAMESPACE, _GLIBCXX_BEGIN_LDBL_NAMESPACE,
_GLIBCXX_END_LDBL_NAMESPACE): Define.
* include/bits/localefwd.h: Use them to conditionally scope facets.
* include/bits/locale_facets.h: Surround std::{money,num}_{get,put}
with _GLIBCXX_BEGIN_LDBL_NAMESPACE and _GLIBCXX_END_LDBL_NAMESPACE.
Surround std::{money,num}_{get,put}
with _GLIBCXX_BEGIN_LDBL_NAMESPACE and _GLIBCXX_END_LDBL_NAMESPACE.
[_GLIBCXX_LONG_DOUBLE_COMPAT] (std::money_get): Add __do_get method.
[_GLIBCXX_LONG_DOUBLE_COMPAT] (std::money_put): Add __do_put method.
[_GLIBCXX_LONG_DOUBLE_COMPAT] (std::num_get): Add __do_get method.
[_GLIBCXX_LONG_DOUBLE_COMPAT] (std::num_put): Add __do_put method.
* include/bits/locale_facets.tcc: Surround std::{money,num}_{get,put}
with _GLIBCXX_BEGIN_LDBL_NAMESPACE and _GLIBCXX_END_LDBL_NAMESPACE.
(std::money_get::__do_get, std::money_put::__do_put,
std::num_get::__do_get, std::num_put::__do_put): New
specializations.
* include/Makefile.am: Conditionally define
_GLIBCXX_LONG_DOUBLE_COMPAT in c++config.
* include/Makefile.in: Regenerate.
* src/locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT] (_GLIBCXX_LOC_ID,
_GLIBCXX_SYNC_ID): Define, use them.
* src/compatibility-ldbl.cc: New file.
* src/complex_io.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Add compatibility
symbols.
* src/limits.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/locale-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/locale-misc-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/istream-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/ostream-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/wlocale-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/compatibility.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* config/locale/generic/c_locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]:
Likewise.
* config/locale/gnu/c_locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]:
Likewise.
* src/Makefile.am (libstdc++-symbol.ver): Append instead of
insert in the middle if port specific symbol file requests it.
(ldbl_compat_sources): New variable.
(sources): Use it.
(compatibility-ldbl.lo, compatibility-ldbl.o): New rules.
* src/Makefile.in: Rebuilt.
* testsuite/testsuite_abi.cc: Recognize GLIBCXX_LDBL_3.4,
GLIBCXX_LDBL_3.4.7, CXXABI_LDBL_1.3.
Co-Authored-By: Benjamin Kosnik <bkoz@redhat.com>
From-SVN: r110725
2006-02-08 06:23:58 +08:00
|
|
|
sparc*-*-linux* | \
|
|
|
|
s390*-*-linux* | \
|
|
|
|
alpha*-*-linux*)
|
|
|
|
AC_TRY_COMPILE(, [
|
|
|
|
#if !defined __LONG_DOUBLE_128__ || (defined(__sparc__) && defined(__arch64__))
|
|
|
|
#error no need for long double compatibility
|
|
|
|
#endif
|
|
|
|
], [ac_ldbl_compat=yes], [ac_ldbl_compat=no])
|
2023-06-07 22:54:17 +08:00
|
|
|
if test "$ac_ldbl_compat" = yes; then
|
configure.ac (_GLIBCXX_LONG_DOUBLE_COMPAT): New check.
2006-02-07 Jakub Jelinek <jakub@redhat.com>
Benjamin Kosnik <bkoz@redhat.com>
* configure.ac (_GLIBCXX_LONG_DOUBLE_COMPAT): New check.
If true, set also port_specific_symbol_files and create
as_symver_specs.
(GLIBCXX_LDBL_COMPAT): New GLIBCXX_CONDITIONAL.
* configure: Rebuilt.
* config.h.in: Rebuilt.
* config/os/gnu-linux/ldbl-extra.ver: New file.
* config/abi/pre/gnu.ver: Make sure no __float128 symbols are
exported.
* include/bits/c++config (_GLIBCXX_LONG_DOUBLE_COMPAT,
_GLIBCXX_LDBL_NAMESPACE, _GLIBCXX_BEGIN_LDBL_NAMESPACE,
_GLIBCXX_END_LDBL_NAMESPACE): Define.
* include/bits/localefwd.h: Use them to conditionally scope facets.
* include/bits/locale_facets.h: Surround std::{money,num}_{get,put}
with _GLIBCXX_BEGIN_LDBL_NAMESPACE and _GLIBCXX_END_LDBL_NAMESPACE.
Surround std::{money,num}_{get,put}
with _GLIBCXX_BEGIN_LDBL_NAMESPACE and _GLIBCXX_END_LDBL_NAMESPACE.
[_GLIBCXX_LONG_DOUBLE_COMPAT] (std::money_get): Add __do_get method.
[_GLIBCXX_LONG_DOUBLE_COMPAT] (std::money_put): Add __do_put method.
[_GLIBCXX_LONG_DOUBLE_COMPAT] (std::num_get): Add __do_get method.
[_GLIBCXX_LONG_DOUBLE_COMPAT] (std::num_put): Add __do_put method.
* include/bits/locale_facets.tcc: Surround std::{money,num}_{get,put}
with _GLIBCXX_BEGIN_LDBL_NAMESPACE and _GLIBCXX_END_LDBL_NAMESPACE.
(std::money_get::__do_get, std::money_put::__do_put,
std::num_get::__do_get, std::num_put::__do_put): New
specializations.
* include/Makefile.am: Conditionally define
_GLIBCXX_LONG_DOUBLE_COMPAT in c++config.
* include/Makefile.in: Regenerate.
* src/locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT] (_GLIBCXX_LOC_ID,
_GLIBCXX_SYNC_ID): Define, use them.
* src/compatibility-ldbl.cc: New file.
* src/complex_io.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Add compatibility
symbols.
* src/limits.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/locale-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/locale-misc-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/istream-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/ostream-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/wlocale-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/compatibility.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* config/locale/generic/c_locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]:
Likewise.
* config/locale/gnu/c_locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]:
Likewise.
* src/Makefile.am (libstdc++-symbol.ver): Append instead of
insert in the middle if port specific symbol file requests it.
(ldbl_compat_sources): New variable.
(sources): Use it.
(compatibility-ldbl.lo, compatibility-ldbl.o): New rules.
* src/Makefile.in: Rebuilt.
* testsuite/testsuite_abi.cc: Recognize GLIBCXX_LDBL_3.4,
GLIBCXX_LDBL_3.4.7, CXXABI_LDBL_1.3.
Co-Authored-By: Benjamin Kosnik <bkoz@redhat.com>
From-SVN: r110725
2006-02-08 06:23:58 +08:00
|
|
|
AC_DEFINE([_GLIBCXX_LONG_DOUBLE_COMPAT],1,
|
|
|
|
[Define if compatibility should be provided for -mlong-double-64.])
|
|
|
|
port_specific_symbol_files="\$(top_srcdir)/config/os/gnu-linux/ldbl-extra.ver"
|
2016-09-29 06:03:17 +08:00
|
|
|
case "$target" in
|
|
|
|
powerpc*-*-linux*)
|
libstdc++: Add C++ runtime support for new 128-bit long double format
This adds support for the new __ieee128 long double format on
powerpc64le targets.
Most of the complexity comes from wanting a single libstdc++.so library
that contains the symbols needed by code compiled with both
-mabi=ibmlongdouble and -mabi=ieeelongdouble (and not forgetting
-mlong-double-64 as well!)
In a few places this just requires an extra overload, for example
std::from_chars has to be overloaded for both forms of long double.
That can be done in a single translation unit that defines overloads
for 'long double' and also '__ieee128', so that user code including
<charconv> will be able to link to a definition for either type of long
double. Those are the easy cases.
The difficult parts are (as for the std::string ABI transition) the I/O
and locale facets. In order to be able to write either form of long
double to an ostream such as std::cout we need the locale to contain a
std::num_put facet that can handle both forms. The same approach is
taken as was already done for supporting 64-bit long double and 128-bit
long double: adding extra overloads of do_put to the facet class. On
targets where the new long double code is enabled, the facets that are
registered in the locale at program startup have additional overloads so
that they can work with any long double type. Where this fails to work
is if user code installs its own facet, which will probably not have the
additional overloads and so will only be able to output one or the other
type. In practice the number of users expecting to be able to use their
own locale facets in code using a mix of -mabi=ibmlongdouble and
-mabi=ieeelongdouble is probably close to zero.
libstdc++-v3/ChangeLog:
* Makefile.in: Regenerate.
* config.h.in: Regenerate.
* config/abi/pre/gnu.ver: Make patterns less greedy.
* config/os/gnu-linux/ldbl-ieee128-extra.ver: New file with patterns
for IEEE128 long double symbols.
* configure: Regenerate.
* configure.ac: Enable alternative 128-bit long double format on
powerpc64*-*-linux*.
* doc/Makefile.in: Regenerate.
* fragment.am: Regenerate.
* include/Makefile.am: Set _GLIBCXX_LONG_DOUBLE_ALT128_COMPAT.
* include/Makefile.in: Regenerate.
* include/bits/c++config: Define inline namespace for new long
double symbols. Don't define _GLIBCXX_USE_FLOAT128 when it's the
same type as long double.
* include/bits/locale_classes.h [_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT]
(locale::_Impl::_M_init_extra_ldbl128): Declare new member function.
* include/bits/locale_facets.h (_GLIBCXX_NUM_FACETS): Simplify by
only counting narrow character facets.
(_GLIBCXX_NUM_CXX11_FACETS): Likewise.
(_GLIBCXX_NUM_LBDL_ALT128_FACETS): New.
[_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT] (num_get::__do_get): Define
vtable placeholder for __ibm128 long double type.
[_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT && __LONG_DOUBLE_IEEE128__]
(num_get::__do_get): Declare vtable placeholder for __ibm128 long
double type.
[_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT && __LONG_DOUBLE_IEEE128__]
(num_put::__do_put): Likewise.
* include/bits/locale_facets.tcc
[_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT && __LONG_DOUBLE_IEEE128__]
(num_get::__do_get, num_put::__do_put): Define.
* include/bits/locale_facets_nonio.h
[_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT && __LONG_DOUBLE_IEEE128__]
(money_get::__do_get): Declare vtable placeholder for __ibm128 long
double type.
[_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT && __LONG_DOUBLE_IEEE128__]
(money_put::__do_put): Likewise.
* include/bits/locale_facets_nonio.tcc
[_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT && __LONG_DOUBLE_IEEE128__]
(money_get::__do_get, money_put::__do_put): Define.
* include/ext/numeric_traits.h [_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT]
(__numeric_traits<__ibm128>, __numeric_traits<__ieee128>): Define.
* libsupc++/Makefile.in: Regenerate.
* po/Makefile.in: Regenerate.
* python/Makefile.in: Regenerate.
* src/Makefile.am: Add compatibility-ldbl-alt128.cc and
compatibility-ldbl-alt128-cxx11.cc sources and recipes for objects.
* src/Makefile.in: Regenerate.
* src/c++11/Makefile.in: Regenerate.
* src/c++11/compatibility-ldbl-alt128-cxx11.cc: New file defining
symbols using the old 128-bit long double format, for the cxx11 ABI.
* src/c++11/compatibility-ldbl-alt128.cc: Likewise, for the
gcc4-compatible ABI.
* src/c++11/compatibility-ldbl-facets-aliases.h: New header for long
double compat aliases.
* src/c++11/cow-locale_init.cc: Add comment.
* src/c++11/cxx11-locale-inst.cc: Define C and C_is_char
unconditionally.
* src/c++11/cxx11-wlocale-inst.cc: Add sanity check. Include
locale-inst.cc directly, not via cxx11-locale-inst.cc.
* src/c++11/locale-inst-monetary.h: New header for monetary
category instantiations.
* src/c++11/locale-inst-numeric.h: New header for numeric category
instantiations.
* src/c++11/locale-inst.cc: Include new headers for monetary,
numeric, and long double definitions.
* src/c++11/wlocale-inst.cc: Remove long double compat aliases that
are defined in new header now.
* src/c++17/Makefile.am: Use -mabi=ibmlongdouble for
floating_from_chars.cc.
* src/c++17/Makefile.in: Regenerate.
* src/c++17/floating_from_chars.cc (from_chars_impl): Add
if-constexpr branch for __ieee128.
(from_chars): Overload for __ieee128.
* src/c++20/Makefile.in: Regenerate.
* src/c++98/Makefile.in: Regenerate.
* src/c++98/locale_init.cc (num_facets): Adjust calculation.
(locale::_Impl::_Impl(size_t)): Call _M_init_extra_ldbl128.
* src/c++98/localename.cc (num_facets): Adjust calculation.
(locale::_Impl::_Impl(const char*, size_t)): Call
_M_init_extra_ldbl128.
* src/filesystem/Makefile.in: Regenerate.
* testsuite/Makefile.in: Regenerate.
* testsuite/util/testsuite_abi.cc: Add new symbol versions.
Allow new symbols to be added to GLIBCXX_IEEE128_3.4.29 and
CXXABI_IEEE128_1.3.13 too.
* testsuite/26_numerics/complex/abi_tag.cc: Add u9__ieee128 to
regex matching expected symbols.
2020-12-17 07:25:01 +08:00
|
|
|
LONG_DOUBLE_COMPAT_FLAGS="$LONG_DOUBLE_COMPAT_FLAGS -mno-gnu-attribute"
|
|
|
|
# Check for IEEE128 support in libm:
|
|
|
|
AC_CHECK_LIB(m, __frexpieee128,
|
|
|
|
[ac_ldbl_ieee128_in_libc=yes],
|
|
|
|
[ac_ldbl_ieee128_in_libc=no])
|
|
|
|
if test $ac_ldbl_ieee128_in_libc = yes; then
|
|
|
|
# Determine which long double format is the compiler's default:
|
|
|
|
AC_TRY_COMPILE(, [
|
|
|
|
#ifndef __LONG_DOUBLE_IEEE128__
|
|
|
|
#error compiler defaults to ibm128
|
|
|
|
#endif
|
|
|
|
], [ac_ldbl_ieee128_default=yes], [ac_ldbl_ieee128_default=no])
|
|
|
|
# Library objects should use default long double format.
|
|
|
|
if test "$ac_ldbl_ieee128_default" = yes; then
|
|
|
|
LONG_DOUBLE_128_FLAGS="-mno-gnu-attribute"
|
|
|
|
# Except for the ones that explicitly use these flags:
|
|
|
|
LONG_DOUBLE_ALT128_COMPAT_FLAGS="-mabi=ibmlongdouble -mno-gnu-attribute -Wno-psabi"
|
|
|
|
else
|
|
|
|
LONG_DOUBLE_128_FLAGS="-mno-gnu-attribute"
|
|
|
|
LONG_DOUBLE_ALT128_COMPAT_FLAGS="-mabi=ieeelongdouble -mno-gnu-attribute -Wno-psabi"
|
|
|
|
fi
|
|
|
|
AC_DEFINE([_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT],1,
|
|
|
|
[Define if compatibility should be provided for alternative 128-bit long double formats.])
|
|
|
|
port_specific_symbol_files="$port_specific_symbol_files \$(top_srcdir)/config/os/gnu-linux/ldbl-ieee128-extra.ver"
|
|
|
|
ac_ldbl_alt128_compat=yes
|
|
|
|
else
|
|
|
|
ac_ldbl_alt128_compat=no
|
|
|
|
fi
|
|
|
|
;;
|
2016-09-29 06:03:17 +08:00
|
|
|
esac
|
2023-06-07 22:54:17 +08:00
|
|
|
fi
|
configure.ac (_GLIBCXX_LONG_DOUBLE_COMPAT): New check.
2006-02-07 Jakub Jelinek <jakub@redhat.com>
Benjamin Kosnik <bkoz@redhat.com>
* configure.ac (_GLIBCXX_LONG_DOUBLE_COMPAT): New check.
If true, set also port_specific_symbol_files and create
as_symver_specs.
(GLIBCXX_LDBL_COMPAT): New GLIBCXX_CONDITIONAL.
* configure: Rebuilt.
* config.h.in: Rebuilt.
* config/os/gnu-linux/ldbl-extra.ver: New file.
* config/abi/pre/gnu.ver: Make sure no __float128 symbols are
exported.
* include/bits/c++config (_GLIBCXX_LONG_DOUBLE_COMPAT,
_GLIBCXX_LDBL_NAMESPACE, _GLIBCXX_BEGIN_LDBL_NAMESPACE,
_GLIBCXX_END_LDBL_NAMESPACE): Define.
* include/bits/localefwd.h: Use them to conditionally scope facets.
* include/bits/locale_facets.h: Surround std::{money,num}_{get,put}
with _GLIBCXX_BEGIN_LDBL_NAMESPACE and _GLIBCXX_END_LDBL_NAMESPACE.
Surround std::{money,num}_{get,put}
with _GLIBCXX_BEGIN_LDBL_NAMESPACE and _GLIBCXX_END_LDBL_NAMESPACE.
[_GLIBCXX_LONG_DOUBLE_COMPAT] (std::money_get): Add __do_get method.
[_GLIBCXX_LONG_DOUBLE_COMPAT] (std::money_put): Add __do_put method.
[_GLIBCXX_LONG_DOUBLE_COMPAT] (std::num_get): Add __do_get method.
[_GLIBCXX_LONG_DOUBLE_COMPAT] (std::num_put): Add __do_put method.
* include/bits/locale_facets.tcc: Surround std::{money,num}_{get,put}
with _GLIBCXX_BEGIN_LDBL_NAMESPACE and _GLIBCXX_END_LDBL_NAMESPACE.
(std::money_get::__do_get, std::money_put::__do_put,
std::num_get::__do_get, std::num_put::__do_put): New
specializations.
* include/Makefile.am: Conditionally define
_GLIBCXX_LONG_DOUBLE_COMPAT in c++config.
* include/Makefile.in: Regenerate.
* src/locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT] (_GLIBCXX_LOC_ID,
_GLIBCXX_SYNC_ID): Define, use them.
* src/compatibility-ldbl.cc: New file.
* src/complex_io.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Add compatibility
symbols.
* src/limits.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/locale-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/locale-misc-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/istream-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/ostream-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/wlocale-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/compatibility.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* config/locale/generic/c_locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]:
Likewise.
* config/locale/gnu/c_locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]:
Likewise.
* src/Makefile.am (libstdc++-symbol.ver): Append instead of
insert in the middle if port specific symbol file requests it.
(ldbl_compat_sources): New variable.
(sources): Use it.
(compatibility-ldbl.lo, compatibility-ldbl.o): New rules.
* src/Makefile.in: Rebuilt.
* testsuite/testsuite_abi.cc: Recognize GLIBCXX_LDBL_3.4,
GLIBCXX_LDBL_3.4.7, CXXABI_LDBL_1.3.
Co-Authored-By: Benjamin Kosnik <bkoz@redhat.com>
From-SVN: r110725
2006-02-08 06:23:58 +08:00
|
|
|
esac
|
2016-09-29 06:03:17 +08:00
|
|
|
AC_SUBST(LONG_DOUBLE_COMPAT_FLAGS)
|
libstdc++: Add C++ runtime support for new 128-bit long double format
This adds support for the new __ieee128 long double format on
powerpc64le targets.
Most of the complexity comes from wanting a single libstdc++.so library
that contains the symbols needed by code compiled with both
-mabi=ibmlongdouble and -mabi=ieeelongdouble (and not forgetting
-mlong-double-64 as well!)
In a few places this just requires an extra overload, for example
std::from_chars has to be overloaded for both forms of long double.
That can be done in a single translation unit that defines overloads
for 'long double' and also '__ieee128', so that user code including
<charconv> will be able to link to a definition for either type of long
double. Those are the easy cases.
The difficult parts are (as for the std::string ABI transition) the I/O
and locale facets. In order to be able to write either form of long
double to an ostream such as std::cout we need the locale to contain a
std::num_put facet that can handle both forms. The same approach is
taken as was already done for supporting 64-bit long double and 128-bit
long double: adding extra overloads of do_put to the facet class. On
targets where the new long double code is enabled, the facets that are
registered in the locale at program startup have additional overloads so
that they can work with any long double type. Where this fails to work
is if user code installs its own facet, which will probably not have the
additional overloads and so will only be able to output one or the other
type. In practice the number of users expecting to be able to use their
own locale facets in code using a mix of -mabi=ibmlongdouble and
-mabi=ieeelongdouble is probably close to zero.
libstdc++-v3/ChangeLog:
* Makefile.in: Regenerate.
* config.h.in: Regenerate.
* config/abi/pre/gnu.ver: Make patterns less greedy.
* config/os/gnu-linux/ldbl-ieee128-extra.ver: New file with patterns
for IEEE128 long double symbols.
* configure: Regenerate.
* configure.ac: Enable alternative 128-bit long double format on
powerpc64*-*-linux*.
* doc/Makefile.in: Regenerate.
* fragment.am: Regenerate.
* include/Makefile.am: Set _GLIBCXX_LONG_DOUBLE_ALT128_COMPAT.
* include/Makefile.in: Regenerate.
* include/bits/c++config: Define inline namespace for new long
double symbols. Don't define _GLIBCXX_USE_FLOAT128 when it's the
same type as long double.
* include/bits/locale_classes.h [_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT]
(locale::_Impl::_M_init_extra_ldbl128): Declare new member function.
* include/bits/locale_facets.h (_GLIBCXX_NUM_FACETS): Simplify by
only counting narrow character facets.
(_GLIBCXX_NUM_CXX11_FACETS): Likewise.
(_GLIBCXX_NUM_LBDL_ALT128_FACETS): New.
[_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT] (num_get::__do_get): Define
vtable placeholder for __ibm128 long double type.
[_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT && __LONG_DOUBLE_IEEE128__]
(num_get::__do_get): Declare vtable placeholder for __ibm128 long
double type.
[_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT && __LONG_DOUBLE_IEEE128__]
(num_put::__do_put): Likewise.
* include/bits/locale_facets.tcc
[_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT && __LONG_DOUBLE_IEEE128__]
(num_get::__do_get, num_put::__do_put): Define.
* include/bits/locale_facets_nonio.h
[_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT && __LONG_DOUBLE_IEEE128__]
(money_get::__do_get): Declare vtable placeholder for __ibm128 long
double type.
[_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT && __LONG_DOUBLE_IEEE128__]
(money_put::__do_put): Likewise.
* include/bits/locale_facets_nonio.tcc
[_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT && __LONG_DOUBLE_IEEE128__]
(money_get::__do_get, money_put::__do_put): Define.
* include/ext/numeric_traits.h [_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT]
(__numeric_traits<__ibm128>, __numeric_traits<__ieee128>): Define.
* libsupc++/Makefile.in: Regenerate.
* po/Makefile.in: Regenerate.
* python/Makefile.in: Regenerate.
* src/Makefile.am: Add compatibility-ldbl-alt128.cc and
compatibility-ldbl-alt128-cxx11.cc sources and recipes for objects.
* src/Makefile.in: Regenerate.
* src/c++11/Makefile.in: Regenerate.
* src/c++11/compatibility-ldbl-alt128-cxx11.cc: New file defining
symbols using the old 128-bit long double format, for the cxx11 ABI.
* src/c++11/compatibility-ldbl-alt128.cc: Likewise, for the
gcc4-compatible ABI.
* src/c++11/compatibility-ldbl-facets-aliases.h: New header for long
double compat aliases.
* src/c++11/cow-locale_init.cc: Add comment.
* src/c++11/cxx11-locale-inst.cc: Define C and C_is_char
unconditionally.
* src/c++11/cxx11-wlocale-inst.cc: Add sanity check. Include
locale-inst.cc directly, not via cxx11-locale-inst.cc.
* src/c++11/locale-inst-monetary.h: New header for monetary
category instantiations.
* src/c++11/locale-inst-numeric.h: New header for numeric category
instantiations.
* src/c++11/locale-inst.cc: Include new headers for monetary,
numeric, and long double definitions.
* src/c++11/wlocale-inst.cc: Remove long double compat aliases that
are defined in new header now.
* src/c++17/Makefile.am: Use -mabi=ibmlongdouble for
floating_from_chars.cc.
* src/c++17/Makefile.in: Regenerate.
* src/c++17/floating_from_chars.cc (from_chars_impl): Add
if-constexpr branch for __ieee128.
(from_chars): Overload for __ieee128.
* src/c++20/Makefile.in: Regenerate.
* src/c++98/Makefile.in: Regenerate.
* src/c++98/locale_init.cc (num_facets): Adjust calculation.
(locale::_Impl::_Impl(size_t)): Call _M_init_extra_ldbl128.
* src/c++98/localename.cc (num_facets): Adjust calculation.
(locale::_Impl::_Impl(const char*, size_t)): Call
_M_init_extra_ldbl128.
* src/filesystem/Makefile.in: Regenerate.
* testsuite/Makefile.in: Regenerate.
* testsuite/util/testsuite_abi.cc: Add new symbol versions.
Allow new symbols to be added to GLIBCXX_IEEE128_3.4.29 and
CXXABI_IEEE128_1.3.13 too.
* testsuite/26_numerics/complex/abi_tag.cc: Add u9__ieee128 to
regex matching expected symbols.
2020-12-17 07:25:01 +08:00
|
|
|
AC_SUBST(LONG_DOUBLE_128_FLAGS)
|
|
|
|
AC_SUBST(LONG_DOUBLE_ALT128_COMPAT_FLAGS)
|
configure.ac (_GLIBCXX_LONG_DOUBLE_COMPAT): New check.
2006-02-07 Jakub Jelinek <jakub@redhat.com>
Benjamin Kosnik <bkoz@redhat.com>
* configure.ac (_GLIBCXX_LONG_DOUBLE_COMPAT): New check.
If true, set also port_specific_symbol_files and create
as_symver_specs.
(GLIBCXX_LDBL_COMPAT): New GLIBCXX_CONDITIONAL.
* configure: Rebuilt.
* config.h.in: Rebuilt.
* config/os/gnu-linux/ldbl-extra.ver: New file.
* config/abi/pre/gnu.ver: Make sure no __float128 symbols are
exported.
* include/bits/c++config (_GLIBCXX_LONG_DOUBLE_COMPAT,
_GLIBCXX_LDBL_NAMESPACE, _GLIBCXX_BEGIN_LDBL_NAMESPACE,
_GLIBCXX_END_LDBL_NAMESPACE): Define.
* include/bits/localefwd.h: Use them to conditionally scope facets.
* include/bits/locale_facets.h: Surround std::{money,num}_{get,put}
with _GLIBCXX_BEGIN_LDBL_NAMESPACE and _GLIBCXX_END_LDBL_NAMESPACE.
Surround std::{money,num}_{get,put}
with _GLIBCXX_BEGIN_LDBL_NAMESPACE and _GLIBCXX_END_LDBL_NAMESPACE.
[_GLIBCXX_LONG_DOUBLE_COMPAT] (std::money_get): Add __do_get method.
[_GLIBCXX_LONG_DOUBLE_COMPAT] (std::money_put): Add __do_put method.
[_GLIBCXX_LONG_DOUBLE_COMPAT] (std::num_get): Add __do_get method.
[_GLIBCXX_LONG_DOUBLE_COMPAT] (std::num_put): Add __do_put method.
* include/bits/locale_facets.tcc: Surround std::{money,num}_{get,put}
with _GLIBCXX_BEGIN_LDBL_NAMESPACE and _GLIBCXX_END_LDBL_NAMESPACE.
(std::money_get::__do_get, std::money_put::__do_put,
std::num_get::__do_get, std::num_put::__do_put): New
specializations.
* include/Makefile.am: Conditionally define
_GLIBCXX_LONG_DOUBLE_COMPAT in c++config.
* include/Makefile.in: Regenerate.
* src/locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT] (_GLIBCXX_LOC_ID,
_GLIBCXX_SYNC_ID): Define, use them.
* src/compatibility-ldbl.cc: New file.
* src/complex_io.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Add compatibility
symbols.
* src/limits.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/locale-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/locale-misc-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/istream-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/ostream-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/wlocale-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/compatibility.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* config/locale/generic/c_locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]:
Likewise.
* config/locale/gnu/c_locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]:
Likewise.
* src/Makefile.am (libstdc++-symbol.ver): Append instead of
insert in the middle if port specific symbol file requests it.
(ldbl_compat_sources): New variable.
(sources): Use it.
(compatibility-ldbl.lo, compatibility-ldbl.o): New rules.
* src/Makefile.in: Rebuilt.
* testsuite/testsuite_abi.cc: Recognize GLIBCXX_LDBL_3.4,
GLIBCXX_LDBL_3.4.7, CXXABI_LDBL_1.3.
Co-Authored-By: Benjamin Kosnik <bkoz@redhat.com>
From-SVN: r110725
2006-02-08 06:23:58 +08:00
|
|
|
GLIBCXX_CONDITIONAL(GLIBCXX_LDBL_COMPAT, test $ac_ldbl_compat = yes)
|
libstdc++: Add C++ runtime support for new 128-bit long double format
This adds support for the new __ieee128 long double format on
powerpc64le targets.
Most of the complexity comes from wanting a single libstdc++.so library
that contains the symbols needed by code compiled with both
-mabi=ibmlongdouble and -mabi=ieeelongdouble (and not forgetting
-mlong-double-64 as well!)
In a few places this just requires an extra overload, for example
std::from_chars has to be overloaded for both forms of long double.
That can be done in a single translation unit that defines overloads
for 'long double' and also '__ieee128', so that user code including
<charconv> will be able to link to a definition for either type of long
double. Those are the easy cases.
The difficult parts are (as for the std::string ABI transition) the I/O
and locale facets. In order to be able to write either form of long
double to an ostream such as std::cout we need the locale to contain a
std::num_put facet that can handle both forms. The same approach is
taken as was already done for supporting 64-bit long double and 128-bit
long double: adding extra overloads of do_put to the facet class. On
targets where the new long double code is enabled, the facets that are
registered in the locale at program startup have additional overloads so
that they can work with any long double type. Where this fails to work
is if user code installs its own facet, which will probably not have the
additional overloads and so will only be able to output one or the other
type. In practice the number of users expecting to be able to use their
own locale facets in code using a mix of -mabi=ibmlongdouble and
-mabi=ieeelongdouble is probably close to zero.
libstdc++-v3/ChangeLog:
* Makefile.in: Regenerate.
* config.h.in: Regenerate.
* config/abi/pre/gnu.ver: Make patterns less greedy.
* config/os/gnu-linux/ldbl-ieee128-extra.ver: New file with patterns
for IEEE128 long double symbols.
* configure: Regenerate.
* configure.ac: Enable alternative 128-bit long double format on
powerpc64*-*-linux*.
* doc/Makefile.in: Regenerate.
* fragment.am: Regenerate.
* include/Makefile.am: Set _GLIBCXX_LONG_DOUBLE_ALT128_COMPAT.
* include/Makefile.in: Regenerate.
* include/bits/c++config: Define inline namespace for new long
double symbols. Don't define _GLIBCXX_USE_FLOAT128 when it's the
same type as long double.
* include/bits/locale_classes.h [_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT]
(locale::_Impl::_M_init_extra_ldbl128): Declare new member function.
* include/bits/locale_facets.h (_GLIBCXX_NUM_FACETS): Simplify by
only counting narrow character facets.
(_GLIBCXX_NUM_CXX11_FACETS): Likewise.
(_GLIBCXX_NUM_LBDL_ALT128_FACETS): New.
[_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT] (num_get::__do_get): Define
vtable placeholder for __ibm128 long double type.
[_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT && __LONG_DOUBLE_IEEE128__]
(num_get::__do_get): Declare vtable placeholder for __ibm128 long
double type.
[_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT && __LONG_DOUBLE_IEEE128__]
(num_put::__do_put): Likewise.
* include/bits/locale_facets.tcc
[_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT && __LONG_DOUBLE_IEEE128__]
(num_get::__do_get, num_put::__do_put): Define.
* include/bits/locale_facets_nonio.h
[_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT && __LONG_DOUBLE_IEEE128__]
(money_get::__do_get): Declare vtable placeholder for __ibm128 long
double type.
[_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT && __LONG_DOUBLE_IEEE128__]
(money_put::__do_put): Likewise.
* include/bits/locale_facets_nonio.tcc
[_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT && __LONG_DOUBLE_IEEE128__]
(money_get::__do_get, money_put::__do_put): Define.
* include/ext/numeric_traits.h [_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT]
(__numeric_traits<__ibm128>, __numeric_traits<__ieee128>): Define.
* libsupc++/Makefile.in: Regenerate.
* po/Makefile.in: Regenerate.
* python/Makefile.in: Regenerate.
* src/Makefile.am: Add compatibility-ldbl-alt128.cc and
compatibility-ldbl-alt128-cxx11.cc sources and recipes for objects.
* src/Makefile.in: Regenerate.
* src/c++11/Makefile.in: Regenerate.
* src/c++11/compatibility-ldbl-alt128-cxx11.cc: New file defining
symbols using the old 128-bit long double format, for the cxx11 ABI.
* src/c++11/compatibility-ldbl-alt128.cc: Likewise, for the
gcc4-compatible ABI.
* src/c++11/compatibility-ldbl-facets-aliases.h: New header for long
double compat aliases.
* src/c++11/cow-locale_init.cc: Add comment.
* src/c++11/cxx11-locale-inst.cc: Define C and C_is_char
unconditionally.
* src/c++11/cxx11-wlocale-inst.cc: Add sanity check. Include
locale-inst.cc directly, not via cxx11-locale-inst.cc.
* src/c++11/locale-inst-monetary.h: New header for monetary
category instantiations.
* src/c++11/locale-inst-numeric.h: New header for numeric category
instantiations.
* src/c++11/locale-inst.cc: Include new headers for monetary,
numeric, and long double definitions.
* src/c++11/wlocale-inst.cc: Remove long double compat aliases that
are defined in new header now.
* src/c++17/Makefile.am: Use -mabi=ibmlongdouble for
floating_from_chars.cc.
* src/c++17/Makefile.in: Regenerate.
* src/c++17/floating_from_chars.cc (from_chars_impl): Add
if-constexpr branch for __ieee128.
(from_chars): Overload for __ieee128.
* src/c++20/Makefile.in: Regenerate.
* src/c++98/Makefile.in: Regenerate.
* src/c++98/locale_init.cc (num_facets): Adjust calculation.
(locale::_Impl::_Impl(size_t)): Call _M_init_extra_ldbl128.
* src/c++98/localename.cc (num_facets): Adjust calculation.
(locale::_Impl::_Impl(const char*, size_t)): Call
_M_init_extra_ldbl128.
* src/filesystem/Makefile.in: Regenerate.
* testsuite/Makefile.in: Regenerate.
* testsuite/util/testsuite_abi.cc: Add new symbol versions.
Allow new symbols to be added to GLIBCXX_IEEE128_3.4.29 and
CXXABI_IEEE128_1.3.13 too.
* testsuite/26_numerics/complex/abi_tag.cc: Add u9__ieee128 to
regex matching expected symbols.
2020-12-17 07:25:01 +08:00
|
|
|
GLIBCXX_CONDITIONAL(GLIBCXX_LDBL_ALT128_COMPAT, test $ac_ldbl_alt128_compat = yes)
|
configure.ac (_GLIBCXX_LONG_DOUBLE_COMPAT): New check.
2006-02-07 Jakub Jelinek <jakub@redhat.com>
Benjamin Kosnik <bkoz@redhat.com>
* configure.ac (_GLIBCXX_LONG_DOUBLE_COMPAT): New check.
If true, set also port_specific_symbol_files and create
as_symver_specs.
(GLIBCXX_LDBL_COMPAT): New GLIBCXX_CONDITIONAL.
* configure: Rebuilt.
* config.h.in: Rebuilt.
* config/os/gnu-linux/ldbl-extra.ver: New file.
* config/abi/pre/gnu.ver: Make sure no __float128 symbols are
exported.
* include/bits/c++config (_GLIBCXX_LONG_DOUBLE_COMPAT,
_GLIBCXX_LDBL_NAMESPACE, _GLIBCXX_BEGIN_LDBL_NAMESPACE,
_GLIBCXX_END_LDBL_NAMESPACE): Define.
* include/bits/localefwd.h: Use them to conditionally scope facets.
* include/bits/locale_facets.h: Surround std::{money,num}_{get,put}
with _GLIBCXX_BEGIN_LDBL_NAMESPACE and _GLIBCXX_END_LDBL_NAMESPACE.
Surround std::{money,num}_{get,put}
with _GLIBCXX_BEGIN_LDBL_NAMESPACE and _GLIBCXX_END_LDBL_NAMESPACE.
[_GLIBCXX_LONG_DOUBLE_COMPAT] (std::money_get): Add __do_get method.
[_GLIBCXX_LONG_DOUBLE_COMPAT] (std::money_put): Add __do_put method.
[_GLIBCXX_LONG_DOUBLE_COMPAT] (std::num_get): Add __do_get method.
[_GLIBCXX_LONG_DOUBLE_COMPAT] (std::num_put): Add __do_put method.
* include/bits/locale_facets.tcc: Surround std::{money,num}_{get,put}
with _GLIBCXX_BEGIN_LDBL_NAMESPACE and _GLIBCXX_END_LDBL_NAMESPACE.
(std::money_get::__do_get, std::money_put::__do_put,
std::num_get::__do_get, std::num_put::__do_put): New
specializations.
* include/Makefile.am: Conditionally define
_GLIBCXX_LONG_DOUBLE_COMPAT in c++config.
* include/Makefile.in: Regenerate.
* src/locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT] (_GLIBCXX_LOC_ID,
_GLIBCXX_SYNC_ID): Define, use them.
* src/compatibility-ldbl.cc: New file.
* src/complex_io.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Add compatibility
symbols.
* src/limits.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/locale-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/locale-misc-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/istream-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/ostream-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/wlocale-inst.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* src/compatibility.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]: Likewise.
* config/locale/generic/c_locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]:
Likewise.
* config/locale/gnu/c_locale.cc [_GLIBCXX_LONG_DOUBLE_COMPAT]:
Likewise.
* src/Makefile.am (libstdc++-symbol.ver): Append instead of
insert in the middle if port specific symbol file requests it.
(ldbl_compat_sources): New variable.
(sources): Use it.
(compatibility-ldbl.lo, compatibility-ldbl.o): New rules.
* src/Makefile.in: Rebuilt.
* testsuite/testsuite_abi.cc: Recognize GLIBCXX_LDBL_3.4,
GLIBCXX_LDBL_3.4.7, CXXABI_LDBL_1.3.
Co-Authored-By: Benjamin Kosnik <bkoz@redhat.com>
From-SVN: r110725
2006-02-08 06:23:58 +08:00
|
|
|
|
2012-09-12 20:38:15 +08:00
|
|
|
# Check if assembler supports disabling hardware capability support.
|
Build libgo with -Wa,-nH if possible (PR go/78978) [non-libgo parts]
libstdc++-v3:
PR go/78978
* acinclude.m4 (GLIBCXX_CHECK_ASSEMBLER_HWCAP): Remove.
* configure.ac: Call GCC_CHECK_ASSEMBLER_HWCAP instead of
GLIBCXX_CHECK_ASSEMBLER_HWCAP.
* fragment.am (CONFIG_CXXFLAGS): Use HWCAP_CFLAGS instead of
HWCAP_FLAGS.
* aclocal.m4: Regenerate.
* configure: Regenerate.
* Makefile.in, doc/Makefile.in, include/Makefile.in,
libsupc++/Makefile.in, po/Makefile.in, python/Makefile.in,
src/Makefile.in, src/c++11/Makefile.in, src/c++98/Makefile.in,
src/filesystem/Makefile.in, testsuite/Makefile.in: Regenerate.
config:
PR go/78978
* hwcaps.m4 (GCC_CHECK_ASSEMBLER_HWCAP): New macro.
From-SVN: r244162
2017-01-06 22:33:47 +08:00
|
|
|
GCC_CHECK_ASSEMBLER_HWCAP
|
2012-09-12 20:38:15 +08:00
|
|
|
|
2012-09-10 01:20:42 +08:00
|
|
|
# Check if assembler supports rdrand opcode.
|
|
|
|
GLIBCXX_CHECK_X86_RDRAND
|
2019-05-29 22:45:35 +08:00
|
|
|
# Check if assembler supports rdseed opcode.
|
|
|
|
GLIBCXX_CHECK_X86_RDSEED
|
2012-09-10 01:20:42 +08:00
|
|
|
|
2021-11-04 23:51:37 +08:00
|
|
|
# Check for other random number APIs
|
|
|
|
GLIBCXX_CHECK_GETENTROPY
|
|
|
|
GLIBCXX_CHECK_ARC4RANDOM
|
|
|
|
|
2003-08-05 10:00:18 +08:00
|
|
|
# This depends on GLIBCXX_ENABLE_SYMVERS and GLIBCXX_IS_NATIVE.
|
2003-07-05 12:05:45 +08:00
|
|
|
GLIBCXX_CONFIGURE_TESTSUITE
|
2003-06-17 13:46:01 +08:00
|
|
|
|
2012-02-17 21:38:15 +08:00
|
|
|
# For gthread support. Depends on GLIBCXX_ENABLE_SYMVERS.
|
|
|
|
GLIBCXX_CHECK_GTHREADS
|
|
|
|
|
2015-05-01 03:11:52 +08:00
|
|
|
# For Filesystem TS.
|
2015-05-02 03:48:00 +08:00
|
|
|
AC_CHECK_HEADERS([fcntl.h dirent.h sys/statvfs.h utime.h])
|
2015-05-01 03:11:52 +08:00
|
|
|
GLIBCXX_ENABLE_FILESYSTEM_TS
|
|
|
|
GLIBCXX_CHECK_FILESYSTEM_DEPS
|
|
|
|
|
2021-11-15 19:08:06 +08:00
|
|
|
GLIBCXX_ENABLE_BACKTRACE
|
|
|
|
|
Use autoconf to check for features needed by Networking TS
* config.h.in: Regenerate.
* configure: Regenerate.
* configure.ac: Check for headers used by Networking TS.
* include/experimental/executor: Include <condition_variable>
instead of <mutex>.
* include/experimental/internet: Use autoconf macros for available
headers. Include <sys/socket.h> for. Remove <cstring> and use
__builtin_memcpy and __builtin_strchr.
(resolver_errc) [!_GLIBCXX_HAVE_NETDB_H]: Do not define.
(address_v4::to_string, address_v6::to_string)
[!_GLIBCXX_HAVE_ARPA_INET_H]: Likewise.
(basic_resolver_results) [!_GLIBCXX_HAVE_NETDB_H]: Make private
constructors report errors.
[!_GLIBCXX_HAVE_NETINET_TCP_H] (tcp::no_delay): Do not define.
* include/experimental/io_context: Likewise.
* include/experimental/socket: Likewise.
[!_GLIBCXX_HAVE_SYS_SOCKET_H, !_GLIBCXX_HAVE_POLL_H] (socket_base): Do
not define nested types when relevant header not available.
(__socket_impl::native_non_blocking) [!_GLIBCXX_HAVE_FCNTL_H]: Report
an error.
(__basic_socket_impl::open, __basic_socket_impl::local_endpoint)
(__basic_socket_impl::bind) [!_GLIBCXX_HAVE_SYS_SOCKET_H]: Likewise.
(__basic_socket_impl::io_control) [!_GLIBCXX_HAVE_SYS_IOCTL_H]:
Likewise.
(basic_socket::at_mark, basic_socket::shutdown)
(basic_socket::remote_endpoint, basic_socket::connect)
(basic_socket::async_connect) [!_GLIBCXX_HAVE_SYS_SOCKET_H]: Likewise.
(basic_socket::available) [_GLIBCXX_HAVE_SYS_IOCTL_H]: Check macro
for <sys/ioctl.h> availability.
(basic_socket::wait) [!_GLIBCXX_HAVE_POLL_H]: Likewise.
(basic_datagram_socket::receive, basic_datagram_socket::async_receive)
(basic_datagram_socket::receive_from)
(basic_datagram_socket::async_receive_from)
(basic_datagram_socket::send, basic_datagram_socket::async_send)
(basic_datagram_socket::send_to, basic_datagram_socket::async_send_to)
[!_GLIBCXX_HAVE_SYS_SOCKET_H]: Likewise.
(basic_stream_socket::receive, basic_stream_socket::async_receive)
(basic_stream_socket::send, basic_stream_socket::async_send)
[!_GLIBCXX_HAVE_SYS_SOCKET_H]: Likewise.
(basic_socket_acceptor::listen, basic_socket_acceptor::accept)
(basic_socket_acceptor::async_accept) [!_GLIBCXX_HAVE_SYS_SOCKET_H]:
Likewise.
(basic_socket_acceptor::wait) [!_GLIBCXX_HAVE_POLL_H]: Likewise.
From-SVN: r265203
2018-10-17 00:12:32 +08:00
|
|
|
# For Networking TS.
|
|
|
|
AC_CHECK_HEADERS([fcntl.h sys/ioctl.h sys/socket.h sys/uio.h poll.h netdb.h arpa/inet.h netinet/in.h netinet/tcp.h])
|
2021-09-01 00:08:00 +08:00
|
|
|
AC_CHECK_DECL(F_GETFL,,,[#include <fcntl.h>])
|
|
|
|
AC_CHECK_DECL(F_SETFL,,,[#include <fcntl.h>])
|
|
|
|
if test "$ac_cv_have_decl_F_GETFL$ac_cv_have_decl_F_SETFL" = yesyes ; then
|
2024-08-28 19:38:18 +08:00
|
|
|
AC_CHECK_DECL(O_NONBLOCK,
|
|
|
|
AC_DEFINE(HAVE_O_NONBLOCK,1,[Define if O_NONBLOCK is defined in <fcntl.h>]),
|
|
|
|
[],
|
|
|
|
[#include <fcntl.h>])
|
2021-08-26 19:06:55 +08:00
|
|
|
fi
|
Use autoconf to check for features needed by Networking TS
* config.h.in: Regenerate.
* configure: Regenerate.
* configure.ac: Check for headers used by Networking TS.
* include/experimental/executor: Include <condition_variable>
instead of <mutex>.
* include/experimental/internet: Use autoconf macros for available
headers. Include <sys/socket.h> for. Remove <cstring> and use
__builtin_memcpy and __builtin_strchr.
(resolver_errc) [!_GLIBCXX_HAVE_NETDB_H]: Do not define.
(address_v4::to_string, address_v6::to_string)
[!_GLIBCXX_HAVE_ARPA_INET_H]: Likewise.
(basic_resolver_results) [!_GLIBCXX_HAVE_NETDB_H]: Make private
constructors report errors.
[!_GLIBCXX_HAVE_NETINET_TCP_H] (tcp::no_delay): Do not define.
* include/experimental/io_context: Likewise.
* include/experimental/socket: Likewise.
[!_GLIBCXX_HAVE_SYS_SOCKET_H, !_GLIBCXX_HAVE_POLL_H] (socket_base): Do
not define nested types when relevant header not available.
(__socket_impl::native_non_blocking) [!_GLIBCXX_HAVE_FCNTL_H]: Report
an error.
(__basic_socket_impl::open, __basic_socket_impl::local_endpoint)
(__basic_socket_impl::bind) [!_GLIBCXX_HAVE_SYS_SOCKET_H]: Likewise.
(__basic_socket_impl::io_control) [!_GLIBCXX_HAVE_SYS_IOCTL_H]:
Likewise.
(basic_socket::at_mark, basic_socket::shutdown)
(basic_socket::remote_endpoint, basic_socket::connect)
(basic_socket::async_connect) [!_GLIBCXX_HAVE_SYS_SOCKET_H]: Likewise.
(basic_socket::available) [_GLIBCXX_HAVE_SYS_IOCTL_H]: Check macro
for <sys/ioctl.h> availability.
(basic_socket::wait) [!_GLIBCXX_HAVE_POLL_H]: Likewise.
(basic_datagram_socket::receive, basic_datagram_socket::async_receive)
(basic_datagram_socket::receive_from)
(basic_datagram_socket::async_receive_from)
(basic_datagram_socket::send, basic_datagram_socket::async_send)
(basic_datagram_socket::send_to, basic_datagram_socket::async_send_to)
[!_GLIBCXX_HAVE_SYS_SOCKET_H]: Likewise.
(basic_stream_socket::receive, basic_stream_socket::async_receive)
(basic_stream_socket::send, basic_stream_socket::async_send)
[!_GLIBCXX_HAVE_SYS_SOCKET_H]: Likewise.
(basic_socket_acceptor::listen, basic_socket_acceptor::accept)
(basic_socket_acceptor::async_accept) [!_GLIBCXX_HAVE_SYS_SOCKET_H]:
Likewise.
(basic_socket_acceptor::wait) [!_GLIBCXX_HAVE_POLL_H]: Likewise.
From-SVN: r265203
2018-10-17 00:12:32 +08:00
|
|
|
|
2016-01-16 06:42:41 +08:00
|
|
|
# For Transactional Memory TS
|
|
|
|
GLIBCXX_CHECK_SIZE_T_MANGLING
|
|
|
|
|
2017-01-04 18:54:59 +08:00
|
|
|
# Check which release added std::exception_ptr for the target
|
|
|
|
GLIBCXX_CHECK_EXCEPTION_PTR_SYMVER
|
|
|
|
|
2022-10-06 04:21:54 +08:00
|
|
|
# For libsupc++/eh_alloc.cc defaults.
|
|
|
|
GLIBCXX_EMERGENCY_EH_ALLOC
|
|
|
|
|
libstdc++: Implement C++20 time zone support in <chrono>
This is the largest missing piece of C++20 support. Only the cxx11 ABI
is supported, due to the use of std::string in the API for time zones.
For the old gcc4 ABI, utc_clock and leap seconds are supported, but only
using a hardcoded list of leap seconds, no up-to-date tzdb::leap_seconds
information is available, and no time zones or zoned_time conversions.
The implementation currently depends on a tzdata.zi file being provided
by the OS or the user. The expected location is /usr/share/zoneinfo but
that can be changed using --with-libstdcxx-zoneinfo-dir=PATH. On targets
that support it there is also a weak symbol that users can override in
their own program (which also helps with testing):
extern "C++" const char* __gnu_cxx::zoneinfo_dir_override();
If no file is found, a fallback tzdb object will be created which only
contains the "Etc/UTC" and "Etc/GMT" time zones.
A leapseconds file is also expected in the same directory, but if that
isn't present then a hardcoded list of leapseconds is used, which is
correct at least as far as 2023-06-28 (and it currently looks like no
leap second will be inserted for a few years).
The tzdata.zi and leapseconds files from https://www.iana.org/time-zones
are in the public domain, so shipping copies of them with GCC would be
an option. However, the tzdata.zi file will rapidly become outdated, so
users should really provide it themselves (or convince their OS vendor
to do so). It would also be possible to implement an alternative parser
for the compiled tzdata files (one per time zone) under
/usr/share/zoneinfo. Those files are present on more operating systems,
but do not contain all the information present in tzdata.zi.
Specifically, the "links" are not present, so that e.g. "UTC" and
"Universal" are distinct time zones, rather than both being links to the
canonical "Etc/UTC" zone. For some platforms those files are hard links
to the same file, but there's no indication which zone is the canonical
name and which is a link. Other platforms just store them in different
inodes anyway. I do not plan to add such an alternative parser for the
compiled files. That would need to be contributed by maintainers or
users of targets that require it, if making tzdata.zi available is not
an option. The library ABI would not need to change for a new tzdb
implementation, because everything in tzdb_list, tzdb and time_zone is
implemented as a pimpl (except for the shared_ptr links between nodes,
described below). That means the new exported symbols added by this
commit should be stable even if the implementation is completely
rewritten.
The information from tzdata.zi is parsed and stored in data structures
that closely model the info in the file. This is a space-efficient
representation that uses less memory that storing every transition for
every time zone. It also avoids spending time expanding that
information into time zone transitions that might never be needed by the
program. When a conversion to/from a local time to UTC is requested the
information will be processed to determine the time zone transitions
close to the time being converted.
There is a bug in some time zone transitions. When generating a sys_info
object immediately after one that was previously generated, we need to
find the previous rule that was in effect and note its offset and
letters. This is so that the start time and abbreviation of the new
sys_info will be correct. This only affects time zones that use a format
like "C%sT" where the LETTERS replacing %s are non-empty for standard
time, e.g. "Asia/Shanghai" which uses "CST" for standard time and "CDT"
for daylight time.
The tzdb_list structure maintains a linked list of tzdb nodes using
shared_ptr links. This allows the iterators into the list to share
ownership with the list itself. This offers a non-portable solution to a
lifetime issue in the API. Because tzdb objects can be erased from the
list using tzdb_list::erase_after, separate modules/libraries in a large
program cannot guarantee that any const tzdb& or const time_zone*
remains valid indefinitely. Holding onto a tzdb_list::const_iterator
will extend the tzdb object's lifetime, even if it's erased from the
list. An alternative design would be for the list iterator to hold a
weak_ptr. This would allow users to test whether the tzdb still exists
when the iterator is dereferenced, which is better than just having a
dangling raw pointer. That doesn't actually extend the tzdb's lifetime
though, and every use of it would need to be preceded by checking the
weak_ptr. Using shared_ptr adds a little bit of overhead but allows
users to solve the lifetime issue if they rely on the libstdc++-specific
iterator property.
libstdc++-v3/ChangeLog:
* acinclude.m4 (GLIBCXX_ZONEINFO_DIR): New macro.
* config.h.in: Regenerate.
* config/abi/pre/gnu.ver: Export new symbols.
* configure: Regenerate.
* configure.ac (GLIBCXX_ZONEINFO_DIR): Use new macro.
* include/std/chrono (utc_clock::from_sys): Correct handling
of leap seconds.
(nonexistent_local_time::_M_make_what_str): Define.
(ambiguous_local_time::_M_make_what_str): Define.
(__throw_bad_local_time): Define new function.
(time_zone, tzdb_list, tzdb): Implement all members.
(remote_version, zoned_time, get_leap_second_info): Define.
* include/std/version: Add comment for __cpp_lib_chrono.
* src/c++20/Makefile.am: Add new file.
* src/c++20/Makefile.in: Regenerate.
* src/c++20/tzdb.cc: New file.
* testsuite/lib/libstdc++.exp: Define effective target tzdb.
* testsuite/std/time/clock/file/members.cc: Check file_time
alias and file_clock::now() member.
* testsuite/std/time/clock/gps/1.cc: Likewise for gps_clock.
* testsuite/std/time/clock/tai/1.cc: Likewise for tai_clock.
* testsuite/std/time/syn_c++20.cc: Uncomment everything except
parse.
* testsuite/std/time/clock/utc/leap_second_info.cc: New test.
* testsuite/std/time/exceptions.cc: New test.
* testsuite/std/time/time_zone/get_info_local.cc: New test.
* testsuite/std/time/time_zone/get_info_sys.cc: New test.
* testsuite/std/time/time_zone/requirements.cc: New test.
* testsuite/std/time/tzdb/1.cc: New test.
* testsuite/std/time/tzdb/leap_seconds.cc: New test.
* testsuite/std/time/tzdb_list/1.cc: New test.
* testsuite/std/time/tzdb_list/requirements.cc: New test.
* testsuite/std/time/zoned_time/1.cc: New test.
* testsuite/std/time/zoned_time/custom.cc: New test.
* testsuite/std/time/zoned_time/deduction.cc: New test.
* testsuite/std/time/zoned_time/req_neg.cc: New test.
* testsuite/std/time/zoned_time/requirements.cc: New test.
* testsuite/std/time/zoned_traits.cc: New test.
2022-12-22 08:37:54 +08:00
|
|
|
# For src/c++20/tzdb.cc defaults.
|
|
|
|
GLIBCXX_ZONEINFO_DIR
|
|
|
|
|
2023-05-16 22:09:20 +08:00
|
|
|
# For src/c++11/shared_ptr.cc alignment.
|
|
|
|
GLIBCXX_CHECK_ALIGNAS_CACHELINE
|
|
|
|
|
2023-06-30 18:07:35 +08:00
|
|
|
# For using init_priority in ios_init.cc
|
|
|
|
GLIBCXX_CHECK_INIT_PRIORITY
|
|
|
|
|
2023-09-15 20:43:43 +08:00
|
|
|
# For __basic_file::native_handle()
|
|
|
|
GLIBCXX_CHECK_FILEBUF_NATIVE_HANDLES
|
|
|
|
|
libstdc++: Implement C++26 std::text_encoding (P1885R12) [PR113318]
This is another C++26 change, approved in Varna 2023. We require a new
static array of data that is extracted from the IANA Character Sets
database. A new Python script to generate a header from the IANA CSV
file is added.
The text_encoding class is basically just a pointer to an {ID,name} pair
in the static array. The aliases view is also just the same pointer (or
empty), and the view's iterator moves forwards and backwards in the
array while the array elements have the same ID (or to one element
further, for a past-the-end iterator).
Because those iterators refer to a global array that never goes out of
scope, there's no reason they should every produce undefined behaviour
or indeterminate values. They should either have well-defined
behaviour, or abort. The overhead of ensuring those properties is pretty
low, so seems worth it.
This means that an aliases_view iterator should never be able to access
out-of-bounds. A non-value-initialized iterator always points to an
element of the static array even when not dereferenceable (the array has
unreachable entries at the start and end, which means that even a
past-the-end iterator for the last encoding in the array still points to
valid memory). Dereferencing an iterator can always return a valid
array element, or "" for a non-dereferenceable iterator (but doing so
will abort when assertions are enabled). In the language being proposed
for C++26, dereferencing an invalid iterator erroneously returns "".
Attempting to increment/decrement past the last/first element in the
view is erroneously a no-op, so aborts when assertions are enabled, and
doesn't change value otherwise.
Similarly, constructing a std::text_encoding with an invalid id (one
that doesn't have the value of an enumerator) erroneously behaves the
same as constructing with id::unknown, or aborts with assertions
enabled.
libstdc++-v3/ChangeLog:
PR libstdc++/113318
* acinclude.m4 (GLIBCXX_CONFIGURE): Add c++26 directory.
(GLIBCXX_CHECK_TEXT_ENCODING): Define.
* config.h.in: Regenerate.
* configure: Regenerate.
* configure.ac: Use GLIBCXX_CHECK_TEXT_ENCODING.
* include/Makefile.am: Add new headers.
* include/Makefile.in: Regenerate.
* include/bits/locale_classes.h (locale::encoding): Declare new
member function.
* include/bits/unicode.h (__charset_alias_match): New function.
* include/bits/text_encoding-data.h: New file.
* include/bits/version.def (text_encoding): Define.
* include/bits/version.h: Regenerate.
* include/std/text_encoding: New file.
* src/Makefile.am: Add new subdirectory.
* src/Makefile.in: Regenerate.
* src/c++26/Makefile.am: New file.
* src/c++26/Makefile.in: New file.
* src/c++26/text_encoding.cc: New file.
* src/experimental/Makefile.am: Include c++26 convenience
library.
* src/experimental/Makefile.in: Regenerate.
* python/libstdcxx/v6/printers.py (StdTextEncodingPrinter): New
printer.
* scripts/gen_text_encoding_data.py: New file.
* testsuite/22_locale/locale/encoding.cc: New test.
* testsuite/ext/unicode/charset_alias_match.cc: New test.
* testsuite/std/text_encoding/cons.cc: New test.
* testsuite/std/text_encoding/members.cc: New test.
* testsuite/std/text_encoding/requirements.cc: New test.
Reviewed-by: Ulrich Drepper <drepper.fsp@gmail.com>
Reviewed-by: Patrick Palka <ppalka@redhat.com>
2024-01-15 23:42:50 +08:00
|
|
|
# For std::text_encoding
|
|
|
|
GLIBCXX_CHECK_TEXT_ENCODING
|
|
|
|
|
run_doxygen: Allow doxygen 1.7.1 again.
2010-12-31 Benjamin Kosnik <bkoz@redhat.com>
* scripts/run_doxygen: Allow doxygen 1.7.1 again.
* doc/xml/manual/build_hacking.xml: Update.
* doc/xml/images/confdeps.dot: Same.
* doc/xml/images/confdeps.png: Same.
* configure.ac: Define BUILD_INFO, BUILD_XML, BUILD_HTML,
BUILD_MAN, BUILD_PDF, BUILD_EPUB conditionally.
* Makefile.am (xml, html, pdf, man, info, pd, dvi, epub): Define,
and install rules.
* doc/Makefile.am: Same. Add stamp rules.
(doc-epub-docbook): Add.
(stamp-xml-single-docbook): Make set too.
* configure: Regenerate.
* Makefile.in: Same.
* doc/Makefile.in: Same.
* include/Makefile.in: Same.
* libsupc++/Makefile.in: Same.
* po/Makefile.in: Same.
* python/Makefile.in: Same.
* src/Makefile.in: Same.
* testsuite/Makefile.in: Same.
* aclocal.m4: Same.
2010-12-31 Benjamin Kosnik <bkoz@redhat.com>
* doc/doxygen/user.cfg.in: Disable PDF_HYPERLINKS.
From-SVN: r168382
2011-01-01 06:20:22 +08:00
|
|
|
# Define documentation rules conditionally.
|
|
|
|
|
|
|
|
# See if makeinfo has been installed and is modern enough
|
|
|
|
# that we can use it.
|
|
|
|
ACX_CHECK_PROG_VER([MAKEINFO], [makeinfo], [--version],
|
|
|
|
[GNU texinfo.* \([0-9][0-9.]*\)],
|
|
|
|
[4.[4-9]*|4.[1-9][0-9]*|[5-9]*|[1-9][0-9]*])
|
|
|
|
AM_CONDITIONAL(BUILD_INFO, test $gcc_cv_prog_makeinfo_modern = "yes")
|
|
|
|
|
|
|
|
# Check for doxygen
|
|
|
|
AC_CHECK_PROG([DOXYGEN], doxygen, yes, no)
|
|
|
|
AC_CHECK_PROG([DOT], dot, yes, no)
|
|
|
|
|
|
|
|
# Check for docbook
|
2019-02-27 19:25:44 +08:00
|
|
|
AC_CHECK_PROG([XMLCATALOG], xmlcatalog, yes, no)
|
run_doxygen: Allow doxygen 1.7.1 again.
2010-12-31 Benjamin Kosnik <bkoz@redhat.com>
* scripts/run_doxygen: Allow doxygen 1.7.1 again.
* doc/xml/manual/build_hacking.xml: Update.
* doc/xml/images/confdeps.dot: Same.
* doc/xml/images/confdeps.png: Same.
* configure.ac: Define BUILD_INFO, BUILD_XML, BUILD_HTML,
BUILD_MAN, BUILD_PDF, BUILD_EPUB conditionally.
* Makefile.am (xml, html, pdf, man, info, pd, dvi, epub): Define,
and install rules.
* doc/Makefile.am: Same. Add stamp rules.
(doc-epub-docbook): Add.
(stamp-xml-single-docbook): Make set too.
* configure: Regenerate.
* Makefile.in: Same.
* doc/Makefile.in: Same.
* include/Makefile.in: Same.
* libsupc++/Makefile.in: Same.
* po/Makefile.in: Same.
* python/Makefile.in: Same.
* src/Makefile.in: Same.
* testsuite/Makefile.in: Same.
* aclocal.m4: Same.
2010-12-31 Benjamin Kosnik <bkoz@redhat.com>
* doc/doxygen/user.cfg.in: Disable PDF_HYPERLINKS.
From-SVN: r168382
2011-01-01 06:20:22 +08:00
|
|
|
AC_CHECK_PROG([XSLTPROC], xsltproc, yes, no)
|
|
|
|
AC_CHECK_PROG([XMLLINT], xmllint, yes, no)
|
2011-03-08 08:04:05 +08:00
|
|
|
GLIBCXX_CONFIGURE_DOCBOOK
|
run_doxygen: Allow doxygen 1.7.1 again.
2010-12-31 Benjamin Kosnik <bkoz@redhat.com>
* scripts/run_doxygen: Allow doxygen 1.7.1 again.
* doc/xml/manual/build_hacking.xml: Update.
* doc/xml/images/confdeps.dot: Same.
* doc/xml/images/confdeps.png: Same.
* configure.ac: Define BUILD_INFO, BUILD_XML, BUILD_HTML,
BUILD_MAN, BUILD_PDF, BUILD_EPUB conditionally.
* Makefile.am (xml, html, pdf, man, info, pd, dvi, epub): Define,
and install rules.
* doc/Makefile.am: Same. Add stamp rules.
(doc-epub-docbook): Add.
(stamp-xml-single-docbook): Make set too.
* configure: Regenerate.
* Makefile.in: Same.
* doc/Makefile.in: Same.
* include/Makefile.in: Same.
* libsupc++/Makefile.in: Same.
* po/Makefile.in: Same.
* python/Makefile.in: Same.
* src/Makefile.in: Same.
* testsuite/Makefile.in: Same.
* aclocal.m4: Same.
2010-12-31 Benjamin Kosnik <bkoz@redhat.com>
* doc/doxygen/user.cfg.in: Disable PDF_HYPERLINKS.
From-SVN: r168382
2011-01-01 06:20:22 +08:00
|
|
|
|
|
|
|
# Check for xml/html dependencies.
|
|
|
|
AM_CONDITIONAL(BUILD_XML,
|
|
|
|
test $ac_cv_prog_DOXYGEN = "yes" &&
|
|
|
|
test $ac_cv_prog_DOT = "yes" &&
|
|
|
|
test $ac_cv_prog_XSLTPROC = "yes" &&
|
|
|
|
test $ac_cv_prog_XMLLINT = "yes" &&
|
|
|
|
test $glibcxx_stylesheets = "yes")
|
|
|
|
|
|
|
|
AM_CONDITIONAL(BUILD_HTML,
|
|
|
|
test $ac_cv_prog_DOXYGEN = "yes" &&
|
|
|
|
test $ac_cv_prog_DOT = "yes" &&
|
|
|
|
test $ac_cv_prog_XSLTPROC = "yes" &&
|
|
|
|
test $ac_cv_prog_XMLLINT = "yes" &&
|
|
|
|
test $glibcxx_stylesheets = "yes")
|
|
|
|
|
|
|
|
# Check for man dependencies.
|
|
|
|
AM_CONDITIONAL(BUILD_MAN,
|
|
|
|
test $ac_cv_prog_DOXYGEN = "yes" &&
|
|
|
|
test $ac_cv_prog_DOT = "yes")
|
|
|
|
|
2012-01-18 07:39:21 +08:00
|
|
|
# Check for pdf dependencies.
|
run_doxygen: Allow doxygen 1.7.1 again.
2010-12-31 Benjamin Kosnik <bkoz@redhat.com>
* scripts/run_doxygen: Allow doxygen 1.7.1 again.
* doc/xml/manual/build_hacking.xml: Update.
* doc/xml/images/confdeps.dot: Same.
* doc/xml/images/confdeps.png: Same.
* configure.ac: Define BUILD_INFO, BUILD_XML, BUILD_HTML,
BUILD_MAN, BUILD_PDF, BUILD_EPUB conditionally.
* Makefile.am (xml, html, pdf, man, info, pd, dvi, epub): Define,
and install rules.
* doc/Makefile.am: Same. Add stamp rules.
(doc-epub-docbook): Add.
(stamp-xml-single-docbook): Make set too.
* configure: Regenerate.
* Makefile.in: Same.
* doc/Makefile.in: Same.
* include/Makefile.in: Same.
* libsupc++/Makefile.in: Same.
* po/Makefile.in: Same.
* python/Makefile.in: Same.
* src/Makefile.in: Same.
* testsuite/Makefile.in: Same.
* aclocal.m4: Same.
2010-12-31 Benjamin Kosnik <bkoz@redhat.com>
* doc/doxygen/user.cfg.in: Disable PDF_HYPERLINKS.
From-SVN: r168382
2011-01-01 06:20:22 +08:00
|
|
|
AC_CHECK_PROG([DBLATEX], dblatex, yes, no)
|
|
|
|
AC_CHECK_PROG([PDFLATEX], pdflatex, yes, no)
|
|
|
|
AM_CONDITIONAL(BUILD_PDF,
|
2019-07-02 10:30:52 +08:00
|
|
|
test $ac_cv_prog_DOXYGEN = "yes" &&
|
|
|
|
test $ac_cv_prog_DOT = "yes" &&
|
|
|
|
test $ac_cv_prog_XSLTPROC = "yes" &&
|
|
|
|
test $ac_cv_prog_XMLLINT = "yes" &&
|
run_doxygen: Allow doxygen 1.7.1 again.
2010-12-31 Benjamin Kosnik <bkoz@redhat.com>
* scripts/run_doxygen: Allow doxygen 1.7.1 again.
* doc/xml/manual/build_hacking.xml: Update.
* doc/xml/images/confdeps.dot: Same.
* doc/xml/images/confdeps.png: Same.
* configure.ac: Define BUILD_INFO, BUILD_XML, BUILD_HTML,
BUILD_MAN, BUILD_PDF, BUILD_EPUB conditionally.
* Makefile.am (xml, html, pdf, man, info, pd, dvi, epub): Define,
and install rules.
* doc/Makefile.am: Same. Add stamp rules.
(doc-epub-docbook): Add.
(stamp-xml-single-docbook): Make set too.
* configure: Regenerate.
* Makefile.in: Same.
* doc/Makefile.in: Same.
* include/Makefile.in: Same.
* libsupc++/Makefile.in: Same.
* po/Makefile.in: Same.
* python/Makefile.in: Same.
* src/Makefile.in: Same.
* testsuite/Makefile.in: Same.
* aclocal.m4: Same.
2010-12-31 Benjamin Kosnik <bkoz@redhat.com>
* doc/doxygen/user.cfg.in: Disable PDF_HYPERLINKS.
From-SVN: r168382
2011-01-01 06:20:22 +08:00
|
|
|
test $ac_cv_prog_DBLATEX = "yes" &&
|
|
|
|
test $ac_cv_prog_PDFLATEX = "yes")
|
|
|
|
|
2018-02-16 04:56:41 +08:00
|
|
|
case "$build" in
|
|
|
|
*-*-darwin* ) glibcxx_include_dir_notparallel=yes ;;
|
|
|
|
* ) glibcxx_include_dir_notparallel=no ;;
|
|
|
|
esac
|
|
|
|
AM_CONDITIONAL(INCLUDE_DIR_NOTPARALLEL,
|
|
|
|
test $glibcxx_include_dir_notparallel = "yes")
|
run_doxygen: Allow doxygen 1.7.1 again.
2010-12-31 Benjamin Kosnik <bkoz@redhat.com>
* scripts/run_doxygen: Allow doxygen 1.7.1 again.
* doc/xml/manual/build_hacking.xml: Update.
* doc/xml/images/confdeps.dot: Same.
* doc/xml/images/confdeps.png: Same.
* configure.ac: Define BUILD_INFO, BUILD_XML, BUILD_HTML,
BUILD_MAN, BUILD_PDF, BUILD_EPUB conditionally.
* Makefile.am (xml, html, pdf, man, info, pd, dvi, epub): Define,
and install rules.
* doc/Makefile.am: Same. Add stamp rules.
(doc-epub-docbook): Add.
(stamp-xml-single-docbook): Make set too.
* configure: Regenerate.
* Makefile.in: Same.
* doc/Makefile.in: Same.
* include/Makefile.in: Same.
* libsupc++/Makefile.in: Same.
* po/Makefile.in: Same.
* python/Makefile.in: Same.
* src/Makefile.in: Same.
* testsuite/Makefile.in: Same.
* aclocal.m4: Same.
2010-12-31 Benjamin Kosnik <bkoz@redhat.com>
* doc/doxygen/user.cfg.in: Disable PDF_HYPERLINKS.
From-SVN: r168382
2011-01-01 06:20:22 +08:00
|
|
|
|
2001-07-14 00:47:56 +08:00
|
|
|
# Propagate the target-specific source directories through the build chain.
|
2004-02-27 08:49:50 +08:00
|
|
|
ATOMICITY_SRCDIR=config/${atomicity_dir}
|
|
|
|
ATOMIC_WORD_SRCDIR=config/${atomic_word_dir}
|
2007-09-12 06:32:51 +08:00
|
|
|
ATOMIC_FLAGS=${atomic_flags}
|
2005-11-05 17:42:01 +08:00
|
|
|
CPU_DEFINES_SRCDIR=config/${cpu_defines_dir}
|
2003-07-04 15:14:54 +08:00
|
|
|
OS_INC_SRCDIR=config/${os_include_dir}
|
2007-09-07 12:18:40 +08:00
|
|
|
ERROR_CONSTANTS_SRCDIR=config/${error_constants_dir}
|
2004-07-03 07:40:19 +08:00
|
|
|
ABI_TWEAKS_SRCDIR=config/${abi_tweaks_dir}
|
2012-09-17 21:02:39 +08:00
|
|
|
CPU_OPT_EXT_RANDOM=config/${cpu_opt_ext_random}
|
2012-09-26 21:10:26 +08:00
|
|
|
CPU_OPT_BITS_RANDOM=config/${cpu_opt_bits_random}
|
2004-02-27 08:49:50 +08:00
|
|
|
AC_SUBST(ATOMICITY_SRCDIR)
|
|
|
|
AC_SUBST(ATOMIC_WORD_SRCDIR)
|
2007-09-12 06:32:51 +08:00
|
|
|
AC_SUBST(ATOMIC_FLAGS)
|
2005-11-05 17:42:01 +08:00
|
|
|
AC_SUBST(CPU_DEFINES_SRCDIR)
|
2004-07-03 07:40:19 +08:00
|
|
|
AC_SUBST(ABI_TWEAKS_SRCDIR)
|
2003-07-04 15:14:54 +08:00
|
|
|
AC_SUBST(OS_INC_SRCDIR)
|
2007-09-07 12:18:40 +08:00
|
|
|
AC_SUBST(ERROR_CONSTANTS_SRCDIR)
|
2012-09-17 21:02:39 +08:00
|
|
|
AC_SUBST(CPU_OPT_EXT_RANDOM)
|
2012-09-26 21:10:26 +08:00
|
|
|
AC_SUBST(CPU_OPT_BITS_RANDOM)
|
2003-07-04 15:14:54 +08:00
|
|
|
|
2020-05-16 05:46:08 +08:00
|
|
|
# Conditionalize the makefile for this target machine.
|
|
|
|
tmake_file_=
|
|
|
|
for f in ${tmake_file}
|
|
|
|
do
|
|
|
|
if test -f ${srcdir}/config/$f
|
|
|
|
then
|
|
|
|
tmake_file_="${tmake_file_} \$(srcdir)/config/$f"
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
tmake_file="${tmake_file_}"
|
|
|
|
AC_SUBST(tmake_file)
|
2006-05-30 04:00:29 +08:00
|
|
|
|
2017-11-18 05:28:10 +08:00
|
|
|
# Add CET specific flags if Intel CET is enabled.
|
|
|
|
GCC_CET_FLAGS(CET_FLAGS)
|
|
|
|
EXTRA_CXX_FLAGS="$EXTRA_CXX_FLAGS $CET_FLAGS"
|
|
|
|
EXTRA_CFLAGS="$EXTRA_CFLAGS $CET_FLAGS"
|
|
|
|
AC_SUBST(EXTRA_CFLAGS)
|
|
|
|
AC_SUBST(EXTRA_CXX_FLAGS)
|
|
|
|
|
2003-08-05 10:00:18 +08:00
|
|
|
# Determine cross-compile flags and AM_CONDITIONALs.
|
|
|
|
#AC_SUBST(GLIBCXX_IS_NATIVE)
|
acinclude.m4 (GLIBCXX_EXPORT_INCLUDES): Remove LIBMATH_INCLUDES and LIBSUPCXX_INCLUDES.
2003-08-17 Phil Edwards <pme@gcc.gnu.org>
* acinclude.m4 (GLIBCXX_EXPORT_INCLUDES): Remove LIBMATH_INCLUDES
and LIBSUPCXX_INCLUDES. Re-purpose TOPLEVEL_INCLUDES to refer to
things from the top level.
* configure.ac (GLIBCXX_IS_NATIVE): Determine earlier and re-order.
Comment out the conditionals for CANADIAN and GLIBCXX_BUILD_LIBMATH
(currently unused). Strip the fake-VPATH shell fragment from
automake-generated rules, if present.
* linkage.m4: Add comment.
* fragment.am: New file, containing factored-out common settings.
(AM_CPPFLAGS): Absorb the deprecated INCLUDES variable contents.
* Makefile.am: Include fragment.am. Remove common variables.
* include/Makefile.am: Likewise.
* libmath/Makefile.am: Likewise.
* libsupc++/Makefile.am: Likewise.
* po/Makefile.am: Likewise. Print rules during check.
* src/Makefile.am: Likewise.
* testsuite/Makefile.am: Likewise.
* aclocal.m4, configure, Makefile.in, include/Makefile.in,
libmath/Makefile.in, libsupc++/Makefile.in, po/Makefile.in,
src/Makefile.in, testsuite/Makefile.in: Regenerate.
From-SVN: r70522
2003-08-18 04:23:12 +08:00
|
|
|
#AM_CONDITIONAL(CANADIAN, test $CANADIAN = yes)
|
acinclude.m4 (GLIBCXX_CONDITIONAL): New macro.
2003-08-27 Phil Edwards <pme@gcc.gnu.org>
* acinclude.m4 (GLIBCXX_CONDITIONAL): New macro. Wrap
AM_CONDITIONAL. Replace all calls to AM_CONDITIONAL with this one.
(GLIBCXX_ENABLE_HOSTED): New macro, sets new variable is_hosted,
used elsewhere in this file.
(GLIBCXX_EVALUATE_CONDITIONALS): New macro...
* configure.ac: ...called here to expand all conditionals.
* Makefile.am: Conditionalize SUBDIRS on GLIBCXX_HOSTED.
* include/Makefile.am: Remove redundant gxx_include_dir assignment.
(install-freestanding-headers): New target, a subset of
install-headers. Conditionalize install-data-local on GLIBCXX_HOSTED.
* aclocal.m4, configure, Makefile.in, include/Makefile.in,
libmath/Makefile.in, libsupc++/Makefile.in, po/Makefile.in,
src/Makefile.in, testsuite/Makefile.in: Regenerated.
From-SVN: r70854
2003-08-28 03:06:56 +08:00
|
|
|
GLIBCXX_EVALUATE_CONDITIONALS
|
run_doxygen: Allow doxygen 1.7.1 again.
2010-12-31 Benjamin Kosnik <bkoz@redhat.com>
* scripts/run_doxygen: Allow doxygen 1.7.1 again.
* doc/xml/manual/build_hacking.xml: Update.
* doc/xml/images/confdeps.dot: Same.
* doc/xml/images/confdeps.png: Same.
* configure.ac: Define BUILD_INFO, BUILD_XML, BUILD_HTML,
BUILD_MAN, BUILD_PDF, BUILD_EPUB conditionally.
* Makefile.am (xml, html, pdf, man, info, pd, dvi, epub): Define,
and install rules.
* doc/Makefile.am: Same. Add stamp rules.
(doc-epub-docbook): Add.
(stamp-xml-single-docbook): Make set too.
* configure: Regenerate.
* Makefile.in: Same.
* doc/Makefile.in: Same.
* include/Makefile.in: Same.
* libsupc++/Makefile.in: Same.
* po/Makefile.in: Same.
* python/Makefile.in: Same.
* src/Makefile.in: Same.
* testsuite/Makefile.in: Same.
* aclocal.m4: Same.
2010-12-31 Benjamin Kosnik <bkoz@redhat.com>
* doc/doxygen/user.cfg.in: Disable PDF_HYPERLINKS.
From-SVN: r168382
2011-01-01 06:20:22 +08:00
|
|
|
|
2000-10-30 06:32:30 +08:00
|
|
|
AC_CACHE_SAVE
|
2000-04-22 04:33:34 +08:00
|
|
|
|
2003-08-05 10:00:18 +08:00
|
|
|
if test ${multilib} = yes; then
|
2000-04-22 04:33:34 +08:00
|
|
|
multilib_arg="--enable-multilib"
|
|
|
|
else
|
|
|
|
multilib_arg=
|
|
|
|
fi
|
|
|
|
|
acinclude.m4 (GLIBCXX_EXPORT_INCLUDES): Remove LIBMATH_INCLUDES and LIBSUPCXX_INCLUDES.
2003-08-17 Phil Edwards <pme@gcc.gnu.org>
* acinclude.m4 (GLIBCXX_EXPORT_INCLUDES): Remove LIBMATH_INCLUDES
and LIBSUPCXX_INCLUDES. Re-purpose TOPLEVEL_INCLUDES to refer to
things from the top level.
* configure.ac (GLIBCXX_IS_NATIVE): Determine earlier and re-order.
Comment out the conditionals for CANADIAN and GLIBCXX_BUILD_LIBMATH
(currently unused). Strip the fake-VPATH shell fragment from
automake-generated rules, if present.
* linkage.m4: Add comment.
* fragment.am: New file, containing factored-out common settings.
(AM_CPPFLAGS): Absorb the deprecated INCLUDES variable contents.
* Makefile.am: Include fragment.am. Remove common variables.
* include/Makefile.am: Likewise.
* libmath/Makefile.am: Likewise.
* libsupc++/Makefile.am: Likewise.
* po/Makefile.am: Likewise. Print rules during check.
* src/Makefile.am: Likewise.
* testsuite/Makefile.am: Likewise.
* aclocal.m4, configure, Makefile.in, include/Makefile.in,
libmath/Makefile.in, libsupc++/Makefile.in, po/Makefile.in,
src/Makefile.in, testsuite/Makefile.in: Regenerate.
From-SVN: r70522
2003-08-18 04:23:12 +08:00
|
|
|
# Export all the install information.
|
2003-07-05 12:05:45 +08:00
|
|
|
GLIBCXX_EXPORT_INSTALL_INFO
|
2000-10-15 16:45:33 +08:00
|
|
|
|
2002-12-17 03:02:01 +08:00
|
|
|
# Export all the include and flag information to Makefiles.
|
2003-07-05 12:05:45 +08:00
|
|
|
GLIBCXX_EXPORT_INCLUDES
|
|
|
|
GLIBCXX_EXPORT_FLAGS
|
2000-10-12 19:45:23 +08:00
|
|
|
|
2017-01-17 17:38:48 +08:00
|
|
|
# Determine what GCC version number to use in filesystem paths.
|
|
|
|
GCC_BASE_VER
|
|
|
|
|
2003-08-05 10:00:18 +08:00
|
|
|
dnl In autoconf 2.5x, AC_OUTPUT is replaced by four AC_CONFIG_* macros,
|
|
|
|
dnl which can all be called multiple times as needed, plus one (different)
|
2003-10-21 02:27:17 +08:00
|
|
|
dnl AC_OUTPUT macro. This one lists the files to be created:
|
2009-09-03 06:11:54 +08:00
|
|
|
AC_CONFIG_FILES(Makefile)
|
2003-08-05 10:00:18 +08:00
|
|
|
AC_CONFIG_FILES([scripts/testsuite_flags],[chmod +x scripts/testsuite_flags])
|
2010-12-01 21:55:16 +08:00
|
|
|
AC_CONFIG_FILES([scripts/extract_symvers],[chmod +x scripts/extract_symvers])
|
2012-08-29 09:37:16 +08:00
|
|
|
AC_CONFIG_FILES([doc/xsl/customization.xsl])
|
2021-11-15 19:08:06 +08:00
|
|
|
AC_CONFIG_FILES([src/libbacktrace/backtrace-supported.h])
|
2003-08-05 10:00:18 +08:00
|
|
|
|
2009-09-03 06:11:54 +08:00
|
|
|
# Multilibs need MULTISUBDIR defined correctly in certain makefiles so
|
|
|
|
# that multilib installs will end up installed in the correct place.
|
|
|
|
# The testsuite needs it for multilib-aware ABI baseline files.
|
|
|
|
# To work around this not being passed down from config-ml.in ->
|
|
|
|
# srcdir/Makefile.am -> srcdir/{src,libsupc++,...}/Makefile.am, manually
|
|
|
|
# append it here. Only modify Makefiles that have just been created.
|
|
|
|
#
|
|
|
|
# Also, get rid of this simulated-VPATH thing that automake does.
|
|
|
|
AC_CONFIG_FILES(AC_FOREACH([DIR], glibcxx_SUBDIRS, [DIR/Makefile ]),
|
|
|
|
[cat > vpsed$$ << \_EOF
|
acinclude.m4 (GLIBCXX_EXPORT_INCLUDES): Remove LIBMATH_INCLUDES and LIBSUPCXX_INCLUDES.
2003-08-17 Phil Edwards <pme@gcc.gnu.org>
* acinclude.m4 (GLIBCXX_EXPORT_INCLUDES): Remove LIBMATH_INCLUDES
and LIBSUPCXX_INCLUDES. Re-purpose TOPLEVEL_INCLUDES to refer to
things from the top level.
* configure.ac (GLIBCXX_IS_NATIVE): Determine earlier and re-order.
Comment out the conditionals for CANADIAN and GLIBCXX_BUILD_LIBMATH
(currently unused). Strip the fake-VPATH shell fragment from
automake-generated rules, if present.
* linkage.m4: Add comment.
* fragment.am: New file, containing factored-out common settings.
(AM_CPPFLAGS): Absorb the deprecated INCLUDES variable contents.
* Makefile.am: Include fragment.am. Remove common variables.
* include/Makefile.am: Likewise.
* libmath/Makefile.am: Likewise.
* libsupc++/Makefile.am: Likewise.
* po/Makefile.am: Likewise. Print rules during check.
* src/Makefile.am: Likewise.
* testsuite/Makefile.am: Likewise.
* aclocal.m4, configure, Makefile.in, include/Makefile.in,
libmath/Makefile.in, libsupc++/Makefile.in, po/Makefile.in,
src/Makefile.in, testsuite/Makefile.in: Regenerate.
From-SVN: r70522
2003-08-18 04:23:12 +08:00
|
|
|
s!`test -f '$<' || echo '$(srcdir)/'`!!
|
|
|
|
_EOF
|
2009-09-03 06:11:54 +08:00
|
|
|
sed -f vpsed$$ $ac_file > tmp$$
|
|
|
|
mv tmp$$ $ac_file
|
|
|
|
rm vpsed$$
|
2009-09-07 21:38:27 +08:00
|
|
|
echo 'MULTISUBDIR =' >> $ac_file
|
|
|
|
ml_norecursion=yes
|
|
|
|
. ${multi_basedir}/config-ml.in
|
|
|
|
AS_UNSET([ml_norecursion])
|
2003-08-05 10:00:18 +08:00
|
|
|
])
|
|
|
|
|
2009-09-03 06:11:54 +08:00
|
|
|
AC_CONFIG_COMMANDS([generate-headers],
|
|
|
|
[(cd include && ${MAKE-make} pch_build= )])
|
|
|
|
|
2003-08-05 10:00:18 +08:00
|
|
|
dnl And this actually makes things happen:
|
|
|
|
AC_OUTPUT
|