diff options
Diffstat (limited to 'libstdc++-v3/porting.texi')
-rw-r--r-- | libstdc++-v3/porting.texi | 105 |
1 files changed, 80 insertions, 25 deletions
diff --git a/libstdc++-v3/porting.texi b/libstdc++-v3/porting.texi index 166876c3315..9114806b63f 100644 --- a/libstdc++-v3/porting.texi +++ b/libstdc++-v3/porting.texi @@ -1,15 +1,3 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% File: porting.texi -% Author: Mark Mitchell -% Date: 11/21/2000 -% -% Contents: -% -% Copyright (c) 2000 by Free Software Foundation, Inc. -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - \input texinfo @c --------------------------------------------------------------------- @@ -24,7 +12,7 @@ This file explains how to port libstdc++-v3 (the GNU C++ library) to a new target. -Copyright (c) 2000 Free Software Foundation, Inc. +Copyright (c) 2000, 2001 Free Software Foundation, Inc. @end ifinfo @c --------------------------------------------------------------------- @@ -36,7 +24,25 @@ Copyright (c) 2000 Free Software Foundation, Inc. @author Mark Mitchell @page @vskip 0pt plus 1filll -Copyright @copyright{} 2000 Free Software Foundation, Inc. +Copyright @copyright{} 2000, 2001 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.1 or +any later version published by the Free Software Foundation; with the +Invariant Sections being ``GNU General Public License'', the Front-Cover +texts being (a) (see below), and with the Back-Cover Texts being (b) +(see below). A copy of the license is included in the section entitled +``GNU Free Documentation License''. + +(a) The FSF's Front-Cover Text is: + + A GNU Manual + +(b) The FSF's Back-Cover Text is: + + You have freedom to copy and modify this GNU Manual, like GNU + software. Copies published by the Free Software Foundation raise + funds for GNU development. @end titlepage @c --------------------------------------------------------------------- @@ -68,7 +74,9 @@ Here are the primary steps required to port the library: * Operating system:: Configuring for your operating system. * Character types:: Implementing character classification. * Thread safety:: Implementing atomic operations. +* Numeric limits:: Implementing numeric limits. * Libtool:: Using libtool. +* GNU Free Documentation License:: How you can copy and share this manual. @end menu @c --------------------------------------------------------------------- @@ -119,17 +127,33 @@ provide these macros. Note that this file does not have to include a header file that defines @code{off_t}, or the other types; you simply have to provide the macros. -In addition, several libstdc++-v3 source files unconditionally define the macro -@code{_POSIX_SOURCE}. On many systems, defining this macro causes large -portions of the C library header files to be eliminated at preprocessing -time. Therefore, you may have to @code{#undef} this macro, or define -other macros (like @code{_LARGEFILE_SOURCE} or @code{__EXTENSIONS__}). -You won't know what macros to define or undefine at this point; you'll -have to try compiling the library and seeing what goes wrong. If you -see errors about calling functions that have not been declared, look in -your C library headers to see if the functions are declared there, and -then figure out what macros you should but in @file{bits/os_defines.h} -to make these declarations available. +In addition, several libstdc++-v3 source files unconditionally define +the macro @code{_POSIX_SOURCE}. On many systems, defining this macro +causes large portions of the C library header files to be eliminated +at preprocessing time. Therefore, you may have to @code{#undef} this +macro, or define other macros (like @code{_LARGEFILE_SOURCE} or +@code{__EXTENSIONS__}). You won't know what macros to define or +undefine at this point; you'll have to try compiling the library and +seeing what goes wrong. If you see errors about calling functions +that have not been declared, look in your C library headers to see if +the functions are declared there, and then figure out what macros you +need to define. You will need to add them to the +@code{CPLUSPLUS_CPP_SPEC} macro in the GCC configuration file for your +target. It will not work to simply define these macros in +@file{os_defines.h}. + +At this time, there are two libstdc++-v3-specific macros 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). +@code{_GLIBCPP_AVOID_FSEEK} may be defined if seeking on an interactive +stream (or one hooked to a pipe) is not allowed by the OS. In this +case, getc()/ungetc() will be used at some key locations in the library +implementation instead of fseek(). Currently, the code path to avoid +fseek() is only enabled when the seek size is 1 character away from the +current stream position. This is known to improve *-unknown-freebsd* +and sparc-sun-solaris2.*. Finally, you should bracket the entire file in an include-guard, like this: @@ -414,6 +438,31 @@ __atomic_add (_Atomic_word* __mem, int __val) @end example @c --------------------------------------------------------------------- +@c Numeric limits +@c --------------------------------------------------------------------- + +@node Numeric limits +@chapter Numeric limits + +The C++ library requires information about the fundamental data types, +such as the minimum and maximum representable values of each type. +You can define each of these values individually, but it is usually +easiest just to indicate how many bits are used in each of the data +types and let the library do the rest. For information about the +macros to define, see the top of @file{include/bits/std_limits.h}. + +If you need to define any macros, you can do so in +@file{os_defines.h}. However, if all operating systems for your CPU +are likely to use the same values, you can provide a CPU-specific file +instead so that you do not have to provide the same definitions for +each operating system. To take that approach, create a new file +called @file{limits.h} in your CPU configuration directory (e.g., +@file{config/cpu/i386/bits}) and then modify @file{configure.target} +so that @code{LIMITSH} is set to the CPU directory (e.g., +@file{config/cpu/i386}). Note that @code{LIMITSH} should not include +the @samp{bits} part of the directory name. + +@c --------------------------------------------------------------------- @c Libtool @c --------------------------------------------------------------------- @@ -448,6 +497,12 @@ that sets @code{archive_cmds}. Here, adjust the setting for your operating system. @c --------------------------------------------------------------------- +@c GFDL +@c --------------------------------------------------------------------- + +@include fdl.texi + +@c --------------------------------------------------------------------- @c Epilogue @c --------------------------------------------------------------------- |