libstdc++-v3 with MCST patches

This commit is contained in:
Nobody 2022-08-11 23:09:28 +03:00 committed by Alibek Omarov
parent f3201d7ce6
commit 791447f986
43 changed files with 9439 additions and 126 deletions

View File

@ -24,7 +24,7 @@ include $(top_srcdir)/fragment.am
if GLIBCXX_HOSTED
## Note that python must come after src.
hosted_source = src doc po testsuite python
hosted_source = src
endif
## Keep this list sync'd with acinclude.m4:GLIBCXX_CONFIGURE.

View File

@ -51,13 +51,10 @@ POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
DIST_COMMON = $(top_srcdir)/fragment.am README ChangeLog \
$(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/configure $(am__configure_deps) \
$(srcdir)/config.h.in $(srcdir)/../mkinstalldirs \
$(top_srcdir)/scripts/testsuite_flags.in \
$(top_srcdir)/scripts/extract_symvers.in \
$(top_srcdir)/doc/xsl/customization.xsl.in
DIST_COMMON = $(top_srcdir)/fragment.am $(srcdir)/Makefile.in \
$(srcdir)/Makefile.am $(top_srcdir)/configure \
$(am__configure_deps) $(srcdir)/config.h.in \
$(srcdir)/../mkinstalldirs
subdir = .
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/../config/acx.m4 \
@ -87,8 +84,7 @@ am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
configure.lineno config.status.lineno
CONFIG_HEADER = config.h
CONFIG_CLEAN_FILES = scripts/testsuite_flags scripts/extract_symvers \
doc/xsl/customization.xsl
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
depcomp =
am__depfiles_maybe =
@ -117,7 +113,7 @@ AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
$(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS
ETAGS = etags
CTAGS = ctags
DIST_SUBDIRS = include libsupc++ src doc po testsuite python
DIST_SUBDIRS = include libsupc++ src
ABI_TWEAKS_SRCDIR = @ABI_TWEAKS_SRCDIR@
ACLOCAL = @ACLOCAL@
ALLOCATOR_H = @ALLOCATOR_H@
@ -342,7 +338,7 @@ WARN_CXXFLAGS = \
# -I/-D flags to pass when compiling.
AM_CPPFLAGS = $(GLIBCXX_INCLUDES) $(CPPFLAGS)
@GLIBCXX_HOSTED_TRUE@hosted_source = src doc po testsuite python
@GLIBCXX_HOSTED_TRUE@hosted_source = src
SUBDIRS = include libsupc++ $(hosted_source)
ACLOCAL_AMFLAGS = -I . -I .. -I ../config
@BUILD_XML_FALSE@STAMP_XML =
@ -467,12 +463,6 @@ $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps)
distclean-hdr:
-rm -f config.h stamp-h1
scripts/testsuite_flags: $(top_builddir)/config.status $(top_srcdir)/scripts/testsuite_flags.in
cd $(top_builddir) && $(SHELL) ./config.status $@
scripts/extract_symvers: $(top_builddir)/config.status $(top_srcdir)/scripts/extract_symvers.in
cd $(top_builddir) && $(SHELL) ./config.status $@
doc/xsl/customization.xsl: $(top_builddir)/config.status $(top_srcdir)/doc/xsl/customization.xsl.in
cd $(top_builddir) && $(SHELL) ./config.status $@
mostlyclean-libtool:
-rm -f *.lo

View File

@ -49,7 +49,7 @@ AC_DEFUN([GLIBCXX_CONFIGURE], [
# Keep these sync'd with the list in Makefile.am. The first provides an
# expandable list at autoconf time; the second provides an expandable list
# (i.e., shell variable) at configure time.
m4_define([glibcxx_SUBDIRS],[include libsupc++ src src/c++98 src/c++11 src/filesystem doc po testsuite python])
m4_define([glibcxx_SUBDIRS],[include libsupc++ src src/c++98 src/c++11 src/filesystem])
SUBDIRS='glibcxx_SUBDIRS'
# These need to be absolute paths, yet at the same time need to
@ -816,7 +816,7 @@ AC_DEFUN([GLIBCXX_EXPORT_INSTALL_INFO], [
glibcxx_toolexecdir='${libdir}/gcc/${host_alias}'
glibcxx_toolexeclibdir='${libdir}'
fi
multi_os_directory=`$CXX -print-multi-os-directory`
multi_os_directory=.
case $multi_os_directory in
.) ;; # Avoid trailing /.
*) glibcxx_toolexeclibdir=$glibcxx_toolexeclibdir/$multi_os_directory ;;

View File

@ -1985,6 +1985,7 @@ CXXABI_1.3 {
__cxa_begin_catch;
__cxa_begin_cleanup;
__cxa_call_unexpected;
__cxa_call_terminate;
__cxa_current_exception_type;
__cxa_demangle;
__cxa_end_catch;

View File

@ -0,0 +1,66 @@
// Locale support -*- C++ -*-
// Copyright (C) 2002-2015 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 3, or (at your option)
// any later version.
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// Under Section 7 of GPL version 3, you are granted additional
// permissions described in the GCC Runtime Library Exception, version
// 3.1, as published by the Free Software Foundation.
// You should have received a copy of the GNU General Public License and
// a copy of the GCC Runtime Library Exception along with this program;
// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
// <http://www.gnu.org/licenses/>.
/** @file bits/ctype_base.h
* This is an internal header file, included by other library headers.
* Do not attempt to use it directly. @headername{locale}
*/
//
// ISO C++ 14882: 22.1 Locales
//
// Information as gleaned from /usr/include/ctype.h.
namespace std _GLIBCXX_VISIBILITY(default)
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
/// @brief Base class for ctype.
struct ctype_base
{
// Non-standard typedefs.
typedef const unsigned char* __to_type;
// NB: Offsets into ctype<char>::_M_table force a particular size
// on the mask type. Because of this, we don't use an enum.
typedef short mask;
static const mask upper = _UP;
static const mask lower = _LO;
static const mask alpha = _LO | _UP | _XA;
static const mask digit = _DI;
static const mask xdigit = _XD;
static const mask space = _CN | _SP | _XS;
static const mask print = _DI | _LO | _PU | _SP | _UP | _XA;
static const mask graph = _DI | _LO | _PU | _UP | _XA;
static const mask cntrl = _BB;
static const mask punct = _PU;
static const mask alnum = _DI | _LO | _UP | _XA;
#if __cplusplus >= 201103L
static const mask blank = _SP | _XB;
#endif
};
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace

View File

@ -0,0 +1,97 @@
// Locale support -*- C++ -*-
// Copyright (C) 2011-2015 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 3, or (at your option)
// any later version.
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// Under Section 7 of GPL version 3, you are granted additional
// permissions described in the GCC Runtime Library Exception, version
// 3.1, as published by the Free Software Foundation.
// You should have received a copy of the GNU General Public License and
// a copy of the GCC Runtime Library Exception along with this program;
// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
// <http://www.gnu.org/licenses/>.
/** @file ctype_configure_char.cc */
//
// ISO C++ 14882: 22.1 Locales
//
#include <locale>
#include <cstdlib>
#include <cstring>
namespace std _GLIBCXX_VISIBILITY(default)
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
// Information as gleaned from /usr/include/ctype.h
const ctype_base::mask*
ctype<char>::classic_table() throw()
{ return 0; }
ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
size_t __refs)
: facet(__refs), _M_del(__table != 0 && __del),
_M_toupper(NULL), _M_tolower(NULL), _M_table(__table ? __table : _Ctype)
{
memset(_M_widen, 0, sizeof(_M_widen));
_M_widen_ok = 0;
memset(_M_narrow, 0, sizeof(_M_narrow));
_M_narrow_ok = 0;
}
ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
: facet(__refs), _M_del(__table != 0 && __del),
_M_toupper(NULL), _M_tolower(NULL), _M_table(__table ? __table : _Ctype)
{
memset(_M_widen, 0, sizeof(_M_widen));
_M_widen_ok = 0;
memset(_M_narrow, 0, sizeof(_M_narrow));
_M_narrow_ok = 0;
}
char
ctype<char>::do_toupper(char __c) const
{ return ::toupper((int) __c); }
const char*
ctype<char>::do_toupper(char* __low, const char* __high) const
{
while (__low < __high)
{
*__low = ::toupper((int) *__low);
++__low;
}
return __high;
}
char
ctype<char>::do_tolower(char __c) const
{ return ::tolower((int) __c); }
const char*
ctype<char>::do_tolower(char* __low, const char* __high) const
{
while (__low < __high)
{
*__low = ::tolower((int) *__low);
++__low;
}
return __high;
}
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace

View File

@ -0,0 +1,74 @@
// Locale support -*- C++ -*-
// Copyright (C) 2002-2015 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 3, or (at your option)
// any later version.
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// Under Section 7 of GPL version 3, you are granted additional
// permissions described in the GCC Runtime Library Exception, version
// 3.1, as published by the Free Software Foundation.
// You should have received a copy of the GNU General Public License and
// a copy of the GCC Runtime Library Exception along with this program;
// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
// <http://www.gnu.org/licenses/>.
/** @file bits/ctype_inline.h
* This is an internal header file, included by other library headers.
* Do not attempt to use it directly. @headername{locale}
*/
//
// ISO C++ 14882: 22.1 Locales
//
// ctype bits to be inlined go here. Non-inlinable (ie virtual do_*)
// functions go in ctype.cc
namespace std _GLIBCXX_VISIBILITY(default)
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
bool
ctype<char>::
is(mask __m, char __c) const
{ return _M_table[(unsigned char)(__c)] & __m; }
const char*
ctype<char>::
is(const char* __low, const char* __high, mask* __vec) const
{
while (__low < __high)
*__vec++ = _M_table[*__low++];
return __high;
}
const char*
ctype<char>::
scan_is(mask __m, const char* __low, const char* __high) const
{
while (__low < __high && !this->is(__m, *__low))
++__low;
return __low;
}
const char*
ctype<char>::
scan_not(mask __m, const char* __low, const char* __high) const
{
while (__low < __high && this->is(__m, *__low) != 0)
++__low;
return __low;
}
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace

View File

@ -0,0 +1,36 @@
// Specific definitions for QNX 6.1 -*- C++ -*-
// Copyright (C) 2002-2015 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
// terms of the GNU General Public License as published by the
// Free Software Foundation; either version 3, or (at your option)
// any later version.
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// Under Section 7 of GPL version 3, you are granted additional
// permissions described in the GCC Runtime Library Exception, version
// 3.1, as published by the Free Software Foundation.
// You should have received a copy of the GNU General Public License and
// a copy of the GCC Runtime Library Exception along with this program;
// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
// <http://www.gnu.org/licenses/>.
#ifndef _GLIBCXX_OS_DEFINES
#define _GLIBCXX_OS_DEFINES 1
// System-specific #define, typedefs, corrections, etc, go here. This
// file will come before all others.
#if __cplusplus >= 199711L
#define __CORRECT_ISO_CPP_STRING_H_PROTO
#define __CORRECT_ISO_CPP_WCHAR_H_PROTO
#endif
#endif

View File

@ -4959,7 +4959,7 @@ $as_echo "$ac_cv_path_EGREP" >&6; }
# expandable list at autoconf time; the second provides an expandable list
# (i.e., shell variable) at configure time.
SUBDIRS='include libsupc++ src src/c++98 src/c++11 src/filesystem doc po testsuite python'
SUBDIRS='include libsupc++ src src/c++98 src/c++11 src/filesystem'
# These need to be absolute paths, yet at the same time need to
# canonicalize only relative paths, because then amd will not unmount
@ -8698,7 +8698,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
*nto* | *qnx*)
# QNX uses GNU C++, but need to define -shared option too, otherwise
# it will coredump.
lt_prog_compiler_pic='-fPIC -shared'
lt_prog_compiler_pic='-fPIC'
;;
sysv4*MP*)
@ -8825,7 +8825,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
*nto* | *qnx*)
# QNX uses GNU C++, but need to define -shared option too, otherwise
# it will coredump.
lt_prog_compiler_pic='-fPIC -shared'
lt_prog_compiler_pic='-fPIC'
;;
osf3* | osf4* | osf5*)
@ -13576,7 +13576,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
*qnx* | *nto*)
# QNX uses GNU C++, but need to define -shared option too, otherwise
# it will coredump.
lt_prog_compiler_pic_CXX='-fPIC -shared'
lt_prog_compiler_pic_CXX='-fPIC'
;;
*)
lt_prog_compiler_pic_CXX='-fPIC'
@ -13726,7 +13726,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; }
*qnx* | *nto*)
# QNX uses GNU C++, but need to define -shared option too, otherwise
# it will coredump.
lt_prog_compiler_pic_CXX='-fPIC -shared'
lt_prog_compiler_pic_CXX='-fPIC'
;;
osf3* | osf4* | osf5*)
case $cc_basename in
@ -21811,7 +21811,7 @@ done
# Only do link tests if native. Else, hardcode.
if $GLIBCXX_IS_NATIVE; then
if $GLIBCXX_IS_NATIVE || true; then
# We can do more elaborate tests that assume a working linker.
CANADIAN=no
@ -79557,7 +79557,7 @@ int
main ()
{
#if !defined __LONG_DOUBLE_128__ || (defined(__sparc__) && defined(__arch64__))
#if !defined __LONG_DOUBLE_128__ || (defined(__sparc__) && defined(__arch64__)) || defined __LCC__
#error no need for long double compatibility
#endif
@ -81599,7 +81599,7 @@ $as_echo "$version_specific_libs" >&6; }
glibcxx_toolexecdir='${libdir}/gcc/${host_alias}'
glibcxx_toolexeclibdir='${libdir}'
fi
multi_os_directory=`$CXX -print-multi-os-directory`
multi_os_directory=.
case $multi_os_directory in
.) ;; # Avoid trailing /.
*) glibcxx_toolexeclibdir=$glibcxx_toolexeclibdir/$multi_os_directory ;;
@ -81667,12 +81667,9 @@ fi
ac_config_files="$ac_config_files Makefile"
ac_config_files="$ac_config_files scripts/testsuite_flags"
ac_config_files="$ac_config_files scripts/extract_symvers"
ac_config_files="$ac_config_files doc/xsl/customization.xsl"
#AC_CONFIG_FILES([scripts/testsuite_flags],[chmod +x scripts/testsuite_flags])
#AC_CONFIG_FILES([scripts/extract_symvers],[chmod +x scripts/extract_symvers])
#AC_CONFIG_FILES([doc/xsl/customization.xsl])
# Multilibs need MULTISUBDIR defined correctly in certain makefiles so
# that multilib installs will end up installed in the correct place.
@ -81682,7 +81679,7 @@ ac_config_files="$ac_config_files doc/xsl/customization.xsl"
# 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_config_files include/Makefile libsupc++/Makefile src/Makefile src/c++98/Makefile src/c++11/Makefile src/filesystem/Makefile doc/Makefile po/Makefile testsuite/Makefile python/Makefile"
ac_config_files="$ac_config_files include/Makefile libsupc++/Makefile src/Makefile src/c++98/Makefile src/c++11/Makefile src/filesystem/Makefile"
ac_config_commands="$ac_config_commands generate-headers"
@ -82901,19 +82898,12 @@ do
"libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
"include/gstdint.h") CONFIG_COMMANDS="$CONFIG_COMMANDS include/gstdint.h" ;;
"Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
"scripts/testsuite_flags") CONFIG_FILES="$CONFIG_FILES scripts/testsuite_flags" ;;
"scripts/extract_symvers") CONFIG_FILES="$CONFIG_FILES scripts/extract_symvers" ;;
"doc/xsl/customization.xsl") CONFIG_FILES="$CONFIG_FILES doc/xsl/customization.xsl" ;;
"include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;;
"libsupc++/Makefile") CONFIG_FILES="$CONFIG_FILES libsupc++/Makefile" ;;
"src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
"src/c++98/Makefile") CONFIG_FILES="$CONFIG_FILES src/c++98/Makefile" ;;
"src/c++11/Makefile") CONFIG_FILES="$CONFIG_FILES src/c++11/Makefile" ;;
"src/filesystem/Makefile") CONFIG_FILES="$CONFIG_FILES src/filesystem/Makefile" ;;
"doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
"po/Makefile") CONFIG_FILES="$CONFIG_FILES po/Makefile" ;;
"testsuite/Makefile") CONFIG_FILES="$CONFIG_FILES testsuite/Makefile" ;;
"python/Makefile") CONFIG_FILES="$CONFIG_FILES python/Makefile" ;;
"generate-headers") CONFIG_COMMANDS="$CONFIG_COMMANDS generate-headers" ;;
*) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
@ -84689,8 +84679,6 @@ else
fi
;;
"scripts/testsuite_flags":F) chmod +x scripts/testsuite_flags ;;
"scripts/extract_symvers":F) chmod +x scripts/extract_symvers ;;
"include/Makefile":F) cat > vpsed$$ << \_EOF
s!`test -f '$<' || echo '$(srcdir)/'`!!
_EOF
@ -84748,50 +84736,6 @@ _EOF
;;
"src/filesystem/Makefile":F) cat > vpsed$$ << \_EOF
s!`test -f '$<' || echo '$(srcdir)/'`!!
_EOF
sed -f vpsed$$ $ac_file > tmp$$
mv tmp$$ $ac_file
rm vpsed$$
echo 'MULTISUBDIR =' >> $ac_file
ml_norecursion=yes
. ${multi_basedir}/config-ml.in
{ ml_norecursion=; unset ml_norecursion;}
;;
"doc/Makefile":F) cat > vpsed$$ << \_EOF
s!`test -f '$<' || echo '$(srcdir)/'`!!
_EOF
sed -f vpsed$$ $ac_file > tmp$$
mv tmp$$ $ac_file
rm vpsed$$
echo 'MULTISUBDIR =' >> $ac_file
ml_norecursion=yes
. ${multi_basedir}/config-ml.in
{ ml_norecursion=; unset ml_norecursion;}
;;
"po/Makefile":F) cat > vpsed$$ << \_EOF
s!`test -f '$<' || echo '$(srcdir)/'`!!
_EOF
sed -f vpsed$$ $ac_file > tmp$$
mv tmp$$ $ac_file
rm vpsed$$
echo 'MULTISUBDIR =' >> $ac_file
ml_norecursion=yes
. ${multi_basedir}/config-ml.in
{ ml_norecursion=; unset ml_norecursion;}
;;
"testsuite/Makefile":F) cat > vpsed$$ << \_EOF
s!`test -f '$<' || echo '$(srcdir)/'`!!
_EOF
sed -f vpsed$$ $ac_file > tmp$$
mv tmp$$ $ac_file
rm vpsed$$
echo 'MULTISUBDIR =' >> $ac_file
ml_norecursion=yes
. ${multi_basedir}/config-ml.in
{ ml_norecursion=; unset ml_norecursion;}
;;
"python/Makefile":F) cat > vpsed$$ << \_EOF
s!`test -f '$<' || echo '$(srcdir)/'`!!
_EOF
sed -f vpsed$$ $ac_file > tmp$$
mv tmp$$ $ac_file

View File

@ -240,7 +240,7 @@ sys/resource.h sys/sem.h sys/stat.h sys/time.h sys/types.h unistd.h \
wchar.h wctype.h])
# Only do link tests if native. Else, hardcode.
if $GLIBCXX_IS_NATIVE; then
if $GLIBCXX_IS_NATIVE || true; then
# We can do more elaborate tests that assume a working linker.
CANADIAN=no
@ -382,7 +382,7 @@ case "$target" in
s390*-*-linux* | \
alpha*-*-linux*)
AC_TRY_COMPILE(, [
#if !defined __LONG_DOUBLE_128__ || (defined(__sparc__) && defined(__arch64__))
#if !defined __LONG_DOUBLE_128__ || (defined(__sparc__) && defined(__arch64__)) || defined __LCC__
#error no need for long double compatibility
#endif
], [ac_ldbl_compat=yes], [ac_ldbl_compat=no])
@ -516,9 +516,9 @@ 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)
dnl AC_OUTPUT macro. This one lists the files to be created:
AC_CONFIG_FILES(Makefile)
AC_CONFIG_FILES([scripts/testsuite_flags],[chmod +x scripts/testsuite_flags])
AC_CONFIG_FILES([scripts/extract_symvers],[chmod +x scripts/extract_symvers])
AC_CONFIG_FILES([doc/xsl/customization.xsl])
#AC_CONFIG_FILES([scripts/testsuite_flags],[chmod +x scripts/testsuite_flags])
#AC_CONFIG_FILES([scripts/extract_symvers],[chmod +x scripts/extract_symvers])
#AC_CONFIG_FILES([doc/xsl/customization.xsl])
# Multilibs need MULTISUBDIR defined correctly in certain makefiles so
# that multilib installs will end up installed in the correct place.

View File

@ -289,6 +289,9 @@ case "${host_os}" in
netbsd*)
os_include_dir="os/bsd/netbsd"
;;
nto-qnx6.5.*)
os_include_dir="os/nto-qnx6.5"
;;
openbsd*)
os_include_dir="os/bsd/openbsd"
;;

View File

@ -57,8 +57,10 @@
#define _BACKWARD_BINDERS_H 1
// Suppress deprecated warning for this file.
#ifndef __LCC__ // suppress unrecognized pragma warning
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
#endif // __LCC__
namespace std _GLIBCXX_VISIBILITY(default)
{
@ -177,6 +179,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace
#ifndef __LCC__ // suppress unrecognized pragma warning
#pragma GCC diagnostic pop
#endif // __LCC__
#endif /* _BACKWARD_BINDERS_H */

View File

@ -624,43 +624,155 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__pointer_type
operator++() noexcept
#if defined(__LCC__) && defined(__ptr128__) /* mcstbug #124127 */
{
memory_order const m = memory_order_seq_cst;
__pointer_type p_new, p_old;
do
{
p_old = load(m);
p_new = p_old + 1;
}
while (! __atomic_compare_exchange(&_M_p, &p_old, &p_new, 0, m, m));
return p_new;
}
#else
{ return __atomic_add_fetch(&_M_p, _M_type_size(1),
memory_order_seq_cst); }
#endif
__pointer_type
operator++() volatile noexcept
#if defined(__LCC__) && defined(__ptr128__) /* mcstbug #124127 */
{
memory_order const m = memory_order_seq_cst;
__pointer_type p_new, p_old;
do
{
p_old = load(m);
p_new = p_old + 1;
}
while (! __atomic_compare_exchange(&_M_p, &p_old, &p_new, 0, m, m));
return p_new;
}
#else
{ return __atomic_add_fetch(&_M_p, _M_type_size(1),
memory_order_seq_cst); }
#endif
__pointer_type
operator--() noexcept
#if defined(__LCC__) && defined(__ptr128__) /* mcstbug #124127 */
{
memory_order const m = memory_order_seq_cst;
__pointer_type p_new, p_old;
do
{
p_old = load(m);
p_new = p_old - 1;
}
while (! __atomic_compare_exchange(&_M_p, &p_old, &p_new, 0, m, m));
return p_new;
}
#else
{ return __atomic_sub_fetch(&_M_p, _M_type_size(1),
memory_order_seq_cst); }
#endif
__pointer_type
operator--() volatile noexcept
#if defined(__LCC__) && defined(__ptr128__) /* mcstbug #124127 */
{
memory_order const m = memory_order_seq_cst;
__pointer_type p_new, p_old;
do
{
p_old = load(m);
p_new = p_old - 1;
}
while (! __atomic_compare_exchange(&_M_p, &p_old, &p_new, 0, m, m));
return p_new;
}
#else
{ return __atomic_sub_fetch(&_M_p, _M_type_size(1),
memory_order_seq_cst); }
#endif
__pointer_type
operator+=(ptrdiff_t __d) noexcept
#if defined(__LCC__) && defined(__ptr128__) /* mcstbug #124127 */
{
memory_order const m = memory_order_seq_cst;
__pointer_type p_new, p_old;
do
{
p_old = load(m);
p_new = p_old + __d;
}
while (! __atomic_compare_exchange(&_M_p, &p_old, &p_new, 0, m, m));
return p_new;
}
#else
{ return __atomic_add_fetch(&_M_p, _M_type_size(__d),
memory_order_seq_cst); }
#endif
__pointer_type
operator+=(ptrdiff_t __d) volatile noexcept
#if defined(__LCC__) && defined(__ptr128__) /* mcstbug #124127 */
{
memory_order const m = memory_order_seq_cst;
__pointer_type p_new, p_old;
do
{
p_old = load(m);
p_new = p_old + __d;
}
while (! __atomic_compare_exchange(&_M_p, &p_old, &p_new, 0, m, m));
return p_new;
}
#else
{ return __atomic_add_fetch(&_M_p, _M_type_size(__d),
memory_order_seq_cst); }
#endif
__pointer_type
operator-=(ptrdiff_t __d) noexcept
#if defined(__LCC__) && defined(__ptr128__) /* mcstbug #124127 */
{
memory_order const m = memory_order_seq_cst;
__pointer_type p_new, p_old;
do
{
p_old = load(m);
p_new = p_old - __d;
}
while (! __atomic_compare_exchange(&_M_p, &p_old, &p_new, 0, m, m));
return p_new;
}
#else
{ return __atomic_sub_fetch(&_M_p, _M_type_size(__d),
memory_order_seq_cst); }
#endif
__pointer_type
operator-=(ptrdiff_t __d) volatile noexcept
#if defined(__LCC__) && defined(__ptr128__) /* mcstbug #124127 */
{
memory_order const m = memory_order_seq_cst;
__pointer_type p_new, p_old;
do
{
p_old = load(m);
p_new = p_old - __d;
}
while (! __atomic_compare_exchange(&_M_p, &p_old, &p_new, 0, m, m));
return p_new;
}
#else
{ return __atomic_sub_fetch(&_M_p, _M_type_size(__d),
memory_order_seq_cst); }
#endif
bool
is_lock_free() const noexcept
@ -688,7 +800,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__glibcxx_assert(__b != memory_order_acq_rel);
__glibcxx_assert(__b != memory_order_consume);
#if defined(__LCC__) && defined(__ptr128__) /* mcstbug #124127 */
__atomic_store(&_M_p, &__p, __m);
#else
__atomic_store_n(&_M_p, __p, __m);
#endif
}
_GLIBCXX_ALWAYS_INLINE void
@ -700,7 +816,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__glibcxx_assert(__b != memory_order_acq_rel);
__glibcxx_assert(__b != memory_order_consume);
#if defined(__LCC__) && defined(__ptr128__) /* mcstbug #124127 */
__atomic_store(&_M_p, &__p, __m);
#else
__atomic_store_n(&_M_p, __p, __m);
#endif
}
_GLIBCXX_ALWAYS_INLINE __pointer_type
@ -710,7 +830,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__glibcxx_assert(__b != memory_order_release);
__glibcxx_assert(__b != memory_order_acq_rel);
#if defined(__LCC__) && defined(__ptr128__) /* mcstbug #124127 */
__pointer_type ret;
__atomic_load(&_M_p, &ret, __m);
return ret;
#else
return __atomic_load_n(&_M_p, __m);
#endif
}
_GLIBCXX_ALWAYS_INLINE __pointer_type
@ -720,14 +846,26 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__glibcxx_assert(__b != memory_order_release);
__glibcxx_assert(__b != memory_order_acq_rel);
#if defined(__LCC__) && defined(__ptr128__) /* mcstbug #124127 */
__pointer_type ret;
__atomic_load(&_M_p, &ret, __m);
return ret;
#else
return __atomic_load_n(&_M_p, __m);
#endif
}
_GLIBCXX_ALWAYS_INLINE __pointer_type
exchange(__pointer_type __p,
memory_order __m = memory_order_seq_cst) noexcept
{
#if defined(__LCC__) && defined(__ptr128__) /* mcstbug #124127 */
__pointer_type ret;
__atomic_exchange(&_M_p, &__p, &ret, __m);
return ret;
#else
return __atomic_exchange_n(&_M_p, __p, __m);
#endif
}
@ -735,7 +873,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
exchange(__pointer_type __p,
memory_order __m = memory_order_seq_cst) volatile noexcept
{
#if defined(__LCC__) && defined(__ptr128__) /* mcstbug #124127 */
__pointer_type ret;
__atomic_exchange(&_M_p, &__p, &ret, __m);
return ret;
#else
return __atomic_exchange_n(&_M_p, __p, __m);
#endif
}
_GLIBCXX_ALWAYS_INLINE bool
@ -749,7 +893,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__glibcxx_assert(__b2 != memory_order_acq_rel);
__glibcxx_assert(__b2 <= __b1);
#if defined(__LCC__) && defined(__ptr128__) /* mcstbug #124127 */
return __atomic_compare_exchange(&_M_p, &__p1, &__p2, 0, __m1, __m2);
#else
return __atomic_compare_exchange_n(&_M_p, &__p1, __p2, 0, __m1, __m2);
#endif
}
_GLIBCXX_ALWAYS_INLINE bool
@ -764,28 +912,88 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__glibcxx_assert(__b2 != memory_order_acq_rel);
__glibcxx_assert(__b2 <= __b1);
#if defined(__LCC__) && defined(__ptr128__) /* mcstbug #124127 */
return __atomic_compare_exchange(&_M_p, &__p1, &__p2, 0, __m1, __m2);
#else
return __atomic_compare_exchange_n(&_M_p, &__p1, __p2, 0, __m1, __m2);
#endif
}
_GLIBCXX_ALWAYS_INLINE __pointer_type
fetch_add(ptrdiff_t __d,
memory_order __m = memory_order_seq_cst) noexcept
#if defined(__LCC__) && defined(__ptr128__) /* mcstbug #124127 */
{
__pointer_type p_new, p_old;
do
{
p_old = load(__m);
p_new = p_old + __d;
}
while (! __atomic_compare_exchange(&_M_p, &p_old, &p_new, 0,
__m, __m));
return p_old;
}
#else
{ return __atomic_fetch_add(&_M_p, _M_type_size(__d), __m); }
#endif
_GLIBCXX_ALWAYS_INLINE __pointer_type
fetch_add(ptrdiff_t __d,
memory_order __m = memory_order_seq_cst) volatile noexcept
#if defined(__LCC__) && defined(__ptr128__) /* mcstbug #124127 */
{
__pointer_type p_new, p_old;
do
{
p_old = load(__m);
p_new = p_old + __d;
}
while (! __atomic_compare_exchange(&_M_p, &p_old, &p_new, 0,
__m, __m));
return p_old;
}
#else
{ return __atomic_fetch_add(&_M_p, _M_type_size(__d), __m); }
#endif
_GLIBCXX_ALWAYS_INLINE __pointer_type
fetch_sub(ptrdiff_t __d,
memory_order __m = memory_order_seq_cst) noexcept
#if defined(__LCC__) && defined(__ptr128__) /* mcstbug #124127 */
{
__pointer_type p_new, p_old;
do
{
p_old = load(__m);
p_new = p_old - __d;
}
while (! __atomic_compare_exchange(&_M_p, &p_old, &p_new, 0,
__m, __m));
return p_old;
}
#else
{ return __atomic_fetch_sub(&_M_p, _M_type_size(__d), __m); }
#endif
_GLIBCXX_ALWAYS_INLINE __pointer_type
fetch_sub(ptrdiff_t __d,
memory_order __m = memory_order_seq_cst) volatile noexcept
#if defined(__LCC__) && defined(__ptr128__) /* mcstbug #124127 */
{
__pointer_type p_new, p_old;
do
{
p_old = load(__m);
p_new = p_old - __d;
}
while (! __atomic_compare_exchange(&_M_p, &p_old, &p_new, 0,
__m, __m));
return p_old;
}
#else
{ return __atomic_fetch_sub(&_M_p, _M_type_size(__d), __m); }
#endif
};
// @} group atomics

View File

@ -257,7 +257,11 @@ namespace __gnu_cxx
inline namespace __cxx11 __attribute__((__abi_tag__ ("cxx11"))) { }
}
# define _GLIBCXX_NAMESPACE_CXX11 __cxx11::
#ifdef __LCC__ // suppress warning
# define _GLIBCXX_BEGIN_NAMESPACE_CXX11 inline namespace __cxx11 {
#else // __LCC__
# define _GLIBCXX_BEGIN_NAMESPACE_CXX11 namespace __cxx11 {
#endif // __LCC__
# define _GLIBCXX_END_NAMESPACE_CXX11 }
# define _GLIBCXX_DEFAULT_ABI_TAG _GLIBCXX_ABI_TAG_CXX11
#else

View File

@ -1627,7 +1627,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
+ __x * __param._M_lp1p;
}
#ifdef __LCC__ // libstdc++/71434
__reject = __reject || __x + __np >= __thr;
#else // __LCC__
__reject |= __x + __np >= __thr;
#endif // __LCC__
}
while (__reject);

View File

@ -112,6 +112,19 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__find_if(_RandomAccessIterator __first, _RandomAccessIterator __last,
_Predicate __pred, random_access_iterator_tag)
{
#ifdef __LCC__
typename iterator_traits<_RandomAccessIterator>::difference_type
__trip_count = (__last - __first);
#pragma loop count(9)
for (; __trip_count > 0; --__trip_count)
{
if (__pred(__first))
return __first;
++__first;
}
return __first;
#else // __LCC__
typename iterator_traits<_RandomAccessIterator>::difference_type
__trip_count = (__last - __first) >> 2;
@ -152,6 +165,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
default:
return __last;
}
#endif // __LCC__
}
template<typename _Iterator, typename _Predicate>

View File

@ -489,7 +489,18 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
_Bit_pointer
_M_allocate(size_t __n)
#if ! (defined (__e2k__) && defined (__ptr128__))
{ return _Bit_alloc_traits::allocate(_M_impl, _S_nword(__n)); }
#else /* defined (__e2k__) && defined (__ptr128__) */
{
/* To zero-out certain bits in the allocated _Bit_pointer they may very
well apply logical AND to its uninitalized value. Therefore, take
care of initializing it in PM. */
_Bit_pointer res = _Bit_alloc_traits::allocate(_M_impl, _S_nword(__n));
std::fill(res, res + _S_nword(__n), 0);
return res;
}
#endif /* defined (__e2k__) && defined (__ptr128__) */
void
_M_deallocate()

View File

@ -797,8 +797,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
size_t
operator()(const unique_ptr<_Tp, _Dp>& __u) const noexcept
{
#if defined(__LCC__) && defined(__QNXNTO__) // _UP is a macro in QNX-libc
typedef unique_ptr<_Tp, _Dp> _Up;
return std::hash<typename _Up::pointer>()(__u.get());
#else // defined(__LCC__) && defined(__QNXNTO__)
typedef unique_ptr<_Tp, _Dp> _UP;
return std::hash<typename _UP::pointer>()(__u.get());
#endif // defined(__LCC__) && defined(__QNXNTO__)
}
};

View File

@ -439,6 +439,22 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return _Expr<_Closure, _Tp>(_Closure(__v)); \
}
#if defined(__LCC__) && defined(__QNXNTO__) // libstdc++ names conflict with QNX-libc names
_DEFINE_EXPR_UNARY_FUNCTION(abs, _Abs_)
_DEFINE_EXPR_UNARY_FUNCTION(cos, _Cos_)
_DEFINE_EXPR_UNARY_FUNCTION(acos, _Acos_)
_DEFINE_EXPR_UNARY_FUNCTION(cosh, _Cosh_)
_DEFINE_EXPR_UNARY_FUNCTION(sin, _Sin_)
_DEFINE_EXPR_UNARY_FUNCTION(asin, _Asin_)
_DEFINE_EXPR_UNARY_FUNCTION(sinh, _Sinh_)
_DEFINE_EXPR_UNARY_FUNCTION(tan, _Tan_)
_DEFINE_EXPR_UNARY_FUNCTION(tanh, _Tanh_)
_DEFINE_EXPR_UNARY_FUNCTION(atan, _Atan_)
_DEFINE_EXPR_UNARY_FUNCTION(exp, _Exp_)
_DEFINE_EXPR_UNARY_FUNCTION(log, _Log_)
_DEFINE_EXPR_UNARY_FUNCTION(log10, _Log10_)
_DEFINE_EXPR_UNARY_FUNCTION(sqrt, _Sqrt_)
#else // defined(__LCC__) && defined(__QNXNTO__)
_DEFINE_EXPR_UNARY_FUNCTION(abs, _Abs)
_DEFINE_EXPR_UNARY_FUNCTION(cos, _Cos)
_DEFINE_EXPR_UNARY_FUNCTION(acos, _Acos)
@ -453,6 +469,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_DEFINE_EXPR_UNARY_FUNCTION(log, _Log)
_DEFINE_EXPR_UNARY_FUNCTION(log10, _Log10)
_DEFINE_EXPR_UNARY_FUNCTION(sqrt, _Sqrt)
#endif // defined(__LCC__) && defined(__QNXNTO__)
#undef _DEFINE_EXPR_UNARY_FUNCTION

View File

@ -60,98 +60,154 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// 2) efficiency -- object functions can be easily inlined
// 3) be Koenig-lookup-friendly
#if defined(__LCC__) && defined(__QNXNTO__) // libstdc++ names conflict with QNX-libc names
struct _Abs_
#else // defined(__LCC__) && defined(__QNXNTO__)
struct _Abs
#endif // defined(__LCC__) && defined(__QNXNTO__)
{
template<typename _Tp>
_Tp operator()(const _Tp& __t) const
{ return abs(__t); }
};
#if defined(__LCC__) && defined(__QNXNTO__) // libstdc++ names conflict with QNX-libc names
struct _Cos_
#else // defined(__LCC__) && defined(__QNXNTO__)
struct _Cos
#endif // defined(__LCC__) && defined(__QNXNTO__)
{
template<typename _Tp>
_Tp operator()(const _Tp& __t) const
{ return cos(__t); }
};
#if defined(__LCC__) && defined(__QNXNTO__) // libstdc++ names conflict with QNX-libc names
struct _Acos_
#else // defined(__LCC__) && defined(__QNXNTO__)
struct _Acos
#endif // defined(__LCC__) && defined(__QNXNTO__)
{
template<typename _Tp>
_Tp operator()(const _Tp& __t) const
{ return acos(__t); }
};
#if defined(__LCC__) && defined(__QNXNTO__) // libstdc++ names conflict with QNX-libc names
struct _Cosh_
#else // defined(__LCC__) && defined(__QNXNTO__)
struct _Cosh
#endif // defined(__LCC__) && defined(__QNXNTO__)
{
template<typename _Tp>
_Tp operator()(const _Tp& __t) const
{ return cosh(__t); }
};
#if defined(__LCC__) && defined(__QNXNTO__) // libstdc++ names conflict with QNX-libc names
struct _Sin_
#else // defined(__LCC__) && defined(__QNXNTO__)
struct _Sin
#endif // defined(__LCC__) && defined(__QNXNTO__)
{
template<typename _Tp>
_Tp operator()(const _Tp& __t) const
{ return sin(__t); }
};
#if defined(__LCC__) && defined(__QNXNTO__) // libstdc++ names conflict with QNX-libc names
struct _Asin_
#else // defined(__LCC__) && defined(__QNXNTO__)
struct _Asin
#endif // defined(__LCC__) && defined(__QNXNTO__)
{
template<typename _Tp>
_Tp operator()(const _Tp& __t) const
{ return asin(__t); }
};
#if defined(__LCC__) && defined(__QNXNTO__) // libstdc++ names conflict with QNX-libc names
struct _Sinh_
#else // defined(__LCC__) && defined(__QNXNTO__)
struct _Sinh
#endif // defined(__LCC__) && defined(__QNXNTO__)
{
template<typename _Tp>
_Tp operator()(const _Tp& __t) const
{ return sinh(__t); }
};
#if defined(__LCC__) && defined(__QNXNTO__) // libstdc++ names conflict with QNX-libc names
struct _Tan_
#else // defined(__LCC__) && defined(__QNXNTO__)
struct _Tan
#endif // defined(__LCC__) && defined(__QNXNTO__)
{
template<typename _Tp>
_Tp operator()(const _Tp& __t) const
{ return tan(__t); }
};
#if defined(__LCC__) && defined(__QNXNTO__) // libstdc++ names conflict with QNX-libc names
struct _Atan_
#else // defined(__LCC__) && defined(__QNXNTO__)
struct _Atan
#endif // defined(__LCC__) && defined(__QNXNTO__)
{
template<typename _Tp>
_Tp operator()(const _Tp& __t) const
{ return atan(__t); }
};
#if defined(__LCC__) && defined(__QNXNTO__) // libstdc++ names conflict with QNX-libc names
struct _Tanh_
#else // defined(__LCC__) && defined(__QNXNTO__)
struct _Tanh
#endif // defined(__LCC__) && defined(__QNXNTO__)
{
template<typename _Tp>
_Tp operator()(const _Tp& __t) const
{ return tanh(__t); }
};
#if defined(__LCC__) && defined(__QNXNTO__) // libstdc++ names conflict with QNX-libc names
struct _Exp_
#else // defined(__LCC__) && defined(__QNXNTO__)
struct _Exp
#endif // defined(__LCC__) && defined(__QNXNTO__)
{
template<typename _Tp>
_Tp operator()(const _Tp& __t) const
{ return exp(__t); }
};
#if defined(__LCC__) && defined(__QNXNTO__) // libstdc++ names conflict with QNX-libc names
struct _Log_
#else // defined(__LCC__) && defined(__QNXNTO__)
struct _Log
#endif // defined(__LCC__) && defined(__QNXNTO__)
{
template<typename _Tp>
_Tp operator()(const _Tp& __t) const
{ return log(__t); }
};
#if defined(__LCC__) && defined(__QNXNTO__) // libstdc++ names conflict with QNX-libc names
struct _Log10_
#else // defined(__LCC__) && defined(__QNXNTO__)
struct _Log10
#endif // defined(__LCC__) && defined(__QNXNTO__)
{
template<typename _Tp>
_Tp operator()(const _Tp& __t) const
{ return log10(__t); }
};
#if defined(__LCC__) && defined(__QNXNTO__) // libstdc++ names conflict with QNX-libc names
struct _Sqrt_
#else // defined(__LCC__) && defined(__QNXNTO__)
struct _Sqrt
#endif // defined(__LCC__) && defined(__QNXNTO__)
{
template<typename _Tp>
_Tp operator()(const _Tp& __t) const

View File

@ -39,8 +39,10 @@
#endif
// Suppress deprecated warning for this file.
#ifndef __LCC__ // suppress unrecognized pragma warning
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
#endif // __LCC__
namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
{
@ -177,6 +179,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace
#ifndef __LCC__ // suppress unrecognized pragma warning
#pragma GCC diagnostic pop
#endif // __LCC__
#endif

View File

@ -59,9 +59,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
struct _Tune
{
// Compile time constants for the default _Tune values.
#if ! (defined (__e2k__) && defined (__ptr128__))
enum { _S_align = 8 };
#else /* defined (__e2k__) && defined (__ptr128__) */
enum { _S_align = 16 };
#endif /* defined (__e2k__) && defined (__ptr128__) */
enum { _S_max_bytes = 128 };
#if ! (defined (__e2k__) && defined (__ptr128__))
enum { _S_min_bin = 8 };
#else /* defined (__e2k__) && defined (__ptr128__) */
enum { _S_min_bin = 16 };
#endif /* defined (__e2k__) && defined (__ptr128__) */
enum { _S_chunk_size = 4096 - 4 * sizeof(void*) };
enum { _S_max_threads = 4096 };
enum { _S_freelist_headroom = 10 };

View File

@ -79,7 +79,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{
protected:
#if ! (defined (__e2k__) && defined (__ptr128__))
enum { _S_align = 8 };
#else /* defined (__e2k__) && defined (__ptr128__) */
enum { _S_align = 16 };
#endif /* defined (__e2k__) && defined (__ptr128__) */
enum { _S_max_bytes = 128 };
enum { _S_free_list_size = (size_t)_S_max_bytes / (size_t)_S_align };

View File

@ -58,10 +58,17 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
class codecvt_utf8 : public codecvt<_Elem, char, mbstate_t>
{
public:
#ifdef __LCC__
explicit
codecvt_utf8(size_t __refs = 0) { __builtin_abort(); } // mcstbug #122111
~codecvt_utf8() { __builtin_abort(); } // mcstbug #122111
#else /* __LCC__ */
explicit
codecvt_utf8(size_t __refs = 0);
~codecvt_utf8();
#endif /* __LCC__ */
};
template<typename _Elem, unsigned long _Maxcode = 0x10ffff,

View File

@ -121,7 +121,11 @@ align(size_t __align, size_t __size, void*& __ptr, size_t& __space) noexcept
else
{
__space -= __diff;
#if defined(__LCC__) && defined(__ptr128__)
return __ptr = __ptr + __diff;
#else
return __ptr = reinterpret_cast<void*>(__aligned);
#endif
}
}

View File

@ -341,7 +341,11 @@ _GLIBCXX_END_NAMESPACE_VERSION
// programs, because this_thread::get_id() != thread::id{} must be true.
// We know that pthread_t is an integral type in the GNU C library.
if (!__gthread_active_p())
#if defined(__LCC__) && defined(__e2k__) && defined(__ptr128__)
return thread::id(reinterpret_cast<thread::native_handle_type>(1));
#else // defined(__LCC__) && defined(__e2k__) && defined(__ptr128__)
return thread::id(1);
#endif // defined(__LCC__) && defined(__e2k__) && defined(__ptr128__)
#endif
return thread::id(__gthread_self());
}

View File

@ -41,7 +41,7 @@ headers = $(std_HEADERS) $(bits_HEADERS)
if GLIBCXX_HOSTED
c_sources = \
cp-demangle.c
cxa/decode.c
endif
sources = \
@ -119,14 +119,22 @@ endif
libsupc___la_SOURCES = $(sources) $(c_sources) $(vtv_sources)
libsupc__convenience_la_SOURCES = $(sources) $(c_sources) $(vtv_sources)
cp-demangle.c:
rm -f $@
$(LN_S) $(toplevel_srcdir)/libiberty/cp-demangle.c $@
cp-demangle.lo: cp-demangle.c
$(LTCOMPILE) -DIN_GLIBCPP_V3 -Wno-error -c $<
cp-demangle.o: cp-demangle.c
$(C_COMPILE) -DIN_GLIBCPP_V3 -Wno-error -c $<
CXA_INCLUDES = -I$(srcdir)/cxa
CXA_CFLAGS = -fbuilding-runtime -std=c++17 -fno-strict-aliasing -Wno-error
CXA_DECODE_CFLAGS = \
-DCOMPILE_DECODE_FOR_LIB_SRC=1 \
-DDEFAULT_EMULATE_GNU_ABI_BUGS=1 \
-DUSE_LONG_DOUBLE_FOR_HOST_FP_VALUE=1
decode.lo: cxa/decode.c
$(LTCXXCOMPILE) $(CXA_INCLUDES) $(CXA_CFLAGS) $(CXA_DECODE_CFLAGS) -c -xc++ $<
decode.o: cxa/decode.c
$(CXXCOMPILE) $(CXA_INCLUDES) $(CXA_CFLAGS) $(CXA_DECODE_CFLAGS) -c -xc++ $<
fundamental_type_info.lo: fundamental_type_info.cc
$(LTCXXCOMPILE) -fbuilding-runtime -std=gnu++14 -c $<
fundamental_type_info.o: fundamental_type_info.cc
$(CXXCOMPILE) -fbuilding-runtime -std=gnu++14 -c $<
# Use special rules for the C++11 sources so that the proper flags are passed.
bad_array_length.lo: bad_array_length.cc

View File

@ -131,7 +131,7 @@ am__objects_1 = array_type_info.lo atexit_arm.lo atexit_thread.lo \
del_opvsa.lo pbase_type_info.lo pmem_type_info.lo \
pointer_type_info.lo pure.lo si_class_type_info.lo tinfo.lo \
tinfo2.lo vec.lo vmi_class_type_info.lo vterminate.lo
@GLIBCXX_HOSTED_TRUE@am__objects_2 = cp-demangle.lo
@GLIBCXX_HOSTED_TRUE@am__objects_2 = decode.lo
@ENABLE_VTABLE_VERIFY_TRUE@@VTV_CYGMIN_FALSE@am__objects_3 = \
@ENABLE_VTABLE_VERIFY_TRUE@@VTV_CYGMIN_FALSE@ vtv_stubs.lo
am_libsupc___la_OBJECTS = $(am__objects_1) $(am__objects_2) \
@ -404,7 +404,7 @@ bits_HEADERS = \
headers = $(std_HEADERS) $(bits_HEADERS)
@GLIBCXX_HOSTED_TRUE@c_sources = \
@GLIBCXX_HOSTED_TRUE@ cp-demangle.c
@GLIBCXX_HOSTED_TRUE@ cxa/decode.c
sources = \
array_type_info.cc \
@ -476,6 +476,13 @@ sources = \
libsupc___la_SOURCES = $(sources) $(c_sources) $(vtv_sources)
libsupc__convenience_la_SOURCES = $(sources) $(c_sources) $(vtv_sources)
CXA_INCLUDES = -I$(srcdir)/cxa
CXA_CFLAGS = -fbuilding-runtime -std=c++17 -fno-strict-aliasing -Wno-error
CXA_DECODE_CFLAGS = \
-DCOMPILE_DECODE_FOR_LIB_SRC=1 \
-DDEFAULT_EMULATE_GNU_ABI_BUGS=1 \
-DUSE_LONG_DOUBLE_FOR_HOST_FP_VALUE=1
# AM_CXXFLAGS needs to be in each subdirectory so that it can be
# modified in a per-library or per-sub-library way. Need to manually
@ -852,13 +859,15 @@ uninstall-am: uninstall-bitsHEADERS uninstall-stdHEADERS \
uninstall-toolexeclibLTLIBRARIES
cp-demangle.c:
rm -f $@
$(LN_S) $(toplevel_srcdir)/libiberty/cp-demangle.c $@
cp-demangle.lo: cp-demangle.c
$(LTCOMPILE) -DIN_GLIBCPP_V3 -Wno-error -c $<
cp-demangle.o: cp-demangle.c
$(C_COMPILE) -DIN_GLIBCPP_V3 -Wno-error -c $<
decode.lo: cxa/decode.c
$(LTCXXCOMPILE) $(CXA_INCLUDES) $(CXA_CFLAGS) $(CXA_DECODE_CFLAGS) -c -xc++ $<
decode.o: cxa/decode.c
$(CXXCOMPILE) $(CXA_INCLUDES) $(CXA_CFLAGS) $(CXA_DECODE_CFLAGS) -c -xc++ $<
fundamental_type_info.lo: fundamental_type_info.cc
$(LTCXXCOMPILE) -fbuilding-runtime -std=gnu++14 -c $<
fundamental_type_info.o: fundamental_type_info.cc
$(CXXCOMPILE) -fbuilding-runtime -std=gnu++14 -c $<
# Use special rules for the C++11 sources so that the proper flags are passed.
bad_array_length.lo: bad_array_length.cc

View File

@ -0,0 +1,98 @@
/******************************************************************************
* \ ___ / *
* / \ *
* Edison Design Group C++ Runtime - | \^/ | - *
* \ / *
* / | | \ *
* Copyright 1992-2018 Edison Design Group Inc. [_] *
* *
******************************************************************************/
/*
Redistribution and use in source and binary forms are permitted
provided that the above copyright notice and this paragraph are
duplicated in all source code forms. The name of Edison Design
Group, Inc. may not be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
Any use of this software is at the user's own risk.
*/
/*
Declarations for all runtime routines.
*/
#ifndef BASICS_H
#define BASICS_H 1
/*
Include the header file that supplies the default configuration
parameters for this version.
*/
#include "defines.h"
/*
EXTERN is defined usually as "extern"; in the translation unit that
actually defines storage for external variables, it is defined as an
empty string. EXTERN is used on the declarations of external variables
in .h files. This scheme makes it easy to define them in only one
place while using the same source in all places. Likewise,
VAR_INITIALIZERS is defined to cause inclusion of initializers for those
variables.
*/
#ifndef EXTERN
#define EXTERN extern
#endif /* ifndef EXTERN */
#ifndef VAR_INITIALIZERS
#define VAR_INITIALIZERS 0
#endif /* ifndef VAR_INITIALIZERS */
/* Macro used to provide an initial value for variables declared EXTERN. */
#if VAR_INITIALIZERS
#define initial_value(value) = value
#else /* VAR_INITIALIZERS */
#define initial_value(value) /* nothing */
#endif /* VAR_INITIALIZERS */
#ifndef CHECKING
/* Include consistency-checking code. */
#define CHECKING 1
#endif /* ifndef CHECKING */
/*
EXTERN_C is used to declare an external function with C linkage. When
compiling with a C compiler this is just set to ``extern'', but when
compiling with a C++ compiler it is set to ``extern "C"''.
*/
#ifdef __cplusplus
#define EXTERN_C extern "C"
#else /* !defined(__cplusplus) */
#define EXTERN_C extern
#endif /* __cplusplus */
/*
Definition of a generic byte. Always "unsigned char".
*/
typedef unsigned char a_byte;
/* Simple boolean type: */
typedef int a_boolean;
typedef a_byte a_byte_boolean;
#define FALSE 0
#define TRUE 1
#endif /* BASICS_H */
/******************************************************************************
* \ ___ / *
* / \ *
* Edison Design Group C++ Runtime - | \^/ | - *
* \ / *
* / | | \ *
* Copyright 1992-2018 Edison Design Group Inc. [_] *
* *
******************************************************************************/

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,47 @@
/******************************************************************************
* \ ___ / *
* / \ *
* Edison Design Group C++/C Front End - | \^/ | - *
* \ / *
* / | | \ *
* Copyright 1996-2018 Edison Design Group Inc. [_] *
* *
******************************************************************************/
/*
Redistribution and use in source and binary forms are permitted
provided that the above copyright notice and this paragraph are
duplicated in all source code forms. The name of Edison Design
Group, Inc. may not be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
Any use of this software is at the user's own risk.
*/
/*
decode.h -- Declarations for decode.c (name demangler for C++).
*/
/* Avoid including these declarations more than once: */
#ifndef DECODE_H
#define DECODE_H 1
void decode_identifier(a_const_char *id,
char *output_buffer,
sizeof_t output_buffer_size,
a_boolean *err,
a_boolean *buffer_overflow_err,
sizeof_t *required_buffer_size);
#endif /* ifndef DECODE_H */
/******************************************************************************
* \ ___ / *
* / \ *
* Edison Design Group C++/C Front End - | \^/ | - *
* \ / *
* / | | \ *
* Copyright 1996-2018 Edison Design Group Inc. [_] *
* *
******************************************************************************/

View File

@ -0,0 +1,5 @@
/* Этих typedef'ов хватает для сборки decode.c (ошибка EDG). По-хорошему
* они должны быть в basics.h, но мы помещаем их сюда, чтобы не портить
* оригинальные исходники. */
typedef const char a_const_char;
typedef unsigned int uint32_t;

View File

@ -90,11 +90,20 @@ parse_lsda_header (_Unwind_Context *context, const unsigned char *p,
static const std::type_info *
get_ttype_entry (lsda_header_info *info, _uleb128_t i)
{
#if ! (defined (__e2k__) && defined (__ptr128__))
_Unwind_Ptr ptr;
#else /* defined (__e2k__) && defined (__ptr128__) */
void *ptr;
#endif /* defined (__e2k__) && defined (__ptr128__) */
i *= size_of_encoded_value (info->ttype_encoding);
read_encoded_value_with_base (info->ttype_encoding, info->ttype_base,
info->TType - i, &ptr);
#if ! (defined (__e2k__) && defined (__ptr128__))
read_encoded_value_with_base
#else /* defined (__e2k__) && defined (__ptr128__) */
read_encoded_ptr_with_base
#endif /* defined (__e2k__) && defined (__ptr128__) */
(info->ttype_encoding, info->ttype_base,
info->TType - i, &ptr);
return reinterpret_cast<const std::type_info *>(ptr);
}
@ -709,8 +718,13 @@ PERSONALITY_FUNCTION (int version,
/* For targets with pointers smaller than the word size, we must extend the
pointer, and this extension is target dependent. */
#if ! (defined (__e2k__) && defined (__ptr128__))
_Unwind_SetGR (context, __builtin_eh_return_data_regno (0),
__builtin_extend_pointer (ue_header));
#else /* defined (__e2k__) && defined (__ptr128__) */
_Unwind_SetGRPtr (context, __builtin_eh_return_data_regno (0), ue_header);
#endif /* defined (__e2k__) && defined (__ptr128__) */
_Unwind_SetGR (context, __builtin_eh_return_data_regno (1),
handler_switch_value);
_Unwind_SetIP (context, landing_pad);

View File

@ -33,3 +33,60 @@ __fundamental_type_info::
{}
}
#ifdef __LCC__
namespace std
{
/*
Define the type_info objects that are supposed to be present in the runtime
library. Try to work hard enough that the compiler won't eliminate the
generation of the type_info objects.
*/
const type_info *__dummy_typeinfo;
void __gen_dummy_typeinfos()
{
#define gen_typeinfos(type) \
__dummy_typeinfo = &typeid(type), \
__dummy_typeinfo = &typeid(type *), \
__dummy_typeinfo = &typeid(const type *)
gen_typeinfos(void);
gen_typeinfos(bool);
gen_typeinfos(wchar_t);
gen_typeinfos(char16_t);
gen_typeinfos(char32_t);
gen_typeinfos(char);
gen_typeinfos(signed char); gen_typeinfos(unsigned char);
gen_typeinfos(short); gen_typeinfos(unsigned short);
gen_typeinfos(int); gen_typeinfos(unsigned int);
gen_typeinfos(long); gen_typeinfos(unsigned long);
gen_typeinfos(long long); gen_typeinfos(unsigned long long);
gen_typeinfos(float);
gen_typeinfos(double);
gen_typeinfos(long double);
#if __EDG_CPP11_IL_EXTENSIONS_SUPPORTED
gen_typeinfos(decltype(nullptr));
#endif /* if __EDG_CPP11_IL_EXTENSIONS_SUPPORTED */
#if __EDG_FLOAT80_ENABLING_POSSIBLE
gen_typeinfos(__float80);
#endif /* if __EDG_FLOAT80_ENABLING_POSSIBLE */
#if __EDG_FLOAT128_ENABLING_POSSIBLE
gen_typeinfos(__float128);
#endif /* if __EDG_FLOAT128_ENABLING_POSSIBLE */
#if __EDG_FLOAT128_ENABLING_POSSIBLE
gen_typeinfos(__float128);
#endif /* if __EDG_FLOAT128_ENABLING_POSSIBLE */
#if __EDG_INT128_EXTENSIONS_ALLOWED && \
(defined(__GNUC__) || defined(__clang__))
/* These types are only available if the front end is running in GCC
emulation mode. */
gen_typeinfos(__int128_t);
gen_typeinfos(__uint128_t);
#endif /* if __EDG_INT128_EXTENSIONS_ALLOWED && defined(__GNUC__)...*/
#undef gen_typeinfos
}
} // namespace std
#endif // __LCC__

View File

@ -34,8 +34,12 @@
#if defined(__GTHREADS) && defined(__GTHREAD_HAS_COND) \
&& (ATOMIC_INT_LOCK_FREE > 1) && defined(_GLIBCXX_HAVE_LINUX_FUTEX)
# include <climits>
# include <syscall.h>
# include <unistd.h>
# if ! (defined (__e2k__) && defined (__ptr128__))
# include <syscall.h>
# include <unistd.h>
# else /* (defined (__e2k__) && defined (__ptr128__)) */
# include <e2k128/futex.h>
# endif /* (defined (__e2k__) && defined (__ptr128__)) */
# define _GLIBCXX_USE_FUTEX
# define _GLIBCXX_FUTEX_WAIT 0
# define _GLIBCXX_FUTEX_WAKE 1
@ -298,8 +302,12 @@ namespace __cxxabiv1
expected = newv;
}
syscall (SYS_futex, gi, _GLIBCXX_FUTEX_WAIT, expected, 0);
# if !(defined (__e2k__) && defined (__ptr128__))
syscall (SYS_futex,
# else /* (defined (__e2k__) && defined (__ptr128__)) */
futex (
# endif /* (defined (__e2k__) && defined (__ptr128__)) */
gi, _GLIBCXX_FUTEX_WAIT, expected, 0);
}
}
# else
@ -358,7 +366,12 @@ namespace __cxxabiv1
int old = __atomic_exchange_n (gi, 0, __ATOMIC_ACQ_REL);
if ((old & waiting_bit) != 0)
syscall (SYS_futex, gi, _GLIBCXX_FUTEX_WAKE, INT_MAX);
# if !(defined (__e2k__) && defined (__ptr128__))
syscall (SYS_futex,
# else /* (defined (__e2k__) && defined (__ptr128__)) */
futex (
# endif /* (defined (__e2k__) && defined (__ptr128__)) */
gi, _GLIBCXX_FUTEX_WAKE, INT_MAX);
return;
}
#elif defined(__GTHREAD_HAS_COND)
@ -398,7 +411,12 @@ namespace __cxxabiv1
int old = __atomic_exchange_n (gi, guard_bit, __ATOMIC_ACQ_REL);
if ((old & waiting_bit) != 0)
syscall (SYS_futex, gi, _GLIBCXX_FUTEX_WAKE, INT_MAX);
# if !(defined (__e2k__) && defined (__ptr128__))
syscall (SYS_futex,
# else /* (defined (__e2k__) && defined (__ptr128__)) */
futex (
# endif /* (defined (__e2k__) && defined (__ptr128__)) */
gi, _GLIBCXX_FUTEX_WAKE, INT_MAX);
return;
}
#elif defined(__GTHREAD_HAS_COND)

View File

@ -74,8 +74,11 @@ aligned_alloc (std::size_t al, std::size_t sz)
if (!malloc_ptr)
return nullptr;
// Align to the requested value, leaving room for the original malloc value.
#if defined(__LCC__) && defined(__ptr128__)
void* const aligned_ptr = malloc_ptr + (-(uintptr_t) malloc_ptr & (al - 1));
#else
void* const aligned_ptr = (void *) (((uintptr_t) malloc_ptr + al) & -al);
#endif
// Store the original malloc value where it can be found by operator delete.
((void **) aligned_ptr)[-1] = malloc_ptr;

View File

@ -42,8 +42,12 @@ operator== (const std::type_info& arg) const _GLIBCXX_NOEXCEPT
/* The name() method will strip any leading '*' prefix. Therefore
take care to look at __name rather than name() when looking for
the "pointer" prefix. */
#ifdef __LCC__
return (&arg == this) || (__builtin_strcmp (name (), arg.name ()) == 0);
#else // __LCC__
return (&arg == this)
|| (__name[0] != '*' && (__builtin_strcmp (name (), arg.name ()) == 0));
#endif // __LCC__
#endif
}

View File

@ -41,7 +41,11 @@ using namespace abi;
struct vtable_prefix
{
// Offset to most derived object.
#if defined(__LCC__) && defined(__ptr128__) /* óÍ. bug #105841. */
int whole_object __attribute__((__mode__(__pointer__)));
#else
ptrdiff_t whole_object;
#endif
// Additional padding if necessary.
#ifdef _GLIBCXX_VTABLE_PADDING

View File

@ -36,8 +36,12 @@ type_info::before (const type_info &arg) const _GLIBCXX_NOEXCEPT
#if __GXX_MERGED_TYPEINFO_NAMES
return name () < arg.name ();
#else
#ifdef __LCC__
return __builtin_strcmp (name (), arg.name ()) < 0;
#else // __LCC__
return (name ()[0] == '*') ? name () < arg.name ()
: __builtin_strcmp (name (), arg.name ()) < 0;
#endif // __LCC__
#endif
}

View File

@ -97,7 +97,11 @@ namespace std
/** Returns an @e implementation-defined byte string; this is not
* portable between compilers! */
const char* name() const _GLIBCXX_NOEXCEPT
#ifdef __LCC__
{ return __name; }
#else // __LCC__
{ return __name[0] == '*' ? __name + 1 : __name; }
#endif // __LCC__
#if !__GXX_TYPEINFO_EQUALITY_INLINE
// In old abi, or when weak symbols are not supported, there can
@ -112,6 +116,16 @@ namespace std
// Even with the new abi, on systems that support dlopen
// we can run into cases where type_info names aren't merged,
// so we still need to do string comparison.
#ifdef __LCC__
bool before(const type_info& __arg) const _GLIBCXX_NOEXCEPT
{ return __builtin_strcmp (__name, __arg.__name) < 0; }
bool operator==(const type_info& __arg) const _GLIBCXX_NOEXCEPT
{
return ((&__arg == this)
|| __builtin_strcmp (__name, __arg.__name) == 0);
}
#else // __LCC__
bool before(const type_info& __arg) const _GLIBCXX_NOEXCEPT
{ return (__name[0] == '*' && __arg.__name[0] == '*')
? __name < __arg.__name
@ -123,6 +137,7 @@ namespace std
|| (__name[0] != '*' &&
__builtin_strcmp (__name, __arg.__name) == 0));
}
#endif // __LCC__
#else
// On some targets we can rely on type_info's NTBS being unique,
// and therefore address comparisons are sufficient.

View File

@ -273,6 +273,9 @@ _txnal_cow_string_C1_for_exceptions(void* that, const char* s,
static void* txnal_read_ptr(void* const * ptr)
{
#if defined(__LCC__) && defined(__e2k__) && defined(__ptr128__)
__builtin_abort();
#else // defined(__LCC__) && defined(__e2k__) && defined(__ptr128__)
static_assert(sizeof(uint64_t) == sizeof(void*)
|| sizeof(uint32_t) == sizeof(void*)
|| sizeof(uint16_t) == sizeof(void*),
@ -284,6 +287,7 @@ static void* txnal_read_ptr(void* const * ptr)
#else
return (void*)_ITM_RU2((const uint16_t*)ptr);
#endif
#endif // defined(__LCC__) && defined(__e2k__) && defined(__ptr128__)
}
// We must access the data pointer in the COW string transactionally because

View File

@ -27,8 +27,12 @@
#if defined(_GLIBCXX_HAVE_LINUX_FUTEX) && ATOMIC_INT_LOCK_FREE > 1
#include <chrono>
#include <climits>
#include <syscall.h>
#include <unistd.h>
#if ! (defined (__e2k__) && defined (__ptr128__))
# include <syscall.h>
# include <unistd.h>
#else /* (defined (__e2k__) && defined (__ptr128__)) */
# include <e2k128/futex.h>
#endif /* (defined (__e2k__) && defined (__ptr128__)) */
#include <sys/time.h>
#include <errno.h>
#include <debug/debug.h>
@ -52,7 +56,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// we will fall back to spin-waiting. The only thing we could do
// here on errors is abort.
int ret __attribute__((unused));
ret = syscall (SYS_futex, __addr, futex_wait_op, __val, nullptr);
ret =
# if !(defined (__e2k__) && defined (__ptr128__))
syscall (SYS_futex,
# else /* (defined (__e2k__) && defined (__ptr128__)) */
futex (
# endif /* (defined (__e2k__) && defined (__ptr128__)) */
__addr, futex_wait_op, __val, nullptr);
_GLIBCXX_DEBUG_ASSERT(ret == 0 || errno == EINTR || errno == EAGAIN);
return true;
}
@ -73,7 +83,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
if (rt.tv_sec < 0)
return false;
if (syscall (SYS_futex, __addr, futex_wait_op, __val, &rt) == -1)
if (
# if !(defined (__e2k__) && defined (__ptr128__))
syscall (SYS_futex,
# else /* (defined (__e2k__) && defined (__ptr128__)) */
futex (
# endif /* (defined (__e2k__) && defined (__ptr128__)) */
__addr, futex_wait_op, __val, &rt) == -1)
{
_GLIBCXX_DEBUG_ASSERT(errno == EINTR || errno == EAGAIN
|| errno == ETIMEDOUT);
@ -90,7 +106,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
// This syscall can fail for various reasons, including in situations
// in which there is no real error. Thus, we don't bother checking
// the error codes. See the futex documentation and glibc for background.
syscall (SYS_futex, __addr, futex_wake_op, INT_MAX);
# if !(defined (__e2k__) && defined (__ptr128__))
syscall (SYS_futex,
# else /* (defined (__e2k__) && defined (__ptr128__)) */
futex (
# endif /* (defined (__e2k__) && defined (__ptr128__)) */
__addr, futex_wake_op, INT_MAX);
}
_GLIBCXX_END_NAMESPACE_VERSION

View File

@ -25,9 +25,14 @@
#define _GLIBCXX_USE_CXX11_ABI 0
#include <bits/c++config.h>
// The underlying defines are used to create versioned aliases for the sake of
// runtime compatibility with older GCC versions. This can't currently be done
// with LCC in use because of its inability to accept a mangled C++ symbol name
// as the argument of `__attribute__ ((alias ("...")))' (Bug #108709).
#if defined(_GLIBCXX_SYMVER_GNU) && defined(_GLIBCXX_SHARED) \
&& defined(_GLIBCXX_HAVE_AS_SYMVER_DIRECTIVE)\
&& defined(_GLIBCXX_HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT)
&& defined(_GLIBCXX_HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT) \
&& !defined(__LCC__)
#define istreambuf_iterator istreambuf_iteratorXX
#define basic_fstream basic_fstreamXX
#define basic_ifstream basic_ifstreamXX
@ -204,9 +209,13 @@ _GLIBCXX_END_NAMESPACE_VERSION
// NB: These symbols renames should go into the shared library only,
// and only those shared libraries that support versioning.
// Avoid creating versioned aliases for the sake of runtime compatibility with
// older GCC versions when being compiled with LCC (Bug #108709).
#if defined(_GLIBCXX_SYMVER_GNU) && defined(_GLIBCXX_SHARED) \
&& defined(_GLIBCXX_HAVE_AS_SYMVER_DIRECTIVE) \
&& defined(_GLIBCXX_HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT)
&& defined(_GLIBCXX_HAVE_SYMVER_SYMBOL_RENAMING_RUNTIME_SUPPORT) \
&& !defined(__LCC__)
/* gcc-3.4.4
_ZNSt19istreambuf_iteratorIcSt11char_traitsIcEEppEv