acinclude.m4 (GLIBCXX_ENABLE_SYMVERS): Bump minimal version requirement.

2003-07-05  Phil Edwards  <pme@gcc.gnu.org>

	* acinclude.m4 (GLIBCXX_ENABLE_SYMVERS):  Bump minimal version
	requirement.  Add port_specific_symbol_file variable.
	* configure.host:  Add docs for port_specific_symbol_file.
	Clean up try_cpu block for x86.
	* config/linker-map.gnu:  No more "last symbol can't have a
	semicolon" kaka.  Add hook for port-specific symbols.
	* src/Makefile.am:  Remove trailing whitespace.
	(libstdc++-symbol.ver):  Detect the presence of port-specific
	symbols, and add them accordingly.

	* docs/html/17_intro/porting.texi:  Bring up to date.

	* src/Makefile.in, aclocal.m4, configure,
	docs/html/17_intro/porting.html:  Regenerated.

From-SVN: r68992
This commit is contained in:
Phil Edwards 2003-07-06 04:07:36 +00:00
parent 0a72704b04
commit e6b7a69ab6
10 changed files with 161 additions and 185 deletions

View File

@ -1,3 +1,20 @@
2003-07-05 Phil Edwards <pme@gcc.gnu.org>
* acinclude.m4 (GLIBCXX_ENABLE_SYMVERS): Bump minimal version
requirement. Add port_specific_symbol_file variable.
* configure.host: Add docs for port_specific_symbol_file.
Clean up try_cpu block for x86.
* config/linker-map.gnu: No more "last symbol can't have a
semicolon" kaka. Add hook for port-specific symbols.
* src/Makefile.am: Remove trailing whitespace.
(libstdc++-symbol.ver): Detect the presence of port-specific
symbols, and add them accordingly.
* docs/html/17_intro/porting.texi: Bring up to date.
* src/Makefile.in, aclocal.m4, configure,
docs/html/17_intro/porting.html: Regenerated.
2003-07-05 Phil Edwards <pme@gcc.gnu.org>
* scripts/create_testsuite_files: New file.

View File

@ -2258,9 +2258,9 @@ if test $enable_symvers != no; then
AC_MSG_RESULT($glibcxx_shared_libgcc)
fi
# For GNU ld, we need at least this version. It's 2.12 in the same format
# For GNU ld, we need at least this version. It's 2.14 in the same format
# as the tested-for version. See GLIBCXX_CHECK_LINKER_FEATURES for more.
glibcxx_min_gnu_ld_version=21200
glibcxx_min_gnu_ld_version=21400
# Check to see if unspecified "yes" value can win, given results
# above.
@ -2305,6 +2305,7 @@ case $enable_symvers in
esac
AC_SUBST(SYMVER_MAP)
AC_SUBST(port_specific_symbol_file)
AM_CONDITIONAL(GLIBCXX_BUILD_VERSIONED_SHLIB, test $enable_symvers != no)
AC_MSG_CHECKING([versioning on shared library symbols])
AC_MSG_RESULT($enable_symvers)

View File

@ -2270,9 +2270,9 @@ if test $enable_symvers != no; then
AC_MSG_RESULT($glibcxx_shared_libgcc)
fi
# For GNU ld, we need at least this version. It's 2.12 in the same format
# For GNU ld, we need at least this version. It's 2.14 in the same format
# as the tested-for version. See GLIBCXX_CHECK_LINKER_FEATURES for more.
glibcxx_min_gnu_ld_version=21200
glibcxx_min_gnu_ld_version=21400
# Check to see if unspecified "yes" value can win, given results
# above.
@ -2317,6 +2317,7 @@ case $enable_symvers in
esac
AC_SUBST(SYMVER_MAP)
AC_SUBST(port_specific_symbol_file)
AM_CONDITIONAL(GLIBCXX_BUILD_VERSIONED_SHLIB, test $enable_symvers != no)
AC_MSG_CHECKING([versioning on shared library symbols])
AC_MSG_RESULT($enable_symvers)

View File

@ -1,4 +1,4 @@
## Linker script for GNU ld 2.11.94+ only.
## Linker script for GNU ld 2.13.91+ only.
##
## Copyright (C) 2002, 2003 Free Software Foundation, Inc.
##
@ -25,7 +25,6 @@ GLIBCXX_3.4 {
global:
# Names inside the 'extern' block are demangled names.
# All but the last are terminated with a semicolon.
extern "C++"
{
std::[A-Za-k]*;
@ -56,7 +55,7 @@ GLIBCXX_3.4 {
std::__num_base::_S_format_int*;
std::__num_base::_S_atoms_in;
std::__num_base::_S_atoms_out;
std::__numpunct_cache*
std::__numpunct_cache*;
};
# Names not in an 'extern' block are mangled names.
@ -169,6 +168,8 @@ GLIBCXX_3.4 {
_ZN9__gnu_cxx22_Atomic_add_mutex_onceE;
_ZN9__gnu_cxx31__gthread_atomic_add_mutex_onceEv;
# DO NOT DELETE THIS LINE. Port-specific symbols, if any, will be here.
local:
*;
};

View File

@ -841,7 +841,7 @@ test "$ac_cv_mingw32" = yes && MINGW32=yes
for ac_prog in gawk mawk nawk awk
for ac_prog in mawk gawk nawk awk
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
@ -1476,7 +1476,7 @@ else
if { (eval echo configure:1477: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
for file in conftest.*; do
case $file in
*.c | *.o | *.obj) ;;
*.$ac_ext | *.c | *.o | *.obj) ;;
*) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;;
esac
done
@ -22911,7 +22911,7 @@ else
fi
rm -f conftest*
for ac_hdr in stdlib.h unistd.h sys/stat.h sys/types.h
for ac_hdr in unistd.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
@ -23043,24 +23043,11 @@ else
#include <fcntl.h>
#include <sys/mman.h>
#if HAVE_SYS_TYPES_H
# include <sys/types.h>
#endif
#if HAVE_STDLIB_H
# include <stdlib.h>
#endif
#if HAVE_SYS_STAT_H
# include <sys/stat.h>
#endif
#if HAVE_UNISTD_H
# include <unistd.h>
#endif
/* This mess was copied from the GNU getpagesize.h. */
#ifndef HAVE_GETPAGESIZE
# ifdef HAVE_UNISTD_H
# include <unistd.h>
# endif
/* Assume that all systems that can run configure have sys/param.h. */
# ifndef HAVE_SYS_PARAM_H
@ -23168,7 +23155,7 @@ main()
}
EOF
if { (eval echo configure:23172: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
if { (eval echo configure:23159: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_func_mmap_fixed_mapped=yes
else
@ -23219,18 +23206,18 @@ fi
# Check to see if libgcc_s exists, indicating that shared libgcc is possible.
if test $enable_symvers != no; then
echo $ac_n "checking for shared libgcc""... $ac_c" 1>&6
echo "configure:23223: checking for shared libgcc" >&5
echo "configure:23210: checking for shared libgcc" >&5
ac_save_CFLAGS="$CFLAGS"
CFLAGS=' -lgcc_s'
cat > conftest.$ac_ext <<EOF
#line 23227 "configure"
#line 23214 "configure"
#include "confdefs.h"
int main() {
return 0
; return 0; }
EOF
if { (eval echo configure:23234: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:23221: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
glibcxx_shared_libgcc=yes
else
@ -23244,9 +23231,9 @@ rm -f conftest*
echo "$ac_t""$glibcxx_shared_libgcc" 1>&6
fi
# For GNU ld, we need at least this version. It's 2.12 in the same format
# For GNU ld, we need at least this version. It's 2.14 in the same format
# as the tested-for version. See GLIBCXX_CHECK_LINKER_FEATURES for more.
glibcxx_min_gnu_ld_version=21200
glibcxx_min_gnu_ld_version=21400
# Check to see if unspecified "yes" value can win, given results
# above.
@ -23265,14 +23252,14 @@ if test $enable_symvers = yes ; then
echo 'FOO { global: f[a-z]o; local: *; };' > conftest.map
cat > conftest.$ac_ext <<EOF
#line 23269 "configure"
#line 23256 "configure"
#include "confdefs.h"
int foo;
int main() {
; return 0; }
EOF
if { (eval echo configure:23276: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:23263: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
enable_symvers=gnu
else
@ -23310,6 +23297,7 @@ esac
if test $enable_symvers != no; then
GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE=
GLIBCXX_BUILD_VERSIONED_SHLIB_FALSE='#'
@ -23318,7 +23306,7 @@ else
GLIBCXX_BUILD_VERSIONED_SHLIB_FALSE=
fi
echo $ac_n "checking versioning on shared library symbols""... $ac_c" 1>&6
echo "configure:23322: checking versioning on shared library symbols" >&5
echo "configure:23310: checking versioning on shared library symbols" >&5
echo "$ac_t""$enable_symvers" 1>&6
@ -23333,17 +23321,17 @@ echo "$ac_t""$enable_symvers" 1>&6
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
echo "configure:23337: checking for $ac_hdr" >&5
echo "configure:23325: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 23342 "configure"
#line 23330 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:23347: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
{ (eval echo configure:23335: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
@ -23376,7 +23364,7 @@ done
# Can't do these in a loop, else the resulting syntax is wrong.
cat > conftest.$ac_ext <<EOF
#line 23380 "configure"
#line 23368 "configure"
#include "confdefs.h"
#include <unistd.h>
#include <sys/time.h>
@ -23386,7 +23374,7 @@ int main() {
int f = RLIMIT_DATA ;
; return 0; }
EOF
if { (eval echo configure:23390: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:23378: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcxx_mresult=1
else
@ -23403,7 +23391,7 @@ EOF
cat > conftest.$ac_ext <<EOF
#line 23407 "configure"
#line 23395 "configure"
#include "confdefs.h"
#include <unistd.h>
#include <sys/time.h>
@ -23413,7 +23401,7 @@ int main() {
int f = RLIMIT_RSS ;
; return 0; }
EOF
if { (eval echo configure:23417: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:23405: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcxx_mresult=1
else
@ -23430,7 +23418,7 @@ EOF
cat > conftest.$ac_ext <<EOF
#line 23434 "configure"
#line 23422 "configure"
#include "confdefs.h"
#include <unistd.h>
#include <sys/time.h>
@ -23440,7 +23428,7 @@ int main() {
int f = RLIMIT_VMEM ;
; return 0; }
EOF
if { (eval echo configure:23444: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:23432: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcxx_mresult=1
else
@ -23457,7 +23445,7 @@ EOF
cat > conftest.$ac_ext <<EOF
#line 23461 "configure"
#line 23449 "configure"
#include "confdefs.h"
#include <unistd.h>
#include <sys/time.h>
@ -23467,7 +23455,7 @@ int main() {
int f = RLIMIT_AS ;
; return 0; }
EOF
if { (eval echo configure:23471: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:23459: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcxx_mresult=1
else
@ -23489,7 +23477,7 @@ EOF
else
cat > conftest.$ac_ext <<EOF
#line 23493 "configure"
#line 23481 "configure"
#include "confdefs.h"
#include <unistd.h>
#include <sys/time.h>
@ -23499,7 +23487,7 @@ int main() {
struct rlimit r; setrlimit(0, &r);
; return 0; }
EOF
if { (eval echo configure:23503: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:23491: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_setrlimit=yes
else
@ -23515,7 +23503,7 @@ fi
fi
echo $ac_n "checking for testsuite memory limit support""... $ac_c" 1>&6
echo "configure:23519: checking for testsuite memory limit support" >&5
echo "configure:23507: checking for testsuite memory limit support" >&5
if test $setrlimit_have_headers = yes && test $ac_setrlimit = yes; then
ac_mem_limits=yes
cat >> confdefs.h <<\EOF
@ -23531,7 +23519,7 @@ EOF
# Look for setenv, so that extended locale tests can be performed.
echo $ac_n "checking for setenv declaration""... $ac_c" 1>&6
echo "configure:23535: checking for setenv declaration" >&5
echo "configure:23523: checking for setenv declaration" >&5
if test x${glibcxx_cv_func_setenv_use+set} != xset; then
if eval "test \"`echo '$''{'glibcxx_cv_func_setenv_use'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
@ -23546,14 +23534,14 @@ ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftes
cross_compiling=$ac_cv_prog_cxx_cross
cat > conftest.$ac_ext <<EOF
#line 23550 "configure"
#line 23538 "configure"
#include "confdefs.h"
#include <stdlib.h>
int main() {
setenv(0, 0, 0);
; return 0; }
EOF
if { (eval echo configure:23557: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
if { (eval echo configure:23545: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
glibcxx_cv_func_setenv_use=yes
else
@ -23579,12 +23567,12 @@ fi
for ac_func in setenv
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
echo "configure:23583: checking for $ac_func" >&5
echo "configure:23571: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 23588 "configure"
#line 23576 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
@ -23607,7 +23595,7 @@ $ac_func();
; return 0; }
EOF
if { (eval echo configure:23611: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
if { (eval echo configure:23599: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
@ -23767,7 +23755,7 @@ glibcxx_prefixdir=${prefix}
# Process the option --with-gxx-include-dir=<path to include-files directory>
echo $ac_n "checking for --with-gxx-include-dir""... $ac_c" 1>&6
echo "configure:23771: checking for --with-gxx-include-dir" >&5
echo "configure:23759: checking for --with-gxx-include-dir" >&5
# Check whether --with-gxx-include-dir or --without-gxx-include-dir was given.
if test "${with_gxx_include_dir+set}" = set; then
withval="$with_gxx_include_dir"
@ -23791,7 +23779,7 @@ echo "$ac_t""$gxx_include_dir" 1>&6
# Process the option "--enable-version-specific-runtime-libs"
echo $ac_n "checking for --enable-version-specific-runtime-libs""... $ac_c" 1>&6
echo "configure:23795: checking for --enable-version-specific-runtime-libs" >&5
echo "configure:23783: checking for --enable-version-specific-runtime-libs" >&5
# Check whether --enable-version-specific-runtime-libs or --disable-version-specific-runtime-libs was given.
if test "${enable_version_specific_runtime_libs+set}" = set; then
enableval="$enable_version_specific_runtime_libs"
@ -23842,7 +23830,7 @@ if test x"$glibcxx_toolexecdir" = x"no"; then
fi
echo $ac_n "checking for install location""... $ac_c" 1>&6
echo "configure:23846: checking for install location" >&5
echo "configure:23834: checking for install location" >&5
echo "$ac_t""$gxx_include_dir" 1>&6
@ -24126,6 +24114,7 @@ s%@OPT_LDFLAGS@%$OPT_LDFLAGS%g
s%@LIBMATHOBJS@%$LIBMATHOBJS%g
s%@WERROR@%$WERROR%g
s%@SYMVER_MAP@%$SYMVER_MAP%g
s%@port_specific_symbol_file@%$port_specific_symbol_file%g
s%@GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE@%$GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE%g
s%@GLIBCXX_BUILD_VERSIONED_SHLIB_FALSE@%$GLIBCXX_BUILD_VERSIONED_SHLIB_FALSE%g
s%@baseline_dir@%$baseline_dir%g

View File

@ -41,6 +41,11 @@
# the form '-Wl,blah'
# (defaults to empty in acinclude.m4)
#
# port_specific_symbol_file
# whitespace-seperated list of files containing
# additional symbols to export from the shared
# library, when symbol versioning is in use
#
#
# If the defaults will not work for your platform, you need only change the
# variables that won't work, i.e., you do not need to explicitly set a
@ -66,7 +71,7 @@ case "${host_cpu}" in
alpha*)
try_cpu=alpha
;;
athlon* | i586 | i686 | i786 | x86_64)
i[567]86 | x86_64)
try_cpu=i486
;;
hppa*)

View File

@ -6,7 +6,7 @@
<meta name="generator" content="makeinfo 4.3">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home">
<!--
Copyright &copy; 2000, 2001, 2002 Free Software Foundation, Inc.
Copyright &copy; 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
<p>Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2 or
@ -56,6 +56,9 @@ imposed by the ANSI/ISO standard.
works. It is difficult to test the C++ compiler without a working
library, but you should at least try some minimal test cases.
<p>(Note that what we think of as a "target," the library refers to as
a "host." The comment at the top of <code>configure.in</code> explains why.)
<p>Here are the primary steps required to port the library:
<ul class="menu">
@ -92,7 +95,7 @@ directory. The important information is that there needs to be a
directory under <code>config/os</code> to store the files for your operating
system.
<p>You might have to change the <code>configure.target</code> file to ensure that
<p>You might have to change the <code>configure.host</code> file to ensure that
your new directory is activated. Look for the switch statement that sets
<code>os_include_dir</code>, and add a pattern to handle your operating system
if the default will not suffice. The switch statement switches on only
@ -134,45 +137,42 @@ need to define. You will need to add them to the
target. It will not work to simply define these macros in
<code>os_defines.h</code>.
<p>At this time, there are a few libstdc++-v3-specific macro which may be
defined. <code>_G_USING_THUNKS</code> may be defined to 0 to express that the
port doesn't use thunks (although it is unclear that this is still
useful since libio support isn't currently working and the g++ v3 ABI
invalidates the assumption that some ports don't use thunks).
<p>At this time, there are a few libstdc++-v3-specific macros which may be
defined:
<p><code>_GLIBCPP_USE_C99_CHECK</code> may be defined to 1 to check C99
<p><code>_GLIBCXX_USE_C99_CHECK</code> may be defined to 1 to check C99
function declarations (which are not covered by specialization below)
found in system headers against versions found in the library headers
derived from the standard.
<p><code>_GLIBCPP_USE_C99_DYNAMIC</code> may be defined to an expression that
<p><code>_GLIBCXX_USE_C99_DYNAMIC</code> may be defined to an expression that
yields 0 if and only if the system headers are exposing proper support
for C99 functions (which are not covered by specialization below). If
defined, it must be 0 while bootstrapping the compiler/rebuilding the
library.
<p><code>_GLIBCPP_USE_C99_LONG_LONG_CHECK</code> may be defined to 1 to check
<p><code>_GLIBCXX_USE_C99_LONG_LONG_CHECK</code> may be defined to 1 to check
the set of C99 long long function declarations found in system headers
against versions found in the library headers derived from the
standard.
<p><code>_GLIBCPP_USE_C99_LONG_LONG_DYNAMIC</code> may be defined to an
<p><code>_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC</code> may be defined to an
expression that yields 0 if and only if the system headers are
exposing proper support for the set of C99 long long functions. If
defined, it must be 0 while bootstrapping the compiler/rebuilding the
library.
<p><code>_GLIBCPP_USE_C99_FP_MACROS_DYNAMIC</code> may be defined to an
<p><code>_GLIBCXX_USE_C99_FP_MACROS_DYNAMIC</code> may be defined to an
expression that yields 0 if and only if the system headers
are exposing proper support for the related set of macros. If defined,
it must be 0 while bootstrapping the compiler/rebuilding the library.
<p><code>_GLIBCPP_USE_C99_FLOAT_TRANSCENDENTALS_CHECK</code> may be defined
<p><code>_GLIBCXX_USE_C99_FLOAT_TRANSCENDENTALS_CHECK</code> may be defined
to 1 to check the related set of function declarations found in system
headers against versions found in the library headers derived from
the standard.
<p><code>_GLIBCPP_USE_C99_FLOAT_TRANSCENDENTALS_DYNAMIC</code> may be defined
<p><code>_GLIBCXX_USE_C99_FLOAT_TRANSCENDENTALS_DYNAMIC</code> may be defined
to an expression that yields 0 if and only if the system headers
are exposing proper support for the related set of functions. If defined,
it must be 0 while bootstrapping the compiler/rebuilding the library.
@ -180,8 +180,8 @@ it must be 0 while bootstrapping the compiler/rebuilding the library.
<p>Finally, you should bracket the entire file in an include-guard, like
this:
<pre class="example"> #ifndef _GLIBCPP_OS_DEFINES
#define _GLIBCPP_OS_DEFINES
<pre class="example"> #ifndef _GLIBCXX_OS_DEFINES
#define _GLIBCXX_OS_DEFINES
...
#endif
</pre>
@ -209,14 +209,14 @@ setup files without explicit help.
<p>We recommend that for a target triplet <code>&lt;CPU&gt;-&lt;vendor&gt;-&lt;OS&gt;</code>, you
name your configuration directory <code>config/cpu/&lt;CPU&gt;</code>. If you do this,
the configury will find the directory itself. Otherwise you will need to
edit the <code>configure.target</code> file and, in the switch statement that sets
the configury will find the directory by itself. Otherwise you will need to
edit the <code>configure.host</code> file and, in the switch statement that sets
<code>cpu_include_dir</code>, add a pattern to handle your chip.
<p>Note that some chip families share a single configuration directory, for
example, <code>alpha</code>, <code>alphaev5</code>, and <code>alphaev6</code> all use the
<code>config/cpu/alpha</code> directory, and there is an entry in the
<code>configure.target</code> switch statement to handle this.
<code>configure.host</code> switch statement to handle this.
<p>The <code>cpu_include_dir</code> sets default locations for the files controlling
<a href="#Thread%20safety">Thread safety</a> and <a href="#Numeric%20limits">Numeric limits</a>, if the defaults are not
@ -456,14 +456,14 @@ see the <code>atomicity.h</code> file for IRIX or IA64.
<p>Alternatively, if the primitives are more closely related to the OS
than they are to the CPU, you can put the <code>atomicity.h</code> file in
the <a href="#Operating%20system">Operating system</a> directory instead. In this case, you must
edit <code>configure.target</code>, and in the switch statement that handles
edit <code>configure.host</code>, and in the switch statement that handles
operating systems, override the <code>ATOMICITYH</code> variable to point to
the appropriate <code>os_include_dir</code>. For examples of this approach,
see the <code>atomicity.h</code> file for AIX.
<p>With those bits out of the way, you have to actually write
<code>atomicity.h</code> itself. This file should be wrapped in an
include guard named <code>_BITS_ATOMICITY_H</code>. It should define one
include guard named <code>_GLIBCXX_ATOMICITY_H</code>. It should define one
type, and two functions.
<p>The type is <code>_Atomic_word</code>. Here is the version used on IRIX:

View File

@ -9,7 +9,7 @@
@setchapternewpage odd
@copying
Copyright @copyright{} 2000, 2001, 2002 Free Software Foundation, Inc.
Copyright @copyright{} 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2 or
@ -74,6 +74,9 @@ In addition, you should try to verify that the C++ compiler generally
works. It is difficult to test the C++ compiler without a working
library, but you should at least try some minimal test cases.
(Note that what we think of as a ``target,'' the library refers to as
a ``host.'' The comment at the top of @file{configure.in} explains why.)
Here are the primary steps required to port the library:
@menu
@ -106,7 +109,7 @@ directory. The important information is that there needs to be a
directory under @file{config/os} to store the files for your operating
system.
You might have to change the @file{configure.target} file to ensure that
You might have to change the @file{configure.host} file to ensure that
your new directory is activated. Look for the switch statement that sets
@code{os_include_dir}, and add a pattern to handle your operating system
if the default will not suffice. The switch statement switches on only
@ -150,45 +153,42 @@ need to define. You will need to add them to the
target. It will not work to simply define these macros in
@file{os_defines.h}.
At this time, there are a few libstdc++-v3-specific macro which may be
defined. @code{_G_USING_THUNKS} may be defined to 0 to express that the
port doesn't use thunks (although it is unclear that this is still
useful since libio support isn't currently working and the g++ v3 ABI
invalidates the assumption that some ports don't use thunks).
At this time, there are a few libstdc++-v3-specific macros which may be
defined:
@code{_GLIBCPP_USE_C99_CHECK} may be defined to 1 to check C99
@code{_GLIBCXX_USE_C99_CHECK} may be defined to 1 to check C99
function declarations (which are not covered by specialization below)
found in system headers against versions found in the library headers
derived from the standard.
@code{_GLIBCPP_USE_C99_DYNAMIC} may be defined to an expression that
@code{_GLIBCXX_USE_C99_DYNAMIC} may be defined to an expression that
yields 0 if and only if the system headers are exposing proper support
for C99 functions (which are not covered by specialization below). If
defined, it must be 0 while bootstrapping the compiler/rebuilding the
library.
@code{_GLIBCPP_USE_C99_LONG_LONG_CHECK} may be defined to 1 to check
@code{_GLIBCXX_USE_C99_LONG_LONG_CHECK} may be defined to 1 to check
the set of C99 long long function declarations found in system headers
against versions found in the library headers derived from the
standard.
@code{_GLIBCPP_USE_C99_LONG_LONG_DYNAMIC} may be defined to an
@code{_GLIBCXX_USE_C99_LONG_LONG_DYNAMIC} may be defined to an
expression that yields 0 if and only if the system headers are
exposing proper support for the set of C99 long long functions. If
defined, it must be 0 while bootstrapping the compiler/rebuilding the
library.
@code{_GLIBCPP_USE_C99_FP_MACROS_DYNAMIC} may be defined to an
@code{_GLIBCXX_USE_C99_FP_MACROS_DYNAMIC} may be defined to an
expression that yields 0 if and only if the system headers
are exposing proper support for the related set of macros. If defined,
it must be 0 while bootstrapping the compiler/rebuilding the library.
@code{_GLIBCPP_USE_C99_FLOAT_TRANSCENDENTALS_CHECK} may be defined
@code{_GLIBCXX_USE_C99_FLOAT_TRANSCENDENTALS_CHECK} may be defined
to 1 to check the related set of function declarations found in system
headers against versions found in the library headers derived from
the standard.
@code{_GLIBCPP_USE_C99_FLOAT_TRANSCENDENTALS_DYNAMIC} may be defined
@code{_GLIBCXX_USE_C99_FLOAT_TRANSCENDENTALS_DYNAMIC} may be defined
to an expression that yields 0 if and only if the system headers
are exposing proper support for the related set of functions. If defined,
it must be 0 while bootstrapping the compiler/rebuilding the library.
@ -197,8 +197,8 @@ Finally, you should bracket the entire file in an include-guard, like
this:
@example
#ifndef _GLIBCPP_OS_DEFINES
#define _GLIBCPP_OS_DEFINES
#ifndef _GLIBCXX_OS_DEFINES
#define _GLIBCXX_OS_DEFINES
...
#endif
@end example
@ -222,14 +222,14 @@ setup files without explicit help.
We recommend that for a target triplet @code{<CPU>-<vendor>-<OS>}, you
name your configuration directory @file{config/cpu/<CPU>}. If you do this,
the configury will find the directory itself. Otherwise you will need to
edit the @file{configure.target} file and, in the switch statement that sets
the configury will find the directory by itself. Otherwise you will need to
edit the @file{configure.host} file and, in the switch statement that sets
@code{cpu_include_dir}, add a pattern to handle your chip.
Note that some chip families share a single configuration directory, for
example, @code{alpha}, @code{alphaev5}, and @code{alphaev6} all use the
@file{config/cpu/alpha} directory, and there is an entry in the
@file{configure.target} switch statement to handle this.
@file{configure.host} switch statement to handle this.
The @code{cpu_include_dir} sets default locations for the files controlling
@ref{Thread safety} and @ref{Numeric limits}, if the defaults are not
@ -474,14 +474,14 @@ see the @file{atomicity.h} file for IRIX or IA64.
Alternatively, if the primitives are more closely related to the OS
than they are to the CPU, you can put the @file{atomicity.h} file in
the @ref{Operating system} directory instead. In this case, you must
edit @file{configure.target}, and in the switch statement that handles
edit @file{configure.host}, and in the switch statement that handles
operating systems, override the @code{ATOMICITYH} variable to point to
the appropriate @code{os_include_dir}. For examples of this approach,
see the @file{atomicity.h} file for AIX.
With those bits out of the way, you have to actually write
@file{atomicity.h} itself. This file should be wrapped in an
include guard named @code{_BITS_ATOMICITY_H}. It should define one
include guard named @code{_GLIBCXX_ATOMICITY_H}. It should define one
type, and two functions.
The type is @code{_Atomic_word}. Here is the version used on IRIX:

View File

@ -37,9 +37,16 @@ toolexeclib_LTLIBRARIES = libstdc++.la
# Symbol versioning for shared libraries.
if GLIBCXX_BUILD_VERSIONED_SHLIB
port_specific_symbol_file = @port_specific_symbol_file@
version_arg = -Wl,--version-script=libstdc++-symbol.ver
libstdc++-symbol.ver: ${glibcxx_srcdir}/@SYMVER_MAP@
@LN_S@ ${glibcxx_srcdir}/@SYMVER_MAP@ ./libstdc++-symbol.ver || true
cp ${glibcxx_srcdir}/@SYMVER_MAP@ ./libstdc++-symbol.ver
if test "x${port_specific_symbol_file}" != x; then \
sed -n '1,/DO NOT DELETE/p' $@ > tmp.top; \
sed -n '/DO NOT DELETE/,$$p' $@ > tmp.bottom; \
cat tmp.top $(port_specific_symbol_file) tmp.bottom > $@; \
rm tmp.top tmp.bottom; \
fi
else
version_arg =
libstdc++-symbol.ver:
@ -106,7 +113,7 @@ time_members.cc: ${glibcxx_srcdir}/@CTIME_CC@
# particular host, but with ad hoc naming rules.
host_sources_extra = \
basic_file.cc \
c++locale.cc
c++locale.cc
c++locale.cc: ${glibcxx_srcdir}/@CLOCALE_CC@
@LN_S@ ${glibcxx_srcdir}/@CLOCALE_CC@ ./$@ || true
@ -157,7 +164,7 @@ libstdc___la_DEPENDENCIES = libstdc++-symbol.ver $(libstdc___la_LIBADD)
libstdc___la_LDFLAGS = \
-version-info @libtool_VERSION@ ${version_arg} \
-lm @LIBUNWIND_FLAG@
-lm @LIBUNWIND_FLAG@
# Use special rules for the deprecated source files so that they find
@ -188,13 +195,13 @@ demangle.o: demangle.cc
# modified in a per-library or per-sub-library way. Need to manually
# set this option because CONFIG_CXXFLAGS has to be after
# OPTIMIZE_CXXFLAGS on the compile line so that -O2 can be overridden
# as the occasion call for it.
# as the occasion calls for it.
AM_CXXFLAGS = \
-fno-implicit-templates \
$(LIBSUPCXX_CXXFLAGS) \
$(WARN_CXXFLAGS) \
$(OPTIMIZE_CXXFLAGS) \
$(CONFIG_CXXFLAGS)
$(CONFIG_CXXFLAGS)
# libstdc++ libtool notes
@ -216,7 +223,7 @@ AM_CXXFLAGS = \
# CXXLINK, just after $(LIBTOOL), so that libtool doesn't have to
# attempt to infer which configuration to use
LTCXXCOMPILE = $(LIBTOOL) --tag CXX --mode=compile $(CXX) $(INCLUDES) \
$(AM_CPPFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(AM_CXXFLAGS)
$(AM_CPPFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(AM_CXXFLAGS)
# 3) We'd have a problem when building the shared libstdc++ object if
# the rules automake generates would be used. We cannot allow g++ to
@ -234,13 +241,13 @@ all-local: build_debug
install-data-local: install_debug
else
all-local:
install-data-local:
install-data-local:
endif
debugdir = debug
# Build parallel set of debug objects here.
stamp-debug:
stamp-debug:
if test ! -d ${debugdir}; then \
mkdir -p ${debugdir}; \
(cd ${debugdir}; \
@ -251,12 +258,12 @@ stamp-debug:
-e 's/install-data-local: install_debug/install-data-local:/' \
< ../Makefile > Makefile) ; \
fi; \
echo `date` > stamp-debug;
echo `date` > stamp-debug;
build_debug: stamp-debug
(cd ${debugdir} && $(MAKE) CXXFLAGS='@DEBUG_FLAGS@' all)
# Install debug library here.
install_debug:
install_debug:
(cd ${debugdir} && $(MAKE) \
toolexeclibdir=@glibcxx_toolexeclibdir@/debug install)

View File

@ -147,7 +147,10 @@ glibcxx_builddir = @glibcxx_builddir@
toolexecdir = @glibcxx_toolexecdir@
toolexeclibdir = @glibcxx_toolexeclibdir@
toolexeclib_LTLIBRARIES = libstdc++.la
@GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE@version_arg = @GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE@-Wl,--version-script=libstdc++-symbol.ver
# Symbol versioning for shared libraries.
@GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE@port_specific_symbol_file = @port_specific_symbol_file@
@GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE@version_arg = -Wl,--version-script=libstdc++-symbol.ver
@GLIBCXX_BUILD_VERSIONED_SHLIB_FALSE@version_arg =
# Compile flags that should be constant throughout the build, both for
@ -156,13 +159,11 @@ OPTIMIZE_CXXFLAGS = @OPTIMIZE_CXXFLAGS@
# These bits are all figured out from configure. Look in acinclude.m4
# or configure.in to see how they are set. See GLIBCXX_EXPORT_FLAGS
CONFIG_CXXFLAGS = \
@SECTION_FLAGS@ @EXTRA_CXX_FLAGS@
CONFIG_CXXFLAGS = @SECTION_FLAGS@ @EXTRA_CXX_FLAGS@
# Warning flags to use.
WARN_CXXFLAGS = \
@WARN_FLAGS@ $(WERROR) -fdiagnostics-show-location=once
WARN_CXXFLAGS = @WARN_FLAGS@ $(WERROR) -fdiagnostics-show-location=once
# Use common includes from acinclude.m4/GLIBCXX_EXPORT_INCLUDES
@ -171,78 +172,33 @@ LIBMATH_INCLUDES = @LIBMATH_INCLUDES@
LIBSUPCXX_INCLUDES = @LIBSUPCXX_INCLUDES@
TOPLEVEL_INCLUDES = @TOPLEVEL_INCLUDES@
INCLUDES = \
-nostdinc++ \
$(GLIBCXX_INCLUDES) \
$(LIBSUPCXX_INCLUDES) $(LIBMATH_INCLUDES) \
$(TOPLEVEL_INCLUDES)
INCLUDES = -nostdinc++ $(GLIBCXX_INCLUDES) $(LIBSUPCXX_INCLUDES) $(LIBMATH_INCLUDES) $(TOPLEVEL_INCLUDES)
# Source files linked in via configuration/make substitution for a
# particular host.
host_sources = \
codecvt_members.cc \
collate_members.cc \
ctype_members.cc \
messages_members.cc \
monetary_members.cc \
numeric_members.cc \
time_members.cc
host_sources = codecvt_members.cc collate_members.cc ctype_members.cc messages_members.cc monetary_members.cc numeric_members.cc time_members.cc
# Source files linked in via configuration/make substitution for a
# particular host, but with ad hoc naming rules.
host_sources_extra = \
basic_file.cc \
c++locale.cc
host_sources_extra = basic_file.cc c++locale.cc
# Sources present in the src directory.
sources = \
allocator-inst.cc \
codecvt.cc \
complex_io.cc \
concept-inst.cc \
ctype.cc \
demangle.cc \
ext-inst.cc \
fstream-inst.cc \
functexcept.cc \
globals.cc \
io-inst.cc \
ios.cc \
istream-inst.cc \
limits.cc \
locale.cc \
locale-inst.cc \
localename.cc \
misc-inst.cc \
ostream-inst.cc \
sstream-inst.cc \
stdexcept.cc \
streambuf-inst.cc \
string-inst.cc \
strstream.cc \
valarray-inst.cc \
wstring-inst.cc \
${host_sources} \
${host_sources_extra}
sources = allocator-inst.cc codecvt.cc complex_io.cc concept-inst.cc ctype.cc demangle.cc ext-inst.cc fstream-inst.cc functexcept.cc globals.cc io-inst.cc ios.cc istream-inst.cc limits.cc locale.cc locale-inst.cc localename.cc misc-inst.cc ostream-inst.cc sstream-inst.cc stdexcept.cc streambuf-inst.cc string-inst.cc strstream.cc valarray-inst.cc wstring-inst.cc ${host_sources} ${host_sources_extra}
VPATH = $(top_srcdir)/src:$(top_srcdir)
libstdc___la_SOURCES = $(sources)
libstdc___la_LIBADD = \
$(top_builddir)/libmath/libmath.la \
$(top_builddir)/libsupc++/libsupc++convenience.la
libstdc___la_LIBADD = $(top_builddir)/libmath/libmath.la $(top_builddir)/libsupc++/libsupc++convenience.la
libstdc___la_DEPENDENCIES = libstdc++-symbol.ver $(libstdc___la_LIBADD)
libstdc___la_LDFLAGS = \
-version-info @libtool_VERSION@ ${version_arg} \
-lm @LIBUNWIND_FLAG@
libstdc___la_LDFLAGS = -version-info @libtool_VERSION@ ${version_arg} -lm @LIBUNWIND_FLAG@
# Use special rules for the deprecated source files so that they find
@ -253,13 +209,8 @@ GLIBCXX_INCLUDE_DIR = @glibcxx_builddir@/include
# modified in a per-library or per-sub-library way. Need to manually
# set this option because CONFIG_CXXFLAGS has to be after
# OPTIMIZE_CXXFLAGS on the compile line so that -O2 can be overridden
# as the occasion call for it.
AM_CXXFLAGS = \
-fno-implicit-templates \
$(LIBSUPCXX_CXXFLAGS) \
$(WARN_CXXFLAGS) \
$(OPTIMIZE_CXXFLAGS) \
$(CONFIG_CXXFLAGS)
# as the occasion calls for it.
AM_CXXFLAGS = -fno-implicit-templates $(LIBSUPCXX_CXXFLAGS) $(WARN_CXXFLAGS) $(OPTIMIZE_CXXFLAGS) $(CONFIG_CXXFLAGS)
# libstdc++ libtool notes
@ -280,8 +231,7 @@ AM_CXXFLAGS = \
# correct solution is to add `--tag CXX' to LTCXXCOMPILE and maybe
# CXXLINK, just after $(LIBTOOL), so that libtool doesn't have to
# attempt to infer which configuration to use
LTCXXCOMPILE = $(LIBTOOL) --tag CXX --mode=compile $(CXX) $(INCLUDES) \
$(AM_CPPFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(AM_CXXFLAGS)
LTCXXCOMPILE = $(LIBTOOL) --tag CXX --mode=compile $(CXX) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(CXXFLAGS) $(AM_CXXFLAGS)
# 3) We'd have a problem when building the shared libstdc++ object if
@ -290,8 +240,7 @@ LTCXXCOMPILE = $(LIBTOOL) --tag CXX --mode=compile $(CXX) $(INCLUDES) \
# course is problematic at this point. So, we get the top-level
# directory to configure libstdc++-v3 to use gcc as the C++
# compilation driver.
CXXLINK = $(LIBTOOL) --tag CXX --mode=link $(CXX) \
@OPT_LDFLAGS@ @SECTION_LDFLAGS@ $(AM_CXXFLAGS) $(LDFLAGS) -o $@
CXXLINK = $(LIBTOOL) --tag CXX --mode=link $(CXX) @OPT_LDFLAGS@ @SECTION_LDFLAGS@ $(AM_CXXFLAGS) $(LDFLAGS) -o $@
debugdir = debug
@ -321,7 +270,7 @@ DIST_COMMON = Makefile.am Makefile.in
DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFOS) $(EXTRA_DIST)
TAR = gtar
TAR = tar
GZIP_ENV = --best
SOURCES = $(libstdc___la_SOURCES)
OBJECTS = $(libstdc___la_OBJECTS)
@ -433,7 +382,7 @@ TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
awk ' { files[$$0] = 1; } \
END { for (i in files) print i; }'`; \
test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
|| (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS)
|| (cd $(srcdir) && etags -o $$here/TAGS $(ETAGS_ARGS) $$tags $$unique $(LISP))
mostlyclean-tags:
@ -540,7 +489,13 @@ distclean-generic clean-generic maintainer-clean-generic clean \
mostlyclean distclean maintainer-clean
@GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE@libstdc++-symbol.ver: ${glibcxx_srcdir}/@SYMVER_MAP@
@GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE@ @LN_S@ ${glibcxx_srcdir}/@SYMVER_MAP@ ./libstdc++-symbol.ver || true
@GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE@ cp ${glibcxx_srcdir}/@SYMVER_MAP@ ./libstdc++-symbol.ver
@GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE@ if test "x${port_specific_symbol_file}" != x; then \
@GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE@ sed -n '1,/DO NOT DELETE/p' $@ > tmp.top; \
@GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE@ sed -n '/DO NOT DELETE/,$$p' $@ > tmp.bottom; \
@GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE@ cat tmp.top $(port_specific_symbol_file) tmp.bottom > $@; \
@GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE@ rm tmp.top tmp.bottom; \
@GLIBCXX_BUILD_VERSIONED_SHLIB_TRUE@ fi
@GLIBCXX_BUILD_VERSIONED_SHLIB_FALSE@libstdc++-symbol.ver:
codecvt_members.cc: ${glibcxx_srcdir}/@CCODECVT_CC@
@ -593,10 +548,10 @@ demangle.o: demangle.cc
@GLIBCXX_BUILD_DEBUG_TRUE@all-local: build_debug
@GLIBCXX_BUILD_DEBUG_TRUE@install-data-local: install_debug
@GLIBCXX_BUILD_DEBUG_FALSE@all-local:
@GLIBCXX_BUILD_DEBUG_FALSE@install-data-local:
@GLIBCXX_BUILD_DEBUG_FALSE@install-data-local:
# Build parallel set of debug objects here.
stamp-debug:
stamp-debug:
if test ! -d ${debugdir}; then \
mkdir -p ${debugdir}; \
(cd ${debugdir}; \
@ -607,13 +562,13 @@ stamp-debug:
-e 's/install-data-local: install_debug/install-data-local:/' \
< ../Makefile > Makefile) ; \
fi; \
echo `date` > stamp-debug;
echo `date` > stamp-debug;
build_debug: stamp-debug
(cd ${debugdir} && $(MAKE) CXXFLAGS='@DEBUG_FLAGS@' all)
# Install debug library here.
install_debug:
install_debug:
(cd ${debugdir} && $(MAKE) \
toolexeclibdir=@glibcxx_toolexeclibdir@/debug install)