libstdc++-v3 with MCST patches
This commit is contained in:
parent
f3201d7ce6
commit
791447f986
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 ;;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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"
|
||||
;;
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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__)
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 };
|
||||
|
|
|
@ -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 };
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
@ -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. [_] *
|
||||
* *
|
||||
******************************************************************************/
|
|
@ -0,0 +1,5 @@
|
|||
/* Этих typedef'ов хватает для сборки decode.c (ошибка EDG). По-хорошему
|
||||
* они должны быть в basics.h, но мы помещаем их сюда, чтобы не портить
|
||||
* оригинальные исходники. */
|
||||
typedef const char a_const_char;
|
||||
typedef unsigned int uint32_t;
|
|
@ -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);
|
||||
|
|
|
@ -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__
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue