aboutsummaryrefslogtreecommitdiff
path: root/contrib/gcc
diff options
context:
space:
mode:
authorcvs2svn <cvs2svn@FreeBSD.org>2002-12-04 17:08:09 +0000
committercvs2svn <cvs2svn@FreeBSD.org>2002-12-04 17:08:09 +0000
commit4c3c403e5c73273497d72584701d0e4a79328d05 (patch)
treef25eac871a7948610ebdd334dbbffd2ccf0e075b /contrib/gcc
parente3dd383f0088d7ec9c67022680e31a5b756d4258 (diff)
Diffstat (limited to 'contrib/gcc')
-rw-r--r--contrib/gcc/cccp.1674
-rw-r--r--contrib/gcc/concat.c236
-rw-r--r--contrib/gcc/config/alpha/crtbegin.asm192
-rw-r--r--contrib/gcc/config/alpha/crtend.asm108
-rw-r--r--contrib/gcc/config/alpha/gdb-osf12.h26
-rw-r--r--contrib/gcc/config/alpha/gdb-osf2.h26
-rw-r--r--contrib/gcc/config/alpha/gdb.h26
-rw-r--r--contrib/gcc/config/alpha/osf2.h32
-rw-r--r--contrib/gcc/config/i386/freebsd-elf.h257
-rw-r--r--contrib/gcc/config/i386/freebsd.h.fixed257
-rw-r--r--contrib/gcc/config/i386/x-freebsd3
-rw-r--r--contrib/gcc/cp/g++.c582
-rw-r--r--contrib/gcc/cp/reno.texi752
-rw-r--r--contrib/gcc/cpp.11
-rw-r--r--contrib/gcc/fibheap.c523
-rw-r--r--contrib/gcc/fibheap.h81
-rw-r--r--contrib/gcc/gcc.14191
-rw-r--r--contrib/gcc/hex.c111
-rw-r--r--contrib/gcc/make-temp-file.c179
-rw-r--r--contrib/gcc/md5.h142
-rw-r--r--contrib/gcc/objc/sendmsg.c651
21 files changed, 0 insertions, 9050 deletions
diff --git a/contrib/gcc/cccp.1 b/contrib/gcc/cccp.1
deleted file mode 100644
index 84eb19ede54e..000000000000
--- a/contrib/gcc/cccp.1
+++ /dev/null
@@ -1,674 +0,0 @@
-.\" Copyright (c) 1991, 1992, 1993 Free Software Foundation \-*-Text-*-
-.\" See section COPYING for conditions for redistribution
-.TH cpp 1 "30apr1993" "GNU Tools" "GNU Tools"
-.SH NAME
-cccp, cpp \- The GNU C-Compatible Compiler Preprocessor.
-.SH SYNOPSIS
-.hy 0
-.na
-.TP
-.B cccp
-.RB "[\|" \-$ "\|]"
-.RB "[\|" \-A \c
-.I predicate\c
-.RB [ (\c
-.I value\c
-.BR ) ]\|]
-.RB "[\|" \-C "\|]"
-.RB "[\|" \-D \c
-.I name\c
-.RB [ =\c
-.I definition\c
-\&]\|]
-.RB "[\|" \-dD "\|]"
-.RB "[\|" \-dM "\|]"
-.RB "[\|" "\-I\ "\c
-.I directory\c
-\&\|]
-.RB "[\|" \-H "\|]"
-.RB "[\|" \-I\- "\|]"
-.RB "[\|" "\-imacros\ "\c
-.I file\c
-\&\|]
-.RB "[\|" "\-include\ "\c
-.I file\c
-\&\|]
-.RB "[\|" "\-idirafter\ "\c
-.I dir\c
-\&\|]
-.RB "[\|" "\-iprefix\ "\c
-.I prefix\c
-\&\|]
-.RB "[\|" "\-iwithprefix\ "\c
-.I dir\c
-\&\|]
-.RB "[\|" \-lang\-c "\|]"
-.RB "[\|" \-lang\-c++ "\|]"
-.RB "[\|" \-lang\-objc "\|]"
-.RB "[\|" \-lang\-objc++ "\|]"
-.RB "[\|" \-lint "\|]"
-.RB "[\|" \-M\ [ \-MG "\|]]"
-.RB "[\|" \-MM\ [ \-MG "\|]]"
-.RB "[\|" \-MD\ \c
-.I file\ \c
-\&\|]
-.RB "[\|" \-MMD\ \c
-.I file\ \c
-\&\|]
-.RB "[\|" \-nostdinc "\|]"
-.RB "[\|" \-nostdinc++ "\|]"
-.RB "[\|" \-P "\|]"
-.RB "[\|" \-pedantic "\|]"
-.RB "[\|" \-pedantic\-errors "\|]"
-.RB "[\|" \-traditional "\|]"
-.RB "[\|" \-trigraphs "\|]"
-.RB "[\|" \-U \c
-.I name\c
-\&\|]
-.RB "[\|" \-undef "\|]"
-.RB "[\|" \-Wtrigraphs "\|]"
-.RB "[\|" \-Wcomment "\|]"
-.RB "[\|" \-Wall "\|]"
-.RB "[\|" \-Wtraditional "\|]"
-.br
-.RB "[\|" \c
-.I infile\c
-.RB | \- "\|]"
-.RB "[\|" \c
-.I outfile\c
-.RB | \- "\|]"
-.ad b
-.hy 1
-.SH DESCRIPTION
-The C preprocessor is a \c
-.I macro processor\c
-\& that is used automatically by
-the C compiler to transform your program before actual compilation. It is
-called a macro processor because it allows you to define \c
-.I macros\c
-\&,
-which are brief abbreviations for longer constructs.
-
-The C preprocessor provides four separate facilities that you can use as
-you see fit:
-.TP
-\(bu
-Inclusion of header files. These are files of declarations that can be
-substituted into your program.
-.TP
-\(bu
-Macro expansion. You can define \c
-.I macros\c
-\&, which are abbreviations
-for arbitrary fragments of C code, and then the C preprocessor will
-replace the macros with their definitions throughout the program.
-.TP
-\(bu
-Conditional compilation. Using special preprocessing directives, you
-can include or exclude parts of the program according to various
-conditions.
-.TP
-\(bu
-Line control. If you use a program to combine or rearrange source files into
-an intermediate file which is then compiled, you can use line control
-to inform the compiler of where each source line originally came from.
-.PP
-C preprocessors vary in some details. For a full explanation of the
-GNU C preprocessor, see the
-.B info
-file `\|\c
-.B cpp.info\c
-\&\|', or the manual
-.I The C Preprocessor\c
-\&. Both of these are built from the same documentation source file, `\|\c
-.B cpp.texinfo\c
-\&\|'. The GNU C
-preprocessor provides a superset of the features of ANSI Standard C.
-
-ANSI Standard C requires the rejection of many harmless constructs commonly
-used by today's C programs. Such incompatibility would be inconvenient for
-users, so the GNU C preprocessor is configured to accept these constructs
-by default. Strictly speaking, to get ANSI Standard C, you must use the
-options `\|\c
-.B \-trigraphs\c
-\&\|', `\|\c
-.B \-undef\c
-\&\|' and `\|\c
-.B \-pedantic\c
-\&\|', but in
-practice the consequences of having strict ANSI Standard C make it
-undesirable to do this.
-
-Most often when you use the C preprocessor you will not have to invoke it
-explicitly: the C compiler will do so automatically. However, the
-preprocessor is sometimes useful individually.
-
-When you call the preprocessor individually, either name
-(\c
-.B cpp\c
-\& or \c
-.B cccp\c
-\&) will do\(em\&they are completely synonymous.
-
-The C preprocessor expects two file names as arguments, \c
-.I infile\c
-\& and
-\c
-.I outfile\c
-\&. The preprocessor reads \c
-.I infile\c
-\& together with any other
-files it specifies with `\|\c
-.B #include\c
-\&\|'. All the output generated by the
-combined input files is written in \c
-.I outfile\c
-\&.
-
-Either \c
-.I infile\c
-\& or \c
-.I outfile\c
-\& may be `\|\c
-.B \-\c
-\&\|', which as \c
-.I infile\c
-\&
-means to read from standard input and as \c
-.I outfile\c
-\& means to write to
-standard output. Also, if \c
-.I outfile\c
-\& or both file names are omitted,
-the standard output and standard input are used for the omitted file names.
-.SH OPTIONS
-Here is a table of command options accepted by the C preprocessor.
-These options can also be given when compiling a C program; they are
-passed along automatically to the preprocessor when it is invoked by
-the compiler.
-.TP
-.B \-P
-Inhibit generation of `\|\c
-.B #\c
-\&\|'-lines with line-number information in
-the output from the preprocessor. This might be
-useful when running the preprocessor on something that is not C code
-and will be sent to a program which might be confused by the
-`\|\c
-.B #\c
-\&\|'-lines.
-.TP
-.B \-C
-Do not discard comments: pass them through to the output file.
-Comments appearing in arguments of a macro call will be copied to the
-output before the expansion of the macro call.
-.TP
-.B \-traditional
-Try to imitate the behavior of old-fashioned C, as opposed to ANSI C.
-.TP
-.B \-trigraphs
-Process ANSI standard trigraph sequences. These are three-character
-sequences, all starting with `\|\c
-.B ??\c
-\&\|', that are defined by ANSI C to
-stand for single characters. For example, `\|\c
-.B ??/\c
-\&\|' stands for
-`\|\c
-.BR "\e" "\|',"
-so `\|\c
-.B '??/n'\c
-\&\|' is a character constant for a newline.
-Strictly speaking, the GNU C preprocessor does not support all
-programs in ANSI Standard C unless `\|\c
-.B \-trigraphs\c
-\&\|' is used, but if
-you ever notice the difference it will be with relief.
-
-You don't want to know any more about trigraphs.
-.TP
-.B \-pedantic
-Issue warnings required by the ANSI C standard in certain cases such
-as when text other than a comment follows `\|\c
-.B #else\c
-\&\|' or `\|\c
-.B #endif\c
-\&\|'.
-.TP
-.B \-pedantic\-errors
-Like `\|\c
-.B \-pedantic\c
-\&\|', except that errors are produced rather than
-warnings.
-.TP
-.B \-Wtrigraphs
-Warn if any trigraphs are encountered (assuming they are enabled).
-.TP
-.B \-Wcomment
-.TP
-.B \-Wcomments
-Warn whenever a comment-start sequence `\|\c
-.B /*\c
-\&\|' appears in a comment.
-(Both forms have the same effect).
-.TP
-.B \-Wall
-Requests both `\|\c
-.B \-Wtrigraphs\c
-\&\|' and `\|\c
-.B \-Wcomment\c
-\&\|' (but not
-`\|\c
-.B \-Wtraditional\c
-\&\|').
-.TP
-.B \-Wtraditional
-Warn about certain constructs that behave differently in traditional and
-ANSI C.
-.TP
-.BI "\-I " directory\c
-\&
-Add the directory \c
-.I directory\c
-\& to the end of the list of
-directories to be searched for header files.
-This can be used to override a system header file, substituting your
-own version, since these directories are searched before the system
-header file directories. If you use more than one `\|\c
-.B \-I\c
-\&\|' option,
-the directories are scanned in left-to-right order; the standard
-system directories come after.
-.TP
-.B \-I\-
-Any directories specified with `\|\c
-.B \-I\c
-\&\|' options before the `\|\c
-.B \-I\-\c
-\&\|'
-option are searched only for the case of `\|\c
-.B #include "\c
-.I file\c
-\&"\c
-\&\|';
-they are not searched for `\|\c
-.B #include <\c
-.I file\c
-\&>\c
-\&\|'.
-
-If additional directories are specified with `\|\c
-.B \-I\c
-\&\|' options after
-the `\|\c
-.B \-I\-\c
-\&\|', these directories are searched for all `\|\c
-.B #include\c
-\&\|'
-directives.
-
-In addition, the `\|\c
-.B \-I\-\c
-\&\|' option inhibits the use of the current
-directory as the first search directory for `\|\c
-.B #include "\c
-.I file\c
-\&"\c
-\&\|'.
-Therefore, the current directory is searched only if it is requested
-explicitly with `\|\c
-.B \-I.\c
-\&\|'. Specifying both `\|\c
-.B \-I\-\c
-\&\|' and `\|\c
-.B \-I.\c
-\&\|'
-allows you to control precisely which directories are searched before
-the current one and which are searched after.
-.TP
-.B \-nostdinc
-Do not search the standard system directories for header files.
-Only the directories you have specified with `\|\c
-.B \-I\c
-\&\|' options
-(and the current directory, if appropriate) are searched.
-.TP
-.B \-nostdinc++
-Do not search for header files in the C++ specific standard
-directories, but do still search the other standard directories.
-(This option is used when building libg++.)
-.TP
-.BI "\-D " "name"\c
-\&
-Predefine \c
-.I name\c
-\& as a macro, with definition `\|\c
-.B 1\c
-\&\|'.
-.TP
-.BI "\-D " "name" = definition
-\&
-Predefine \c
-.I name\c
-\& as a macro, with definition \c
-.I definition\c
-\&.
-There are no restrictions on the contents of \c
-.I definition\c
-\&, but if
-you are invoking the preprocessor from a shell or shell-like program
-you may need to use the shell's quoting syntax to protect characters
-such as spaces that have a meaning in the shell syntax. If you use more than
-one `\|\c
-.B \-D\c
-\&\|' for the same
-.I name\c
-\&, the rightmost definition takes effect.
-.TP
-.BI "\-U " "name"\c
-\&
-Do not predefine \c
-.I name\c
-\&. If both `\|\c
-.B \-U\c
-\&\|' and `\|\c
-.B \-D\c
-\&\|' are
-specified for one name, the `\|\c
-.B \-U\c
-\&\|' beats the `\|\c
-.B \-D\c
-\&\|' and the name
-is not predefined.
-.TP
-.B \-undef
-Do not predefine any nonstandard macros.
-.TP
-.BI "\-A " "name(" value )
-Assert (in the same way as the \c
-.B #assert\c
-\& directive)
-the predicate \c
-.I name\c
-\& with tokenlist \c
-.I value\c
-\&. Remember to escape or quote the parentheses on
-shell command lines.
-
-You can use `\|\c
-.B \-A-\c
-\&\|' to disable all predefined assertions; it also
-undefines all predefined macros.
-.TP
-.B \-dM
-Instead of outputting the result of preprocessing, output a list of
-`\|\c
-.B #define\c
-\&\|' directives for all the macros defined during the
-execution of the preprocessor, including predefined macros. This gives
-you a way of finding out what is predefined in your version of the
-preprocessor; assuming you have no file `\|\c
-.B foo.h\c
-\&\|', the command
-.sp
-.br
-touch\ foo.h;\ cpp\ \-dM\ foo.h
-.br
-.sp
-will show the values of any predefined macros.
-.TP
-.B \-dD
-Like `\|\c
-.B \-dM\c
-\&\|' except in two respects: it does \c
-.I not\c
-\& include the
-predefined macros, and it outputs \c
-.I both\c
-\& the `\|\c
-.B #define\c
-\&\|'
-directives and the result of preprocessing. Both kinds of output go to
-the standard output file.
-.PP
-.TP
-.BR \-M\ [ \-MG ]
-Instead of outputting the result of preprocessing, output a rule
-suitable for \c
-.B make\c
-\& describing the dependencies of the main
-source file. The preprocessor outputs one \c
-.B make\c
-\& rule containing
-the object file name for that source file, a colon, and the names of
-all the included files. If there are many included files then the
-rule is split into several lines using `\|\c
-.B \\\\\c
-\&\|'-newline.
-
-`\|\c
-.B \-MG\c
-\&\|' says to treat missing header files as generated files and assume \c
-they live in the same directory as the source file. It must be specified \c
-in addition to `\|\c
-.B \-M\c
-\&\|'.
-
-This feature is used in automatic updating of makefiles.
-.TP
-.BR \-MM\ [ \-MG ]
-Like `\|\c
-.B \-M\c
-\&\|' but mention only the files included with `\|\c
-.B #include
-"\c
-.I file\c
-\&"\c
-\&\|'. System header files included with `\|\c
-.B #include
-<\c
-.I file\c
-\&>\c
-\&\|' are omitted.
-.TP
-.BI \-MD\ file
-Like `\|\c
-.B \-M\c
-\&\|' but the dependency information is written to `\|\c
-.I file\c
-\&\|'. This is in addition to compiling the file as
-specified\(em\&`\|\c
-.B \-MD\c
-\&\|' does not inhibit ordinary compilation the way
-`\|\c
-.B \-M\c
-\&\|' does.
-
-When invoking gcc, do not specify the `\|\c
-.I file\c
-\&\|' argument. Gcc will create file names made by replacing `\|\c
-.B .c\c
-\&\|' with `\|\c
-.B .d\c
-\&\|' at the end of the input file names.
-
-In Mach, you can use the utility \c
-.B md\c
-\& to merge multiple files
-into a single dependency file suitable for using with the `\|\c
-.B make\c
-\&\|'
-command.
-.TP
-.BI \-MMD\ file
-Like `\|\c
-.B \-MD\c
-\&\|' except mention only user header files, not system
-header files.
-.TP
-.B \-H
-Print the name of each header file used, in addition to other normal
-activities.
-.TP
-.BI "\-imacros " "file"\c
-\&
-Process \c
-.I file\c
-\& as input, discarding the resulting output, before
-processing the regular input file. Because the output generated from
-\c
-.I file\c
-\& is discarded, the only effect of `\|\c
-.B \-imacros \c
-.I file\c
-\&\c
-\&\|' is to
-make the macros defined in \c
-.I file\c
-\& available for use in the main
-input. The preprocessor evaluates any `\|\c
-.B \-D\c
-\&\|' and `\|\c
-.B \-U\c
-\&\|' options
-on the command line before processing `\|\c
-.B \-imacros \c
-.I file\c
-\&\|' \c
-\&.
-.TP
-.BI "\-include " "file"
-Process
-.I file
-as input, and include all the resulting output,
-before processing the regular input file.
-.TP
-.BI "-idirafter " "dir"\c
-\&
-Add the directory \c
-.I dir\c
-\& to the second include path. The directories
-on the second include path are searched when a header file is not found
-in any of the directories in the main include path (the one that
-`\|\c
-.B \-I\c
-\&\|' adds to).
-.TP
-.BI "-iprefix " "prefix"\c
-\&
-Specify \c
-.I prefix\c
-\& as the prefix for subsequent `\|\c
-.B \-iwithprefix\c
-\&\|'
-options.
-.TP
-.BI "-iwithprefix " "dir"\c
-\&
-Add a directory to the second include path. The directory's name is
-made by concatenating \c
-.I prefix\c
-\& and \c
-.I dir\c
-\&, where \c
-.I prefix\c
-\&
-was specified previously with `\|\c
-.B \-iprefix\c
-\&\|'.
-.TP
-.B \-lang-c
-.TP
-.B \-lang-c++
-.TP
-.B \-lang-objc
-.TP
-.B \-lang-objc++
-Specify the source language. `\|\c
-.B \-lang-c++\c
-\&\|' makes the preprocessor
-handle C++ comment syntax, and includes extra default include
-directories for C++, and `\|\c
-.B \-lang-objc\c
-\&\|' enables the Objective C
-`\|\c
-.B #import\c
-\&\|' directive. `\|\c
-.B \-lang-c\c
-\&\|' explicitly turns off both of
-these extensions, and `\|\c
-.B \-lang-objc++\c
-\&\|' enables both.
-
-These options are generated by the compiler driver \c
-.B gcc\c
-\&, but not
-passed from the `\|\c
-.B gcc\c
-\&\|' command line.
-.TP
-.B \-lint
-Look for commands to the program checker \c
-.B lint\c
-\& embedded in
-comments, and emit them preceded by `\|\c
-.B #pragma lint\c
-\&\|'. For example,
-the comment `\|\c
-.B /* NOTREACHED */\c
-\&\|' becomes `\|\c
-.B #pragma lint
-NOTREACHED\c
-\&\|'.
-
-This option is available only when you call \c
-.B cpp\c
-\& directly;
-\c
-.B gcc\c
-\& will not pass it from its command line.
-.TP
-.B \-$
-Forbid the use of `\|\c
-.B $\c
-\&\|' in identifiers. This was formerly required for strict conformance
-to the C Standard before the standard was corrected. \c
-
-This option is available only when you call \c
-.B cpp\c
-\& directly;
-.B gcc\c
-\& will not pass it from its command line.
-.SH "SEE ALSO"
-.RB "`\|" Cpp "\|'"
-entry in
-.B info\c
-\&;
-.I The C Preprocessor\c
-, Richard M. Stallman.
-.br
-.BR gcc "(" 1 ");"
-.RB "`\|" Gcc "\|'"
-entry in
-.B info\c
-\&;
-.I
-Using and Porting GNU CC (for version 2.0)\c
-, Richard M. Stallman.
-.SH COPYING
-Copyright (c) 1991, 1992, 1993 Free Software Foundation, Inc.
-.PP
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-.PP
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-.PP
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
diff --git a/contrib/gcc/concat.c b/contrib/gcc/concat.c
deleted file mode 100644
index 98b20e16a11a..000000000000
--- a/contrib/gcc/concat.c
+++ /dev/null
@@ -1,236 +0,0 @@
-/* Concatenate variable number of strings.
- Copyright (C) 1991, 1994, 2001 Free Software Foundation, Inc.
- Written by Fred Fish @ Cygnus Support
-
-This file is part of the libiberty library.
-Libiberty is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-Libiberty 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with libiberty; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-
-/*
-
-@deftypefn Extension char* concat (const char *@var{s1}, const char *@var{s2}, @dots{}, @code{NULL})
-
-Concatenate zero or more of strings and return the result in freshly
-@code{xmalloc}ed memory. Returns @code{NULL} if insufficient memory is
-available. The argument list is terminated by the first @code{NULL}
-pointer encountered. Pointers to empty strings are ignored.
-
-@end deftypefn
-
-NOTES
-
- This function uses xmalloc() which is expected to be a front end
- function to malloc() that deals with low memory situations. In
- typical use, if malloc() returns NULL then xmalloc() diverts to an
- error handler routine which never returns, and thus xmalloc will
- never return a NULL pointer. If the client application wishes to
- deal with low memory situations itself, it should supply an xmalloc
- that just directly invokes malloc and blindly returns whatever
- malloc returns.
-
-*/
-
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include "ansidecl.h"
-#include "libiberty.h"
-#include <sys/types.h> /* size_t */
-
-#ifdef ANSI_PROTOTYPES
-#include <stdarg.h>
-#else
-#include <varargs.h>
-#endif
-
-# if HAVE_STRING_H
-# include <string.h>
-# else
-# if HAVE_STRINGS_H
-# include <strings.h>
-# endif
-# endif
-
-#if HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-
-static inline unsigned long vconcat_length PARAMS ((const char *, va_list));
-static inline unsigned long
-vconcat_length (first, args)
- const char *first;
- va_list args;
-{
- unsigned long length = 0;
- const char *arg;
-
- for (arg = first; arg ; arg = va_arg (args, const char *))
- length += strlen (arg);
-
- return length;
-}
-
-static inline char *vconcat_copy PARAMS ((char *, const char *, va_list));
-static inline char *
-vconcat_copy (dst, first, args)
- char *dst;
- const char *first;
- va_list args;
-{
- char *end = dst;
- const char *arg;
-
- for (arg = first; arg ; arg = va_arg (args, const char *))
- {
- unsigned long length = strlen (arg);
- memcpy (end, arg, length);
- end += length;
- }
- *end = '\000';
-
- return dst;
-}
-
-/* @undocumented concat_length */
-
-unsigned long
-concat_length VPARAMS ((const char *first, ...))
-{
- unsigned long length;
-
- VA_OPEN (args, first);
- VA_FIXEDARG (args, const char *, first);
- length = vconcat_length (first, args);
- VA_CLOSE (args);
-
- return length;
-}
-
-/* @undocumented concat_copy */
-
-char *
-concat_copy VPARAMS ((char *dst, const char *first, ...))
-{
- char *save_dst;
-
- VA_OPEN (args, first);
- VA_FIXEDARG (args, char *, dst);
- VA_FIXEDARG (args, const char *, first);
- vconcat_copy (dst, first, args);
- save_dst = dst; /* With K&R C, dst goes out of scope here. */
- VA_CLOSE (args);
-
- return save_dst;
-}
-
-char *libiberty_concat_ptr;
-
-/* @undocumented concat_copy2 */
-
-char *
-concat_copy2 VPARAMS ((const char *first, ...))
-{
- VA_OPEN (args, first);
- VA_FIXEDARG (args, const char *, first);
- vconcat_copy (libiberty_concat_ptr, first, args);
- VA_CLOSE (args);
-
- return libiberty_concat_ptr;
-}
-
-char *
-concat VPARAMS ((const char *first, ...))
-{
- char *newstr;
-
- /* First compute the size of the result and get sufficient memory. */
- VA_OPEN (args, first);
- VA_FIXEDARG (args, const char *, first);
- newstr = (char *) xmalloc (vconcat_length (first, args) + 1);
- VA_CLOSE (args);
-
- /* Now copy the individual pieces to the result string. */
- VA_OPEN (args, first);
- VA_FIXEDARG (args, const char *, first);
- vconcat_copy (newstr, first, args);
- VA_CLOSE (args);
-
- return newstr;
-}
-
-/*
-
-@deftypefn Extension char* reconcat (char *@var{optr}, const char *@var{s1}, @dots{}, @code{NULL})
-
-Same as @code{concat}, except that if @var{optr} is not @code{NULL} it
-is freed after the string is created. This is intended to be useful
-when you're extending an existing string or building up a string in a
-loop:
-
-@example
- str = reconcat (str, "pre-", str, NULL);
-@end example
-
-@end deftypefn
-
-*/
-
-char *
-reconcat VPARAMS ((char *optr, const char *first, ...))
-{
- char *newstr;
-
- /* First compute the size of the result and get sufficient memory. */
- VA_OPEN (args, first);
- VA_FIXEDARG (args, char *, optr);
- VA_FIXEDARG (args, const char *, first);
- newstr = (char *) xmalloc (vconcat_length (first, args) + 1);
- VA_CLOSE (args);
-
- /* Now copy the individual pieces to the result string. */
- VA_OPEN (args, first);
- VA_FIXEDARG (args, char *, optr);
- VA_FIXEDARG (args, const char *, first);
- vconcat_copy (newstr, first, args);
- if (optr) /* Done before VA_CLOSE so optr stays in scope for K&R C. */
- free (optr);
- VA_CLOSE (args);
-
- return newstr;
-}
-
-#ifdef MAIN
-#define NULLP (char *)0
-
-/* Simple little test driver. */
-
-#include <stdio.h>
-
-int
-main ()
-{
- printf ("\"\" = \"%s\"\n", concat (NULLP));
- printf ("\"a\" = \"%s\"\n", concat ("a", NULLP));
- printf ("\"ab\" = \"%s\"\n", concat ("a", "b", NULLP));
- printf ("\"abc\" = \"%s\"\n", concat ("a", "b", "c", NULLP));
- printf ("\"abcd\" = \"%s\"\n", concat ("ab", "cd", NULLP));
- printf ("\"abcde\" = \"%s\"\n", concat ("ab", "c", "de", NULLP));
- printf ("\"abcdef\" = \"%s\"\n", concat ("", "a", "", "bcd", "ef", NULLP));
- return 0;
-}
-
-#endif
diff --git a/contrib/gcc/config/alpha/crtbegin.asm b/contrib/gcc/config/alpha/crtbegin.asm
deleted file mode 100644
index f954f1ab0d3e..000000000000
--- a/contrib/gcc/config/alpha/crtbegin.asm
+++ /dev/null
@@ -1,192 +0,0 @@
- # Copyright (C) 1996, 1998 Free Software Foundation, Inc.
- # Contributed by Richard Henderson (rth@tamu.edu)
- #
- # This file 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 2, or (at your option) any
- # later version.
- #
- # In addition to the permissions in the GNU General Public License, the
- # Free Software Foundation gives you unlimited permission to link the
- # compiled version of this file with other programs, and to distribute
- # those programs without any restriction coming from the use of this
- # file. (The General Public License restrictions do apply in other
- # respects; for example, they cover modification of the file, and
- # distribution when not linked into another program.)
- #
- # This file 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.
- #
- # You should have received a copy of the GNU General Public License
- # along with this program; see the file COPYING. If not, write to
- # the Free Software Foundation, 59 Temple Place - Suite 330,
- # Boston, MA 02111-1307, USA.
- #
- # As a special exception, if you link this library with files
- # compiled with GCC to produce an executable, this does not cause
- # the resulting executable to be covered by the GNU General Public License.
- # This exception does not however invalidate any other reasons why
- # the executable file might be covered by the GNU General Public License.
-
- #
- # Heads of the constructor/destructor lists.
- #
-
- # The __*TOR_LIST__ symbols are not global because when this file is used
- # in a shared library, we do not want the symbol to fall over to the
- # application's lists.
-
-.section .ctors,"aw"
-
- .align 3
-__CTOR_LIST__:
- .quad -1
-
-.section .dtors,"aw"
-
- .align 3
-__DTOR_LIST__:
- .quad -1
-
-.section .eh_frame,"aw"
-__EH_FRAME_BEGIN__:
-
- #
- # Fragment of the ELF _fini routine that invokes our dtor cleanup.
- #
-
-.section .fini,"ax"
-
- # Since the bits of the _fini function are spread across many
- # object files, each potentially with its own GP, we must
- # assume we need to load ours. Further, our .fini section
- # can easily be more than 4MB away from our .text bits so we
- # can't use bsr.
-
- br $29,1f
-1: ldgp $29,0($29)
- jsr $26,__do_global_dtors_aux
-
- # Ideally this call would go in crtend.o, except that we can't
- # get hold of __EH_FRAME_BEGIN__ there.
-
- jsr $26,__do_frame_takedown
-
- # Must match the alignment we got from crti.o else we get
- # zero-filled holes in our _fini function and then SIGILL.
- .align 3
-
- #
- # Fragment of the ELF _init routine that sets up the frame info.
- #
-
-.section .init,"ax"
- br $29,1f
-1: ldgp $29,0($29)
- jsr $26,__do_frame_setup
- .align 3
-
- #
- # Invoke our destructors in order.
- #
-
-.data
-
- # Support recursive calls to exit.
-$ptr: .quad __DTOR_LIST__
-
-.text
-
- .align 3
- .ent __do_global_dtors_aux
-
-__do_global_dtors_aux:
- lda $30,-16($30)
- .frame $30,16,$26,0
- stq $9,8($30)
- stq $26,0($30)
- .mask 0x4000200,-16
- .prologue 0
-
- lda $9,$ptr
- br 1f
-0: stq $1,0($9)
- jsr $26,($27)
-1: ldq $1,0($9)
- ldq $27,8($1)
- addq $1,8,$1
- bne $27,0b
-
- ldq $26,0($30)
- ldq $9,8($30)
- lda $30,16($30)
- ret
-
- .end __do_global_dtors_aux
-
- #
- # Install our frame info.
- #
-
- # ??? How can we rationally keep this size correct?
-
-.section .bss
- .type $object,@object
- .align 3
-$object:
- .zero 48
- .size $object, 48
-
-.text
-
- .align 3
- .ent __do_frame_setup
-
-__do_frame_setup:
- ldgp $29,0($27)
- lda $30,-16($30)
- .frame $30,16,$26,0
- stq $26,0($30)
- .mask 0x4000000,-16
- .prologue 1
-
- lda $1,__register_frame_info
- beq $1,0f
- lda $16,__EH_FRAME_BEGIN__
- lda $17,$object
- jsr $26,__register_frame_info
- ldq $26,0($30)
-0: lda $30,16($30)
- ret
-
- .end __do_frame_setup
-
- #
- # Remove our frame info.
- #
-
- .align 3
- .ent __do_frame_takedown
-
-__do_frame_takedown:
- ldgp $29,0($27)
- lda $30,-16($30)
- .frame $30,16,$26,0
- stq $26,0($30)
- .mask 0x4000000,-16
- .prologue 1
-
- lda $1,__deregister_frame_info
- beq $1,0f
- lda $16,__EH_FRAME_BEGIN__
- jsr $26,__deregister_frame_info
- ldq $26,0($30)
-0: lda $30,16($30)
- ret
-
- .end __do_frame_takedown
-
-.weak __register_frame_info
-.weak __deregister_frame_info
diff --git a/contrib/gcc/config/alpha/crtend.asm b/contrib/gcc/config/alpha/crtend.asm
deleted file mode 100644
index 4a0cc5e9f612..000000000000
--- a/contrib/gcc/config/alpha/crtend.asm
+++ /dev/null
@@ -1,108 +0,0 @@
- # Copyright (C) 1996 Free Software Foundation, Inc.
- # Contributed by Richard Henderson (rth@tamu.edu)
- #
- # This file 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 2, or (at your option) any
- # later version.
- #
- # In addition to the permissions in the GNU General Public License, the
- # Free Software Foundation gives you unlimited permission to link the
- # compiled version of this file with other programs, and to distribute
- # those programs without any restriction coming from the use of this
- # file. (The General Public License restrictions do apply in other
- # respects; for example, they cover modification of the file, and
- # distribution when not linked into another program.)
- #
- # This file 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.
- #
- # You should have received a copy of the GNU General Public License
- # along with this program; see the file COPYING. If not, write to
- # the Free Software Foundation, 59 Temple Place - Suite 330,
- # Boston, MA 02111-1307, USA.
- #
- # As a special exception, if you link this library with files
- # compiled with GCC to produce an executable, this does not cause
- # the resulting executable to be covered by the GNU General Public License.
- # This exception does not however invalidate any other reasons why
- # the executable file might be covered by the GNU General Public License.
-
- #
- # Tails of the constructor/destructor lists.
- #
-
- # The __*TOR_END__ symbols are not global because when this file is used
- # in a shared library, we do not want the symbol to fall over to the
- # application's lists.
-
-.section .ctors,"aw"
-
- .align 3
-__CTOR_END__:
- .quad 0
-
-.section .dtors,"aw"
-
- .align 3
-__DTOR_END__:
- .quad 0
-
-.section .eh_frame,"aw"
-__FRAME_END__:
- .quad 0
-
- #
- # Fragment of the ELF _init routine that invokes our ctor startup
- #
-
-.section .init,"ax"
-
- # Since the bits of the _init function are spread across many
- # object files, each potentially with its own GP, we must
- # assume we need to load ours. Further, our .init section
- # can easily be more than 4MB away from our .text bits so we
- # can't use bsr.
-
- br $29,1f
-1: ldgp $29,0($29)
- jsr $26,__do_global_ctors_aux
-
- # Must match the alignment we got from crti.o else we get
- # zero-filled holes in our _init function and thense SIGILL.
- .align 3
-
- #
- # Invoke our destructors in order.
- #
-
-.text
-
- .align 3
- .ent __do_global_ctors_aux
-
-__do_global_ctors_aux:
- ldgp $29,0($27)
- lda $30,-16($30)
- .frame $30,16,$26,0
- stq $9,8($30)
- stq $26,0($30)
- .mask 0x4000200,-16
- .prologue 1
-
- lda $9,__CTOR_END__
- br 1f
-0: jsr $26,($27)
-1: ldq $27,-8($9)
- subq $9,8,$9
- not $27,$0
- bne $0,0b
-
- ldq $26,0($30)
- ldq $9,8($30)
- lda $30,16($30)
- ret
-
- .end __do_global_ctors_aux
diff --git a/contrib/gcc/config/alpha/gdb-osf12.h b/contrib/gcc/config/alpha/gdb-osf12.h
deleted file mode 100644
index 98c289714017..000000000000
--- a/contrib/gcc/config/alpha/gdb-osf12.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/* Definitions of target machine for GNU compiler, for DEC Alpha, using
- encapsulated stabs and OSF V1.2.
- Copyright (C) 1994 Free Software Foundation, Inc.
- Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
-
-This file is part of GNU CC.
-
-GNU CC 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 2, or (at your option)
-any later version.
-
-GNU CC 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.
-
-You should have received a copy of the GNU General Public License
-along with GNU CC; see the file COPYING. If not, write to
-the Free Software Foundation, 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#include "alpha/osf12.h"
-
-#undef PREFERRED_DEBUGGING_TYPE
-#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
diff --git a/contrib/gcc/config/alpha/gdb-osf2.h b/contrib/gcc/config/alpha/gdb-osf2.h
deleted file mode 100644
index 5ddb7981b34d..000000000000
--- a/contrib/gcc/config/alpha/gdb-osf2.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/* Definitions of target machine for GNU compiler, for DEC Alpha, using
- encapsulated stabs.
- Copyright (C) 1992, 1993 Free Software Foundation, Inc.
- Contributed by Peter Schauer (pes@regent.e-technik.tu-muenchen.de).
-
-This file is part of GNU CC.
-
-GNU CC 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 2, or (at your option)
-any later version.
-
-GNU CC 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.
-
-You should have received a copy of the GNU General Public License
-along with GNU CC; see the file COPYING. If not, write to
-the Free Software Foundation, 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#include "alpha/osf2.h"
-
-#undef PREFERRED_DEBUGGING_TYPE
-#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
diff --git a/contrib/gcc/config/alpha/gdb.h b/contrib/gcc/config/alpha/gdb.h
deleted file mode 100644
index ecdbe40a9a45..000000000000
--- a/contrib/gcc/config/alpha/gdb.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/* Definitions of target machine for GNU compiler, for DEC Alpha, using
- encapsulated stabs.
- Copyright (C) 1992, 1993 Free Software Foundation, Inc.
- Contributed by Peter Schauer (pes@regent.e-technik.tu-muenchen.de).
-
-This file is part of GNU CC.
-
-GNU CC 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 2, or (at your option)
-any later version.
-
-GNU CC 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.
-
-You should have received a copy of the GNU General Public License
-along with GNU CC; see the file COPYING. If not, write to
-the Free Software Foundation, 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#include "alpha/alpha.h"
-
-#undef PREFERRED_DEBUGGING_TYPE
-#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
diff --git a/contrib/gcc/config/alpha/osf2.h b/contrib/gcc/config/alpha/osf2.h
deleted file mode 100644
index 169af5a01c97..000000000000
--- a/contrib/gcc/config/alpha/osf2.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Definitions of target machine for GNU compiler, for DEC Alpha.
- Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc.
- Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
-
-This file is part of GNU CC.
-
-GNU CC 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 2, or (at your option)
-any later version.
-
-GNU CC 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.
-
-You should have received a copy of the GNU General Public License
-along with GNU CC; see the file COPYING. If not, write to
-the Free Software Foundation, 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-
-#include "alpha/alpha.h"
-
-/* In OSF 2.0, the size of wchar_t was changed from short unsigned
- to unsigned int. */
-
-#undef WCHAR_TYPE
-#define WCHAR_TYPE "unsigned int"
-
-#undef WCHAR_TYPE_SIZE
-#define WCHAR_TYPE_SIZE 32
diff --git a/contrib/gcc/config/i386/freebsd-elf.h b/contrib/gcc/config/i386/freebsd-elf.h
deleted file mode 100644
index e97d4ca07bb2..000000000000
--- a/contrib/gcc/config/i386/freebsd-elf.h
+++ /dev/null
@@ -1,257 +0,0 @@
-/* Definitions for Intel 386 running FreeBSD with ELF format
- Copyright (C) 1996 Free Software Foundation, Inc.
- Contributed by Eric Youngdale.
- Modified for stabs-in-ELF by H.J. Lu.
- Adapted from GNU/Linux version by John Polstra.
- Continued development by David O'Brien <obrien@freebsd.org>
-
-This file is part of GNU CC.
-
-GNU CC 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 2, or (at your option)
-any later version.
-
-GNU CC 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.
-
-You should have received a copy of the GNU General Public License
-along with GNU CC; see the file COPYING. If not, write to
-the Free Software Foundation, 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#undef TARGET_VERSION
-#define TARGET_VERSION fprintf (stderr, " (i386 FreeBSD/ELF)");
-
-/* The svr4 ABI for the i386 says that records and unions are returned
- in memory. */
-/* On FreeBSD, we do not. */
-#undef DEFAULT_PCC_STRUCT_RETURN
-#define DEFAULT_PCC_STRUCT_RETURN 0
-
-/* This gets defined in tm.h->linux.h->svr4.h, and keeps us from using
- libraries compiled with the native cc, so undef it. */
-#undef NO_DOLLAR_IN_LABEL
-
-/* Use more efficient ``thunks'' to implement C++ vtables. */
-#undef DEFAULT_VTABLE_THUNKS
-#define DEFAULT_VTABLE_THUNKS 1
-
-/* Override the default comment-starter of "/". */
-#undef ASM_COMMENT_START
-#define ASM_COMMENT_START "#"
-
-#undef ASM_APP_ON
-#define ASM_APP_ON "#APP\n"
-
-#undef ASM_APP_OFF
-#define ASM_APP_OFF "#NO_APP\n"
-
-#undef SET_ASM_OP
-#define SET_ASM_OP ".set"
-
-/* This is how to output an element of a case-vector that is relative.
- This is only used for PIC code. See comments by the `casesi' insn in
- i386.md for an explanation of the expression this outputs. */
-#undef ASM_OUTPUT_ADDR_DIFF_ELT
-#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \
- fprintf (FILE, "\t.long _GLOBAL_OFFSET_TABLE_+[.-%s%d]\n", LPREFIX, VALUE)
-
-/* Indicate that jump tables go in the text section. This is
- necessary when compiling PIC code. */
-#define JUMP_TABLES_IN_TEXT_SECTION (flag_pic)
-
-/* Use stabs instead of DWARF debug format. */
-#undef PREFERRED_DEBUGGING_TYPE
-#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
-
-/* Copy this from the svr4 specifications... */
-/* Define the register numbers to be used in Dwarf debugging information.
- The SVR4 reference port C compiler uses the following register numbers
- in its Dwarf output code:
- 0 for %eax (gnu regno = 0)
- 1 for %ecx (gnu regno = 2)
- 2 for %edx (gnu regno = 1)
- 3 for %ebx (gnu regno = 3)
- 4 for %esp (gnu regno = 7)
- 5 for %ebp (gnu regno = 6)
- 6 for %esi (gnu regno = 4)
- 7 for %edi (gnu regno = 5)
- The following three DWARF register numbers are never generated by
- the SVR4 C compiler or by the GNU compilers, but SDB on x86/svr4
- believes these numbers have these meanings.
- 8 for %eip (no gnu equivalent)
- 9 for %eflags (no gnu equivalent)
- 10 for %trapno (no gnu equivalent)
- It is not at all clear how we should number the FP stack registers
- for the x86 architecture. If the version of SDB on x86/svr4 were
- a bit less brain dead with respect to floating-point then we would
- have a precedent to follow with respect to DWARF register numbers
- for x86 FP registers, but the SDB on x86/svr4 is so completely
- broken with respect to FP registers that it is hardly worth thinking
- of it as something to strive for compatibility with.
- The version of x86/svr4 SDB I have at the moment does (partially)
- seem to believe that DWARF register number 11 is associated with
- the x86 register %st(0), but that's about all. Higher DWARF
- register numbers don't seem to be associated with anything in
- particular, and even for DWARF regno 11, SDB only seems to under-
- stand that it should say that a variable lives in %st(0) (when
- asked via an `=' command) if we said it was in DWARF regno 11,
- but SDB still prints garbage when asked for the value of the
- variable in question (via a `/' command).
- (Also note that the labels SDB prints for various FP stack regs
- when doing an `x' command are all wrong.)
- Note that these problems generally don't affect the native SVR4
- C compiler because it doesn't allow the use of -O with -g and
- because when it is *not* optimizing, it allocates a memory
- location for each floating-point variable, and the memory
- location is what gets described in the DWARF AT_location
- attribute for the variable in question.
- Regardless of the severe mental illness of the x86/svr4 SDB, we
- do something sensible here and we use the following DWARF
- register numbers. Note that these are all stack-top-relative
- numbers.
- 11 for %st(0) (gnu regno = 8)
- 12 for %st(1) (gnu regno = 9)
- 13 for %st(2) (gnu regno = 10)
- 14 for %st(3) (gnu regno = 11)
- 15 for %st(4) (gnu regno = 12)
- 16 for %st(5) (gnu regno = 13)
- 17 for %st(6) (gnu regno = 14)
- 18 for %st(7) (gnu regno = 15)
-*/
-#undef DBX_REGISTER_NUMBER
-#define DBX_REGISTER_NUMBER(n) \
-((n) == 0 ? 0 \
- : (n) == 1 ? 2 \
- : (n) == 2 ? 1 \
- : (n) == 3 ? 3 \
- : (n) == 4 ? 6 \
- : (n) == 5 ? 7 \
- : (n) == 6 ? 5 \
- : (n) == 7 ? 4 \
- : ((n) >= FIRST_STACK_REG && (n) <= LAST_STACK_REG) ? (n)+3 \
- : (-1))
-
-/* Tell final.c that we don't need a label passed to mcount. */
-
-#undef FUNCTION_PROFILER
-#define FUNCTION_PROFILER(FILE, LABELNO) \
-{ \
- if (flag_pic) \
- fprintf (FILE, "\tcall *.mcount@GOT(%%ebx)\n"); \
- else \
- fprintf (FILE, "\tcall .mcount\n"); \
-}
-
-#undef SIZE_TYPE
-#define SIZE_TYPE "unsigned int"
-
-#undef PTRDIFF_TYPE
-#define PTRDIFF_TYPE "int"
-
-#undef WCHAR_TYPE
-#define WCHAR_TYPE "int"
-
-#undef WCHAR_UNSIGNED
-#define WCHAR_UNSIGNED 0
-
-#undef WCHAR_TYPE_SIZE
-#define WCHAR_TYPE_SIZE BITS_PER_WORD
-
-#undef CPP_PREDEFINES
-#define CPP_PREDEFINES "-Di386 -Dunix -D__ELF__ -D__FreeBSD__ -Asystem(unix) -Asystem(FreeBSD) -Acpu(i386) -Amachine(i386)"
-
-#undef CPP_SPEC
-#define CPP_SPEC "%(cpp_cpu) %{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} %{posix:-D_POSIX_SOURCE}"
-
-/* This defines which switch letters take arguments. On FreeBSD, most of
- the normal cases (defined in gcc.c) apply, and we also have -h* and
- -z* options (for the linker) (comming from svr4).
- We also have -R (alias --rpath), no -z, --soname (-h), --assert etc. */
-
-#undef SWITCH_TAKES_ARG
-#define SWITCH_TAKES_ARG(CHAR) \
- (DEFAULT_SWITCH_TAKES_ARG (CHAR) \
- || (CHAR) == 'h' \
- || (CHAR) == 'z' \
- || (CHAR) == 'R')
-
-/* Provide a STARTFILE_SPEC appropriate for FreeBSD. Here we add
- the magical crtbegin.o file (see crtstuff.c) which provides part
- of the support for getting C++ file-scope static object constructed
- before entering `main'. */
-
-#undef STARTFILE_SPEC
-#define STARTFILE_SPEC \
- "%{!shared: \
- %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} \
- %{!p:%{profile:gcrt1.o%s} \
- %{!profile:crt1.o%s}}}} \
- crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}"
-
-/* Provide a ENDFILE_SPEC appropriate for FreeBSD. Here we tack on
- the magical crtend.o file (see crtstuff.c) which provides part of
- the support for getting C++ file-scope static object constructed
- before entering `main', followed by a normal "finalizer" file,
- `crtn.o'. */
-
-#undef ENDFILE_SPEC
-#define ENDFILE_SPEC \
- "%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s"
-
-/* Provide a LIB_SPEC appropriate for FreeBSD. Just select the appropriate
- libc, depending on whether we're doing profiling or need threads support.
- (simular to the default, except no -lg, and no -p. */
-
-#undef LIB_SPEC
-#define LIB_SPEC "%{!shared: \
- %{!pg:%{!pthread:%{!kthread:-lc} \
- %{kthread:-lpthread -lc}} \
- %{pthread:-lc_r}} \
- %{pg:%{!pthread:%{!kthread:-lc_p} \
- %{kthread:-lpthread_p -lc_p}} \
- %{pthread:-lc_r_p}}}"
-
-/* Provide a LINK_SPEC appropriate for FreeBSD. Here we provide support
- for the special GCC options -static and -shared, which allow us to
- link things in one of these three modes by applying the appropriate
- combinations of options at link-time. We like to support here for
- as many of the other GNU linker options as possible. But I don't
- have the time to search for those flags. I am sure how to add
- support for -soname shared_object_name. H.J.
-
- I took out %{v:%{!V:-V}}. It is too much :-(. They can use
- -Wl,-V.
-
- When the -shared link option is used a final link is not being
- done. */
-
-#undef LINK_SPEC
-#define LINK_SPEC "-m elf_i386 \
- %{Wl,*:%*} \
- %{v:-V} \
- %{assert*} %{R*} %{rpath*} %{defsym*} \
- %{shared:-Bshareable %{h*} %{soname*}} \
- %{!shared: \
- %{!static: \
- %{rdynamic:-export-dynamic} \
- %{!dynamic-linker:-dynamic-linker /usr/libexec/ld-elf.so.1}} \
- %{static:-Bstatic}} \
- %{symbolic:-Bsymbolic}"
-
-/* A C statement to output to the stdio stream FILE an assembler
- command to advance the location counter to a multiple of 1<<LOG
- bytes if it is within MAX_SKIP bytes.
-
- This is used to align code labels according to Intel recommendations. */
-
-#ifdef HAVE_GAS_MAX_SKIP_P2ALIGN
-#define ASM_OUTPUT_MAX_SKIP_ALIGN(FILE,LOG,MAX_SKIP) \
- if ((LOG) != 0) {\
- if ((MAX_SKIP) == 0) fprintf ((FILE), "\t.p2align %d\n", (LOG)); \
- else fprintf ((FILE), "\t.p2align %d,,%d\n", (LOG), (MAX_SKIP)); \
- }
-#endif
diff --git a/contrib/gcc/config/i386/freebsd.h.fixed b/contrib/gcc/config/i386/freebsd.h.fixed
deleted file mode 100644
index e97d4ca07bb2..000000000000
--- a/contrib/gcc/config/i386/freebsd.h.fixed
+++ /dev/null
@@ -1,257 +0,0 @@
-/* Definitions for Intel 386 running FreeBSD with ELF format
- Copyright (C) 1996 Free Software Foundation, Inc.
- Contributed by Eric Youngdale.
- Modified for stabs-in-ELF by H.J. Lu.
- Adapted from GNU/Linux version by John Polstra.
- Continued development by David O'Brien <obrien@freebsd.org>
-
-This file is part of GNU CC.
-
-GNU CC 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 2, or (at your option)
-any later version.
-
-GNU CC 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.
-
-You should have received a copy of the GNU General Public License
-along with GNU CC; see the file COPYING. If not, write to
-the Free Software Foundation, 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#undef TARGET_VERSION
-#define TARGET_VERSION fprintf (stderr, " (i386 FreeBSD/ELF)");
-
-/* The svr4 ABI for the i386 says that records and unions are returned
- in memory. */
-/* On FreeBSD, we do not. */
-#undef DEFAULT_PCC_STRUCT_RETURN
-#define DEFAULT_PCC_STRUCT_RETURN 0
-
-/* This gets defined in tm.h->linux.h->svr4.h, and keeps us from using
- libraries compiled with the native cc, so undef it. */
-#undef NO_DOLLAR_IN_LABEL
-
-/* Use more efficient ``thunks'' to implement C++ vtables. */
-#undef DEFAULT_VTABLE_THUNKS
-#define DEFAULT_VTABLE_THUNKS 1
-
-/* Override the default comment-starter of "/". */
-#undef ASM_COMMENT_START
-#define ASM_COMMENT_START "#"
-
-#undef ASM_APP_ON
-#define ASM_APP_ON "#APP\n"
-
-#undef ASM_APP_OFF
-#define ASM_APP_OFF "#NO_APP\n"
-
-#undef SET_ASM_OP
-#define SET_ASM_OP ".set"
-
-/* This is how to output an element of a case-vector that is relative.
- This is only used for PIC code. See comments by the `casesi' insn in
- i386.md for an explanation of the expression this outputs. */
-#undef ASM_OUTPUT_ADDR_DIFF_ELT
-#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL) \
- fprintf (FILE, "\t.long _GLOBAL_OFFSET_TABLE_+[.-%s%d]\n", LPREFIX, VALUE)
-
-/* Indicate that jump tables go in the text section. This is
- necessary when compiling PIC code. */
-#define JUMP_TABLES_IN_TEXT_SECTION (flag_pic)
-
-/* Use stabs instead of DWARF debug format. */
-#undef PREFERRED_DEBUGGING_TYPE
-#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
-
-/* Copy this from the svr4 specifications... */
-/* Define the register numbers to be used in Dwarf debugging information.
- The SVR4 reference port C compiler uses the following register numbers
- in its Dwarf output code:
- 0 for %eax (gnu regno = 0)
- 1 for %ecx (gnu regno = 2)
- 2 for %edx (gnu regno = 1)
- 3 for %ebx (gnu regno = 3)
- 4 for %esp (gnu regno = 7)
- 5 for %ebp (gnu regno = 6)
- 6 for %esi (gnu regno = 4)
- 7 for %edi (gnu regno = 5)
- The following three DWARF register numbers are never generated by
- the SVR4 C compiler or by the GNU compilers, but SDB on x86/svr4
- believes these numbers have these meanings.
- 8 for %eip (no gnu equivalent)
- 9 for %eflags (no gnu equivalent)
- 10 for %trapno (no gnu equivalent)
- It is not at all clear how we should number the FP stack registers
- for the x86 architecture. If the version of SDB on x86/svr4 were
- a bit less brain dead with respect to floating-point then we would
- have a precedent to follow with respect to DWARF register numbers
- for x86 FP registers, but the SDB on x86/svr4 is so completely
- broken with respect to FP registers that it is hardly worth thinking
- of it as something to strive for compatibility with.
- The version of x86/svr4 SDB I have at the moment does (partially)
- seem to believe that DWARF register number 11 is associated with
- the x86 register %st(0), but that's about all. Higher DWARF
- register numbers don't seem to be associated with anything in
- particular, and even for DWARF regno 11, SDB only seems to under-
- stand that it should say that a variable lives in %st(0) (when
- asked via an `=' command) if we said it was in DWARF regno 11,
- but SDB still prints garbage when asked for the value of the
- variable in question (via a `/' command).
- (Also note that the labels SDB prints for various FP stack regs
- when doing an `x' command are all wrong.)
- Note that these problems generally don't affect the native SVR4
- C compiler because it doesn't allow the use of -O with -g and
- because when it is *not* optimizing, it allocates a memory
- location for each floating-point variable, and the memory
- location is what gets described in the DWARF AT_location
- attribute for the variable in question.
- Regardless of the severe mental illness of the x86/svr4 SDB, we
- do something sensible here and we use the following DWARF
- register numbers. Note that these are all stack-top-relative
- numbers.
- 11 for %st(0) (gnu regno = 8)
- 12 for %st(1) (gnu regno = 9)
- 13 for %st(2) (gnu regno = 10)
- 14 for %st(3) (gnu regno = 11)
- 15 for %st(4) (gnu regno = 12)
- 16 for %st(5) (gnu regno = 13)
- 17 for %st(6) (gnu regno = 14)
- 18 for %st(7) (gnu regno = 15)
-*/
-#undef DBX_REGISTER_NUMBER
-#define DBX_REGISTER_NUMBER(n) \
-((n) == 0 ? 0 \
- : (n) == 1 ? 2 \
- : (n) == 2 ? 1 \
- : (n) == 3 ? 3 \
- : (n) == 4 ? 6 \
- : (n) == 5 ? 7 \
- : (n) == 6 ? 5 \
- : (n) == 7 ? 4 \
- : ((n) >= FIRST_STACK_REG && (n) <= LAST_STACK_REG) ? (n)+3 \
- : (-1))
-
-/* Tell final.c that we don't need a label passed to mcount. */
-
-#undef FUNCTION_PROFILER
-#define FUNCTION_PROFILER(FILE, LABELNO) \
-{ \
- if (flag_pic) \
- fprintf (FILE, "\tcall *.mcount@GOT(%%ebx)\n"); \
- else \
- fprintf (FILE, "\tcall .mcount\n"); \
-}
-
-#undef SIZE_TYPE
-#define SIZE_TYPE "unsigned int"
-
-#undef PTRDIFF_TYPE
-#define PTRDIFF_TYPE "int"
-
-#undef WCHAR_TYPE
-#define WCHAR_TYPE "int"
-
-#undef WCHAR_UNSIGNED
-#define WCHAR_UNSIGNED 0
-
-#undef WCHAR_TYPE_SIZE
-#define WCHAR_TYPE_SIZE BITS_PER_WORD
-
-#undef CPP_PREDEFINES
-#define CPP_PREDEFINES "-Di386 -Dunix -D__ELF__ -D__FreeBSD__ -Asystem(unix) -Asystem(FreeBSD) -Acpu(i386) -Amachine(i386)"
-
-#undef CPP_SPEC
-#define CPP_SPEC "%(cpp_cpu) %{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} %{posix:-D_POSIX_SOURCE}"
-
-/* This defines which switch letters take arguments. On FreeBSD, most of
- the normal cases (defined in gcc.c) apply, and we also have -h* and
- -z* options (for the linker) (comming from svr4).
- We also have -R (alias --rpath), no -z, --soname (-h), --assert etc. */
-
-#undef SWITCH_TAKES_ARG
-#define SWITCH_TAKES_ARG(CHAR) \
- (DEFAULT_SWITCH_TAKES_ARG (CHAR) \
- || (CHAR) == 'h' \
- || (CHAR) == 'z' \
- || (CHAR) == 'R')
-
-/* Provide a STARTFILE_SPEC appropriate for FreeBSD. Here we add
- the magical crtbegin.o file (see crtstuff.c) which provides part
- of the support for getting C++ file-scope static object constructed
- before entering `main'. */
-
-#undef STARTFILE_SPEC
-#define STARTFILE_SPEC \
- "%{!shared: \
- %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} \
- %{!p:%{profile:gcrt1.o%s} \
- %{!profile:crt1.o%s}}}} \
- crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}"
-
-/* Provide a ENDFILE_SPEC appropriate for FreeBSD. Here we tack on
- the magical crtend.o file (see crtstuff.c) which provides part of
- the support for getting C++ file-scope static object constructed
- before entering `main', followed by a normal "finalizer" file,
- `crtn.o'. */
-
-#undef ENDFILE_SPEC
-#define ENDFILE_SPEC \
- "%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s"
-
-/* Provide a LIB_SPEC appropriate for FreeBSD. Just select the appropriate
- libc, depending on whether we're doing profiling or need threads support.
- (simular to the default, except no -lg, and no -p. */
-
-#undef LIB_SPEC
-#define LIB_SPEC "%{!shared: \
- %{!pg:%{!pthread:%{!kthread:-lc} \
- %{kthread:-lpthread -lc}} \
- %{pthread:-lc_r}} \
- %{pg:%{!pthread:%{!kthread:-lc_p} \
- %{kthread:-lpthread_p -lc_p}} \
- %{pthread:-lc_r_p}}}"
-
-/* Provide a LINK_SPEC appropriate for FreeBSD. Here we provide support
- for the special GCC options -static and -shared, which allow us to
- link things in one of these three modes by applying the appropriate
- combinations of options at link-time. We like to support here for
- as many of the other GNU linker options as possible. But I don't
- have the time to search for those flags. I am sure how to add
- support for -soname shared_object_name. H.J.
-
- I took out %{v:%{!V:-V}}. It is too much :-(. They can use
- -Wl,-V.
-
- When the -shared link option is used a final link is not being
- done. */
-
-#undef LINK_SPEC
-#define LINK_SPEC "-m elf_i386 \
- %{Wl,*:%*} \
- %{v:-V} \
- %{assert*} %{R*} %{rpath*} %{defsym*} \
- %{shared:-Bshareable %{h*} %{soname*}} \
- %{!shared: \
- %{!static: \
- %{rdynamic:-export-dynamic} \
- %{!dynamic-linker:-dynamic-linker /usr/libexec/ld-elf.so.1}} \
- %{static:-Bstatic}} \
- %{symbolic:-Bsymbolic}"
-
-/* A C statement to output to the stdio stream FILE an assembler
- command to advance the location counter to a multiple of 1<<LOG
- bytes if it is within MAX_SKIP bytes.
-
- This is used to align code labels according to Intel recommendations. */
-
-#ifdef HAVE_GAS_MAX_SKIP_P2ALIGN
-#define ASM_OUTPUT_MAX_SKIP_ALIGN(FILE,LOG,MAX_SKIP) \
- if ((LOG) != 0) {\
- if ((MAX_SKIP) == 0) fprintf ((FILE), "\t.p2align %d\n", (LOG)); \
- else fprintf ((FILE), "\t.p2align %d,,%d\n", (LOG), (MAX_SKIP)); \
- }
-#endif
diff --git a/contrib/gcc/config/i386/x-freebsd b/contrib/gcc/config/i386/x-freebsd
deleted file mode 100644
index a9b13ba5c819..000000000000
--- a/contrib/gcc/config/i386/x-freebsd
+++ /dev/null
@@ -1,3 +0,0 @@
-# Don't run fixproto
-STMP_FIXPROTO =
-CLIB=-lgnumalloc
diff --git a/contrib/gcc/cp/g++.c b/contrib/gcc/cp/g++.c
deleted file mode 100644
index f694898fa966..000000000000
--- a/contrib/gcc/cp/g++.c
+++ /dev/null
@@ -1,582 +0,0 @@
-/* G++ preliminary semantic processing for the compiler driver.
- Copyright (C) 1993, 1994, 1995 Free Software Foundation, Inc.
- Contributed by Brendan Kehoe (brendan@cygnus.com).
-
-This file is part of GNU CC.
-
-GNU CC 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 2, or (at your option)
-any later version.
-
-GNU CC 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.
-
-You should have received a copy of the GNU General Public License
-along with GNU CC; see the file COPYING. If not, write to
-the Free Software Foundation, 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-/* This program is a wrapper to the main `gcc' driver. For GNU C++,
- we need to do two special things: a) append `-lg++' in situations
- where it's appropriate, to link in libg++, and b) add `-xc++'..`-xnone'
- around file arguments named `foo.c' or `foo.i'. So, we do all of
- this semantic processing then just exec gcc with the new argument
- list.
-
- We used to do all of this in a small shell script, but many users
- found the performance of this as a shell script to be unacceptable.
- In situations where your PATH has a lot of NFS-mounted directories,
- using a script that runs sed and other things would be a nasty
- performance hit. With this program, we never search the PATH at all. */
-
-#include "config.h"
-#ifdef __STDC__
-#include <stdarg.h>
-#else
-#include <varargs.h>
-#endif
-#include <stdio.h>
-#include <sys/types.h>
-#if !defined(_WIN32)
-#include <sys/file.h> /* May get R_OK, etc. on some systems. */
-#else
-#include <process.h>
-#endif
-#include <errno.h>
-
-/* Defined to the name of the compiler; if using a cross compiler, the
- Makefile should compile this file with the proper name
- (e.g., "i386-aout-gcc"). */
-#ifndef GCC_NAME
-#define GCC_NAME "gcc"
-#endif
-
-/* This bit is set if we saw a `-xfoo' language specification. */
-#define LANGSPEC (1<<1)
-/* This bit is set if they did `-lm' or `-lmath'. */
-#define MATHLIB (1<<2)
-
-#ifndef MATH_LIBRARY
-#define MATH_LIBRARY "-lm"
-#endif
-
-/* On MSDOS, write temp files in current dir
- because there's no place else we can expect to use. */
-#ifdef __MSDOS__
-#ifndef P_tmpdir
-#define P_tmpdir "."
-#endif
-#ifndef R_OK
-#define R_OK 4
-#define W_OK 2
-#define X_OK 1
-#endif
-#endif
-
-#ifndef VPROTO
-#ifdef __STDC__
-#define PVPROTO(ARGS) ARGS
-#define VPROTO(ARGS) ARGS
-#define VA_START(va_list,var) va_start(va_list,var)
-#else
-#define PVPROTO(ARGS) ()
-#define VPROTO(ARGS) (va_alist) va_dcl
-#define VA_START(va_list,var) va_start(va_list)
-#endif
-#endif
-
-#ifndef errno
-extern int errno;
-#endif
-
-extern int sys_nerr;
-#ifndef HAVE_STRERROR
-#if defined(bsd4_4)
-extern const char *const sys_errlist[];
-#else
-extern char *sys_errlist[];
-#endif
-#else
-extern char *strerror();
-#endif
-
-/* Name with which this program was invoked. */
-static char *programname;
-
-char *
-my_strerror(e)
- int e;
-{
-
-#ifdef HAVE_STRERROR
- return strerror(e);
-
-#else
-
- static char buffer[30];
- if (!e)
- return "";
-
- if (e > 0 && e < sys_nerr)
- return sys_errlist[e];
-
- sprintf (buffer, "Unknown error %d", e);
- return buffer;
-#endif
-}
-
-#ifdef HAVE_VPRINTF
-/* Output an error message and exit */
-
-static void
-fatal VPROTO((char *format, ...))
-{
-#ifndef __STDC__
- char *format;
-#endif
- va_list ap;
-
- VA_START (ap, format);
-
-#ifndef __STDC__
- format = va_arg (ap, char*);
-#endif
-
- fprintf (stderr, "%s: ", programname);
- vfprintf (stderr, format, ap);
- va_end (ap);
- fprintf (stderr, "\n");
-#if 0
- /* XXX Not needed for g++ driver. */
- delete_temp_files ();
-#endif
- exit (1);
-}
-
-static void
-error VPROTO((char *format, ...))
-{
-#ifndef __STDC__
- char *format;
-#endif
- va_list ap;
-
- VA_START (ap, format);
-
-#ifndef __STDC__
- format = va_arg (ap, char*);
-#endif
-
- fprintf (stderr, "%s: ", programname);
- vfprintf (stderr, format, ap);
- va_end (ap);
-
- fprintf (stderr, "\n");
-}
-
-#else /* not HAVE_VPRINTF */
-
-static void
-error (msg, arg1, arg2)
- char *msg, *arg1, *arg2;
-{
- fprintf (stderr, "%s: ", programname);
- fprintf (stderr, msg, arg1, arg2);
- fprintf (stderr, "\n");
-}
-
-static void
-fatal (msg, arg1, arg2)
- char *msg, *arg1, *arg2;
-{
- error (msg, arg1, arg2);
-#if 0
- /* XXX Not needed for g++ driver. */
- delete_temp_files ();
-#endif
- exit (1);
-}
-
-#endif /* not HAVE_VPRINTF */
-
-/* More 'friendly' abort that prints the line and file.
- config.h can #define abort fancy_abort if you like that sort of thing. */
-
-void
-fancy_abort ()
-{
- fatal ("Internal g++ abort.");
-}
-
-char *
-xmalloc (size)
- unsigned size;
-{
- register char *value = (char *) malloc (size);
- if (value == 0)
- fatal ("virtual memory exhausted");
- return value;
-}
-
-/* Return a newly-allocated string whose contents concatenate those
- of s1, s2, s3. */
-static char *
-concat (s1, s2, s3)
- char *s1, *s2, *s3;
-{
- int len1 = strlen (s1), len2 = strlen (s2), len3 = strlen (s3);
- char *result = xmalloc (len1 + len2 + len3 + 1);
-
- strcpy (result, s1);
- strcpy (result + len1, s2);
- strcpy (result + len1 + len2, s3);
- *(result + len1 + len2 + len3) = 0;
-
- return result;
-}
-
-static void
-pfatal_with_name (name)
- char *name;
-{
- fatal (concat ("%s: ", my_strerror (errno), ""), name);
-}
-
-#ifdef __MSDOS__
-/* This is the common prefix we use to make temp file names. */
-char *temp_filename;
-
-/* Length of the prefix. */
-int temp_filename_length;
-
-/* Compute a string to use as the base of all temporary file names. */
-static char *
-choose_temp_base_try (try, base)
-char *try;
-char *base;
-{
- char *rv;
- if (base)
- rv = base;
- else if (try == (char *)0)
- rv = 0;
- else if (access (try, R_OK | W_OK) != 0)
- rv = 0;
- else
- rv = try;
- return rv;
-}
-
-static void
-choose_temp_base ()
-{
- char *base = 0;
- int len;
-
- base = choose_temp_base_try (getenv ("TMPDIR"), base);
- base = choose_temp_base_try (getenv ("TMP"), base);
- base = choose_temp_base_try (getenv ("TEMP"), base);
-
-#ifdef P_tmpdir
- base = choose_temp_base_try (P_tmpdir, base);
-#endif
-
- base = choose_temp_base_try ("/usr/tmp", base);
- base = choose_temp_base_try ("/tmp", base);
-
- /* If all else fails, use the current directory! */
- if (base == (char *)0)
- base = "./";
-
- len = strlen (base);
- temp_filename = xmalloc (len + sizeof("/ccXXXXXX"));
- strcpy (temp_filename, base);
- if (len > 0 && temp_filename[len-1] != '/')
- temp_filename[len++] = '/';
- strcpy (temp_filename + len, "ccXXXXXX");
-
- mktemp (temp_filename);
- temp_filename_length = strlen (temp_filename);
- if (temp_filename_length == 0)
- abort ();
-}
-
-static void
-perror_exec (name)
- char *name;
-{
- char *s;
-
- if (errno < sys_nerr)
- s = concat ("installation problem, cannot exec %s: ",
- my_strerror( errno ), "");
- else
- s = "installation problem, cannot exec %s";
- error (s, name);
-}
-
-/* This is almost exactly what's in gcc.c:pexecute for MSDOS. */
-void
-run_dos (program, argv)
- char *program;
- char *argv[];
-{
- char *scmd, *rf;
- FILE *argfile;
- int i;
-
- choose_temp_base (); /* not in gcc.c */
-
- scmd = (char *) malloc (strlen (program) + strlen (temp_filename) + 10);
- rf = scmd + strlen (program) + 6;
- sprintf (scmd, "%s.exe @%s.gp", program, temp_filename);
-
- argfile = fopen (rf, "w");
- if (argfile == 0)
- pfatal_with_name (rf);
-
- for (i=1; argv[i]; i++)
- {
- char *cp;
- for (cp = argv[i]; *cp; cp++)
- {
- if (*cp == '"' || *cp == '\'' || *cp == '\\' || isspace (*cp))
- fputc ('\\', argfile);
- fputc (*cp, argfile);
- }
- fputc ('\n', argfile);
- }
- fclose (argfile);
-
- i = system (scmd);
-
- remove (rf);
-
- if (i == -1)
- perror_exec (program);
-}
-#endif /* __MSDOS__ */
-
-int
-main (argc, argv)
- int argc;
- char **argv;
-{
- register int i, j = 0;
- register char *p;
- int verbose = 0;
-
- /* This will be 0 if we encounter a situation where we should not
- link in libstdc++, or 2 if we should link in libg++ as well. */
- int library = 1;
-
- /* Used to track options that take arguments, so we don't go wrapping
- those with -xc++/-xnone. */
- char *quote = NULL;
-
- /* The new argument list will be contained in this. */
- char **arglist;
-
- /* The name of the compiler we will want to run---by default, it
- will be the definition of `GCC_NAME', e.g., `gcc'. */
- char *gcc = GCC_NAME;
-
- /* Non-zero if we saw a `-xfoo' language specification on the
- command line. Used to avoid adding our own -xc++ if the user
- already gave a language for the file. */
- int saw_speclang = 0;
-
- /* Non-zero if we saw `-lm' or `-lmath' on the command line. */
- char *saw_math = 0;
-
- /* The number of arguments being added to what's in argv, other than
- libraries. We use this to track the number of times we've inserted
- -xc++/-xnone. */
- int added = 0;
-
- /* An array used to flag each argument that needs a bit set for
- LANGSPEC or MATHLIB. */
- int *args;
-
- p = argv[0] + strlen (argv[0]);
-
- /* If we're called as g++ (or i386-aout-g++), link in libg++ as well. */
-
- if (strcmp (p - 3, "g++") == 0)
- {
- library = 2;
- }
-
- while (p != argv[0] && p[-1] != '/')
- --p;
- programname = p;
-
- if (argc == 1)
- fatal ("No input files specified.\n");
-
-#ifndef __MSDOS__
- /* We do a little magic to find out where the main gcc executable
- is. If they ran us as /usr/local/bin/g++, then we will look
- for /usr/local/bin/gcc; similarly, if they just ran us as `g++',
- we'll just look for `gcc'. */
- if (p != argv[0])
- {
- *--p = '\0';
- gcc = (char *) malloc ((strlen (argv[0]) + 1 + strlen (GCC_NAME) + 1)
- * sizeof (char));
- sprintf (gcc, "%s/%s", argv[0], GCC_NAME);
- }
-#endif
-
- args = (int *) malloc (argc * sizeof (int));
- bzero ((char *) args, argc * sizeof (int));
-
- for (i = 1; i < argc; i++)
- {
- /* If the previous option took an argument, we swallow it here. */
- if (quote)
- {
- quote = NULL;
- continue;
- }
-
- if (argv[i][0] == '\0' || argv[i][1] == '\0')
- continue;
-
- if (argv[i][0] == '-')
- {
- if (library != 0 && strcmp (argv[i], "-nostdlib") == 0)
- {
- library = 0;
- }
- else if (strcmp (argv[i], "-lm") == 0
- || strcmp (argv[i], "-lmath") == 0)
- args[i] |= MATHLIB;
- else if (strcmp (argv[i], "-v") == 0)
- {
- verbose = 1;
- if (argc == 2)
- {
- /* If they only gave us `-v', don't try to link
- in libg++. */
- library = 0;
- }
- }
- else if (strncmp (argv[i], "-x", 2) == 0)
- saw_speclang = 1;
- else if (((argv[i][2] == '\0'
- && (char *)strchr ("bBVDUoeTuIYmLiA", argv[i][1]) != NULL)
- || strcmp (argv[i], "-Tdata") == 0))
- quote = argv[i];
- else if (library != 0 && ((argv[i][2] == '\0'
- && (char *) strchr ("cSEM", argv[i][1]) != NULL)
- || strcmp (argv[i], "-MM") == 0))
- {
- /* Don't specify libraries if we won't link, since that would
- cause a warning. */
- library = 0;
- }
- else
- /* Pass other options through. */
- continue;
- }
- else
- {
- int len;
-
- if (saw_speclang)
- {
- saw_speclang = 0;
- continue;
- }
-
- /* If the filename ends in .c or .i, put options around it.
- But not if a specified -x option is currently active. */
- len = strlen (argv[i]);
- if (len > 2
- && (argv[i][len - 1] == 'c' || argv[i][len - 1] == 'i')
- && argv[i][len - 2] == '.')
- {
- args[i] |= LANGSPEC;
- added += 2;
- }
- }
- }
-
- if (quote)
- fatal ("argument to `%s' missing\n", quote);
-
- if (added || library)
- {
- arglist = (char **) malloc ((argc + added + 4) * sizeof (char *));
-
- for (i = 1, j = 1; i < argc; i++, j++)
- {
- arglist[j] = argv[i];
-
- /* Make sure -lg++ is before the math library, since libg++
- itself uses those math routines. */
- if (!saw_math && (args[i] & MATHLIB) && library)
- {
- --j;
- saw_math = argv[i];
- }
-
- /* Wrap foo.c and foo.i files in a language specification to
- force the gcc compiler driver to run cc1plus on them. */
- if (args[i] & LANGSPEC)
- {
- int len = strlen (argv[i]);
- if (argv[i][len - 1] == 'i')
- arglist[j++] = "-xc++-cpp-output";
- else
- arglist[j++] = "-xc++";
- arglist[j++] = argv[i];
- arglist[j] = "-xnone";
- }
- }
-
- /* Add `-lg++' if we haven't already done so. */
- if (library == 2)
- arglist[j++] = "-lg++";
- if (library)
- arglist[j++] = "-lstdc++";
- if (saw_math)
- arglist[j++] = saw_math;
- else if (library)
- arglist[j++] = MATH_LIBRARY;
-
- arglist[j] = NULL;
- }
- else
- /* No need to copy 'em all. */
- arglist = argv;
-
- arglist[0] = gcc;
-
- if (verbose)
- {
- if (j == 0)
- j = argc;
-
- for (i = 0; i < j; i++)
- fprintf (stderr, " %s", arglist[i]);
- fprintf (stderr, "\n");
- }
-#if !defined(OS2) && !defined (_WIN32)
-#ifdef __MSDOS__
- run_dos (gcc, arglist);
-#else /* !__MSDOS__ */
- if (execvp (gcc, arglist) < 0)
- pfatal_with_name (gcc);
-#endif /* __MSDOS__ */
-#else /* OS2 or _WIN32 */
- if (spawnvp (1, gcc, arglist) < 0)
- pfatal_with_name (gcc);
-#endif
-
- return 0;
-}
diff --git a/contrib/gcc/cp/reno.texi b/contrib/gcc/cp/reno.texi
deleted file mode 100644
index 59c3448a0399..000000000000
--- a/contrib/gcc/cp/reno.texi
+++ /dev/null
@@ -1,752 +0,0 @@
-\input texinfo @c -*- Texinfo -*-
-@setfilename reno-1.info
-
-@ifinfo
-@format
-START-INFO-DIR-ENTRY
-* Reno 1: (reno-1). The GNU C++ Renovation Project, Phase 1.
-END-INFO-DIR-ENTRY
-@end format
-@end ifinfo
-
-@ifinfo
-Copyright @copyright{} 1992, 1993, 1994 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-@ignore
-Permission is granted to process this file through TeX and print the
-results, provided the printed document carries a copying permission
-notice identical to this one except for the removal of this paragraph
-(this paragraph not being relevant to the printed manual).
-
-@end ignore
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided also that
-the entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions.
-@end ifinfo
-
-@setchapternewpage odd
-@settitle GNU C++ Renovation Project
-@c @smallbook
-
-@titlepage
-@finalout
-@title GNU C++ Renovation Project
-@subtitle Phase 1.3
-@author Brendan Kehoe, Jason Merrill,
-@author Mike Stump, Michael Tiemann
-@page
-
-Edited March, 1994 by Roland Pesch (@code{pesch@@cygnus.com})
-@vskip 0pt plus 1filll
-Copyright @copyright{} 1992, 1993, 1994 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-@ignore
-Permission is granted to process this file through Tex and print the
-results, provided the printed document carries copying permission
-notice identical to this one except for the removal of this paragraph
-(this paragraph not being relevant to the printed manual).
-@end ignore
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided also that
-the entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions.
-@end titlepage
-
-@ifinfo
-@node Top
-@top @sc{gnu} C++ Renovation Project
-
-This file describes the goals of the @sc{gnu} C++ Renovation Project,
-and its accomplishments to date (as of Phase 1.3).
-
-It also discusses the remaining divergences from @sc{gnu} C++, and how the
-name encoding in @sc{gnu} C++ differs from the sample encoding in
-@cite{The Annotated C++ Reference Manual}.
-@c This is not a good place to introduce the acronym ARM because it's
-@c info-only.
-
-@menu
-* Introduction:: What is the GNU C++ Renovation Project?
-* Changes:: Summary of changes since previous GNU C++ releases.
-* Plans:: Plans for Reno-2.
-* Templates:: The template implementation.
-* ANSI:: GNU C++ conformance to ANSI C++.
-* Encoding:: Name encoding in GNU C++.
-@end menu
-
-@end ifinfo
-
-@node Introduction
-@chapter Introduction
-
-As you may remember, @sc{gnu} C++ was the first native-code C++
-compiler available under Unix (December 1987). In November 1988, it was
-judged superior to the AT&T compiler in a Unix World review. In 1990 it
-won a Sun Observer ``Best-Of'' award. But now, with new requirements
-coming out of the @sc{ansi} C++ committee and a growing backlog of bugs, it's
-clear that @sc{gnu} C++ needs an overhaul.
-
-The C++ language has been under development since 1982. It has
-evolved significantly since its original incarnation (C with Classes),
-addressing many commercial needs and incorporating many lessons
-learned as more and more people started using ``object-oriented''
-programming techniques. In 1989, the first X3J16 committee meeting
-was held in Washington DC; in the interest of users, C++ was going to
-be standardized.
-
-As C++ has become more popular, more demands have been placed on its
-compilers. Some compilers are up to the demands, others are not.
-@sc{gnu} C++ was used to prototype several features which have since
-been incorporated into the standard, most notably exception handling.
-While @sc{gnu} C++ has been an excellent experimental vehicle, it did
-not have the resources that AT&T, Borland, or Microsoft have at their
-disposal.
-
-We believe that @sc{gnu} C++ is an important compiler, providing users with
-many of the features that have made @sc{gnu} C so popular: fast compilation,
-good error messages, innovative features, and full sources that may be
-freely redistributed. The purpose of this overhaul, dubbed the @var{@sc{gnu}
-C++ Renovation Project}, is to take advantage of the functionality that
-@sc{gnu} C++ offers today, to strengthen its base technology, and put it in a
-position to remain---as other @sc{gnu} software currently is---the technical
-leader in the field.
-
-This release represents the latest phase of work in strengthening the
-compiler on a variety of points. It includes many months of
-work concentrated on fixing many of the more egregious bugs that
-presented themselves in the compiler recently.
-@ignore
-@c FIXME-- update?
-Nearly 85% of all bugs reported in the period of February to September
-of 1992 were fixed as part of the work in the first phase.
-@end ignore
-In the coming months, we hope to continue expanding and enhancing the
-quality and dependability of the industry's only freely redistributable
-C++ compiler.
-
-@node Changes
-@chapter Changes in Behavior in @sc{gnu} C++
-
-The @sc{gnu} C++ compiler continues to improve and change. A major goal
-of our work has been to continue to bring the compiler into compliance
-with the draft @sc{ansi} C++ standard, and with @cite{The Annotated C++
-Reference Manual} (the @sc{arm}). This section outlines most of the
-user-noticeable changes that might be encountered during the normal
-course of use.
-
-@menu
-* Summary of Phase 1.3::
-* Major changes::
-* New features::
-* Enhancements and bug fixes::
-* Problems with debugging::
-@end menu
-
-@node Summary of Phase 1.3
-@section Summary of Changes in Phase 1.3
-
-The bulk of this note discusses the cumulative effects of the @sc{gnu} C++
-Renovation Project to date. The work during its most recent phase (1.3)
-had these major effects:
-
-@itemize @bullet
-@item The standard compiler driver @code{g++} is now the faster compiled
-version, rather than a shell script.
-
-@item Nested types work much better; notably, nesting is no longer
-restricted to nine levels.
-
-@item Better @sc{arm} conformance on member access control.
-
-@item The compiler now always generates default assignment operators
-(@samp{operator =}), copy constructors (@samp{X::X(X&)}), and default
-constructors (@samp{X::X()}) whenever they are required.
-
-@item The new draft @sc{ansi} standard keyword @code{mutable} is supported.
-
-@item @samp{-fansi-overloading} is the default, to comply better with
-the @sc{arm} (at some cost in compatibility to earlier versions of @sc{gnu} C++).
-
-@item More informative error messages.
-
-@item System include files are automatically treated as if they were
-wrapped in @samp{extern "C" @{ @}}.
-
-@item The new option @samp{-falt-external-templates} provides alternate
-template instantiation semantics.
-
-@item Operator declarations are now checked more strictly.
-
-@item You can now use template type arguments in the template parameter list.
-
-@item You can call the destructor for any type.
-
-@item The compiler source code is better organized.
-
-@item You can specify where to instantiate template definitions explicitly.
-@end itemize
-
-Much of the work in Phase 1.3 went to elimination of known bugs, as well
-as the major items above.
-
-During the span of Phase 1.3, there were also two changes associated
-with the compiler that, while not specifically part of the C++
-Renovation project, may be of interest:
-
-@itemize @bullet
-@item @code{gcov}, a code coverage tool for @sc{gnu cc}, is now available
-from Cygnus Support. (@code{gcov} is free software, but the @sc{fsf} has not
-yet accepted it.) @xref{Gcov,, @code{gcov}: a Test Coverage Program,
-gcc.info, Using GNU CC}, for more information (in Cygnus releases of
-that manual).
-
-@item @sc{gnu} C++ now supports @dfn{signatures}, a language extension to
-provide more flexibility in abstract type definitions. @xref{C++
-Signatures,, Type Abstraction using Signatures, gcc.info, Using GNU CC}.
-@end itemize
-
-@node Major changes
-@section Major Changes
-
-This release includes four wholesale rewrites of certain areas of
-compiler functionality:
-
-@enumerate 1
-@item Argument matching. @sc{gnu} C++ is more compliant with the rules
-described in Chapter 13, ``Overloading'', of the @sc{arm}. This behavior is
-the default, though you can specify it explicitly with
-@samp{-fansi-overloading}. For compatibility with earlier releases of
-@sc{gnu} C++, specify @samp{-fno-ansi-overloading}; this makes the compiler
-behave as it used to with respect to argument matching and name overloading.
-
-@item Default constructors/destructors. Section 12.8 of the @sc{arm}, ``Copying
-Class Objects'', and Section 12.1, ``Constructors'', state that a
-compiler must declare such default functions if the user does not
-specify them. @sc{gnu} C++ now declares, and generates when necessary,
-the defaults for constructors and destructors you might omit. In
-particular, assignment operators (@samp{operator =}) behave the same way
-whether you define them, or whether the compiler generates them by
-default; taking the address of the default @samp{operator =} is now
-guaranteed to work. Default copy constructors (@samp{X::X(X&)}) now
-function correctly, rather than calling the copy assignment operator for
-the base class. Finally, constructors (@samp{X::X()}), as well as
-assignment operators and copy constructors, are now available whenever
-they are required.
-
-@c XXX This may be taken out eventually...
-@item Binary incompatibility. There are no new binary incompatibilities
-in Phase 1.3, but Phase 1.2 introduced two binary incompatibilities with
-earlier releases. First, the functionality of @samp{operator
-new} and @samp{operator delete} changed. Name encoding
-(``mangling'') of virtual table names changed as well. Libraries
-built with versions of the compiler earlier than Phase 1.2 must be
-compiled with the new compiler. (This includes the Cygnus Q2
-progressive release and the FSF 2.4.5 release.)
-
-@item New @code{g++} driver.
-A new binary @code{g++} compiler driver replaces the shell script.
-The new driver executes faster.
-@end enumerate
-
-@node New features
-@section New features
-
-@itemize @bullet
-@item
-The compiler warns when a class contains only private constructors
-or destructors, and has no friends. At the request of some of our
-customers, we have added a new option, @samp{-Wctor-dtor-privacy} (on by
-default), and its negation, @samp{-Wno-ctor-dtor-privacy}, to control
-the emission of this warning. If, for example, you are working towards
-making your code compile warning-free, you can use @w{@samp{-Wall
--Wno-ctor-dtor-privacy}} to find the most common warnings.
-
-@item
-There is now a mechanism which controls exactly when templates are
-expanded, so that you can reduce memory usage and program size and also
-instantiate them exactly once. You can control this mechanism with the
-option @samp{-fexternal-templates} and its corresponding negation
-@samp{-fno-external-templates}. Without this feature, space consumed by
-template instantiations can grow unacceptably in large-scale projects
-with many different source files. The default is
-@samp{-fno-external-templates}.
-
-You do not need to use the @samp{-fexternal-templates} option when
-compiling a file that does not define and instantiate templates used in
-other files, even if those files @emph{are} compiled with
-@samp{-fexternal-templates}. The only side effect is an increase in
-object size for each file that was compiled without
-@samp{-fexternal-templates}.
-
-When your code is compiled with @samp{-fexternal-templates}, all
-template instantiations are external; this requires that the templates
-be under the control of @samp{#pragma interface} and @samp{#pragma
-implementation}. All instantiations that will be needed should be in
-the implementation file; you can do this with a @code{typedef} that
-references the instantiation needed. Conversely, when you compile using
-the option @samp{-fno-external-templates}, all template instantiations are
-explicitly internal.
-
-@samp{-fexternal-templates} also allows you to finally separate class
-template function definitions from their declarations, thus speeding up
-compilation times for every file that includes the template declaration.
-Now you can have tens or even hundreds of lines in template
-declarations, and thousands or tens of thousands of lines in template
-definitions, with the definitions only going through the compiler once
-instead of once for each source file. It is important to note that you
-must remember to externally instantiate @emph{all} templates that are
-used from template declarations in interface files. If you forget to do
-this, unresolved externals will occur.
-
-In the example below, the object file generated (@file{example.o}) will
-contain the global instantiation for @samp{Stack<int>}. If other types
-of @samp{Stack} are needed, they can be added to @file{example.cc} or
-placed in a new file, in the same spirit as @file{example.cc}.
-
-@code{foo.h}:
-@smallexample
-@group
-#pragma interface "foo.h"
-template<class T>
-class Stack @{
- static int statc;
- static T statc2;
- Stack() @{ @}
- virtual ~Stack() @{ @}
- int bar();
-@};
-@end group
-@end smallexample
-
-@code{example.cc}:
-@smallexample
-@group
-#pragma implementation "foo.h"
-#include "foo.h"
-
-typedef Stack<int> t;
-int Stack<int>::statc;
-int Stack<int>::statc2;
-int Stack<int>::bar() @{ @}
-@end group
-@end smallexample
-
-Note that using @samp{-fexternal-templates} does not reduce memory usage
-from completely different instantiations (@samp{Stack<Name>} vs.
-@samp{Stack<Net_Connection>}), but only collapses different occurrences
-of @samp{Stack<Name>} so that only one @samp{Stack<Name>} is generated.
-
-@samp{-falt-external-templates} selects a slight variation in the
-semantics described above (incidentally, you need not specify both
-options; @samp{-falt-external-templates} implies
-@samp{-fexternal-templates}).
-
-With @samp{-fexternal-templates}, the compiler emits a definition in the
-implementation file that includes the header definition, @emph{even if}
-instantiation is triggered from a @emph{different} implementation file
-(e.g. with a template that uses another template).
-
-With @samp{-falt-external-templates}, the definition always goes in the
-implementation file that triggers instantiation.
-
-For instance, with these two header files---
-
-@example
-@exdent @file{a.h}:
-#pragma interface
-template <class T> class A @{ @dots{} @};
-
-@exdent @file{b.h}:
-#pragma interface
-class B @{ @dots{} @};
-void f (A<B>);
-@end example
-
-Under @samp{-fexternal-templates}, the definition of @samp{A<B>} ends up
-in the implementation file that includes @file{a.h}. Under
-@samp{-falt-external-templates}, the same definition ends up in the
-implementation file that includes @file{b.h}.
-
-@item
-You can control explicitly where a template is instantiated, without
-having to @emph{use} the template to get an instantiation.
-
-To instantiate a class template explicitly, write @samp{template
-class @var{name}<paramvals>}, where @var{paramvals} is a list of values
-for the template parameters. For example, you might write
-
-@example
-template class A<int>
-@end example
-
-Similarly, to instantiate a function template explicitly, write
-@samp{template @var{fnsign}} where @var{fnsign} is the particular
-function signature you need. For example, you might write
-
-@example
-template void foo (int, int)
-@end example
-
-This syntax for explicit template instantiation agrees with recent
-extensions to the draft @sc{ansi} standard.
-
-@item
-The compiler's actions on @sc{ansi}-related warnings and errors have
-been further enhanced. The @samp{-pedantic-errors} option produces
-error messages in a number of new situations: using @code{return} in a
-non-@code{void} function (one returning a value); declaring a local
-variable that shadows a parameter (e.g., the function takes an argument
-@samp{a}, and has a local variable @samp{a}); and use of the @samp{asm}
-keyword. Finally, the compiler by default now issues a warning when
-converting from an @code{int} to an enumerated type. This is likely to
-cause many new warnings in code that hadn't triggered them before. For
-example, when you compile this code,
-
-@smallexample
-@group
-enum boolean @{ false, true @};
-void
-f ()
-@{
- boolean x;
-
- x = 1; //@i{assigning an @code{int} to an @code{enum} now triggers a warning}
-@}
-@end group
-@end smallexample
-
-@noindent
-you should see the warning ``@code{anachronistic conversion from integer
-type to enumeral type `boolean'}''. Instead of assigning the value 1,
-assign the original enumerated value @samp{true}.
-@end itemize
-
-@node Enhancements and bug fixes
-@section Enhancements and bug fixes
-
-@itemize @bullet
-@cindex nested types in template parameters
-@item
-You can now use nested types in a template parameter list, even if the nested
-type is defined within the same class that attempts to use the template.
-For example, given a template @code{list}, the following now works:
-
-@smallexample
-struct glyph @{
- @dots{}
- struct stroke @{ @dots{} @};
- list<stroke> l;
- @dots{}
-@}
-@end smallexample
-
-@cindex function pointers vs template parameters
-@item
-Function pointers now work in template parameter lists. For
-example, you might want to instantiate a parameterized @code{list} class
-in terms of a pointer to a function like this:
-
-@smallexample
-list<int (*)(int, void *)> fnlist;
-@end smallexample
-
-@item
-@c FIXME! Really no limit? Jason said "deeper than 9" now OK...
-Nested types are now handled correctly. In particular, there is no
-longer a limit to how deeply you can nest type definitions.
-
-@item
-@sc{gnu} C++ now conforms to the specifications in Chapter 11 of the
-@sc{arm}, ``Member Access Control''.
-
-@item
-The @sc{ansi} C++ committee has introduced a new keyword @code{mutable}.
-@sc{gnu} C++ supports it. Use @code{mutable} to specify that some
-particular members of a @code{const} class are @emph{not} constant. For
-example, you can use this to include a cache in a data structure that
-otherwise represents a read-only database.
-
-@item
-Error messages now explicitly specify the declaration, type, or
-expression that contains an error.
-
-@item
-To avoid copying and editing all system include files during @sc{gnu}
-C++ installation, the compiler now automatically recognizes system
-include files as C language definitions, as if they were wrapped in
-@samp{extern "C" @{ @dots{} @}}.
-
-@item
-The compiler checks operator declarations more strictly. For example,
-you may no longer declare an @samp{operator +} with three arguments.
-
-@item
-You can now use template type arguments in the same template
-parameter list where the type argument is specified (as well as in the
-template body). For example, you may write
-
-@example
-template <class T, T t> class A @{ @dots{} @};
-@end example
-
-@item
-Destructors are now available for all types, even built-in ones; for
-example, you can call @samp{int::~int}. (Destructors for types like
-@code{int} do not actually do anything, but their existence provides a
-level of generality that permits smooth template expansion in more
-cases.)
-
-@item
-Enumerated types declared inside a class are now handled correctly.
-
-@item
-An argument list for a function may not use an initializer list for its default
-value. For example, @w{@samp{void foo ( T x = @{ 1, 2 @} )}} is not permitted.
-
-@item
-A significant amount of work went into improving the ability of the
-compiler to act accurately on multiple inheritance and virtual
-functions. Virtual function dispatch has been enhanced as well.
-
-@item
-The warning concerning a virtual inheritance environment with a
-non-virtual destructor has been disabled, since it is not clear that
-such a warning is warranted.
-
-@item
-Until exception handling is fully implemented in the Reno-2 release, use
-of the identifiers @samp{catch}, @samp{throw}, or @samp{try} results
-in the warning:
-
-@smallexample
-t.C:1: warning: `catch', `throw', and `try'
- are all C++ reserved words
-@end smallexample
-
-@item
-When giving a warning or error concerning initialization of a member in a
-class, the compiler gives the name of the member if it has one.
-
-@item
-Detecting friendship between classes is more accurately checked.
-
-@item
-The syntaxes of @w{@samp{#pragma implementation "file.h"}} and
-@samp{#pragma interface} are now more strictly controlled. The compiler
-notices (and warns) when any text follows @file{file.h} in the
-implementation pragma, or follows the word @samp{interface}. Any such
-text is otherwise ignored.
-
-@item
-Trying to declare a template on a variable or type is now considered an
-error, not an unimplemented feature.
-
-@item
-When an error occurs involving a template, the compiler attempts to
-tell you at which point of instantiation the error occurred, in
-addition to noting the line in the template declaration which had the
-actual error.
-
-@item
-The symbol names for function templates in the resulting assembly file
-are now encoded according to the arguments, rather than just being
-emitted as, for example, two definitions of a function @samp{foo}.
-
-@item
-Template member functions that are declared @code{static} no longer
-receive a @code{this} pointer.
-
-@item
-Case labels are no longer allowed to have commas to make up their
-expressions.
-
-@item
-Warnings concerning the shift count of a left or right shift now tell
-you if it was a @samp{left} or @samp{right} shift.
-
-@item
-The compiler now warns when a decimal constant is so large that it
-becomes @code{unsigned}.
-
-@item
-Union initializers which are raw constructors are now handled properly.
-
-@item
-The compiler no longer gives incorrect errors when initializing a
-union with an empty initializer list.
-
-@item
-Anonymous unions are now correctly used when nested inside a class.
-
-@item
-Anonymous unions declared as static class members are now handled
-properly.
-
-@item
-The compiler now notices when a field in a class is declared both as
-a type and a non-type.
-
-@item
-The compiler now warns when a user-defined function shadows a
-built-in function, rather than emitting an error.
-
-@item
-A conflict between two function declarations now produces an error
-regardless of their language context.
-
-@item
-Duplicate definitions of variables with @samp{extern "C"} linkage are no
-longer considered in error. (Note in C++ linkage---the default---you may
-not have more than one definition of a variable.)
-
-@item
-Referencing a label that is not defined in any function is now an error.
-
-@item
-The syntax for pointers to methods has been improved; there are still
-some minor bugs, but a number of cases should now be accepted by the
-compiler.
-
-@item
-In error messages, arguments are now numbered starting at 1, instead of
-0. Therefore, in the function @samp{void foo (int a, int b)}, the
-argument @samp{a} is argument 1, and @samp{b} is argument 2. There is
-no longer an argument 0.
-
-@item
-The tag for an enumerator, rather than its value, used as a default
-argument is now shown in all error messages. For example, @w{@samp{void
-foo (enum x (= true))}} is shown instead of @w{@samp{void foo (enum x (=
-1))}}.
-
-@item
-The @samp{__asm__} keyword is now accepted by the C++ front-end.
-
-@item
-Expressions of the form @samp{foo->~Class()} are now handled properly.
-
-@item
-The compiler now gives better warnings for situations which result in
-integer overflows (e.g., in storage sizes, enumerators, unary
-expressions, etc).
-
-@item
-@code{unsigned} bitfields are now promoted to @code{signed int} if the
-field isn't as wide as an @code{int}.
-
-@item
-Declaration and usage of prefix and postfix @samp{operator ++} and
-@samp{operator --} are now handled correctly. For example,
-
-@smallexample
-@group
-class foo
-@{
-public:
- operator ++ ();
- operator ++ (int);
- operator -- ();
- operator -- (int);
-@};
-
-void
-f (foo *f)
-@{
- f++; // @i{call @code{f->operator++(int)}}
- ++f; // @i{call @code{f->operator++()}}
- f--; // @i{call @code{f->operator++(int)}}
- --f; // @i{call @code{f->operator++()}}
-@}
-@end group
-@end smallexample
-
-@item
-In accordance with @sc{arm} section 10.1.1, ambiguities and dominance are now
-handled properly. The rules described in section 10.1.1 are now fully
-implemented.
-
-@end itemize
-
-@node Problems with debugging
-@section Problems with debugging
-
-Two problems remain with regard to debugging:
-
-@itemize @bullet
-@item
-Debugging of anonymous structures on the IBM RS/6000 host is incorrect.
-
-@item
-Symbol table size is overly large due to redundant symbol information;
-this can make @code{gdb} coredump under certain circumstances. This
-problem is not host-specific.
-@end itemize
-
-@node Plans
-@chapter Plans for Reno-2
-
-The overall goal for the second phase of the @sc{gnu} C++ Renovation
-Project is to bring @sc{gnu} C++ to a new level of reliability, quality,
-and competitiveness. As particular elements of this strategy, we intend
-to:
-
-@enumerate 0
-@item
-Fully implement @sc{ansi} exception handling.
-
-@item
-With the exception handling, add Runtime Type Identification
-(@sc{rtti}), if the @sc{ansi} committee adopts it into the standard.
-
-@item
-Bring the compiler into closer compliance with the @sc{arm} and the draft
-@sc{ansi} standard, and document what points in the @sc{arm} we do not yet comply,
-or agree, with.
-
-@item
-Add further support for the @sc{dwarf} debugging format.
-
-@item
-Finish the work to make the compiler compliant with @sc{arm} Section 12.6.2,
-initializing base classes in declaration order, rather than in the order
-that you specify them in a @var{mem-initializer} list.
-
-@item
-Perform a full coverage analysis on the compiler, and weed out unused
-code, for a gain in performance and a reduction in the size of the compiler.
-
-@item
-Further improve the multiple inheritance implementation in the
-compiler to make it cleaner and more complete.
-@end enumerate
-
-@noindent
-As always, we encourage you to make suggestions and ask questions about
-@sc{gnu} C++ as a whole, so we can be sure that the end of this project
-will bring a compiler that everyone will find essential for C++ and will
-meet the needs of the world's C++ community.
-
-@include templates.texi
-
-@include gpcompare.texi
-
-@contents
-
-@bye
diff --git a/contrib/gcc/cpp.1 b/contrib/gcc/cpp.1
deleted file mode 100644
index 54c4dfb19832..000000000000
--- a/contrib/gcc/cpp.1
+++ /dev/null
@@ -1 +0,0 @@
-.so man1/cccp.1
diff --git a/contrib/gcc/fibheap.c b/contrib/gcc/fibheap.c
deleted file mode 100644
index 0ba9b8d6b0a4..000000000000
--- a/contrib/gcc/fibheap.c
+++ /dev/null
@@ -1,523 +0,0 @@
-/* A Fibonacci heap datatype.
- Copyright 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- Contributed by Daniel Berlin (dan@cgsoftware.com).
-
-This file is part of GNU CC.
-
-GNU CC 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 2, or (at your option)
-any later version.
-
-GNU CC 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.
-
-You should have received a copy of the GNU General Public License
-along with GNU CC; see the file COPYING. If not, write to
-the Free Software Foundation, 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#include "libiberty.h"
-#include "fibheap.h"
-
-
-#define FIBHEAPKEY_MIN LONG_MIN
-
-static void fibheap_ins_root PARAMS ((fibheap_t, fibnode_t));
-static void fibheap_rem_root PARAMS ((fibheap_t, fibnode_t));
-static void fibheap_consolidate PARAMS ((fibheap_t));
-static void fibheap_link PARAMS ((fibheap_t, fibnode_t, fibnode_t));
-static void fibheap_cut PARAMS ((fibheap_t, fibnode_t, fibnode_t));
-static void fibheap_cascading_cut PARAMS ((fibheap_t, fibnode_t));
-static fibnode_t fibheap_extr_min_node PARAMS ((fibheap_t));
-static int fibheap_compare PARAMS ((fibheap_t, fibnode_t, fibnode_t));
-static int fibheap_comp_data PARAMS ((fibheap_t, fibheapkey_t, void *,
- fibnode_t));
-static fibnode_t fibnode_new PARAMS ((void));
-static void fibnode_insert_after PARAMS ((fibnode_t, fibnode_t));
-#define fibnode_insert_before(a, b) fibnode_insert_after (a->left, b)
-static fibnode_t fibnode_remove PARAMS ((fibnode_t));
-
-
-/* Create a new fibonacci heap. */
-fibheap_t
-fibheap_new ()
-{
- return (fibheap_t) xcalloc (1, sizeof (struct fibheap));
-}
-
-/* Create a new fibonacci heap node. */
-static fibnode_t
-fibnode_new ()
-{
- fibnode_t node;
-
- node = xcalloc (1, sizeof *node);
- node->left = node;
- node->right = node;
-
- return node;
-}
-
-static inline int
-fibheap_compare (heap, a, b)
- fibheap_t heap ATTRIBUTE_UNUSED;
- fibnode_t a;
- fibnode_t b;
-{
- if (a->key < b->key)
- return -1;
- if (a->key > b->key)
- return 1;
- return 0;
-}
-
-static inline int
-fibheap_comp_data (heap, key, data, b)
- fibheap_t heap;
- fibheapkey_t key;
- void *data;
- fibnode_t b;
-{
- struct fibnode a;
-
- a.key = key;
- a.data = data;
-
- return fibheap_compare (heap, &a, b);
-}
-
-/* Insert DATA, with priority KEY, into HEAP. */
-fibnode_t
-fibheap_insert (heap, key, data)
- fibheap_t heap;
- fibheapkey_t key;
- void *data;
-{
- fibnode_t node;
-
- /* Create the new node. */
- node = fibnode_new ();
-
- /* Set the node's data. */
- node->data = data;
- node->key = key;
-
- /* Insert it into the root list. */
- fibheap_ins_root (heap, node);
-
- /* If their was no minimum, or this key is less than the min,
- it's the new min. */
- if (heap->min == NULL || node->key < heap->min->key)
- heap->min = node;
-
- heap->nodes++;
-
- return node;
-}
-
-/* Return the data of the minimum node (if we know it). */
-void *
-fibheap_min (heap)
- fibheap_t heap;
-{
- /* If there is no min, we can't easily return it. */
- if (heap->min == NULL)
- return NULL;
- return heap->min->data;
-}
-
-/* Return the key of the minimum node (if we know it). */
-fibheapkey_t
-fibheap_min_key (heap)
- fibheap_t heap;
-{
- /* If there is no min, we can't easily return it. */
- if (heap->min == NULL)
- return 0;
- return heap->min->key;
-}
-
-/* Union HEAPA and HEAPB into a new heap. */
-fibheap_t
-fibheap_union (heapa, heapb)
- fibheap_t heapa;
- fibheap_t heapb;
-{
- fibnode_t a_root, b_root, temp;
-
- /* If one of the heaps is empty, the union is just the other heap. */
- if ((a_root = heapa->root) == NULL)
- {
- free (heapa);
- return heapb;
- }
- if ((b_root = heapb->root) == NULL)
- {
- free (heapb);
- return heapa;
- }
-
- /* Merge them to the next nodes on the opposite chain. */
- a_root->left->right = b_root;
- b_root->left->right = a_root;
- temp = a_root->left;
- a_root->left = b_root->left;
- b_root->left = temp;
- heapa->nodes += heapb->nodes;
-
- /* And set the new minimum, if it's changed. */
- if (fibheap_compare (heapa, heapb->min, heapa->min) < 0)
- heapa->min = heapb->min;
-
- free (heapb);
- return heapa;
-}
-
-/* Extract the data of the minimum node from HEAP. */
-void *
-fibheap_extract_min (heap)
- fibheap_t heap;
-{
- fibnode_t z;
- void *ret = NULL;
-
- /* If we don't have a min set, it means we have no nodes. */
- if (heap->min != NULL)
- {
- /* Otherwise, extract the min node, free the node, and return the
- node's data. */
- z = fibheap_extr_min_node (heap);
- ret = z->data;
- free (z);
- }
-
- return ret;
-}
-
-/* Replace both the KEY and the DATA associated with NODE. */
-void *
-fibheap_replace_key_data (heap, node, key, data)
- fibheap_t heap;
- fibnode_t node;
- fibheapkey_t key;
- void *data;
-{
- void *odata;
- int okey;
- fibnode_t y;
-
- /* If we wanted to, we could actually do a real increase by redeleting and
- inserting. However, this would require O (log n) time. So just bail out
- for now. */
- if (fibheap_comp_data (heap, key, data, node) > 0)
- return NULL;
-
- odata = node->data;
- okey = node->key;
- node->data = data;
- node->key = key;
- y = node->parent;
-
- if (okey == key)
- return odata;
-
- /* These two compares are specifically <= 0 to make sure that in the case
- of equality, a node we replaced the data on, becomes the new min. This
- is needed so that delete's call to extractmin gets the right node. */
- if (y != NULL && fibheap_compare (heap, node, y) <= 0)
- {
- fibheap_cut (heap, node, y);
- fibheap_cascading_cut (heap, y);
- }
-
- if (fibheap_compare (heap, node, heap->min) <= 0)
- heap->min = node;
-
- return odata;
-}
-
-/* Replace the DATA associated with NODE. */
-void *
-fibheap_replace_data (heap, node, data)
- fibheap_t heap;
- fibnode_t node;
- void *data;
-{
- return fibheap_replace_key_data (heap, node, node->key, data);
-}
-
-/* Replace the KEY associated with NODE. */
-fibheapkey_t
-fibheap_replace_key (heap, node, key)
- fibheap_t heap;
- fibnode_t node;
- fibheapkey_t key;
-{
- int okey = node->key;
- fibheap_replace_key_data (heap, node, key, node->data);
- return okey;
-}
-
-/* Delete NODE from HEAP. */
-void *
-fibheap_delete_node (heap, node)
- fibheap_t heap;
- fibnode_t node;
-{
- void *ret = node->data;
-
- /* To perform delete, we just make it the min key, and extract. */
- fibheap_replace_key (heap, node, FIBHEAPKEY_MIN);
- fibheap_extract_min (heap);
-
- return ret;
-}
-
-/* Delete HEAP. */
-void
-fibheap_delete (heap)
- fibheap_t heap;
-{
- while (heap->min != NULL)
- free (fibheap_extr_min_node (heap));
-
- free (heap);
-}
-
-/* Determine if HEAP is empty. */
-int
-fibheap_empty (heap)
- fibheap_t heap;
-{
- return heap->nodes == 0;
-}
-
-/* Extract the minimum node of the heap. */
-static fibnode_t
-fibheap_extr_min_node (heap)
- fibheap_t heap;
-{
- fibnode_t ret = heap->min;
- fibnode_t x, y, orig;
-
- /* Attach the child list of the minimum node to the root list of the heap.
- If there is no child list, we don't do squat. */
- for (x = ret->child, orig = NULL; x != orig && x != NULL; x = y)
- {
- if (orig == NULL)
- orig = x;
- y = x->right;
- x->parent = NULL;
- fibheap_ins_root (heap, x);
- }
-
- /* Remove the old root. */
- fibheap_rem_root (heap, ret);
- heap->nodes--;
-
- /* If we are left with no nodes, then the min is NULL. */
- if (heap->nodes == 0)
- heap->min = NULL;
- else
- {
- /* Otherwise, consolidate to find new minimum, as well as do the reorg
- work that needs to be done. */
- heap->min = ret->right;
- fibheap_consolidate (heap);
- }
-
- return ret;
-}
-
-/* Insert NODE into the root list of HEAP. */
-static void
-fibheap_ins_root (heap, node)
- fibheap_t heap;
- fibnode_t node;
-{
- /* If the heap is currently empty, the new node becomes the singleton
- circular root list. */
- if (heap->root == NULL)
- {
- heap->root = node;
- node->left = node;
- node->right = node;
- return;
- }
-
- /* Otherwise, insert it in the circular root list between the root
- and it's right node. */
- fibnode_insert_after (heap->root, node);
-}
-
-/* Remove NODE from the rootlist of HEAP. */
-static void
-fibheap_rem_root (heap, node)
- fibheap_t heap;
- fibnode_t node;
-{
- if (node->left == node)
- heap->root = NULL;
- else
- heap->root = fibnode_remove (node);
-}
-
-/* Consolidate the heap. */
-static void
-fibheap_consolidate (heap)
- fibheap_t heap;
-{
- fibnode_t a[1 + 8 * sizeof (long)];
- fibnode_t w;
- fibnode_t y;
- fibnode_t x;
- int i;
- int d;
- int D;
-
- D = 1 + 8 * sizeof (long);
-
- memset (a, 0, sizeof (fibnode_t) * D);
-
- while ((w = heap->root) != NULL)
- {
- x = w;
- fibheap_rem_root (heap, w);
- d = x->degree;
- while (a[d] != NULL)
- {
- y = a[d];
- if (fibheap_compare (heap, x, y) > 0)
- {
- fibnode_t temp;
- temp = x;
- x = y;
- y = temp;
- }
- fibheap_link (heap, y, x);
- a[d] = NULL;
- d++;
- }
- a[d] = x;
- }
- heap->min = NULL;
- for (i = 0; i < D; i++)
- if (a[i] != NULL)
- {
- fibheap_ins_root (heap, a[i]);
- if (heap->min == NULL || fibheap_compare (heap, a[i], heap->min) < 0)
- heap->min = a[i];
- }
-}
-
-/* Make NODE a child of PARENT. */
-static void
-fibheap_link (heap, node, parent)
- fibheap_t heap ATTRIBUTE_UNUSED;
- fibnode_t node;
- fibnode_t parent;
-{
- if (parent->child == NULL)
- parent->child = node;
- else
- fibnode_insert_before (parent->child, node);
- node->parent = parent;
- parent->degree++;
- node->mark = 0;
-}
-
-/* Remove NODE from PARENT's child list. */
-static void
-fibheap_cut (heap, node, parent)
- fibheap_t heap;
- fibnode_t node;
- fibnode_t parent;
-{
- fibnode_remove (node);
- parent->degree--;
- fibheap_ins_root (heap, node);
- node->parent = NULL;
- node->mark = 0;
-}
-
-static void
-fibheap_cascading_cut (heap, y)
- fibheap_t heap;
- fibnode_t y;
-{
- fibnode_t z;
-
- while ((z = y->parent) != NULL)
- {
- if (y->mark == 0)
- {
- y->mark = 1;
- return;
- }
- else
- {
- fibheap_cut (heap, y, z);
- y = z;
- }
- }
-}
-
-static void
-fibnode_insert_after (a, b)
- fibnode_t a;
- fibnode_t b;
-{
- if (a == a->right)
- {
- a->right = b;
- a->left = b;
- b->right = a;
- b->left = a;
- }
- else
- {
- b->right = a->right;
- a->right->left = b;
- a->right = b;
- b->left = a;
- }
-}
-
-static fibnode_t
-fibnode_remove (node)
- fibnode_t node;
-{
- fibnode_t ret;
-
- if (node == node->left)
- ret = NULL;
- else
- ret = node->left;
-
- if (node->parent != NULL && node->parent->child == node)
- node->parent->child = ret;
-
- node->right->left = node->left;
- node->left->right = node->right;
-
- node->parent = NULL;
- node->left = node;
- node->right = node;
-
- return ret;
-}
diff --git a/contrib/gcc/fibheap.h b/contrib/gcc/fibheap.h
deleted file mode 100644
index d109e4ad1635..000000000000
--- a/contrib/gcc/fibheap.h
+++ /dev/null
@@ -1,81 +0,0 @@
-/* A Fibonacci heap datatype.
- Copyright 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- Contributed by Daniel Berlin (dan@cgsoftware.com).
-
-This file is part of GCC.
-
-GCC 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 2, or (at your option)
-any later version.
-
-GCC 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.
-
-You should have received a copy of the GNU General Public License
-along with GCC; see the file COPYING. If not, write to
-the Free Software Foundation, 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-/* Fibonacci heaps are somewhat complex, but, there's an article in
- DDJ that explains them pretty well:
-
- http://www.ddj.com/articles/1997/9701/9701o/9701o.htm?topic=algoritms
-
- Introduction to algorithms by Corman and Rivest also goes over them.
-
- The original paper that introduced them is "Fibonacci heaps and their
- uses in improved network optimization algorithms" by Tarjan and
- Fredman (JACM 34(3), July 1987).
-
- Amortized and real worst case time for operations:
-
- ExtractMin: O(lg n) amortized. O(n) worst case.
- DecreaseKey: O(1) amortized. O(lg n) worst case.
- Insert: O(2) amortized. O(1) actual.
- Union: O(1) amortized. O(1) actual. */
-
-#ifndef _FIBHEAP_H_
-#define _FIBHEAP_H_
-
-#include <ansidecl.h>
-
-typedef long fibheapkey_t;
-
-typedef struct fibheap
-{
- size_t nodes;
- struct fibnode *min;
- struct fibnode *root;
-} *fibheap_t;
-
-typedef struct fibnode
-{
- struct fibnode *parent;
- struct fibnode *child;
- struct fibnode *left;
- struct fibnode *right;
- fibheapkey_t key;
- void *data;
- unsigned int degree : 31;
- unsigned int mark : 1;
-} *fibnode_t;
-
-extern fibheap_t fibheap_new PARAMS ((void));
-extern fibnode_t fibheap_insert PARAMS ((fibheap_t, fibheapkey_t, void *));
-extern int fibheap_empty PARAMS ((fibheap_t));
-extern fibheapkey_t fibheap_min_key PARAMS ((fibheap_t));
-extern fibheapkey_t fibheap_replace_key PARAMS ((fibheap_t, fibnode_t,
- fibheapkey_t));
-extern void *fibheap_replace_key_data PARAMS ((fibheap_t, fibnode_t,
- fibheapkey_t, void *));
-extern void *fibheap_extract_min PARAMS ((fibheap_t));
-extern void *fibheap_min PARAMS ((fibheap_t));
-extern void *fibheap_replace_data PARAMS ((fibheap_t, fibnode_t, void *));
-extern void *fibheap_delete_node PARAMS ((fibheap_t, fibnode_t));
-extern void fibheap_delete PARAMS ((fibheap_t));
-extern fibheap_t fibheap_union PARAMS ((fibheap_t, fibheap_t));
-
-#endif /* _FIBHEAP_H_ */
diff --git a/contrib/gcc/gcc.1 b/contrib/gcc/gcc.1
deleted file mode 100644
index 74200a1a169e..000000000000
--- a/contrib/gcc/gcc.1
+++ /dev/null
@@ -1,4191 +0,0 @@
-.\" Copyright (c) 1991, 1992, 1993, 1994 Free Software Foundation -*-Text-*-
-.\" See section COPYING for conditions for redistribution
-.\"
-.\" Set up \*(lq, \*(rq if -man hasn't already set it up.
-.if @@\*(lq@ \{\
-. ds lq "
-. if t .ds lq ``
-. if !@@\(lq@ .ds lq "\(lq
-.\}
-.if @@\*(rq@ \{\
-. ds rq "
-. if t .ds rq ''
-. if !@@\(rq@ .ds rq "\(rq
-.\}
-.de Id
-.ds Rv \\$3
-.ds Dt \\$4
-..
-.de Sp
-.if n .sp
-.if t .sp 0.4
-..
-.Id $Id: gcc.1,v 1.9 1998/12/16 20:55:57 law Exp $
-.TH GCC 1 "\*(Dt" "GNU Tools" "GNU Tools"
-.SH NAME
-gcc, g++ \- GNU project C and C++ Compiler (gcc-2.95)
-.SH SYNOPSIS
-.B gcc
-.RI "[ " option " | " filename " ].\|.\|."
-.br
-.B g++
-.RI "[ " option " | " filename " ].\|.\|."
-.SH WARNING
-The information in this man page is an extract from the full
-documentation of the GNU C compiler, and is limited to the meaning of
-the options.
-.PP
-This man page is not kept up to date except when volunteers want to
-maintain it. If you find a discrepancy between the man page and the
-software, please check the Info file, which is the authoritative
-documentation.
-.PP
-If we find that the things in this man page that are out of date cause
-significant confusion or complaints, we will stop distributing the man
-page. The alternative, updating the man page when we update the Info
-file, is impossible because the rest of the work of maintaining GNU CC
-leaves us no time for that. The GNU project regards man pages as
-obsolete and should not let them take time away from other things.
-.PP
-For complete and current documentation, refer to the Info file `\|\c
-.B gcc\c
-\&\|' or the manual
-.I
-Using and Porting GNU CC (for version 2.0)\c
-\&. Both are made from the Texinfo source file
-.BR gcc.texinfo .
-.SH DESCRIPTION
-The C and C++ compilers are integrated. Both process input files
-through one or more of four stages: preprocessing, compilation,
-assembly, and linking. Source filename suffixes identify the source
-language, but which name you use for the compiler governs default
-assumptions:
-.TP
-.B gcc
-assumes preprocessed (\c
-.B .i\c
-\&) files are C and assumes C style linking.
-.TP
-.B g++
-assumes preprocessed (\c
-.B .i\c
-\&) files are C++ and assumes C++ style linking.
-.PP
-Suffixes of source file names indicate the language and kind of
-processing to be done:
-.Sp
-.nf
-.ta \w'\fB.cxx\fP 'u
-\&\fB.c\fP C source; preprocess, compile, assemble
-\&\fB.C\fP C++ source; preprocess, compile, assemble
-\&\fB.cc\fP C++ source; preprocess, compile, assemble
-\&\fB.cxx\fP C++ source; preprocess, compile, assemble
-\&\fB.m\fP Objective-C source; preprocess, compile, assemble
-\&\fB.i\fP preprocessed C; compile, assemble
-\&\fB.ii\fP preprocessed C++; compile, assemble
-\&\fB.s\fP Assembler source; assemble
-\&\fB.S\fP Assembler source; preprocess, assemble
-\&\fB.h\fP Preprocessor file; not usually named on command line
-.Sp
-.fi
-Files with other suffixes are passed to the linker. Common cases include:
-.Sp
-.nf
-\&\fB.o\fP Object file
-\&\fB.a\fP Archive file
-.br
-.fi
-.Sp
-Linking is always the last stage unless you use one of the
-.BR \-c ,
-.BR \-S ,
-or
-.B \-E
-options to avoid it (or unless compilation errors stop the whole
-process). For the link stage, all
-.B .o
-files corresponding to source files,
-.B \-l
-libraries, unrecognized filenames (including named
-.B .o
-object files and
-.B .a
-archives)
-are passed to the linker in command-line order.
-.SH OPTIONS
-Options must be separate: `\|\c
-.B \-dr\c
-\&\|' is quite different from `\|\c
-.B \-d \-r
-\&\|'.
-.PP
-Most `\|\c
-.B \-f\c
-\&\|' and `\|\c
-.B \-W\c
-\&\|' options have two contrary forms:
-.BI \-f name
-and
-.BI \-fno\- name\c
-\& (or
-.BI \-W name
-and
-.BI \-Wno\- name\c
-\&). Only the non-default forms are shown here.
-.PP
-Here is a summary of all the options, grouped by type. Explanations are
-in the following sections.
-.hy 0
-.na
-.TP
-.B Overall Options
-.br
-\-c
-\-S
-\-E
-.RI "\-o " file
-\-pipe
-\-v
-.RI "\-x " language
-.TP
-.B Language Options
-\-ansi
-\-fall\-virtual
-\-fcond\-mismatch
-\-fdollars\-in\-identifiers
-\-fenum\-int\-equiv
-\-fexternal\-templates
-\-fno\-asm
-\-fno\-builtin
-\-fhosted
-\-fno\-hosted
-\-ffreestanding
-\-fno\-freestanding
-\-fno\-strict\-prototype
-\-fsigned\-bitfields
-\-fsigned\-char
-\-fthis\-is\-variable
-\-funsigned\-bitfields
-\-funsigned\-char
-\-fwritable\-strings
-\-traditional
-\-traditional\-cpp
-\-trigraphs
-.TP
-.B Warning Options
-\-fsyntax\-only
-\-pedantic
-\-pedantic\-errors
-\-w
-\-W
-\-Wall
-\-Waggregate\-return
-\-Wcast\-align
-\-Wcast\-qual
-\-Wchar\-subscript
-\-Wcomment
-\-Wconversion
-\-Wenum\-clash
-\-Werror
-\-Wformat
-.RI \-Wid\-clash\- len
-\-Wimplicit
-\-Wimplicit\-int
-\-Wimplicit\-function\-declaration
-\-Winline
-\-Wlong\-long
-\-Wmain
-\-Wmissing\-prototypes
-\-Wmissing\-declarations
-\-Wnested\-externs
-\-Wno\-import
-\-Wparentheses
-\-Wpointer\-arith
-\-Wredundant\-decls
-\-Wreturn\-type
-\-Wshadow
-\-Wstrict\-prototypes
-\-Wswitch
-\-Wtemplate\-debugging
-\-Wtraditional
-\-Wtrigraphs
-\-Wuninitialized
-\-Wunused
-\-Wwrite\-strings
-.TP
-.B Debugging Options
-\-a
-.RI \-d letters
-\-fpretend\-float
-\-g
-.RI \-g level
-\-gcoff
-\-gxcoff
-\-gxcoff+
-\-gdwarf
-\-gdwarf+
-\-gstabs
-\-gstabs+
-\-ggdb
-\-p
-\-pg
-\-save\-temps
-.RI \-print\-file\-name= library
-\-print\-libgcc\-file\-name
-.RI \-print\-prog\-name= program
-.TP
-.B Optimization Options
-\-fcaller\-saves
-\-fcse\-follow\-jumps
-\-fcse\-skip\-blocks
-\-fdelayed\-branch
-\-felide\-constructors
-\-fexpensive\-optimizations
-\-ffast\-math
-\-ffloat\-store
-\-fforce\-addr
-\-fforce\-mem
-\-finline\-functions
-\-fkeep\-inline\-functions
-\-fmemoize\-lookups
-\-fno\-default\-inline
-\-fno\-defer\-pop
-\-fno\-function\-cse
-\-fno\-inline
-\-fno\-peephole
-\-fomit\-frame\-pointer
-\-frerun\-cse\-after\-loop
-\-fschedule\-insns
-\-fschedule\-insns2
-\-fstrength\-reduce
-\-fthread\-jumps
-\-funroll\-all\-loops
-\-funroll\-loops
-\-O
-\-O2
-\-O3
-.TP
-.B Preprocessor Options
-.RI \-A assertion
-\-C
-\-dD
-\-dM
-\-dN
-.RI \-D macro [\|= defn \|]
-\-E
-\-H
-.RI "\-idirafter " dir
-.RI "\-include " file
-.RI "\-imacros " file
-.RI "\-iprefix " file
-.RI "\-iwithprefix " dir
-\-M
-\-MD
-\-MM
-\-MMD
-\-nostdinc
-\-P
-.RI \-U macro
-\-undef
-.TP
-.B Assembler Option
-.RI \-Wa, option
-.TP
-.B Linker Options
-.RI \-l library
-\-nostartfiles
-\-nostdlib
-\-static
-\-shared
-\-symbolic
-.RI "\-Xlinker\ " option
-.RI \-Wl, option
-.RI "\-u " symbol
-.TP
-.B Directory Options
-.RI \-B prefix
-.RI \-I dir
-\-I\-
-.RI \-L dir
-.TP
-.B Target Options
-.RI "\-b " machine
-.RI "\-V " version
-.TP
-.B Configuration Dependent Options
-.I M680x0\ Options
-.br
-\-m68000
-\-m68020
-\-m68020\-40
-\-m68030
-\-m68040
-\-m68881
-\-mbitfield
-\-mc68000
-\-mc68020
-\-mfpa
-\-mnobitfield
-\-mrtd
-\-mshort
-\-msoft\-float
-.Sp
-.I VAX Options
-.br
-\-mg
-\-mgnu
-\-munix
-.Sp
-.I SPARC Options
-.br
-\-mepilogue
-\-mfpu
-\-mhard\-float
-\-mno\-fpu
-\-mno\-epilogue
-\-msoft\-float
-\-msparclite
-\-mv8
-\-msupersparc
-\-mcypress
-.Sp
-.I Convex Options
-.br
-\-margcount
-\-mc1
-\-mc2
-\-mnoargcount
-.Sp
-.I AMD29K Options
-.br
-\-m29000
-\-m29050
-\-mbw
-\-mdw
-\-mkernel\-registers
-\-mlarge
-\-mnbw
-\-mnodw
-\-msmall
-\-mstack\-check
-\-muser\-registers
-.Sp
-.I M88K Options
-.br
-\-m88000
-\-m88100
-\-m88110
-\-mbig\-pic
-\-mcheck\-zero\-division
-\-mhandle\-large\-shift
-\-midentify\-revision
-\-mno\-check\-zero\-division
-\-mno\-ocs\-debug\-info
-\-mno\-ocs\-frame\-position
-\-mno\-optimize\-arg\-area
-\-mno\-serialize\-volatile
-\-mno\-underscores
-\-mocs\-debug\-info
-\-mocs\-frame\-position
-\-moptimize\-arg\-area
-\-mserialize\-volatile
-.RI \-mshort\-data\- num
-\-msvr3
-\-msvr4
-\-mtrap\-large\-shift
-\-muse\-div\-instruction
-\-mversion\-03.00
-\-mwarn\-passed\-structs
-.Sp
-.I RS6000 Options
-.br
-\-mfp\-in\-toc
-\-mno\-fop\-in\-toc
-.Sp
-.I RT Options
-.br
-\-mcall\-lib\-mul
-\-mfp\-arg\-in\-fpregs
-\-mfp\-arg\-in\-gregs
-\-mfull\-fp\-blocks
-\-mhc\-struct\-return
-\-min\-line\-mul
-\-mminimum\-fp\-blocks
-\-mnohc\-struct\-return
-.Sp
-.I MIPS Options
-.br
-\-mcpu=\fIcpu type\fP
-\-mips2
-\-mips3
-\-mint64
-\-mlong64
-\-mlonglong128
-\-mmips\-as
-\-mgas
-\-mrnames
-\-mno\-rnames
-\-mgpopt
-\-mno\-gpopt
-\-mstats
-\-mno\-stats
-\-mmemcpy
-\-mno\-memcpy
-\-mno\-mips\-tfile
-\-mmips\-tfile
-\-msoft\-float
-\-mhard\-float
-\-mabicalls
-\-mno\-abicalls
-\-mhalf\-pic
-\-mno\-half\-pic
-\-G \fInum\fP
-\-nocpp
-.Sp
-.I i386 Options
-.br
-\-m486
-\-mno\-486
-\-msoft\-float
-\-mno\-fp\-ret\-in\-387
-.Sp
-.I HPPA Options
-.br
-\-mpa\-risc\-1\-0
-\-mpa\-risc\-1\-1
-\-mkernel
-\-mshared\-libs
-\-mno\-shared\-libs
-\-mlong\-calls
-\-mdisable\-fpregs
-\-mdisable\-indexing
-\-mtrailing\-colon
-.Sp
-.I i960 Options
-.br
-\-m\fIcpu-type\fP
-\-mnumerics
-\-msoft\-float
-\-mleaf\-procedures
-\-mno\-leaf\-procedures
-\-mtail\-call
-\-mno\-tail\-call
-\-mcomplex\-addr
-\-mno\-complex\-addr
-\-mcode\-align
-\-mno\-code\-align
-\-mic\-compat
-\-mic2.0\-compat
-\-mic3.0\-compat
-\-masm\-compat
-\-mintel\-asm
-\-mstrict\-align
-\-mno\-strict\-align
-\-mold\-align
-\-mno\-old\-align
-.Sp
-.I DEC Alpha Options
-.br
-\-mfp\-regs
-\-mno\-fp\-regs
-\-mno\-soft\-float
-\-msoft\-float
-.Sp
-.I System V Options
-.br
-\-G
-\-Qy
-\-Qn
-.RI \-YP, paths
-.RI \-Ym, dir
-.TP
-.B Code Generation Options
-.RI \-fcall\-saved\- reg
-.RI \-fcall\-used\- reg
-.RI \-ffixed\- reg
-\-finhibit\-size\-directive
-\-fnonnull\-objects
-\-fno\-common
-\-fno\-ident
-\-fno\-gnu\-linker
-\-fpcc\-struct\-return
-\-fpic
-\-fPIC
-\-freg\-struct\-return
-\-fshared\-data
-\-fshort\-enums
-\-fshort\-double
-\-fvolatile
-\-fvolatile\-global
-\-fverbose\-asm
-.ad b
-.hy 1
-.SH OVERALL OPTIONS
-.TP
-.BI "\-x " "language"
-Specify explicitly the
-.I language\c
-\& for the following input files (rather than choosing a default based
-on the file name suffix) . This option applies to all following input
-files until the next `\|\c
-.B \-x\c
-\&\|' option. Possible values of \c
-.I language\c
-\& are
-`\|\c
-.B c\c
-\&\|', `\|\c
-.B objective\-c\c
-\&\|', `\|\c
-.B c\-header\c
-\&\|', `\|\c
-.B c++\c
-\&\|',
-`\|\c
-.B cpp\-output\c
-\&\|', `\|\c
-.B assembler\c
-\&\|', and `\|\c
-.B assembler\-with\-cpp\c
-\&\|'.
-.TP
-.B \-x none
-Turn off any specification of a language, so that subsequent files are
-handled according to their file name suffixes (as they are if `\|\c
-.B \-x\c
-\&\|'
-has not been used at all).
-.PP
-If you want only some of the four stages (preprocess, compile,
-assemble, link), you can use
-`\|\c
-.B \-x\c
-\&\|' (or filename suffixes) to tell \c
-.B gcc\c
-\& where to start, and
-one of the options `\|\c
-.B \-c\c
-\&\|', `\|\c
-.B \-S\c
-\&\|', or `\|\c
-.B \-E\c
-\&\|' to say where
-.B gcc\c
-\& is to stop. Note that some combinations (for example,
-`\|\c
-.B \-x cpp\-output \-E\c
-\&\|') instruct \c
-.B gcc\c
-\& to do nothing at all.
-.TP
-.B \-c
-Compile or assemble the source files, but do not link. The compiler
-output is an object file corresponding to each source file.
-.Sp
-By default, GCC makes the object file name for a source file by replacing
-the suffix `\|\c
-.B .c\c
-\&\|', `\|\c
-.B .i\c
-\&\|', `\|\c
-.B .s\c
-\&\|', etc., with `\|\c
-.B .o\c
-\&\|'. Use
-.B \-o\c
-\& to select another name.
-.Sp
-GCC ignores any unrecognized input files (those that do not require
-compilation or assembly) with the
-.B \-c
-option.
-.TP
-.B \-S
-Stop after the stage of compilation proper; do not assemble. The output
-is an assembler code file for each non-assembler input
-file specified.
-.Sp
-By default, GCC makes the assembler file name for a source file by
-replacing the suffix `\|\c
-.B .c\c
-\&\|', `\|\c
-.B .i\c
-\&\|', etc., with `\|\c
-.B .s\c
-\&\|'. Use
-.B \-o\c
-\& to select another name.
-.Sp
-GCC ignores any input files that don't require compilation.
-.TP
-.B \-E
-Stop after the preprocessing stage; do not run the compiler proper. The
-output is preprocessed source code, which is sent to the
-standard output.
-.Sp
-GCC ignores input files which don't require preprocessing.
-.TP
-.BI "\-o " file
-Place output in file \c
-.I file\c
-\&. This applies regardless to whatever
-sort of output GCC is producing, whether it be an executable file,
-an object file, an assembler file or preprocessed C code.
-.Sp
-Since only one output file can be specified, it does not make sense to
-use `\|\c
-.B \-o\c
-\&\|' when compiling more than one input file, unless you are
-producing an executable file as output.
-.Sp
-If you do not specify `\|\c
-.B \-o\c
-\&\|', the default is to put an executable file
-in `\|\c
-.B a.out\c
-\&\|', the object file for `\|\c
-.I source\c
-.B \&.\c
-.I suffix\c
-\&\c
-\&\|' in
-`\|\c
-.I source\c
-.B \&.o\c
-\&\|', its assembler file in `\|\c
-.I source\c
-.B \&.s\c
-\&\|', and
-all preprocessed C source on standard output.
-.TP
-.B \-v
-Print (on standard error output) the commands executed to run the stages
-of compilation. Also print the version number of the compiler driver
-program and of the preprocessor and the compiler proper.
-.TP
-.B \-pipe
-Use pipes rather than temporary files for communication between the
-various stages of compilation. This fails to work on some systems where
-the assembler cannot read from a pipe; but the GNU assembler has
-no trouble.
-.PP
-.SH LANGUAGE OPTIONS
-The following options control the dialect of C that the compiler
-accepts:
-.TP
-.B \-ansi
-Support all ANSI standard C programs.
-.Sp
-This turns off certain features of GNU C that are incompatible with
-ANSI C, such as the \c
-.B asm\c
-\&, \c
-.B inline\c
-\& and \c
-.B typeof
-keywords, and predefined macros such as \c
-.B unix\c
-\& and \c
-.B vax
-that identify the type of system you are using. It also enables the
-undesirable and rarely used ANSI trigraph feature, and disallows `\|\c
-.B $\c
-\&\|' as part of identifiers.
-.Sp
-The alternate keywords \c
-.B _\|_asm_\|_\c
-\&, \c
-.B _\|_extension_\|_\c
-\&,
-.B _\|_inline_\|_\c
-\& and \c
-.B _\|_typeof_\|_\c
-\& continue to work despite
-`\|\c
-.B \-ansi\c
-\&\|'. You would not want to use them in an ANSI C program, of
-course, but it is useful to put them in header files that might be included
-in compilations done with `\|\c
-.B \-ansi\c
-\&\|'. Alternate predefined macros
-such as \c
-.B _\|_unix_\|_\c
-\& and \c
-.B _\|_vax_\|_\c
-\& are also available, with or
-without `\|\c
-.B \-ansi\c
-\&\|'.
-.Sp
-The `\|\c
-.B \-ansi\c
-\&\|' option does not cause non-ANSI programs to be
-rejected gratuitously. For that, `\|\c
-.B \-pedantic\c
-\&\|' is required in
-addition to `\|\c
-.B \-ansi\c
-\&\|'.
-.Sp
-The preprocessor predefines a macro \c
-.B _\|_STRICT_ANSI_\|_\c
-\& when you use the `\|\c
-.B \-ansi\c
-\&\|'
-option. Some header files may notice this macro and refrain
-from declaring certain functions or defining certain macros that the
-ANSI standard doesn't call for; this is to avoid interfering with any
-programs that might use these names for other things.
-.TP
-.B \-fno\-asm
-Do not recognize \c
-.B asm\c
-\&, \c
-.B inline\c
-\& or \c
-.B typeof\c
-\& as a
-keyword. These words may then be used as identifiers. You can
-use \c
-.B _\|_asm_\|_\c
-\&, \c
-.B _\|_inline_\|_\c
-\& and \c
-.B _\|_typeof_\|_\c
-\& instead.
-`\|\c
-.B \-ansi\c
-\&\|' implies `\|\c
-.B \-fno\-asm\c
-\&\|'.
-.TP
-.B \-fno\-builtin
-Don't recognize built-in functions that do not begin with two leading
-underscores. Currently, the functions affected include \c
-.B _exit\c
-\&,
-.B abort\c
-\&, \c
-.B abs\c
-\&, \c
-.B alloca\c
-\&, \c
-.B cos\c
-\&, \c
-.B exit\c
-\&,
-.B fabs\c
-\&, \c
-.B labs\c
-\&, \c
-.B memcmp\c
-\&, \c
-.B memcpy\c
-\&, \c
-.B sin\c
-\&,
-.B sqrt\c
-\&, \c
-.B strcmp\c
-\&, \c
-.B strcpy\c
-\&, and \c
-.B strlen\c
-\&.
-.Sp
-The `\|\c
-.B \-ansi\c
-\&\|' option prevents \c
-.B alloca\c
-\& and \c
-.B _exit\c
-\& from
-being builtin functions.
-.TP
-.B \-fhosted
-Compile for a hosted environment; this implies the `\|\c
-.B \-fbuiltin\c
-\&\|' option, and implies that suspicious declarations of
-.B main\c
-\& should be warned about.
-.TP
-.B \-ffreestanding
-Compile for a freestanding environment; this implies the `\|\c
-.B \-fno-builtin\c
-\&\|' option, and implies that
-.B main\c
-\& has no special requirements.
-.TP
-.B \-fno\-strict\-prototype
-Treat a function declaration with no arguments, such as `\|\c
-.B int foo
-();\c
-\&\|', as C would treat it\(em\&as saying nothing about the number of
-arguments or their types (C++ only). Normally, such a declaration in
-C++ means that the function \c
-.B foo\c
-\& takes no arguments.
-.TP
-.B \-trigraphs
-Support ANSI C trigraphs. The `\|\c
-.B \-ansi\c
-\&\|' option implies `\|\c
-.B \-trigraphs\c
-\&\|'.
-.TP
-.B \-traditional
-Attempt to support some aspects of traditional C compilers.
-For details, see the GNU C Manual; the duplicate list here
-has been deleted so that we won't get complaints when it
-is out of date.
-.Sp
-But one note about C++ programs only (not C). `\|\c
-.B \-traditional\c
-\&\|' has one additional effect for C++: assignment to
-.B this
-is permitted. This is the same as the effect of `\|\c
-.B \-fthis\-is\-variable\c
-\&\|'.
-.TP
-.B \-traditional\-cpp
-Attempt to support some aspects of traditional C preprocessors.
-This includes the items that specifically mention the preprocessor above,
-but none of the other effects of `\|\c
-.B \-traditional\c
-\&\|'.
-.TP
-.B \-fdollars\-in\-identifiers
-Permit the use of `\|\c
-.B $\c
-\&\|' in identifiers (C++ only). You can also use
-`\|\c
-.B \-fno\-dollars\-in\-identifiers\c
-\&\|' to explicitly prohibit use of
-`\|\c
-.B $\c
-\&\|'. (GNU C++ allows `\|\c
-.B $\c
-\&\|' by default on some target systems
-but not others.)
-.TP
-.B \-fenum\-int\-equiv
-Permit implicit conversion of \c
-.B int\c
-\& to enumeration types (C++
-only). Normally GNU C++ allows conversion of \c
-.B enum\c
-\& to \c
-.B int\c
-\&,
-but not the other way around.
-.TP
-.B \-fexternal\-templates
-Produce smaller code for template declarations, by generating only a
-single copy of each template function where it is defined (C++ only).
-To use this option successfully, you must also mark all files that
-use templates with either `\|\c
-.B #pragma implementation\c
-\&\|' (the definition) or
-`\|\c
-.B #pragma interface\c
-\&\|' (declarations).
-
-When your code is compiled with `\|\c
-.B \-fexternal\-templates\c
-\&\|', all
-template instantiations are external. You must arrange for all
-necessary instantiations to appear in the implementation file; you can
-do this with a \c
-.B typedef\c
-\& that references each instantiation needed.
-Conversely, when you compile using the default option
-`\|\c
-.B \-fno\-external\-templates\c
-\&\|', all template instantiations are
-explicitly internal.
-.TP
-.B \-fall\-virtual
-Treat all possible member functions as virtual, implicitly. All
-member functions (except for constructor functions and
-.B new
-or
-.B delete
-member operators) are treated as virtual functions of the class where
-they appear.
-.Sp
-This does not mean that all calls to these member functions will be
-made through the internal table of virtual functions. Under some
-circumstances, the compiler can determine that a call to a given
-virtual function can be made directly; in these cases the calls are
-direct in any case.
-.TP
-.B \-fcond\-mismatch
-Allow conditional expressions with mismatched types in the second and
-third arguments. The value of such an expression is void.
-.TP
-.B \-fthis\-is\-variable
-Permit assignment to \c
-.B this\c
-\& (C++ only). The incorporation of
-user-defined free store management into C++ has made assignment to
-`\|\c
-.B this\c
-\&\|' an anachronism. Therefore, by default it is invalid to
-assign to \c
-.B this\c
-\& within a class member function. However, for
-backwards compatibility, you can make it valid with
-`\|\c
-.B \-fthis-is-variable\c
-\&\|'.
-.TP
-.B \-funsigned\-char
-Let the type \c
-.B char\c
-\& be unsigned, like \c
-.B unsigned char\c
-\&.
-.Sp
-Each kind of machine has a default for what \c
-.B char\c
-\& should
-be. It is either like \c
-.B unsigned char\c
-\& by default or like
-.B signed char\c
-\& by default.
-.Sp
-Ideally, a portable program should always use \c
-.B signed char\c
-\& or
-.B unsigned char\c
-\& when it depends on the signedness of an object.
-But many programs have been written to use plain \c
-.B char\c
-\& and
-expect it to be signed, or expect it to be unsigned, depending on the
-machines they were written for. This option, and its inverse, let you
-make such a program work with the opposite default.
-.Sp
-The type \c
-.B char\c
-\& is always a distinct type from each of
-.B signed char\c
-\& and \c
-.B unsigned char\c
-\&, even though its behavior
-is always just like one of those two.
-.TP
-.B \-fsigned\-char
-Let the type \c
-.B char\c
-\& be signed, like \c
-.B signed char\c
-\&.
-.Sp
-Note that this is equivalent to `\|\c
-.B \-fno\-unsigned\-char\c
-\&\|', which is
-the negative form of `\|\c
-.B \-funsigned\-char\c
-\&\|'. Likewise,
-`\|\c
-.B \-fno\-signed\-char\c
-\&\|' is equivalent to `\|\c
-.B \-funsigned\-char\c
-\&\|'.
-.TP
-.B \-fsigned\-bitfields
-.TP
-.B \-funsigned\-bitfields
-.TP
-.B \-fno\-signed\-bitfields
-.TP
-.B \-fno\-unsigned\-bitfields
-These options control whether a bitfield is
-signed or unsigned, when declared with no explicit `\|\c
-.B signed\c
-\&\|' or `\|\c
-.B unsigned\c
-\&\|' qualifier. By default, such a bitfield is
-signed, because this is consistent: the basic integer types such as
-.B int\c
-\& are signed types.
-.Sp
-However, when you specify `\|\c
-.B \-traditional\c
-\&\|', bitfields are all unsigned
-no matter what.
-.TP
-.B \-fwritable\-strings
-Store string constants in the writable data segment and don't uniquize
-them. This is for compatibility with old programs which assume they
-can write into string constants. `\|\c
-.B \-traditional\c
-\&\|' also has this
-effect.
-.Sp
-Writing into string constants is a very bad idea; \*(lqconstants\*(rq should
-be constant.
-.SH PREPROCESSOR OPTIONS
-These options control the C preprocessor, which is run on each C source
-file before actual compilation.
-.PP
-If you use the `\|\c
-.B \-E\c
-\&\|' option, GCC does nothing except preprocessing.
-Some of these options make sense only together with `\|\c
-.B \-E\c
-\&\|' because
-they cause the preprocessor output to be unsuitable for actual
-compilation.
-.TP
-.BI "\-include " "file"
-Process \c
-.I file\c
-\& as input before processing the regular input file.
-In effect, the contents of \c
-.I file\c
-\& are compiled first. Any `\|\c
-.B \-D\c
-\&\|'
-and `\|\c
-.B \-U\c
-\&\|' options on the command line are always processed before
-`\|\c
-.B \-include \c
-.I file\c
-\&\c
-\&\|', regardless of the order in which they are
-written. All the `\|\c
-.B \-include\c
-\&\|' and `\|\c
-.B \-imacros\c
-\&\|' options are
-processed in the order in which they are written.
-.TP
-.BI "\-imacros " file
-Process \c
-.I file\c
-\& as input, discarding the resulting output, before
-processing the regular input file. Because the output generated from
-.I file\c
-\& is discarded, the only effect of `\|\c
-.B \-imacros \c
-.I file\c
-\&\c
-\&\|' is to
-make the macros defined in \c
-.I file\c
-\& available for use in the main
-input. The preprocessor evaluates any `\|\c
-.B \-D\c
-\&\|' and `\|\c
-.B \-U\c
-\&\|' options
-on the command line before processing `\|\c
-.B \-imacros\c
-.I file\c
-\&\|', regardless of the order in
-which they are written. All the `\|\c
-.B \-include\c
-\&\|' and `\|\c
-.B \-imacros\c
-\&\|'
-options are processed in the order in which they are written.
-.TP
-.BI "\-idirafter " "dir"
-Add the directory \c
-.I dir\c
-\& to the second include path. The directories
-on the second include path are searched when a header file is not found
-in any of the directories in the main include path (the one that
-`\|\c
-.B \-I\c
-\&\|' adds to).
-.TP
-.BI "\-iprefix " "prefix"
-Specify \c
-.I prefix\c
-\& as the prefix for subsequent `\|\c
-.B \-iwithprefix\c
-\&\|'
-options.
-.TP
-.BI "\-iwithprefix " "dir"
-Add a directory to the second include path. The directory's name is
-made by concatenating \c
-.I prefix\c
-\& and \c
-.I dir\c
-\&, where \c
-.I prefix
-was specified previously with `\|\c
-.B \-iprefix\c
-\&\|'.
-.TP
-.B \-nostdinc
-Do not search the standard system directories for header files. Only
-the directories you have specified with `\|\c
-.B \-I\c
-\&\|' options (and the
-current directory, if appropriate) are searched.
-.Sp
-By using both `\|\c
-.B \-nostdinc\c
-\&\|' and `\|\c
-.B \-I\-\c
-\&\|', you can limit the include-file search file to only those
-directories you specify explicitly.
-.TP
-.B \-nostdinc++
-Do not search for header files in the C++\-specific standard directories,
-but do still search the other standard directories.
-(This option is used when building `\|\c
-.B libg++\c
-\&\|'.)
-.TP
-.B \-undef
-Do not predefine any nonstandard macros. (Including architecture flags).
-.TP
-.B \-E
-Run only the C preprocessor. Preprocess all the C source files
-specified and output the results to standard output or to the
-specified output file.
-.TP
-.B \-C
-Tell the preprocessor not to discard comments. Used with the
-`\|\c
-.B \-E\c
-\&\|' option.
-.TP
-.B \-P
-Tell the preprocessor not to generate `\|\c
-.B #line\c
-\&\|' commands.
-Used with the `\|\c
-.B \-E\c
-\&\|' option.
-.TP
-.B \-M\ [ \-MG ]
-Tell the preprocessor to output a rule suitable for \c
-.B make
-describing the dependencies of each object file. For each source file,
-the preprocessor outputs one \c
-.B make\c
-\&-rule whose target is the object
-file name for that source file and whose dependencies are all the files
-`\|\c
-.B #include\c
-\&\|'d in it. This rule may be a single line or may be
-continued with `\|\c
-.B \e\c
-\&\|'-newline if it is long. The list of rules is
-printed on standard output instead of the preprocessed C program.
-.Sp
-`\|\c
-.B \-M\c
-\&\|' implies `\|\c
-.B \-E\c
-\&\|'.
-.Sp
-`\|\c
-.B \-MG\c
-\&\|' says to treat missing header files as generated files and assume \c
-they live in the same directory as the source file. It must be specified \c
-in addition to `\|\c
-.B \-M\c
-\&\|'.
-.TP
-.B \-MM\ [ \-MG ]
-Like `\|\c
-.B \-M\c
-\&\|' but the output mentions only the user header files
-included with `\|\c
-.B #include "\c
-.I file\c
-\&"\c
-\&\|'. System header files
-included with `\|\c
-.B #include <\c
-.I file\c
-\&>\c
-\&\|' are omitted.
-.TP
-.B \-MD
-Like `\|\c
-.B \-M\c
-\&\|' but the dependency information is written to files with
-names made by replacing `\|\c
-.B .o\c
-\&\|' with `\|\c
-.B .d\c
-\&\|' at the end of the
-output file names. This is in addition to compiling the file as
-specified\(em\&`\|\c
-.B \-MD\c
-\&\|' does not inhibit ordinary compilation the way
-`\|\c
-.B \-M\c
-\&\|' does.
-.Sp
-The Mach utility `\|\c
-.B md\c
-\&\|' can be used to merge the `\|\c
-.B .d\c
-\&\|' files
-into a single dependency file suitable for using with the `\|\c
-.B make\c
-\&\|'
-command.
-.TP
-.B \-MMD
-Like `\|\c
-.B \-MD\c
-\&\|' except mention only user header files, not system
-header files.
-.TP
-.B \-H
-Print the name of each header file used, in addition to other normal
-activities.
-.TP
-.BI "\-A" "question" ( answer )
-Assert the answer
-.I answer
-for
-.I question\c
-\&, in case it is tested
-with a preprocessor conditional such as `\|\c
-.BI "#if #" question ( answer )\c
-\&\|'. `\|\c
-.B \-A\-\c
-\&\|' disables the standard
-assertions that normally describe the target machine.
-.TP
-.BI "\-A" "question"\c
-\&(\c
-.I answer\c
-\&)
-Assert the answer \c
-.I answer\c
-\& for \c
-.I question\c
-\&, in case it is tested
-with a preprocessor conditional such as `\|\c
-.B #if
-#\c
-.I question\c
-\&(\c
-.I answer\c
-\&)\c
-\&\|'. `\|\c
-.B \-A-\c
-\&\|' disables the standard
-assertions that normally describe the target machine.
-.TP
-.BI \-D macro
-Define macro \c
-.I macro\c
-\& with the string `\|\c
-.B 1\c
-\&\|' as its definition.
-.TP
-.BI \-D macro = defn
-Define macro \c
-.I macro\c
-\& as \c
-.I defn\c
-\&. All instances of `\|\c
-.B \-D\c
-\&\|' on
-the command line are processed before any `\|\c
-.B \-U\c
-\&\|' options.
-.TP
-.BI \-U macro
-Undefine macro \c
-.I macro\c
-\&. `\|\c
-.B \-U\c
-\&\|' options are evaluated after all `\|\c
-.B \-D\c
-\&\|' options, but before any `\|\c
-.B \-include\c
-\&\|' and `\|\c
-.B \-imacros\c
-\&\|' options.
-.TP
-.B \-dM
-Tell the preprocessor to output only a list of the macro definitions
-that are in effect at the end of preprocessing. Used with the `\|\c
-.B \-E\c
-\&\|'
-option.
-.TP
-.B \-dD
-Tell the preprocessor to pass all macro definitions into the output, in
-their proper sequence in the rest of the output.
-.TP
-.B \-dN
-Like `\|\c
-.B \-dD\c
-\&\|' except that the macro arguments and contents are omitted.
-Only `\|\c
-.B #define \c
-.I name\c
-\&\c
-\&\|' is included in the output.
-.SH ASSEMBLER OPTION
-.TP
-.BI "\-Wa," "option"
-Pass \c
-.I option\c
-\& as an option to the assembler. If \c
-.I option
-contains commas, it is split into multiple options at the commas.
-.SH LINKER OPTIONS
-These options come into play when the compiler links object files into
-an executable output file. They are meaningless if the compiler is
-not doing a link step.
-.TP
-.I object-file-name
-A file name that does not end in a special recognized suffix is
-considered to name an object file or library. (Object files are
-distinguished from libraries by the linker according to the file
-contents.) If GCC does a link step, these object files are used as input
-to the linker.
-.TP
-.BI \-l library
-Use the library named \c
-.I library\c
-\& when linking.
-.Sp
-The linker searches a standard list of directories for the library,
-which is actually a file named `\|\c
-.B lib\c
-.I library\c
-\&.a\c
-\&\|'. The linker
-then uses this file as if it had been specified precisely by name.
-.Sp
-The directories searched include several standard system directories
-plus any that you specify with `\|\c
-.B \-L\c
-\&\|'.
-.Sp
-Normally the files found this way are library files\(em\&archive files
-whose members are object files. The linker handles an archive file by
-scanning through it for members which define symbols that have so far
-been referenced but not defined. However, if the linker finds an
-ordinary object file rather than a library, the object file is linked
-in the usual fashion. The only difference between using an `\|\c
-.B \-l\c
-\&\|' option and specifying a file
-name is that `\|\c
-.B \-l\c
-\&\|' surrounds
-.I library
-with `\|\c
-.B lib\c
-\&\|' and `\|\c
-.B .a\c
-\&\|' and searches several directories.
-.TP
-.B \-lobjc
-You need this special case of the
-.B \-l
-option in order to link an Objective C program.
-.TP
-.B \-nostartfiles
-Do not use the standard system startup files when linking.
-The standard libraries are used normally.
-.TP
-.B \-nostdlib
-Don't use the standard system libraries and startup files when linking.
-Only the files you specify will be passed to the linker.
-.TP
-.B \-static
-On systems that support dynamic linking, this prevents linking with the shared
-libraries. On other systems, this option has no effect.
-.TP
-.B \-shared
-Produce a shared object which can then be linked with other objects to
-form an executable. Only a few systems support this option.
-.TP
-.B \-symbolic
-Bind references to global symbols when building a shared object. Warn
-about any unresolved references (unless overridden by the link editor
-option `\|\c
-.B
-\-Xlinker \-z \-Xlinker defs\c
-\&\|'). Only a few systems support
-this option.
-.TP
-.BI "\-Xlinker " "option"
-Pass \c
-.I option
-as an option to the linker. You can use this to
-supply system-specific linker options which GNU CC does not know how to
-recognize.
-.Sp
-If you want to pass an option that takes an argument, you must use
-`\|\c
-.B \-Xlinker\c
-\&\|' twice, once for the option and once for the argument.
-For example, to pass `\|\c
-.B
-\-assert definitions\c
-\&\|', you must write
-`\|\c
-.B
-\-Xlinker \-assert \-Xlinker definitions\c
-\&\|'. It does not work to write
-`\|\c
-.B
-\-Xlinker "\-assert definitions"\c
-\&\|', because this passes the entire
-string as a single argument, which is not what the linker expects.
-.TP
-.BI "\-Wl," "option"
-Pass \c
-.I option\c
-\& as an option to the linker. If \c
-.I option\c
-\& contains
-commas, it is split into multiple options at the commas.
-.TP
-.BI "\-u " "symbol"
-Pretend the symbol
-.I symbol
-is undefined, to force linking of
-library modules to define it. You can use `\|\c
-.B \-u\c
-\&\|' multiple times with
-different symbols to force loading of additional library modules.
-.SH DIRECTORY OPTIONS
-These options specify directories to search for header files, for
-libraries and for parts of the compiler:
-.TP
-.BI "\-I" "dir"
-Append directory \c
-.I dir\c
-\& to the list of directories searched for include files.
-.TP
-.B \-I\-
-Any directories you specify with `\|\c
-.B \-I\c
-\&\|' options before the `\|\c
-.B \-I\-\c
-\&\|'
-option are searched only for the case of `\|\c
-.B
-#include "\c
-.I file\c
-.B
-\&"\c
-\&\|';
-they are not searched for `\|\c
-.B #include <\c
-.I file\c
-\&>\c
-\&\|'.
-.Sp
-If additional directories are specified with `\|\c
-.B \-I\c
-\&\|' options after
-the `\|\c
-.B \-I\-\c
-\&\|', these directories are searched for all `\|\c
-.B #include\c
-\&\|'
-directives. (Ordinarily \c
-.I all\c
-\& `\|\c
-.B \-I\c
-\&\|' directories are used
-this way.)
-.Sp
-In addition, the `\|\c
-.B \-I\-\c
-\&\|' option inhibits the use of the current
-directory (where the current input file came from) as the first search
-directory for `\|\c
-.B
-#include "\c
-.I file\c
-.B
-\&"\c
-\&\|'. There is no way to
-override this effect of `\|\c
-.B \-I\-\c
-\&\|'. With `\|\c
-.B \-I.\c
-\&\|' you can specify
-searching the directory which was current when the compiler was
-invoked. That is not exactly the same as what the preprocessor does
-by default, but it is often satisfactory.
-.Sp
-`\|\c
-.B \-I\-\c
-\&\|' does not inhibit the use of the standard system directories
-for header files. Thus, `\|\c
-.B \-I\-\c
-\&\|' and `\|\c
-.B \-nostdinc\c
-\&\|' are
-independent.
-.TP
-.BI "\-L" "dir"
-Add directory \c
-.I dir\c
-\& to the list of directories to be searched
-for `\|\c
-.B \-l\c
-\&\|'.
-.TP
-.BI "\-B" "prefix"
-This option specifies where to find the executables, libraries and
-data files of the compiler itself.
-.Sp
-The compiler driver program runs one or more of the subprograms
-`\|\c
-.B cpp\c
-\&\|', `\|\c
-.B cc1\c
-\&\|' (or, for C++, `\|\c
-.B cc1plus\c
-\&\|'), `\|\c
-.B as\c
-\&\|' and `\|\c
-.B ld\c
-\&\|'. It tries
-.I prefix\c
-\& as a prefix for each program it tries to run, both with and
-without `\|\c
-.I machine\c
-.B /\c
-.I version\c
-.B /\c
-\&\|'.
-.Sp
-For each subprogram to be run, the compiler driver first tries the
-`\|\c
-.B \-B\c
-\&\|' prefix, if any. If that name is not found, or if `\|\c
-.B \-B\c
-\&\|'
-was not specified, the driver tries two standard prefixes, which are
-`\|\c
-.B /usr/lib/gcc/\c
-\&\|' and `\|\c
-.B /usr/local/lib/gcc-lib/\c
-\&\|'. If neither of
-those results in a file name that is found, the compiler driver
-searches for the unmodified program
-name, using the directories specified in your
-`\|\c
-.B PATH\c
-\&\|' environment variable.
-.Sp
-The run-time support file `\|\c
-.B libgcc.a\c
-\&\|' is also searched for using the
-`\|\c
-.B \-B\c
-\&\|' prefix, if needed. If it is not found there, the two
-standard prefixes above are tried, and that is all. The file is left
-out of the link if it is not found by those means. Most of the time,
-on most machines, `\|\c
-.B libgcc.a\c
-\&\|' is not actually necessary.
-.Sp
-You can get a similar result from the environment variable
-.B GCC_EXEC_PREFIX\c
-\&; if it is defined, its value is used as a prefix
-in the same way. If both the `\|\c
-.B \-B\c
-\&\|' option and the
-.B GCC_EXEC_PREFIX\c
-\& variable are present, the `\|\c
-.B \-B\c
-\&\|' option is
-used first and the environment variable value second.
-.SH WARNING OPTIONS
-Warnings are diagnostic messages that report constructions which
-are not inherently erroneous but which are risky or suggest there
-may have been an error.
-.Sp
-These options control the amount and kinds of warnings produced by GNU
-CC:
-.TP
-.B \-fsyntax\-only
-Check the code for syntax errors, but don't emit any output.
-.TP
-.B \-w
-Inhibit all warning messages.
-.TP
-.B \-Wno\-import
-Inhibit warning messages about the use of
-.BR #import .
-.TP
-.B \-pedantic
-Issue all the warnings demanded by strict ANSI standard C; reject
-all programs that use forbidden extensions.
-.Sp
-Valid ANSI standard C programs should compile properly with or without
-this option (though a rare few will require `\|\c
-.B \-ansi\c
-\&\|'). However,
-without this option, certain GNU extensions and traditional C features
-are supported as well. With this option, they are rejected. There is
-no reason to \c
-.I use\c
-\& this option; it exists only to satisfy pedants.
-.Sp
-`\|\c
-.B \-pedantic\c
-\&\|' does not cause warning messages for use of the
-alternate keywords whose names begin and end with `\|\c
-.B _\|_\c
-\&\|'. Pedantic
-warnings are also disabled in the expression that follows
-.B _\|_extension_\|_\c
-\&. However, only system header files should use
-these escape routes; application programs should avoid them.
-.TP
-.B \-pedantic\-errors
-Like `\|\c
-.B \-pedantic\c
-\&\|', except that errors are produced rather than
-warnings.
-.TP
-.B \-W
-Print extra warning messages for these events:
-.TP
-\ \ \ \(bu
-A nonvolatile automatic variable might be changed by a call to
-.B longjmp\c
-\&. These warnings are possible only in
-optimizing compilation.
-.Sp
-The compiler sees only the calls to \c
-.B setjmp\c
-\&. It cannot know
-where \c
-.B longjmp\c
-\& will be called; in fact, a signal handler could
-call it at any point in the code. As a result, you may get a warning
-even when there is in fact no problem because \c
-.B longjmp\c
-\& cannot
-in fact be called at the place which would cause a problem.
-.TP
-\ \ \ \(bu
-A function can return either with or without a value. (Falling
-off the end of the function body is considered returning without
-a value.) For example, this function would evoke such a
-warning:
-.Sp
-.nf
-foo (a)
-{
- if (a > 0)
- return a;
-}
-.Sp
-.fi
-Spurious warnings can occur because GNU CC does not realize that
-certain functions (including \c
-.B abort\c
-\& and \c
-.B longjmp\c
-\&)
-will never return.
-.TP
-\ \ \ \(bu
-An expression-statement or the left-hand side of a comma expression
-contains no side effects.
-To suppress the warning, cast the unused expression to void.
-For example, an expression such as `\|\c
-.B x[i,j]\c
-\&\|' will cause a warning,
-but `\|\c
-.B x[(void)i,j]\c
-\&\|' will not.
-.TP
-\ \ \ \(bu
-An unsigned value is compared against zero with `\|\c
-.B >\c
-\&\|' or `\|\c
-.B <=\c
-\&\|'.
-.PP
-.TP
-.B \-Wimplicit-int
-Warn whenever a declaration does not specify a type.
-.TP
-.B \-Wimplicit-function-declaration
-Warn whenever a function is used before being declared.
-.TP
-.B \-Wimplicit
-Same as -Wimplicit-int and -Wimplicit-function-declaration.
-.TP
-.B \-Wmain
-Warn if the
-.B main
-function is declared or defined with a suspicious type.
-Typically, it is a function with external linkage, returning
-.B int\c
-\&, and
-taking zero or two arguments.
-
-.TP
-.B \-Wreturn\-type
-Warn whenever a function is defined with a return-type that defaults
-to \c
-.B int\c
-\&. Also warn about any \c
-.B return\c
-\& statement with no
-return-value in a function whose return-type is not \c
-.B void\c
-\&.
-.TP
-.B \-Wunused
-Warn whenever a local variable is unused aside from its declaration,
-whenever a function is declared static but never defined, and whenever
-a statement computes a result that is explicitly not used.
-.TP
-.B \-Wswitch
-Warn whenever a \c
-.B switch\c
-\& statement has an index of enumeral type
-and lacks a \c
-.B case\c
-\& for one or more of the named codes of that
-enumeration. (The presence of a \c
-.B default\c
-\& label prevents this
-warning.) \c
-.B case\c
-\& labels outside the enumeration range also
-provoke warnings when this option is used.
-.TP
-.B \-Wcomment
-Warn whenever a comment-start sequence `\|\c
-.B /\(**\c
-\&\|' appears in a comment.
-.TP
-.B \-Wtrigraphs
-Warn if any trigraphs are encountered (assuming they are enabled).
-.TP
-.B \-Wformat
-Check calls to \c
-.B printf\c
-\& and \c
-.B scanf\c
-\&, etc., to make sure that
-the arguments supplied have types appropriate to the format string
-specified.
-.TP
-.B \-Wchar\-subscripts
-Warn if an array subscript has type
-.BR char .
-This is a common cause of error, as programmers often forget that this
-type is signed on some machines.
-.TP
-.B \-Wuninitialized
-An automatic variable is used without first being initialized.
-.Sp
-These warnings are possible only in optimizing compilation,
-because they require data flow information that is computed only
-when optimizing. If you don't specify `\|\c
-.B \-O\c
-\&\|', you simply won't
-get these warnings.
-.Sp
-These warnings occur only for variables that are candidates for
-register allocation. Therefore, they do not occur for a variable that
-is declared \c
-.B volatile\c
-\&, or whose address is taken, or whose size
-is other than 1, 2, 4 or 8 bytes. Also, they do not occur for
-structures, unions or arrays, even when they are in registers.
-.Sp
-Note that there may be no warning about a variable that is used only
-to compute a value that itself is never used, because such
-computations may be deleted by data flow analysis before the warnings
-are printed.
-.Sp
-These warnings are made optional because GNU CC is not smart
-enough to see all the reasons why the code might be correct
-despite appearing to have an error. Here is one example of how
-this can happen:
-.Sp
-.nf
-{
- int x;
- switch (y)
- {
- case 1: x = 1;
- break;
- case 2: x = 4;
- break;
- case 3: x = 5;
- }
- foo (x);
-}
-.Sp
-.fi
-If the value of \c
-.B y\c
-\& is always 1, 2 or 3, then \c
-.B x\c
-\& is
-always initialized, but GNU CC doesn't know this. Here is
-another common case:
-.Sp
-.nf
-{
- int save_y;
- if (change_y) save_y = y, y = new_y;
- .\|.\|.
- if (change_y) y = save_y;
-}
-.Sp
-.fi
-This has no bug because \c
-.B save_y\c
-\& is used only if it is set.
-.Sp
-Some spurious warnings can be avoided if you declare as
-.B volatile\c
-\& all the functions you use that never return.
-.TP
-.B \-Wparentheses
-Warn if parentheses are omitted in certain contexts.
-.TP
-.B \-Wtemplate\-debugging
-When using templates in a C++ program, warn if debugging is not yet
-fully available (C++ only).
-.TP
-.B \-Wall
-All of the above `\|\c
-.B \-W\c
-\&\|' options combined. These are all the
-options which pertain to usage that we recommend avoiding and that we
-believe is easy to avoid, even in conjunction with macros.
-.PP
-The remaining `\|\c
-.B \-W.\|.\|.\c
-\&\|' options are not implied by `\|\c
-.B \-Wall\c
-\&\|'
-because they warn about constructions that we consider reasonable to
-use, on occasion, in clean programs.
-.TP
-.B \-Wtraditional
-Warn about certain constructs that behave differently in traditional and
-ANSI C.
-.TP
-\ \ \ \(bu
-Macro arguments occurring within string constants in the macro body.
-These would substitute the argument in traditional C, but are part of
-the constant in ANSI C.
-.TP
-\ \ \ \(bu
-A function declared external in one block and then used after the end of
-the block.
-.TP
-\ \ \ \(bu
-A \c
-.B switch\c
-\& statement has an operand of type \c
-.B long\c
-\&.
-.PP
-.TP
-.B \-Wshadow
-Warn whenever a local variable shadows another local variable.
-.TP
-.BI "\-Wid\-clash\-" "len"
-Warn whenever two distinct identifiers match in the first \c
-.I len
-characters. This may help you prepare a program that will compile
-with certain obsolete, brain-damaged compilers.
-.TP
-.B \-Wpointer\-arith
-Warn about anything that depends on the \*(lqsize of\*(rq a function type or
-of \c
-.B void\c
-\&. GNU C assigns these types a size of 1, for
-convenience in calculations with \c
-.B void \(**\c
-\& pointers and pointers
-to functions.
-.TP
-.B \-Wcast\-qual
-Warn whenever a pointer is cast so as to remove a type qualifier from
-the target type. For example, warn if a \c
-.B const char \(**\c
-\& is cast
-to an ordinary \c
-.B char \(**\c
-\&.
-.TP
-.B \-Wcast\-align
-Warn whenever a pointer is cast such that the required alignment of the
-target is increased. For example, warn if a \c
-.B char \(**\c
-\& is cast to
-an \c
-.B int \(**\c
-\& on machines where integers can only be accessed at
-two- or four-byte boundaries.
-.TP
-.B \-Wwrite\-strings
-Give string constants the type \c
-.B const char[\c
-.I length\c
-.B ]\c
-\& so that
-copying the address of one into a non-\c
-.B const\c
-\& \c
-.B char \(**
-pointer will get a warning. These warnings will help you find at
-compile time code that can try to write into a string constant, but
-only if you have been very careful about using \c
-.B const\c
-\& in
-declarations and prototypes. Otherwise, it will just be a nuisance;
-this is why we did not make `\|\c
-.B \-Wall\c
-\&\|' request these warnings.
-.TP
-.B \-Wconversion
-Warn if a prototype causes a type conversion that is different from what
-would happen to the same argument in the absence of a prototype. This
-includes conversions of fixed point to floating and vice versa, and
-conversions changing the width or signedness of a fixed point argument
-except when the same as the default promotion.
-.TP
-.B \-Waggregate\-return
-Warn if any functions that return structures or unions are defined or
-called. (In languages where you can return an array, this also elicits
-a warning.)
-.TP
-.B \-Wstrict\-prototypes
-Warn if a function is declared or defined without specifying the
-argument types. (An old-style function definition is permitted without
-a warning if preceded by a declaration which specifies the argument
-types.)
-.TP
-.B \-Wmissing\-prototypes
-Warn if a global function is defined without a previous prototype
-declaration. This warning is issued even if the definition itself
-provides a prototype. The aim is to detect global functions that fail
-to be declared in header files.
-.TP
-.B \-Wmissing\-declarations
-Warn if a global function is defined without a previous declaration.
-Do so even if the definition itself provides a prototype.
-Use this option to detect global functions that are not declared in
-header files.
-.TP
-.B \-Wredundant-decls
-Warn if anything is declared more than once in the same scope, even in
-cases where multiple declaration is valid and changes nothing.
-.TP
-.B \-Wnested-externs
-Warn if an \c
-.B extern\c
-\& declaration is encountered within an function.
-.TP
-.B \-Wenum\-clash
-Warn about conversion between different enumeration types (C++ only).
-.TP
-.B \-Wlong-long
-Warn if
-.B long long \c
-type is used. This is default. To inhibit
-the warning messages, use flag `\|\c
-.B \-Wno\-long\-long\c
-\&\|'. Flags `\|\c
-.B \-W\-long\-long\c
-\&\|' and `\|\c
-.B \-Wno\-long\-long\c
-\&\|' are taken into account only when flag `\|\c
-.B \-pedantic\c
-\&\|' is used.
-.TP
-.B \-Woverloaded\-virtual
-(C++ only.)
-In a derived class, the definitions of virtual functions must match
-the type signature of a virtual function declared in the base class.
-Use this option to request warnings when a derived class declares a
-function that may be an erroneous attempt to define a virtual
-function: that is, warn when a function with the same name as a
-virtual function in the base class, but with a type signature that
-doesn't match any virtual functions from the base class.
-.TP
-.B \-Winline
-Warn if a function can not be inlined, and either it was declared as inline,
-or else the
-.B \-finline\-functions
-option was given.
-.TP
-.B \-Werror
-Treat warnings as errors; abort compilation after any warning.
-.SH DEBUGGING OPTIONS
-GNU CC has various special options that are used for debugging
-either your program or GCC:
-.TP
-.B \-g
-Produce debugging information in the operating system's native format
-(stabs, COFF, XCOFF, or DWARF). GDB can work with this debugging
-information.
-.Sp
-On most systems that use stabs format, `\|\c
-.B \-g\c
-\&\|' enables use of extra
-debugging information that only GDB can use; this extra information
-makes debugging work better in GDB but will probably make other debuggers
-crash or
-refuse to read the program. If you want to control for certain whether
-to generate the extra information, use `\|\c
-.B \-gstabs+\c
-\&\|', `\|\c
-.B \-gstabs\c
-\&\|',
-`\|\c
-.B \-gxcoff+\c
-\&\|', `\|\c
-.B \-gxcoff\c
-\&\|', `\|\c
-.B \-gdwarf+\c
-\&\|', or `\|\c
-.B \-gdwarf\c
-\&\|'
-(see below).
-.Sp
-Unlike most other C compilers, GNU CC allows you to use `\|\c
-.B \-g\c
-\&\|' with
-`\|\c
-.B \-O\c
-\&\|'. The shortcuts taken by optimized code may occasionally
-produce surprising results: some variables you declared may not exist
-at all; flow of control may briefly move where you did not expect it;
-some statements may not be executed because they compute constant
-results or their values were already at hand; some statements may
-execute in different places because they were moved out of loops.
-.Sp
-Nevertheless it proves possible to debug optimized output. This makes
-it reasonable to use the optimizer for programs that might have bugs.
-.PP
-The following options are useful when GNU CC is generated with the
-capability for more than one debugging format.
-.TP
-.B \-ggdb
-Produce debugging information in the native format (if that is supported),
-including GDB extensions if at all possible.
-.TP
-.B \-gstabs
-Produce debugging information in stabs format (if that is supported),
-without GDB extensions. This is the format used by DBX on most BSD
-systems.
-.TP
-.B \-gstabs+
-Produce debugging information in stabs format (if that is supported),
-using GNU extensions understood only by the GNU debugger (GDB). The
-use of these extensions is likely to make other debuggers crash or
-refuse to read the program.
-.TP
-.B \-gcoff
-Produce debugging information in COFF format (if that is supported).
-This is the format used by SDB on most System V systems prior to
-System V Release 4.
-.TP
-.B \-gxcoff
-Produce debugging information in XCOFF format (if that is supported).
-This is the format used by the DBX debugger on IBM RS/6000 systems.
-.TP
-.B \-gxcoff+
-Produce debugging information in XCOFF format (if that is supported),
-using GNU extensions understood only by the GNU debugger (GDB). The
-use of these extensions is likely to make other debuggers crash or
-refuse to read the program.
-.TP
-.B \-gdwarf
-Produce debugging information in DWARF format (if that is supported).
-This is the format used by SDB on most System V Release 4 systems.
-.TP
-.B \-gdwarf+
-Produce debugging information in DWARF format (if that is supported),
-using GNU extensions understood only by the GNU debugger (GDB). The
-use of these extensions is likely to make other debuggers crash or
-refuse to read the program.
-.PP
-.BI "\-g" "level"
-.br
-.BI "\-ggdb" "level"
-.br
-.BI "\-gstabs" "level"
-.br
-.BI "\-gcoff" "level"
-.BI "\-gxcoff" "level"
-.TP
-.BI "\-gdwarf" "level"
-Request debugging information and also use \c
-.I level\c
-\& to specify how
-much information. The default level is 2.
-.Sp
-Level 1 produces minimal information, enough for making backtraces in
-parts of the program that you don't plan to debug. This includes
-descriptions of functions and external variables, but no information
-about local variables and no line numbers.
-.Sp
-Level 3 includes extra information, such as all the macro definitions
-present in the program. Some debuggers support macro expansion when
-you use `\|\c
-.B \-g3\c
-\&\|'.
-.TP
-.B \-p
-Generate extra code to write profile information suitable for the
-analysis program \c
-.B prof\c
-\&.
-.TP
-.B \-pg
-Generate extra code to write profile information suitable for the
-analysis program \c
-.B gprof\c
-\&.
-.TP
-.B \-a
-Generate extra code to write profile information for basic blocks,
-which will record the number of times each basic block is executed.
-This data could be analyzed by a program like \c
-.B tcov\c
-\&. Note,
-however, that the format of the data is not what \c
-.B tcov\c
-\& expects.
-Eventually GNU \c
-.B gprof\c
-\& should be extended to process this data.
-.TP
-.B \-ax
-Generate extra code to read basic block profiling parameters from
-file `bb.in' and write profiling results to file `bb.out'.
-`bb.in' contains a list of functions. Whenever a function on the list
-is entered, profiling is turned on. When the outmost function is left,
-profiling is turned off. If a function name is prefixed with `-'
-the function is excluded from profiling. If a function name is not
-unique it can be disambiguated by writing
-`/path/filename.d:functionname'. `bb.out' will list some available
-filenames.
-Four function names have a special meaning:
-`__bb_jumps__' will cause jump frequencies to be written to `bb.out'.
-`__bb_trace__' will cause the sequence of basic blocks to be piped
-into `gzip' and written to file `bbtrace.gz'.
-`__bb_hidecall__' will cause call instructions to be excluded from
-the trace.
-`__bb_showret__' will cause return instructions to be included in
-the trace.
-.TP
-.BI "\-d" "letters"
-Says to make debugging dumps during compilation at times specified by
-.I letters\c
-\&. This is used for debugging the compiler. The file names
-for most of the dumps are made by appending a word to the source file
-name (e.g. `\|\c
-.B foo.c.rtl\c
-\&\|' or `\|\c
-.B foo.c.jump\c
-\&\|').
-.TP
-.B \-dM
-Dump all macro definitions, at the end of preprocessing, and write no
-output.
-.TP
-.B \-dN
-Dump all macro names, at the end of preprocessing.
-.TP
-.B \-dD
-Dump all macro definitions, at the end of preprocessing, in addition to
-normal output.
-.TP
-.B \-dy
-Dump debugging information during parsing, to standard error.
-.TP
-.B \-dr
-Dump after RTL generation, to `\|\c
-.I file\c
-.B \&.rtl\c
-\&\|'.
-.TP
-.B \-dx
-Just generate RTL for a function instead of compiling it. Usually used
-with `\|\c
-.B r\c
-\&\|'.
-.TP
-.B \-dj
-Dump after first jump optimization, to `\|\c
-.I file\c
-.B \&.jump\c
-\&\|'.
-.TP
-.B \-ds
-Dump after CSE (including the jump optimization that sometimes
-follows CSE), to `\|\c
-.I file\c
-.B \&.cse\c
-\&\|'.
-.TP
-.B \-dL
-Dump after loop optimization, to `\|\c
-.I file\c
-.B \&.loop\c
-\&\|'.
-.TP
-.B \-dt
-Dump after the second CSE pass (including the jump optimization that
-sometimes follows CSE), to `\|\c
-.I file\c
-.B \&.cse2\c
-\&\|'.
-.TP
-.B \-df
-Dump after flow analysis, to `\|\c
-.I file\c
-.B \&.flow\c
-\&\|'.
-.TP
-.B \-dc
-Dump after instruction combination, to `\|\c
-.I file\c
-.B \&.combine\c
-\&\|'.
-.TP
-.B \-dS
-Dump after the first instruction scheduling pass, to
-`\|\c
-.I file\c
-.B \&.sched\c
-\&\|'.
-.TP
-.B \-dl
-Dump after local register allocation, to `\|\c
-.I file\c
-.B \&.lreg\c
-\&\|'.
-.TP
-.B \-dg
-Dump after global register allocation, to `\|\c
-.I file\c
-.B \&.greg\c
-\&\|'.
-.TP
-.B \-dR
-Dump after the second instruction scheduling pass, to
-`\|\c
-.I file\c
-.B \&.sched2\c
-\&\|'.
-.TP
-.B \-dJ
-Dump after last jump optimization, to `\|\c
-.I file\c
-.B \&.jump2\c
-\&\|'.
-.TP
-.B \-dd
-Dump after delayed branch scheduling, to `\|\c
-.I file\c
-.B \&.dbr\c
-\&\|'.
-.TP
-.B \-dk
-Dump after conversion from registers to stack, to `\|\c
-.I file\c
-.B \&.stack\c
-\&\|'.
-.TP
-.B \-da
-Produce all the dumps listed above.
-.TP
-.B \-dm
-Print statistics on memory usage, at the end of the run, to
-standard error.
-.TP
-.B \-dp
-Annotate the assembler output with a comment indicating which
-pattern and alternative was used.
-.TP
-.B \-fpretend\-float
-When running a cross-compiler, pretend that the target machine uses the
-same floating point format as the host machine. This causes incorrect
-output of the actual floating constants, but the actual instruction
-sequence will probably be the same as GNU CC would make when running on
-the target machine.
-.TP
-.B \-save\-temps
-Store the usual \*(lqtemporary\*(rq intermediate files permanently; place them
-in the current directory and name them based on the source file. Thus,
-compiling `\|\c
-.B foo.c\c
-\&\|' with `\|\c
-.B \-c \-save\-temps\c
-\&\|' would produce files
-`\|\c
-.B foo.cpp\c
-\&\|' and `\|\c
-.B foo.s\c
-\&\|', as well as `\|\c
-.B foo.o\c
-\&\|'.
-.TP
-.BI "\-print\-file\-name=" "library"
-Print the full absolute name of the library file \|\c
-.nh
-.I library
-.hy
-\&\| that
-would be used when linking\(em\&and do not do anything else. With this
-option, GNU CC does not compile or link anything; it just prints the
-file name.
-.TP
-.B \-print\-libgcc\-file\-name
-Same as `\|\c
-.B \-print\-file\-name=libgcc.a\c
-\&\|'.
-.TP
-.BI "\-print\-prog\-name=" "program"
-Like `\|\c
-.B \-print\-file\-name\c
-\&\|', but searches for a program such as `\|\c
-cpp\c
-\&\|'.
-.SH OPTIMIZATION OPTIONS
-These options control various sorts of optimizations:
-.TP
-.B \-O
-.TP
-.B \-O1
-Optimize. Optimizing compilation takes somewhat more time, and a lot
-more memory for a large function.
-.Sp
-Without `\|\c
-.B \-O\c
-\&\|', the compiler's goal is to reduce the cost of
-compilation and to make debugging produce the expected results.
-Statements are independent: if you stop the program with a breakpoint
-between statements, you can then assign a new value to any variable or
-change the program counter to any other statement in the function and
-get exactly the results you would expect from the source code.
-.Sp
-Without `\|\c
-.B \-O\c
-\&\|', only variables declared \c
-.B register\c
-\& are
-allocated in registers. The resulting compiled code is a little worse
-than produced by PCC without `\|\c
-.B \-O\c
-\&\|'.
-.Sp
-With `\|\c
-.B \-O\c
-\&\|', the compiler tries to reduce code size and execution
-time.
-.Sp
-When you specify `\|\c
-.B \-O\c
-\&\|', the two options `\|\c
-.B \-fthread\-jumps\c
-\&\|' and `\|\c
-.B \-fdefer\-pop\c
-\&\|' are turned on. On machines that have delay slots, the `\|\c
-.B \-fdelayed\-branch\c
-\&\|' option is turned on. For those machines that can support debugging even
-without a frame pointer, the `\|\c
-.B \-fomit\-frame\-pointer\c
-\&\|' option is turned on. On some machines other flags may also be turned on.
-.TP
-.B \-O2
-Optimize even more. Nearly all supported optimizations that do not
-involve a space-speed tradeoff are performed. Loop unrolling and function
-inlining are not done, for example. As compared to
-.B \-O\c
-\&,
-this option increases both compilation time and the performance of the
-generated code.
-.TP
-.B \-O3
-Optimize yet more. This turns on everything
-.B \-O2
-does, along with also turning on
-.B \-finline\-functions.
-.TP
-.B \-O0
-Do not optimize.
-.Sp
-If you use multiple
-.B \-O
-options, with or without level numbers, the last such option is the
-one that is effective.
-.PP
-Options of the form `\|\c
-.B \-f\c
-.I flag\c
-\&\c
-\&\|' specify machine-independent
-flags. Most flags have both positive and negative forms; the negative
-form of `\|\c
-.B \-ffoo\c
-\&\|' would be `\|\c
-.B \-fno\-foo\c
-\&\|'. The following list shows
-only one form\(em\&the one which is not the default.
-You can figure out the other form by either removing `\|\c
-.B no\-\c
-\&\|' or
-adding it.
-.TP
-.B \-ffloat\-store
-Do not store floating point variables in registers. This
-prevents undesirable excess precision on machines such as the
-68000 where the floating registers (of the 68881) keep more
-precision than a \c
-.B double\c
-\& is supposed to have.
-.Sp
-For most programs, the excess precision does only good, but a few
-programs rely on the precise definition of IEEE floating point.
-Use `\|\c
-.B \-ffloat\-store\c
-\&\|' for such programs.
-.TP
-.B \-fmemoize\-lookups
-.TP
-.B \-fsave\-memoized
-Use heuristics to compile faster (C++ only). These heuristics are not
-enabled by default, since they are only effective for certain input
-files. Other input files compile more slowly.
-.Sp
-The first time the compiler must build a call to a member function (or
-reference to a data member), it must (1) determine whether the class
-implements member functions of that name; (2) resolve which member
-function to call (which involves figuring out what sorts of type
-conversions need to be made); and (3) check the visibility of the member
-function to the caller. All of this adds up to slower compilation.
-Normally, the second time a call is made to that member function (or
-reference to that data member), it must go through the same lengthy
-process again. This means that code like this
-.Sp
-\& cout << "This " << p << " has " << n << " legs.\en";
-.Sp
-makes six passes through all three steps. By using a software cache,
-a \*(lqhit\*(rq significantly reduces this cost. Unfortunately, using the
-cache introduces another layer of mechanisms which must be implemented,
-and so incurs its own overhead. `\|\c
-.B \-fmemoize\-lookups\c
-\&\|' enables
-the software cache.
-.Sp
-Because access privileges (visibility) to members and member functions
-may differ from one function context to the next,
-.B g++
-may need to flush the cache. With the `\|\c
-.B \-fmemoize\-lookups\c
-\&\|' flag, the cache is flushed after every
-function that is compiled. The `\|\c
-\-fsave\-memoized\c
-\&\|' flag enables the same software cache, but when the compiler
-determines that the context of the last function compiled would yield
-the same access privileges of the next function to compile, it
-preserves the cache.
-This is most helpful when defining many member functions for the same
-class: with the exception of member functions which are friends of
-other classes, each member function has exactly the same access
-privileges as every other, and the cache need not be flushed.
-.TP
-.B \-fno\-default\-inline
-Don't make member functions inline by default merely because they are
-defined inside the class scope (C++ only).
-.TP
-.B \-fno\-defer\-pop
-Always pop the arguments to each function call as soon as that
-function returns. For machines which must pop arguments after a
-function call, the compiler normally lets arguments accumulate on the
-stack for several function calls and pops them all at once.
-.TP
-.B \-fforce\-mem
-Force memory operands to be copied into registers before doing
-arithmetic on them. This may produce better code by making all
-memory references potential common subexpressions. When they are
-not common subexpressions, instruction combination should
-eliminate the separate register-load. I am interested in hearing
-about the difference this makes.
-.TP
-.B \-fforce\-addr
-Force memory address constants to be copied into registers before
-doing arithmetic on them. This may produce better code just as
-`\|\c
-.B \-fforce\-mem\c
-\&\|' may. I am interested in hearing about the
-difference this makes.
-.TP
-.B \-fomit\-frame\-pointer
-Don't keep the frame pointer in a register for functions that
-don't need one. This avoids the instructions to save, set up and
-restore frame pointers; it also makes an extra register available
-in many functions. \c
-.I It also makes debugging impossible on most machines\c
-\&.
-.Sp
-On some machines, such as the Vax, this flag has no effect, because
-the standard calling sequence automatically handles the frame pointer
-and nothing is saved by pretending it doesn't exist. The
-machine-description macro \c
-.B FRAME_POINTER_REQUIRED\c
-\& controls
-whether a target machine supports this flag.
-.TP
-.B \-finline\-functions
-Integrate all simple functions into their callers. The compiler
-heuristically decides which functions are simple enough to be worth
-integrating in this way.
-.Sp
-If all calls to a given function are integrated, and the function is
-declared \c
-.B static\c
-\&, then GCC normally does not output the function as
-assembler code in its own right.
-.TP
-.B \-fcaller\-saves
-Enable values to be allocated in registers that will be clobbered by
-function calls, by emitting extra instructions to save and restore the
-registers around such calls. Such allocation is done only when it
-seems to result in better code than would otherwise be produced.
-.Sp
-This option is enabled by default on certain machines, usually those
-which have no call-preserved registers to use instead.
-.TP
-.B \-fkeep\-inline\-functions
-Even if all calls to a given function are integrated, and the function
-is declared \c
-.B static\c
-\&, nevertheless output a separate run-time
-callable version of the function.
-.TP
-.B \-fno\-function\-cse
-Do not put function addresses in registers; make each instruction that
-calls a constant function contain the function's address explicitly.
-.Sp
-This option results in less efficient code, but some strange hacks
-that alter the assembler output may be confused by the optimizations
-performed when this option is not used.
-.TP
-.B \-fno\-peephole
-Disable any machine-specific peephole optimizations.
-.TP
-.B \-ffast-math
-This option allows GCC to violate some ANSI or IEEE rules/specifications
-in the interest of optimizing code for speed. For example, it allows
-the compiler to assume arguments to the \c
-.B sqrt\c
-\& function are
-non-negative numbers.
-.Sp
-This option should never be turned on by any `\|\c
-.B \-O\c
-\&\|' option since
-it can result in incorrect output for programs which depend on
-an exact implementation of IEEE or ANSI rules/specifications for
-math functions.
-.PP
-The following options control specific optimizations. The `\|\c
-.B \-O2\c
-\&\|'
-option turns on all of these optimizations except `\|\c
-.B \-funroll\-loops\c
-\&\|'
-and `\|\c
-.B \-funroll\-all\-loops\c
-\&\|'.
-.PP
-The `\|\c
-.B \-O\c
-\&\|' option usually turns on
-the `\|\c
-.B \-fthread\-jumps\c
-\&\|' and `\|\c
-.B \-fdelayed\-branch\c
-\&\|' options, but
-specific machines may change the default optimizations.
-.PP
-You can use the following flags in the rare cases when \*(lqfine-tuning\*(rq
-of optimizations to be performed is desired.
-.TP
-.B \-fstrength\-reduce
-Perform the optimizations of loop strength reduction and
-elimination of iteration variables.
-.TP
-.B \-fthread\-jumps
-Perform optimizations where we check to see if a jump branches to a
-location where another comparison subsumed by the first is found. If
-so, the first branch is redirected to either the destination of the
-second branch or a point immediately following it, depending on whether
-the condition is known to be true or false.
-.TP
-.B \-funroll\-loops
-Perform the optimization of loop unrolling. This is only done for loops
-whose number of iterations can be determined at compile time or run time.
-.TP
-.B \-funroll\-all\-loops
-Perform the optimization of loop unrolling. This is done for all loops.
-This usually makes programs run more slowly.
-.TP
-.B \-fcse\-follow\-jumps
-In common subexpression elimination, scan through jump instructions
-when the target of the jump is not reached by any other path. For
-example, when CSE encounters an \c
-.B if\c
-\& statement with an
-.B else\c
-\& clause, CSE will follow the jump when the condition
-tested is false.
-.TP
-.B \-fcse\-skip\-blocks
-This is similar to `\|\c
-.B \-fcse\-follow\-jumps\c
-\&\|', but causes CSE to
-follow jumps which conditionally skip over blocks. When CSE
-encounters a simple \c
-.B if\c
-\& statement with no else clause,
-`\|\c
-.B \-fcse\-skip\-blocks\c
-\&\|' causes CSE to follow the jump around the
-body of the \c
-.B if\c
-\&.
-.TP
-.B \-frerun\-cse\-after\-loop
-Re-run common subexpression elimination after loop optimizations has been
-performed.
-.TP
-.B \-felide\-constructors
-Elide constructors when this seems plausible (C++ only). With this
-flag, GNU C++ initializes \c
-.B y\c
-\& directly from the call to \c
-.B foo
-without going through a temporary in the following code:
-.Sp
-A foo ();
-A y = foo ();
-.Sp
-Without this option, GNU C++ first initializes \c
-.B y\c
-\& by calling the
-appropriate constructor for type \c
-.B A\c
-\&; then assigns the result of
-.B foo\c
-\& to a temporary; and, finally, replaces the initial value of
-`\|\c
-.B y\c
-\&\|' with the temporary.
-.Sp
-The default behavior (`\|\c
-.B \-fno\-elide\-constructors\c
-\&\|') is specified by
-the draft ANSI C++ standard. If your program's constructors have side
-effects, using `\|\c
-.B \-felide-constructors\c
-\&\|' can make your program act
-differently, since some constructor calls may be omitted.
-.TP
-.B \-fexpensive\-optimizations
-Perform a number of minor optimizations that are relatively expensive.
-.TP
-.B \-fdelayed\-branch
-If supported for the target machine, attempt to reorder instructions
-to exploit instruction slots available after delayed branch
-instructions.
-.TP
-.B \-fschedule\-insns
-If supported for the target machine, attempt to reorder instructions to
-eliminate execution stalls due to required data being unavailable. This
-helps machines that have slow floating point or memory load instructions
-by allowing other instructions to be issued until the result of the load
-or floating point instruction is required.
-.TP
-.B \-fschedule\-insns2
-Similar to `\|\c
-.B \-fschedule\-insns\c
-\&\|', but requests an additional pass of
-instruction scheduling after register allocation has been done. This is
-especially useful on machines with a relatively small number of
-registers and where memory load instructions take more than one cycle.
-.SH TARGET OPTIONS
-By default, GNU CC compiles code for the same type of machine that you
-are using. However, it can also be installed as a cross-compiler, to
-compile for some other type of machine. In fact, several different
-configurations of GNU CC, for different target machines, can be
-installed side by side. Then you specify which one to use with the
-`\|\c
-.B \-b\c
-\&\|' option.
-.PP
-In addition, older and newer versions of GNU CC can be installed side
-by side. One of them (probably the newest) will be the default, but
-you may sometimes wish to use another.
-.TP
-.BI "\-b " "machine"
-The argument \c
-.I machine\c
-\& specifies the target machine for compilation.
-This is useful when you have installed GNU CC as a cross-compiler.
-.Sp
-The value to use for \c
-.I machine\c
-\& is the same as was specified as the
-machine type when configuring GNU CC as a cross-compiler. For
-example, if a cross-compiler was configured with `\|\c
-.B configure
-i386v\c
-\&\|', meaning to compile for an 80386 running System V, then you
-would specify `\|\c
-.B \-b i386v\c
-\&\|' to run that cross compiler.
-.Sp
-When you do not specify `\|\c
-.B \-b\c
-\&\|', it normally means to compile for
-the same type of machine that you are using.
-.TP
-.BI "\-V " "version"
-The argument \c
-.I version\c
-\& specifies which version of GNU CC to run.
-This is useful when multiple versions are installed. For example,
-.I version\c
-\& might be `\|\c
-.B 2.0\c
-\&\|', meaning to run GNU CC version 2.0.
-.Sp
-The default version, when you do not specify `\|\c
-.B \-V\c
-\&\|', is controlled
-by the way GNU CC is installed. Normally, it will be a version that
-is recommended for general use.
-.SH MACHINE DEPENDENT OPTIONS
-Each of the target machine types can have its own special options,
-starting with `\|\c
-.B \-m\c
-\&\|', to choose among various hardware models or
-configurations\(em\&for example, 68010 vs 68020, floating coprocessor or
-none. A single installed version of the compiler can compile for any
-model or configuration, according to the options specified.
-.PP
-Some configurations of the compiler also support additional special
-options, usually for command-line compatibility with other compilers on
-the same platform.
-.PP
-These are the `\|\c
-.B \-m\c
-\&\|' options defined for the 68000 series:
-.TP
-.B \-m68000
-.TP
-.B \-mc68000
-Generate output for a 68000. This is the default when the compiler is
-configured for 68000-based systems.
-.TP
-.B \-m68020
-.TP
-.B \-mc68020
-Generate output for a 68020 (rather than a 68000). This is the
-default when the compiler is configured for 68020-based systems.
-.TP
-.B \-m68881
-Generate output containing 68881 instructions for floating point.
-This is the default for most 68020-based systems unless
-.B \-nfp
-was specified when the compiler was configured.
-.TP
-.B \-m68030
-Generate output for a 68030. This is the default when the compiler is
-configured for 68030-based systems.
-.TP
-.B \-m68040
-Generate output for a 68040. This is the default when the compiler is
-configured for 68040-based systems.
-.TP
-.B \-m68020\-40
-Generate output for a 68040, without using any of the new instructions.
-This results in code which can run relatively efficiently on either a
-68020/68881 or a 68030 or a 68040.
-.TP
-.B \-mfpa
-Generate output containing Sun FPA instructions for floating point.
-.TP
-.B \-msoft\-float
-Generate output containing library calls for floating point.
-.I
-WARNING:
-the requisite libraries are not part of GNU CC. Normally the
-facilities of the machine's usual C compiler are used, but this can't
-be done directly in cross-compilation. You must make your own
-arrangements to provide suitable library functions for cross-compilation.
-.TP
-.B \-mshort
-Consider type \c
-.B int\c
-\& to be 16 bits wide, like \c
-.B short int\c
-\&.
-.TP
-.B \-mnobitfield
-Do not use the bit-field instructions. `\|\c
-.B \-m68000\c
-\&\|' implies
-`\|\c
-.B \-mnobitfield\c
-\&\|'.
-.TP
-.B \-mbitfield
-Do use the bit-field instructions. `\|\c
-.B \-m68020\c
-\&\|' implies
-`\|\c
-.B \-mbitfield\c
-\&\|'. This is the default if you use the unmodified
-sources.
-.TP
-.B \-mrtd
-Use a different function-calling convention, in which functions
-that take a fixed number of arguments return with the \c
-.B rtd
-instruction, which pops their arguments while returning. This
-saves one instruction in the caller since there is no need to pop
-the arguments there.
-.Sp
-This calling convention is incompatible with the one normally
-used on Unix, so you cannot use it if you need to call libraries
-compiled with the Unix compiler.
-.Sp
-Also, you must provide function prototypes for all functions that
-take variable numbers of arguments (including \c
-.B printf\c
-\&);
-otherwise incorrect code will be generated for calls to those
-functions.
-.Sp
-In addition, seriously incorrect code will result if you call a
-function with too many arguments. (Normally, extra arguments are
-harmlessly ignored.)
-.Sp
-The \c
-.B rtd\c
-\& instruction is supported by the 68010 and 68020
-processors, but not by the 68000.
-.PP
-These `\|\c
-.B \-m\c
-\&\|' options are defined for the Vax:
-.TP
-.B \-munix
-Do not output certain jump instructions (\c
-.B aobleq\c
-\& and so on)
-that the Unix assembler for the Vax cannot handle across long
-ranges.
-.TP
-.B \-mgnu
-Do output those jump instructions, on the assumption that you
-will assemble with the GNU assembler.
-.TP
-.B \-mg
-Output code for g-format floating point numbers instead of d-format.
-.PP
-These `\|\c
-.B \-m\c
-\&\|' switches are supported on the SPARC:
-.PP
-.B \-mfpu
-.TP
-.B \-mhard\-float
-Generate output containing floating point instructions. This is the
-default.
-.PP
-.B \-mno\-fpu
-.TP
-.B \-msoft\-float
-Generate output containing library calls for floating point.
-.I Warning:
-there is no GNU floating-point library for SPARC.
-Normally the facilities of the machine's usual C compiler are used, but
-this cannot be done directly in cross-compilation. You must make your
-own arrangements to provide suitable library functions for
-cross-compilation.
-.Sp
-.B \-msoft\-float
-changes the calling convention in the output file;
-therefore, it is only useful if you compile
-.I all
-of a program with this option.
-.PP
-.B \-mno\-epilogue
-.TP
-.B \-mepilogue
-With
-.B \-mepilogue
-(the default), the compiler always emits code for
-function exit at the end of each function. Any function exit in
-the middle of the function (such as a return statement in C) will
-generate a jump to the exit code at the end of the function.
-.Sp
-With
-.BR \-mno\-epilogue ,
-the compiler tries to emit exit code inline at every function exit.
-.PP
-.B \-mno\-v8
-.TP
-.B \-mv8
-.TP
-.B \-msparclite
-These three options select variations on the SPARC architecture.
-.Sp
-By default (unless specifically configured for the Fujitsu SPARClite),
-GCC generates code for the v7 variant of the SPARC architecture.
-.Sp
-.B \-mv8
-will give you SPARC v8 code. The only difference from v7
-code is that the compiler emits the integer multiply and integer
-divide instructions which exist in SPARC v8 but not in SPARC v7.
-.Sp
-.B \-msparclite
-will give you SPARClite code. This adds the integer
-multiply, integer divide step and scan (ffs) instructions which
-exist in SPARClite but not in SPARC v7.
-.PP
-.B \-mcypress
-.TP
-.B \-msupersparc
-These two options select the processor for which the code is optimised.
-.Sp
-With
-.B \-mcypress
-(the default), the compiler optimises code for the Cypress CY7C602 chip, as
-used in the SparcStation/SparcServer 3xx series. This is also appropriate for
-the older SparcStation 1, 2, IPX etc.
-.Sp
-With
-.B \-msupersparc
-the compiler optimises code for the SuperSparc cpu, as used in the SparcStation
-10, 1000 and 2000 series. This flag also enables use of the full SPARC v8
-instruction set.
-.PP
-These `\|\c
-.B \-m\c
-\&\|' options are defined for the Convex:
-.TP
-.B \-mc1
-Generate output for a C1. This is the default when the compiler is
-configured for a C1.
-.TP
-.B \-mc2
-Generate output for a C2. This is the default when the compiler is
-configured for a C2.
-.TP
-.B \-margcount
-Generate code which puts an argument count in the word preceding each
-argument list. Some nonportable Convex and Vax programs need this word.
-(Debuggers don't, except for functions with variable-length argument
-lists; this info is in the symbol table.)
-.TP
-.B \-mnoargcount
-Omit the argument count word. This is the default if you use the
-unmodified sources.
-.PP
-These `\|\c
-.B \-m\c
-\&\|' options are defined for the AMD Am29000:
-.TP
-.B \-mdw
-Generate code that assumes the DW bit is set, i.e., that byte and
-halfword operations are directly supported by the hardware. This is the
-default.
-.TP
-.B \-mnodw
-Generate code that assumes the DW bit is not set.
-.TP
-.B \-mbw
-Generate code that assumes the system supports byte and halfword write
-operations. This is the default.
-.TP
-.B \-mnbw
-Generate code that assumes the systems does not support byte and
-halfword write operations. This implies `\|\c
-.B \-mnodw\c
-\&\|'.
-.TP
-.B \-msmall
-Use a small memory model that assumes that all function addresses are
-either within a single 256 KB segment or at an absolute address of less
-than 256K. This allows the \c
-.B call\c
-\& instruction to be used instead
-of a \c
-.B const\c
-\&, \c
-.B consth\c
-\&, \c
-.B calli\c
-\& sequence.
-.TP
-.B \-mlarge
-Do not assume that the \c
-.B call\c
-\& instruction can be used; this is the
-default.
-.TP
-.B \-m29050
-Generate code for the Am29050.
-.TP
-.B \-m29000
-Generate code for the Am29000. This is the default.
-.TP
-.B \-mkernel\-registers
-Generate references to registers \c
-.B gr64-gr95\c
-\& instead of
-.B gr96-gr127\c
-\&. This option can be used when compiling kernel code
-that wants a set of global registers disjoint from that used by
-user-mode code.
-.Sp
-Note that when this option is used, register names in `\|\c
-.B \-f\c
-\&\|' flags
-must use the normal, user-mode, names.
-.TP
-.B \-muser\-registers
-Use the normal set of global registers, \c
-.B gr96-gr127\c
-\&. This is the
-default.
-.TP
-.B \-mstack\-check
-Insert a call to \c
-.B _\|_msp_check\c
-\& after each stack adjustment. This
-is often used for kernel code.
-.PP
-These `\|\c
-.B \-m\c
-\&\|' options are defined for Motorola 88K architectures:
-.TP
-.B \-m88000
-Generate code that works well on both the m88100 and the
-m88110.
-.TP
-.B \-m88100
-Generate code that works best for the m88100, but that also
-runs on the m88110.
-.TP
-.B \-m88110
-Generate code that works best for the m88110, and may not run
-on the m88100.
-.TP
-.B \-midentify\-revision
-Include an \c
-.B ident\c
-\& directive in the assembler output recording the
-source file name, compiler name and version, timestamp, and compilation
-flags used.
-.TP
-.B \-mno\-underscores
-In assembler output, emit symbol names without adding an underscore
-character at the beginning of each name. The default is to use an
-underscore as prefix on each name.
-.TP
-.B \-mno\-check\-zero\-division
-.TP
-.B \-mcheck\-zero\-division
-Early models of the 88K architecture had problems with division by zero;
-in particular, many of them didn't trap. Use these options to avoid
-including (or to include explicitly) additional code to detect division
-by zero and signal an exception. All GCC configurations for the 88K use
-`\|\c
-.B \-mcheck\-zero\-division\c
-\&\|' by default.
-.TP
-.B \-mocs\-debug\-info
-.TP
-.B \-mno\-ocs\-debug\-info
-Include (or omit) additional debugging information (about
-registers used in each stack frame) as specified in the 88Open Object
-Compatibility Standard, \*(lqOCS\*(rq. This extra information is not needed
-by GDB. The default for DG/UX, SVr4, and Delta 88 SVr3.2 is to
-include this information; other 88k configurations omit this information
-by default.
-.TP
-.B \-mocs\-frame\-position
-.TP
-.B \-mno\-ocs\-frame\-position
-Force (or do not require) register values to be stored in a particular
-place in stack frames, as specified in OCS. The DG/UX, Delta88 SVr3.2,
-and BCS configurations use `\|\c
-.B \-mocs\-frame\-position\c
-\&\|'; other 88k
-configurations have the default `\|\c
-.B \-mno\-ocs\-frame\-position\c
-\&\|'.
-.TP
-.B \-moptimize\-arg\-area
-.TP
-.B \-mno\-optimize\-arg\-area
-Control how to store function arguments in stack frames.
-`\|\c
-.B \-moptimize\-arg\-area\c
-\&\|' saves space, but may break some
-debuggers (not GDB). `\|\c
-.B \-mno\-optimize\-arg\-area\c
-\&\|' conforms better to
-standards. By default GCC does not optimize the argument area.
-.TP
-.BI "\-mshort\-data\-" "num"
-.I num
-Generate smaller data references by making them relative to \c
-.B r0\c
-\&,
-which allows loading a value using a single instruction (rather than the
-usual two). You control which data references are affected by
-specifying \c
-.I num\c
-\& with this option. For example, if you specify
-`\|\c
-.B \-mshort\-data\-512\c
-\&\|', then the data references affected are those
-involving displacements of less than 512 bytes.
-`\|\c
-.B \-mshort\-data\-\c
-.I num\c
-\&\c
-\&\|' is not effective for \c
-.I num\c
-\& greater
-than 64K.
-.PP
-.B \-mserialize-volatile
-.TP
-.B \-mno-serialize-volatile
-Do, or do not, generate code to guarantee sequential consistency of
-volatile memory references.
-.Sp
-GNU CC always guarantees consistency by default, for the preferred
-processor submodel. How this is done depends on the submodel.
-.Sp
-The m88100 processor does not reorder memory references and so always
-provides sequential consistency. If you use `\|\c
-.B \-m88100\c
-\&\|', GNU CC does
-not generate any special instructions for sequential consistency.
-.Sp
-The order of memory references made by the m88110 processor does not
-always match the order of the instructions requesting those references.
-In particular, a load instruction may execute before a preceding store
-instruction. Such reordering violates sequential consistency of
-volatile memory references, when there are multiple processors. When
-you use `\|\c
-.B \-m88000\c
-\&\|' or `\|\c
-.B \-m88110\c
-\&\|', GNU CC generates special
-instructions when appropriate, to force execution in the proper order.
-.Sp
-The extra code generated to guarantee consistency may affect the
-performance of your application. If you know that you can safely forgo
-this guarantee, you may use the option `\|\c
-.B \-mno-serialize-volatile\c
-\&\|'.
-.Sp
-If you use the `\|\c
-.B \-m88100\c
-\&\|' option but require sequential consistency
-when running on the m88110 processor, you should use
-`\|\c
-.B \-mserialize-volatile\c
-\&\|'.
-.PP
-.B \-msvr4
-.TP
-.B \-msvr3
-Turn on (`\|\c
-.B \-msvr4\c
-\&\|') or off (`\|\c
-.B \-msvr3\c
-\&\|') compiler extensions
-related to System V release 4 (SVr4). This controls the following:
-.TP
-\ \ \ \(bu
-Which variant of the assembler syntax to emit (which you can select
-independently using `\|\c
-.B \-mversion\-03.00\c
-\&\|').
-.TP
-\ \ \ \(bu
-`\|\c
-.B \-msvr4\c
-\&\|' makes the C preprocessor recognize `\|\c
-.B #pragma weak\c
-\&\|'
-.TP
-\ \ \ \(bu
-`\|\c
-.B \-msvr4\c
-\&\|' makes GCC issue additional declaration directives used in
-SVr4.
-.PP
-`\|\c
-.B \-msvr3\c
-\&\|' is the default for all m88K configurations except
-the SVr4 configuration.
-.TP
-.B \-mtrap\-large\-shift
-.TP
-.B \-mhandle\-large\-shift
-Include code to detect bit-shifts of more than 31 bits; respectively,
-trap such shifts or emit code to handle them properly. By default GCC
-makes no special provision for large bit shifts.
-.TP
-.B \-muse\-div\-instruction
-Very early models of the 88K architecture didn't have a divide
-instruction, so GCC avoids that instruction by default. Use this option
-to specify that it's safe to use the divide instruction.
-.TP
-.B \-mversion\-03.00
-In the DG/UX configuration, there are two flavors of SVr4. This option
-modifies
-.B \-msvr4
-to select whether the hybrid-COFF or real-ELF
-flavor is used. All other configurations ignore this option.
-.TP
-.B \-mwarn\-passed\-structs
-Warn when a function passes a struct as an argument or result.
-Structure-passing conventions have changed during the evolution of the C
-language, and are often the source of portability problems. By default,
-GCC issues no such warning.
-.PP
-These options are defined for the IBM RS6000:
-.PP
-.B \-mfp\-in\-toc
-.TP
-.B \-mno\-fp\-in\-toc
-Control whether or not floating-point constants go in the Table of
-Contents (TOC), a table of all global variable and function addresses. By
-default GCC puts floating-point constants there; if the TOC overflows,
-`\|\c
-.B \-mno\-fp\-in\-toc\c
-\&\|' will reduce the size of the TOC, which may avoid
-the overflow.
-.PP
-These `\|\c
-.B \-m\c
-\&\|' options are defined for the IBM RT PC:
-.TP
-.B \-min\-line\-mul
-Use an in-line code sequence for integer multiplies. This is the
-default.
-.TP
-.B \-mcall\-lib\-mul
-Call \c
-.B lmul$$\c
-\& for integer multiples.
-.TP
-.B \-mfull\-fp\-blocks
-Generate full-size floating point data blocks, including the minimum
-amount of scratch space recommended by IBM. This is the default.
-.TP
-.B \-mminimum\-fp\-blocks
-Do not include extra scratch space in floating point data blocks. This
-results in smaller code, but slower execution, since scratch space must
-be allocated dynamically.
-.TP
-.B \-mfp\-arg\-in\-fpregs
-Use a calling sequence incompatible with the IBM calling convention in
-which floating point arguments are passed in floating point registers.
-Note that \c
-.B varargs.h\c
-\& and \c
-.B stdargs.h\c
-\& will not work with
-floating point operands if this option is specified.
-.TP
-.B \-mfp\-arg\-in\-gregs
-Use the normal calling convention for floating point arguments. This is
-the default.
-.TP
-.B \-mhc\-struct\-return
-Return structures of more than one word in memory, rather than in a
-register. This provides compatibility with the MetaWare HighC (hc)
-compiler. Use `\|\c
-.B \-fpcc\-struct\-return\c
-\&\|' for compatibility with the
-Portable C Compiler (pcc).
-.TP
-.B \-mnohc\-struct\-return
-Return some structures of more than one word in registers, when
-convenient. This is the default. For compatibility with the
-IBM-supplied compilers, use either `\|\c
-.B \-fpcc\-struct\-return\c
-\&\|' or
-`\|\c
-.B \-mhc\-struct\-return\c
-\&\|'.
-.PP
-These `\|\c
-.B \-m\c
-\&\|' options are defined for the MIPS family of computers:
-.TP
-.BI "\-mcpu=" "cpu-type"
-Assume the defaults for the machine type
-.I cpu-type
-when
-scheduling instructions. The default
-.I cpu-type
-is
-.BR default ,
-which picks the longest cycles times for any of the machines, in order
-that the code run at reasonable rates on all MIPS cpu's. Other
-choices for
-.I cpu-type
-are
-.BR r2000 ,
-.BR r3000 ,
-.BR r4000 ,
-and
-.BR r6000 .
-While picking a specific
-.I cpu-type
-will schedule things appropriately for that particular chip, the
-compiler will not generate any code that does not meet level 1 of the
-MIPS ISA (instruction set architecture) without the
-.B \-mips2
-or
-.B \-mips3
-switches being used.
-.TP
-.B \-mips2
-Issue instructions from level 2 of the MIPS ISA (branch likely, square
-root instructions). The
-.B \-mcpu=r4000
-or
-.B \-mcpu=r6000
-switch must be used in conjunction with
-.BR \-mips2 .
-.TP
-.B \-mips3
-Issue instructions from level 3 of the MIPS ISA (64 bit instructions).
-The
-.B \-mcpu=r4000
-switch must be used in conjunction with
-.BR \-mips2 .
-.TP
-.B \-mint64
-.TP
-.B \-mlong64
-.TP
-.B \-mlonglong128
-These options don't work at present.
-.TP
-.B \-mmips\-as
-Generate code for the MIPS assembler, and invoke
-.B mips\-tfile
-to add normal debug information. This is the default for all
-platforms except for the OSF/1 reference platform, using the OSF/rose
-object format. If any of the
-.BR \-ggdb ,
-.BR \-gstabs ,
-or
-.B \-gstabs+
-switches are used, the
-.B mips\-tfile
-program will encapsulate the stabs within MIPS ECOFF.
-.TP
-.B \-mgas
-Generate code for the GNU assembler. This is the default on the OSF/1
-reference platform, using the OSF/rose object format.
-.TP
-.B \-mrnames
-.TP
-.B \-mno\-rnames
-The
-.B \-mrnames
-switch says to output code using the MIPS software names for the
-registers, instead of the hardware names (ie,
-.B a0
-instead of
-.BR $4 ).
-The GNU assembler does not support the
-.B \-mrnames
-switch, and the MIPS assembler will be instructed to run the MIPS C
-preprocessor over the source file. The
-.B \-mno\-rnames
-switch is default.
-.TP
-.B \-mgpopt
-.TP
-.B \-mno\-gpopt
-The
-.B \-mgpopt
-switch says to write all of the data declarations before the
-instructions in the text section, to all the MIPS assembler to
-generate one word memory references instead of using two words for
-short global or static data items. This is on by default if
-optimization is selected.
-.TP
-.B \-mstats
-.TP
-.B \-mno\-stats
-For each non-inline function processed, the
-.B \-mstats
-switch causes the compiler to emit one line to the standard error file
-to print statistics about the program (number of registers saved,
-stack size, etc.).
-.TP
-.B \-mmemcpy
-.TP
-.B \-mno\-memcpy
-The
-.B \-mmemcpy
-switch makes all block moves call the appropriate string function
-.RB ( memcpy
-or
-.BR bcopy )
-instead of possibly generating inline code.
-.TP
-.B \-mmips\-tfile
-.TP
-.B \-mno\-mips\-tfile
-The
-.B \-mno\-mips\-tfile
-switch causes the compiler not postprocess the object file with the
-.B mips\-tfile
-program, after the MIPS assembler has generated it to add debug
-support. If
-.B mips\-tfile
-is not run, then no local variables will be available to the debugger.
-In addition,
-.B stage2
-and
-.B stage3
-objects will have the temporary file names passed to the assembler
-embedded in the object file, which means the objects will not compare
-the same.
-.TP
-.B \-msoft\-float
-Generate output containing library calls for floating point.
-.I
-WARNING:
-the requisite libraries are not part of GNU CC. Normally the
-facilities of the machine's usual C compiler are used, but this can't
-be done directly in cross-compilation. You must make your own
-arrangements to provide suitable library functions for cross-compilation.
-.TP
-.B \-mhard\-float
-Generate output containing floating point instructions. This is the
-default if you use the unmodified sources.
-.TP
-.B \-mfp64
-Assume that the
-.B FR
-bit in the status word is on, and that there are 32 64-bit floating
-point registers, instead of 32 32-bit floating point registers. You
-must also specify the
-.B \-mcpu=r4000
-and
-.B \-mips3
-switches.
-.TP
-.B \-mfp32
-Assume that there are 32 32-bit floating point registers. This is the
-default.
-.PP
-.B \-mabicalls
-.TP
-.B \-mno\-abicalls
-Emit (or do not emit) the
-.BR \&.abicalls ,
-.BR \&.cpload ,
-and
-.B \&.cprestore
-pseudo operations that some System V.4 ports use for position
-independent code.
-.TP
-.B \-mhalf\-pic
-.TP
-.B \-mno\-half\-pic
-The
-.B \-mhalf\-pic
-switch says to put pointers to extern references into the data section
-and load them up, rather than put the references in the text section.
-This option does not work at present.
-.B
-.BI \-G num
-Put global and static items less than or equal to
-.I num
-bytes into the small data or bss sections instead of the normal data
-or bss section. This allows the assembler to emit one word memory
-reference instructions based on the global pointer
-.RB ( gp
-or
-.BR $28 ),
-instead of the normal two words used. By default,
-.I num
-is 8 when the MIPS assembler is used, and 0 when the GNU
-assembler is used. The
-.BI \-G num
-switch is also passed to the assembler and linker. All modules should
-be compiled with the same
-.BI \-G num
-value.
-.TP
-.B \-nocpp
-Tell the MIPS assembler to not run its preprocessor over user
-assembler files (with a `\|\c
-.B .s\c
-\&\|' suffix) when assembling them.
-.PP
-These `\|\c
-.B \-m\c
-\&\|' options are defined for the Intel 80386 family of computers:
-.B \-m486
-.TP
-.B \-mno\-486
-Control whether or not code is optimized for a 486 instead of an
-386. Code generated for a 486 will run on a 386 and vice versa.
-.TP
-.B \-msoft\-float
-Generate output containing library calls for floating point.
-.I Warning:
-the requisite libraries are not part of GNU CC.
-Normally the facilities of the machine's usual C compiler are used, but
-this can't be done directly in cross-compilation. You must make your
-own arrangements to provide suitable library functions for
-cross-compilation.
-.Sp
-On machines where a function returns floating point results in the 80387
-register stack, some floating point opcodes may be emitted even if
-`\|\c
-.B \-msoft-float\c
-\&\|' is used.
-.TP
-.B \-mno-fp-ret-in-387
-Do not use the FPU registers for return values of functions.
-.Sp
-The usual calling convention has functions return values of types
-.B float\c
-\& and \c
-.B double\c
-\& in an FPU register, even if there
-is no FPU. The idea is that the operating system should emulate
-an FPU.
-.Sp
-The option `\|\c
-.B \-mno-fp-ret-in-387\c
-\&\|' causes such values to be returned
-in ordinary CPU registers instead.
-.PP
-These `\|\c
-.B \-m\c
-\&\|' options are defined for the HPPA family of computers:
-.TP
-.B \-mpa-risc-1-0
-Generate code for a PA 1.0 processor.
-.TP
-.B \-mpa-risc-1-1
-Generate code for a PA 1.1 processor.
-.TP
-.B \-mkernel
-Generate code which is suitable for use in kernels. Specifically, avoid
-.B add\c
-\& instructions in which one of the arguments is the DP register;
-generate \c
-.B addil\c
-\& instructions instead. This avoids a rather serious
-bug in the HP-UX linker.
-.TP
-.B \-mshared-libs
-Generate code that can be linked against HP-UX shared libraries. This option
-is not fully function yet, and is not on by default for any PA target. Using
-this option can cause incorrect code to be generated by the compiler.
-.TP
-.B \-mno-shared-libs
-Don't generate code that will be linked against shared libraries. This is
-the default for all PA targets.
-.TP
-.B \-mlong-calls
-Generate code which allows calls to functions greater than 256K away from
-the caller when the caller and callee are in the same source file. Do
-not turn this option on unless code refuses to link with \*(lqbranch out of
-range errors\*('' from the linker.
-.TP
-.B \-mdisable-fpregs
-Prevent floating point registers from being used in any manner. This is
-necessary for compiling kernels which perform lazy context switching of
-floating point registers. If you use this option and attempt to perform
-floating point operations, the compiler will abort.
-.TP
-.B \-mdisable-indexing
-Prevent the compiler from using indexing address modes. This avoids some
-rather obscure problems when compiling MIG generated code under MACH.
-.TP
-.B \-mtrailing-colon
-Add a colon to the end of label definitions (for ELF assemblers).
-.PP
-These `\|\c
-.B \-m\c
-\&\|' options are defined for the Intel 80960 family of computers:
-.TP
-.BI "\-m" "cpu-type"
-Assume the defaults for the machine type
-.I cpu-type
-for instruction and addressing-mode availability and alignment.
-The default
-.I cpu-type
-is
-.BR kb ;
-other choices are
-.BR ka ,
-.BR mc ,
-.BR ca ,
-.BR cf ,
-.BR sa ,
-and
-.BR sb .
-.TP
-.B \-mnumerics
-.TP
-.B \-msoft\-float
-The
-.B \-mnumerics
-option indicates that the processor does support
-floating-point instructions. The
-.B \-msoft\-float
-option indicates
-that floating-point support should not be assumed.
-.TP
-.B \-mleaf\-procedures
-.TP
-.B \-mno\-leaf\-procedures
-Do (or do not) attempt to alter leaf procedures to be callable with the
-.I bal
-instruction as well as
-.IR call .
-This will result in more
-efficient code for explicit calls when the
-.I bal
-instruction can be
-substituted by the assembler or linker, but less efficient code in other
-cases, such as calls via function pointers, or using a linker that doesn't
-support this optimization.
-.TP
-.B \-mtail\-call
-.TP
-.B \-mno\-tail\-call
-Do (or do not) make additional attempts (beyond those of the
-machine-independent portions of the compiler) to optimize tail-recursive
-calls into branches. You may not want to do this because the detection of
-cases where this is not valid is not totally complete. The default is
-.BR \-mno\-tail\-call .
-.TP
-.B \-mcomplex\-addr
-.TP
-.B \-mno\-complex\-addr
-Assume (or do not assume) that the use of a complex addressing mode is a
-win on this implementation of the i960. Complex addressing modes may not
-be worthwhile on the K-series, but they definitely are on the C-series.
-The default is currently
-.B \-mcomplex\-addr
-for all processors except
-the CB and CC.
-.TP
-.B \-mcode\-align
-.TP
-.B \-mno\-code\-align
-Align code to 8-byte boundaries for faster fetching (or don't bother).
-Currently turned on by default for C-series implementations only.
-.TP
-.B \-mic\-compat
-.TP
-.B \-mic2.0\-compat
-.TP
-.B \-mic3.0\-compat
-Enable compatibility with iC960 v2.0 or v3.0.
-.TP
-.B \-masm\-compat
-.TP
-.B \-mintel\-asm
-Enable compatibility with the iC960 assembler.
-.TP
-.B \-mstrict\-align
-.TP
-.B \-mno\-strict\-align
-Do not permit (do permit) unaligned accesses.
-.TP
-.B \-mold\-align
-Enable structure-alignment compatibility with Intel's gcc release version
-1.3 (based on gcc 1.37). Currently this is buggy in that
-.B #pragma align 1
-is always assumed as well, and cannot be turned off.
-.PP
-These `\|\c
-.B \-m\c
-\&\|' options are defined for the DEC Alpha implementations:
-.TP
-.B \-mno-soft-float
-.TP
-.B \-msoft-float
-Use (do not use) the hardware floating-point instructions for
-floating-point operations. When \c
-.B \-msoft-float\c
-\& is specified,
-functions in `\|\c
-.B libgcc1.c\c
-\&\|' will be used to perform floating-point
-operations. Unless they are replaced by routines that emulate the
-floating-point operations, or compiled in such a way as to call such
-emulations routines, these routines will issue floating-point
-operations. If you are compiling for an Alpha without floating-point
-operations, you must ensure that the library is built so as not to call
-them.
-.Sp
-Note that Alpha implementations without floating-point operations are
-required to have floating-point registers.
-.TP
-.B \-mfp-reg
-.TP
-.B \-mno-fp-regs
-Generate code that uses (does not use) the floating-point register set.
-.B \-mno-fp-regs\c
-\& implies \c
-.B \-msoft-float\c
-\&. If the floating-point
-register set is not used, floating point operands are passed in integer
-registers as if they were integers and floating-point results are passed
-in $0 instead of $f0. This is a non-standard calling sequence, so any
-function with a floating-point argument or return value called by code
-compiled with \c
-.B \-mno-fp-regs\c
-\& must also be compiled with that
-option.
-.Sp
-A typical use of this option is building a kernel that does not use,
-and hence need not save and restore, any floating-point registers.
-.PP
-These additional options are available on System V Release 4 for
-compatibility with other compilers on those systems:
-.TP
-.B \-G
-On SVr4 systems, \c
-.B gcc\c
-\& accepts the option `\|\c
-.B \-G\c
-\&\|' (and passes
-it to the system linker), for compatibility with other compilers.
-However, we suggest you use `\|\c
-.B \-symbolic\c
-\&\|' or `\|\c
-.B \-shared\c
-\&\|' as
-appropriate, instead of supplying linker options on the \c
-.B gcc
-command line.
-.TP
-.B \-Qy
-Identify the versions of each tool used by the compiler, in a
-.B .ident\c
-\& assembler directive in the output.
-.TP
-.B \-Qn
-Refrain from adding \c
-.B .ident\c
-\& directives to the output file (this is
-the default).
-.TP
-.BI "\-YP," "dirs"
-Search the directories \c
-.I dirs\c
-\&, and no others, for libraries
-specified with `\|\c
-.B \-l\c
-\&\|'. You can separate directory entries in
-.I dirs\c
-\& from one another with colons.
-.TP
-.BI "\-Ym," "dir"
-Look in the directory \c
-.I dir\c
-\& to find the M4 preprocessor.
-The assembler uses this option.
-.SH CODE GENERATION OPTIONS
-These machine-independent options control the interface conventions
-used in code generation.
-.PP
-Most of them begin with `\|\c
-\-f\c
-\&\|'. These options have both positive and negative forms; the negative form
-of `\|\c
-.B \-ffoo\c
-\&\|' would be `\|\c
-.B \-fno\-foo\c
-\&\|'. In the table below, only
-one of the forms is listed\(em\&the one which is not the default. You
-can figure out the other form by either removing `\|\c
-.B no\-\c
-\&\|' or adding
-it.
-.TP
-.B \-fnonnull\-objects
-Assume that objects reached through references are not null
-(C++ only).
-.Sp
-Normally, GNU C++ makes conservative assumptions about objects reached
-through references. For example, the compiler must check that \c
-.B a
-is not null in code like the following:
-.Sp
-obj &a = g ();
-a.f (2);
-.Sp
-Checking that references of this sort have non-null values requires
-extra code, however, and it is unnecessary for many programs. You can
-use `\|\c
-.B \-fnonnull-objects\c
-\&\|' to omit the checks for null, if your
-program doesn't require checking.
-.TP
-.B \-fpcc\-struct\-return
-Use the same convention for returning \c
-.B struct\c
-\& and \c
-.B union
-values that is used by the usual C compiler on your system. This
-convention is less efficient for small structures, and on many
-machines it fails to be reentrant; but it has the advantage of
-allowing intercallability between GCC-compiled code and PCC-compiled
-code.
-.TP
-.B \-freg\-struct\-return
-Use the convention that
-.B struct
-and
-.B union
-values are returned in registers when possible. This is more
-efficient for small structures than
-.BR \-fpcc\-struct\-return .
-.Sp
-If you specify neither
-.B \-fpcc\-struct\-return
-nor
-.BR \-freg\-struct\-return ,
-GNU CC defaults to whichever convention is standard for the target.
-If there is no standard convention, GNU CC defaults to
-.BR \-fpcc\-struct\-return .
-.TP
-.B \-fshort\-enums
-Allocate to an \c
-.B enum\c
-\& type only as many bytes as it needs for the
-declared range of possible values. Specifically, the \c
-.B enum\c
-\& type
-will be equivalent to the smallest integer type which has enough room.
-.TP
-.B \-fshort\-double
-Use the same size for
-.B double
-as for
-.B float
-\&.
-.TP
-.B \-fshared\-data
-Requests that the data and non-\c
-.B const\c
-\& variables of this
-compilation be shared data rather than private data. The distinction
-makes sense only on certain operating systems, where shared data is
-shared between processes running the same program, while private data
-exists in one copy per process.
-.TP
-.B \-fno\-common
-Allocate even uninitialized global variables in the bss section of the
-object file, rather than generating them as common blocks. This has the
-effect that if the same variable is declared (without \c
-.B extern\c
-\&) in
-two different compilations, you will get an error when you link them.
-The only reason this might be useful is if you wish to verify that the
-program will work on other systems which always work this way.
-.TP
-.B \-fno\-ident
-Ignore the `\|\c
-.B #ident\c
-\&\|' directive.
-.TP
-.B \-fno\-gnu\-linker
-Do not output global initializations (such as C++ constructors and
-destructors) in the form used by the GNU linker (on systems where the GNU
-linker is the standard method of handling them). Use this option when
-you want to use a non-GNU linker, which also requires using the
-.B collect2\c
-\& program to make sure the system linker includes
-constructors and destructors. (\c
-.B collect2\c
-\& is included in the GNU CC
-distribution.) For systems which \c
-.I must\c
-\& use \c
-.B collect2\c
-\&, the
-compiler driver \c
-.B gcc\c
-\& is configured to do this automatically.
-.TP
-.B \-finhibit-size-directive
-Don't output a \c
-.B .size\c
-\& assembler directive, or anything else that
-would cause trouble if the function is split in the middle, and the
-two halves are placed at locations far apart in memory. This option is
-used when compiling `\|\c
-.B crtstuff.c\c
-\&\|'; you should not need to use it
-for anything else.
-.TP
-.B \-fverbose-asm
-Put extra commentary information in the generated assembly code to
-make it more readable. This option is generally only of use to those
-who actually need to read the generated assembly code (perhaps while
-debugging the compiler itself).
-.TP
-.B \-fvolatile
-Consider all memory references through pointers to be volatile.
-.TP
-.B \-fvolatile\-global
-Consider all memory references to extern and global data items to
-be volatile.
-.TP
-.B \-fpic
-If supported for the target machines, generate position-independent code,
-suitable for use in a shared library.
-.TP
-.B \-fPIC
-If supported for the target machine, emit position-independent code,
-suitable for dynamic linking, even if branches need large displacements.
-.TP
-.BI "\-ffixed\-" "reg"
-Treat the register named \c
-.I reg\c
-\& as a fixed register; generated code
-should never refer to it (except perhaps as a stack pointer, frame
-pointer or in some other fixed role).
-.Sp
-.I reg\c
-\& must be the name of a register. The register names accepted
-are machine-specific and are defined in the \c
-.B REGISTER_NAMES
-macro in the machine description macro file.
-.Sp
-This flag does not have a negative form, because it specifies a
-three-way choice.
-.TP
-.BI "\-fcall\-used\-" "reg"
-Treat the register named \c
-.I reg\c
-\& as an allocable register that is
-clobbered by function calls. It may be allocated for temporaries or
-variables that do not live across a call. Functions compiled this way
-will not save and restore the register \c
-.I reg\c
-\&.
-.Sp
-Use of this flag for a register that has a fixed pervasive role in the
-machine's execution model, such as the stack pointer or frame pointer,
-will produce disastrous results.
-.Sp
-This flag does not have a negative form, because it specifies a
-three-way choice.
-.TP
-.BI "\-fcall\-saved\-" "reg"
-Treat the register named \c
-.I reg\c
-\& as an allocable register saved by
-functions. It may be allocated even for temporaries or variables that
-live across a call. Functions compiled this way will save and restore
-the register \c
-.I reg\c
-\& if they use it.
-.Sp
-Use of this flag for a register that has a fixed pervasive role in the
-machine's execution model, such as the stack pointer or frame pointer,
-will produce disastrous results.
-.Sp
-A different sort of disaster will result from the use of this flag for
-a register in which function values may be returned.
-.Sp
-This flag does not have a negative form, because it specifies a
-three-way choice.
-.SH PRAGMAS
-Two `\|\c
-.B #pragma\c
-\&\|' directives are supported for GNU C++, to permit using the same
-header file for two purposes: as a definition of interfaces to a given
-object class, and as the full definition of the contents of that object class.
-.TP
-.B #pragma interface
-(C++ only.)
-Use this directive in header files that define object classes, to save
-space in most of the object files that use those classes. Normally,
-local copies of certain information (backup copies of inline member
-functions, debugging information, and the internal tables that
-implement virtual functions) must be kept in each object file that
-includes class definitions. You can use this pragma to avoid such
-duplication. When a header file containing `\|\c
-.B #pragma interface\c
-\&\|' is included in a compilation, this auxiliary information
-will not be generated (unless the main input source file itself uses
-`\|\c
-.B #pragma implementation\c
-\&\|'). Instead, the object files will contain references to be
-resolved at link time.
-.TP
-.B #pragma implementation
-.TP
-\fB#pragma implementation "\fP\fIobjects\fP\fB.h"\fP
-(C++ only.)
-Use this pragma in a main input file, when you want full output from
-included header files to be generated (and made globally visible).
-The included header file, in turn, should use `\|\c
-.B #pragma interface\c
-\&\|'.
-Backup copies of inline member functions, debugging information, and
-the internal tables used to implement virtual functions are all
-generated in implementation files.
-.Sp
-If you use `\|\c
-.B #pragma implementation\c
-\&\|' with no argument, it applies to an include file with the same
-basename as your source file; for example, in `\|\c
-.B allclass.cc\c
-\&\|', `\|\c
-.B #pragma implementation\c
-\&\|' by itself is equivalent to `\|\c
-.B
-#pragma implementation "allclass.h"\c
-\&\|'. Use the string argument if you want a single implementation
-file to include code from multiple header files.
-.Sp
-There is no way to split up the contents of a single header file into
-multiple implementation files.
-.SH FILES
-.nf
-.ta \w'LIBDIR/g++\-include 'u
-file.c C source file
-file.h C header (preprocessor) file
-file.i preprocessed C source file
-file.C C++ source file
-file.cc C++ source file
-file.cxx C++ source file
-file.m Objective-C source file
-file.s assembly language file
-file.o object file
-a.out link edited output
-\fITMPDIR\fR/cc\(** temporary files
-\fILIBDIR\fR/cpp preprocessor
-\fILIBDIR\fR/cc1 compiler for C
-\fILIBDIR\fR/cc1plus compiler for C++
-\fILIBDIR\fR/collect linker front end needed on some machines
-\fILIBDIR\fR/libgcc.a GCC subroutine library
-/lib/crt[01n].o start-up routine
-\fILIBDIR\fR/ccrt0 additional start-up routine for C++
-/lib/libc.a standard C library, see
-.IR intro (3)
-/usr/include standard directory for \fB#include\fP files
-\fILIBDIR\fR/include standard gcc directory for \fB#include\fP files
-\fILIBDIR\fR/g++\-include additional g++ directory for \fB#include\fP
-.Sp
-.fi
-.I LIBDIR
-is usually
-.B /usr/local/lib/\c
-.IR machine / version .
-.br
-.I TMPDIR
-comes from the environment variable
-.B TMPDIR
-(default
-.B /usr/tmp
-if available, else
-.B /tmp\c
-\&).
-.SH "SEE ALSO"
-cpp(1), as(1), ld(1), gdb(1), adb(1), dbx(1), sdb(1).
-.br
-.RB "`\|" gcc "\|', `\|" cpp \|',
-.RB "`\|" as "\|', `\|" ld \|',
-and
-.RB `\| gdb \|'
-entries in
-.B info\c
-\&.
-.br
-.I
-Using and Porting GNU CC (for version 2.0)\c
-, Richard M. Stallman;
-.I
-The C Preprocessor\c
-, Richard M. Stallman;
-.I
-Debugging with GDB: the GNU Source-Level Debugger\c
-, Richard M. Stallman and Roland H. Pesch;
-.I
-Using as: the GNU Assembler\c
-, Dean Elsner, Jay Fenlason & friends;
-.I
-ld: the GNU linker\c
-, Steve Chamberlain and Roland Pesch.
-.SH BUGS
-For instructions on reporting bugs, see the GCC manual.
-.SH COPYING
-Copyright
-.if t \(co
-1991, 1992, 1993 Free Software Foundation, Inc.
-.PP
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-.PP
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-.PP
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-.SH AUTHORS
-See the GNU CC Manual for the contributors to GNU CC.
diff --git a/contrib/gcc/hex.c b/contrib/gcc/hex.c
deleted file mode 100644
index 3ba04ba83dea..000000000000
--- a/contrib/gcc/hex.c
+++ /dev/null
@@ -1,111 +0,0 @@
-/* Hex character manipulation support.
- Copyright (C) 1995, 2001 Free Software Foundation, Inc.
-
-This file is part of the libiberty library.
-Libiberty is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-Libiberty 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with libiberty; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#include <stdio.h> /* for EOF */
-#include "libiberty.h"
-
-/* Provided for ABI compatibility. */
-void
-hex_init ()
-{
-}
-
-/* Are we ASCII? */
-#if '\n' == 0x0A && ' ' == 0x20 && '0' == 0x30 \
- && 'A' == 0x41 && 'a' == 0x61 && '!' == 0x21 \
- && EOF == -1
-
-const char _hex_value[_hex_array_size] =
-{
- _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* NUL SOH STX ETX */
- _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* EOT ENQ ACK BEL */
- _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* BS HT LF VT */
- _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* FF CR SO SI */
- _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* DLE DC1 DC2 DC3 */
- _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* DC4 NAK SYN ETB */
- _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* CAN EM SUB ESC */
- _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* FS GS RS US */
-
- _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* SP ! " # */
- _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* $ % & ' */
- _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* ( ) * + */
- _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* , - . / */
- 0, 1, 2, 3, /* 0 1 2 3 */
- 4, 5, 6, 7, /* 4 5 6 7 */
- 8, 9, _hex_bad, _hex_bad, /* 8 9 : ; */
- _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* < = > ? */
-
- _hex_bad, 10, 11, 12, /* @ A B C */
- 13, 14, 15, _hex_bad, /* D E F G */
- _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* H I J K */
- _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* L M N O */
- _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* P Q R S */
- _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* T U V W */
- _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* X Y Z [ */
- _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* \ ] ^ _ */
-
- _hex_bad, 10, 11, 12, /* ` a b c */
- 13, 14, 15, _hex_bad, /* d e f g */
- _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* h i j k */
- _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* l m n o */
- _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* p q r s */
- _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* t u v w */
- _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* x y z { */
- _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* | } ~ DEL */
-
- /* The high half of unsigned char, all values are _hex_bad. */
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
-
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
-
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
-
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
-};
-#else
- #error "Unsupported host character set"
-#endif /* not ASCII */
diff --git a/contrib/gcc/make-temp-file.c b/contrib/gcc/make-temp-file.c
deleted file mode 100644
index 883350479fce..000000000000
--- a/contrib/gcc/make-temp-file.c
+++ /dev/null
@@ -1,179 +0,0 @@
-/* Utility to pick a temporary filename prefix.
- Copyright (C) 1996, 1997, 1998, 2001 Free Software Foundation, Inc.
-
-This file is part of the libiberty library.
-Libiberty is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-Libiberty 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
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with libiberty; see the file COPYING.LIB. If not,
-write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdio.h> /* May get P_tmpdir. */
-#include <sys/types.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#ifdef HAVE_SYS_FILE_H
-#include <sys/file.h> /* May get R_OK, etc. on some systems. */
-#endif
-
-#ifndef R_OK
-#define R_OK 4
-#define W_OK 2
-#define X_OK 1
-#endif
-
-#include "libiberty.h"
-extern int mkstemps PARAMS ((char *, int));
-
-/* '/' works just fine on MS-DOS based systems. */
-#ifndef DIR_SEPARATOR
-#define DIR_SEPARATOR '/'
-#endif
-
-/* Name of temporary file.
- mktemp requires 6 trailing X's. */
-#define TEMP_FILE "ccXXXXXX"
-#define TEMP_FILE_LEN (sizeof(TEMP_FILE) - 1)
-
-/* Subroutine of choose_tmpdir.
- If BASE is non-NULL, return it.
- Otherwise it checks if DIR is a usable directory.
- If success, DIR is returned.
- Otherwise NULL is returned. */
-
-static inline const char *try PARAMS ((const char *, const char *));
-
-static inline const char *
-try (dir, base)
- const char *dir, *base;
-{
- if (base != 0)
- return base;
- if (dir != 0
- && access (dir, R_OK | W_OK | X_OK) == 0)
- return dir;
- return 0;
-}
-
-static const char tmp[] = { DIR_SEPARATOR, 't', 'm', 'p', 0 };
-static const char usrtmp[] =
-{ DIR_SEPARATOR, 'u', 's', 'r', DIR_SEPARATOR, 't', 'm', 'p', 0 };
-static const char vartmp[] =
-{ DIR_SEPARATOR, 'v', 'a', 'r', DIR_SEPARATOR, 't', 'm', 'p', 0 };
-
-static char *memoized_tmpdir;
-
-/*
-
-@deftypefn Replacement char* choose_tmpdir ()
-
-Returns a pointer to a directory path suitable for creating temporary
-files in.
-
-@end deftypefn
-
-*/
-
-char *
-choose_tmpdir ()
-{
- const char *base = 0;
- char *tmpdir;
- unsigned int len;
-
- if (memoized_tmpdir)
- return memoized_tmpdir;
-
- base = try (getenv ("TMPDIR"), base);
- base = try (getenv ("TMP"), base);
- base = try (getenv ("TEMP"), base);
-
-#ifdef P_tmpdir
- base = try (P_tmpdir, base);
-#endif
-
- /* Try /var/tmp, /usr/tmp, then /tmp. */
- base = try (vartmp, base);
- base = try (usrtmp, base);
- base = try (tmp, base);
-
- /* If all else fails, use the current directory! */
- if (base == 0)
- base = ".";
-
- /* Append DIR_SEPARATOR to the directory we've chosen
- and return it. */
- len = strlen (base);
- tmpdir = xmalloc (len + 2);
- strcpy (tmpdir, base);
- tmpdir[len] = DIR_SEPARATOR;
- tmpdir[len+1] = '\0';
-
- memoized_tmpdir = tmpdir;
- return tmpdir;
-}
-
-/*
-
-@deftypefn Replacement char* make_temp_file (const char *@var{suffix})
-
-Return a temporary file name (as a string) or @code{NULL} if unable to
-create one. @var{suffix} is a suffix to append to the file name. The
-string is @code{malloc}ed, and the temporary file has been created.
-
-@end deftypefn
-
-*/
-
-char *
-make_temp_file (suffix)
- const char *suffix;
-{
- const char *base = choose_tmpdir ();
- char *temp_filename;
- int base_len, suffix_len;
- int fd;
-
- if (suffix == 0)
- suffix = "";
-
- base_len = strlen (base);
- suffix_len = strlen (suffix);
-
- temp_filename = xmalloc (base_len
- + TEMP_FILE_LEN
- + suffix_len + 1);
- strcpy (temp_filename, base);
- strcpy (temp_filename + base_len, TEMP_FILE);
- strcpy (temp_filename + base_len + TEMP_FILE_LEN, suffix);
-
- fd = mkstemps (temp_filename, suffix_len);
- /* If mkstemps failed, then something bad is happening. Maybe we should
- issue a message about a possible security attack in progress? */
- if (fd == -1)
- abort ();
- /* Similarly if we can not close the file. */
- if (close (fd))
- abort ();
- return temp_filename;
-}
diff --git a/contrib/gcc/md5.h b/contrib/gcc/md5.h
deleted file mode 100644
index ad51f19877a2..000000000000
--- a/contrib/gcc/md5.h
+++ /dev/null
@@ -1,142 +0,0 @@
-/* md5.h - Declaration of functions and data types used for MD5 sum
- computing library functions.
- Copyright 1995, 1996, 2000 Free Software Foundation, Inc.
- NOTE: The canonical source of this file is maintained with the GNU C
- Library. Bugs can be reported to bug-glibc@prep.ai.mit.edu.
-
- This program 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 2, or (at your option) any
- later version.
-
- This program 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.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
-
-#ifndef _MD5_H
-#define _MD5_H 1
-
-#include <stdio.h>
-
-#if defined HAVE_LIMITS_H || _LIBC
-# include <limits.h>
-#endif
-
-/* The following contortions are an attempt to use the C preprocessor
- to determine an unsigned integral type that is 32 bits wide. An
- alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but
- doing that would require that the configure script compile and *run*
- the resulting executable. Locally running cross-compiled executables
- is usually not possible. */
-
-#ifdef _LIBC
-# include <sys/types.h>
-typedef u_int32_t md5_uint32;
-#else
-# define INT_MAX_32_BITS 2147483647
-
-/* If UINT_MAX isn't defined, assume it's a 32-bit type.
- This should be valid for all systems GNU cares about because
- that doesn't include 16-bit systems, and only modern systems
- (that certainly have <limits.h>) have 64+-bit integral types. */
-
-# ifndef INT_MAX
-# define INT_MAX INT_MAX_32_BITS
-# endif
-
-# if INT_MAX == INT_MAX_32_BITS
- typedef unsigned int md5_uint32;
-# else
-# if SHRT_MAX == INT_MAX_32_BITS
- typedef unsigned short md5_uint32;
-# else
-# if LONG_MAX == INT_MAX_32_BITS
- typedef unsigned long md5_uint32;
-# else
- /* The following line is intended to evoke an error.
- Using #error is not portable enough. */
- "Cannot determine unsigned 32-bit data type."
-# endif
-# endif
-# endif
-#endif
-
-#undef __P
-#if defined (__STDC__) && __STDC__
-#define __P(x) x
-#else
-#define __P(x) ()
-#endif
-
-/* Structure to save state of computation between the single steps. */
-struct md5_ctx
-{
- md5_uint32 A;
- md5_uint32 B;
- md5_uint32 C;
- md5_uint32 D;
-
- md5_uint32 total[2];
- md5_uint32 buflen;
- char buffer[128];
-};
-
-/*
- * The following three functions are build up the low level used in
- * the functions `md5_stream' and `md5_buffer'.
- */
-
-/* Initialize structure containing state of computation.
- (RFC 1321, 3.3: Step 3) */
-extern void md5_init_ctx __P ((struct md5_ctx *ctx));
-
-/* Starting with the result of former calls of this function (or the
- initialization function update the context for the next LEN bytes
- starting at BUFFER.
- It is necessary that LEN is a multiple of 64!!! */
-extern void md5_process_block __P ((const void *buffer, size_t len,
- struct md5_ctx *ctx));
-
-/* Starting with the result of former calls of this function (or the
- initialization function update the context for the next LEN bytes
- starting at BUFFER.
- It is NOT required that LEN is a multiple of 64. */
-extern void md5_process_bytes __P ((const void *buffer, size_t len,
- struct md5_ctx *ctx));
-
-/* Process the remaining bytes in the buffer and put result from CTX
- in first 16 bytes following RESBUF. The result is always in little
- endian byte order, so that a byte-wise output yields to the wanted
- ASCII representation of the message digest.
-
- IMPORTANT: On some systems it is required that RESBUF is correctly
- aligned for a 32 bits value. */
-extern void *md5_finish_ctx __P ((struct md5_ctx *ctx, void *resbuf));
-
-
-/* Put result from CTX in first 16 bytes following RESBUF. The result is
- always in little endian byte order, so that a byte-wise output yields
- to the wanted ASCII representation of the message digest.
-
- IMPORTANT: On some systems it is required that RESBUF is correctly
- aligned for a 32 bits value. */
-extern void *md5_read_ctx __P ((const struct md5_ctx *ctx, void *resbuf));
-
-
-/* Compute MD5 message digest for bytes read from STREAM. The
- resulting message digest number will be written into the 16 bytes
- beginning at RESBLOCK. */
-extern int md5_stream __P ((FILE *stream, void *resblock));
-
-/* Compute MD5 message digest for LEN bytes beginning at BUFFER. The
- result is always in little endian byte order, so that a byte-wise
- output yields to the wanted ASCII representation of the message
- digest. */
-extern void *md5_buffer __P ((const char *buffer, size_t len, void *resblock));
-
-#endif
diff --git a/contrib/gcc/objc/sendmsg.c b/contrib/gcc/objc/sendmsg.c
deleted file mode 100644
index 245b8b9eaf79..000000000000
--- a/contrib/gcc/objc/sendmsg.c
+++ /dev/null
@@ -1,651 +0,0 @@
-/* GNU Objective C Runtime message lookup
- Copyright (C) 1993, 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
- Contributed by Kresten Krab Thorup
-
-This file is part of GNU CC.
-
-GNU CC 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 2, or (at your option) any later version.
-
-GNU CC 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.
-
-You should have received a copy of the GNU General Public License along with
-GNU CC; see the file COPYING. If not, write to the Free Software
-Foundation, 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA. */
-
-/* As a special exception, if you link this library with files compiled with
- GCC to produce an executable, this does not cause the resulting executable
- to be covered by the GNU General Public License. This exception does not
- however invalidate any other reasons why the executable file might be
- covered by the GNU General Public License. */
-
-#include "../tconfig.h"
-#include "runtime.h"
-#include "sarray.h"
-#include "encoding.h"
-#include "runtime-info.h"
-
-/* this is how we hack STRUCT_VALUE to be 1 or 0 */
-#define gen_rtx(args...) 1
-#define gen_rtx_MEM(args...) 1
-#define rtx int
-
-#if !defined(STRUCT_VALUE) || STRUCT_VALUE == 0
-#define INVISIBLE_STRUCT_RETURN 1
-#else
-#define INVISIBLE_STRUCT_RETURN 0
-#endif
-
-/* The uninstalled dispatch table */
-struct sarray* __objc_uninstalled_dtable = 0; /* !T:MUTEX */
-
-/* Send +initialize to class */
-static void __objc_send_initialize(Class);
-
-static void __objc_install_dispatch_table_for_class (Class);
-
-/* Forward declare some functions */
-static void __objc_init_install_dtable(id, SEL);
-
-/* Various forwarding functions that are used based upon the
- return type for the selector.
- __objc_block_forward for structures.
- __objc_double_forward for floats/doubles.
- __objc_word_forward for pointers or types that fit in registers.
- */
-static double __objc_double_forward(id, SEL, ...);
-static id __objc_word_forward(id, SEL, ...);
-typedef struct { id many[8]; } __big;
-#if INVISIBLE_STRUCT_RETURN
-static __big
-#else
-static id
-#endif
-__objc_block_forward(id, SEL, ...);
-static Method_t search_for_method_in_hierarchy (Class class, SEL sel);
-Method_t search_for_method_in_list(MethodList_t list, SEL op);
-id nil_method(id, SEL, ...);
-
-/* Given a selector, return the proper forwarding implementation. */
-__inline__
-IMP
-__objc_get_forward_imp (SEL sel)
-{
- const char *t = sel->sel_types;
-
- if (t && (*t == '[' || *t == '(' || *t == '{')
-#ifdef OBJC_MAX_STRUCT_BY_VALUE
- && objc_sizeof_type(t) > OBJC_MAX_STRUCT_BY_VALUE
-#endif
- )
- return (IMP)__objc_block_forward;
- else if (t && (*t == 'f' || *t == 'd'))
- return (IMP)__objc_double_forward;
- else
- return (IMP)__objc_word_forward;
-}
-
-/* Given a class and selector, return the selector's implementation. */
-__inline__
-IMP
-get_imp (Class class, SEL sel)
-{
- void* res = sarray_get_safe (class->dtable, (size_t) sel->sel_id);
- if (res == 0)
- {
- /* Not a valid method */
- if(class->dtable == __objc_uninstalled_dtable)
- {
- /* The dispatch table needs to be installed. */
- objc_mutex_lock(__objc_runtime_mutex);
- __objc_install_dispatch_table_for_class (class);
- objc_mutex_unlock(__objc_runtime_mutex);
- /* Call ourselves with the installed dispatch table
- and get the real method */
- res = get_imp(class, sel);
- }
- else
- {
- /* The dispatch table has been installed so the
- method just doesn't exist for the class.
- Return the forwarding implementation. */
- res = __objc_get_forward_imp(sel);
- }
- }
- return res;
-}
-
-/* Query if an object can respond to a selector, returns YES if the
-object implements the selector otherwise NO. Does not check if the
-method can be forwarded. */
-__inline__
-BOOL
-__objc_responds_to (id object, SEL sel)
-{
- void* res;
-
- /* Install dispatch table if need be */
- if (object->class_pointer->dtable == __objc_uninstalled_dtable)
- {
- objc_mutex_lock(__objc_runtime_mutex);
- __objc_install_dispatch_table_for_class (object->class_pointer);
- objc_mutex_unlock(__objc_runtime_mutex);
- }
-
- /* Get the method from the dispatch table */
- res = sarray_get_safe (object->class_pointer->dtable, (size_t) sel->sel_id);
- return (res != 0);
-}
-
-/* This is the lookup function. All entries in the table are either a
- valid method *or* zero. If zero then either the dispatch table
- needs to be installed or it doesn't exist and forwarding is attempted. */
-__inline__
-IMP
-objc_msg_lookup(id receiver, SEL op)
-{
- IMP result;
- if(receiver)
- {
- result = sarray_get_safe (receiver->class_pointer->dtable,
- (sidx)op->sel_id);
- if (result == 0)
- {
- /* Not a valid method */
- if(receiver->class_pointer->dtable == __objc_uninstalled_dtable)
- {
- /* The dispatch table needs to be installed.
- This happens on the very first method call to the class. */
- __objc_init_install_dtable(receiver, op);
-
- /* Get real method for this in newly installed dtable */
- result = get_imp(receiver->class_pointer, op);
- }
- else
- {
- /* The dispatch table has been installed so the
- method just doesn't exist for the class.
- Attempt to forward the method. */
- result = __objc_get_forward_imp(op);
- }
- }
- return result;
- }
- else
- return nil_method;
-}
-
-IMP
-objc_msg_lookup_super (Super_t super, SEL sel)
-{
- if (super->self)
- return get_imp (super->class, sel);
- else
- return nil_method;
-}
-
-int method_get_sizeof_arguments (Method*);
-
-retval_t
-objc_msg_sendv(id object, SEL op, arglist_t arg_frame)
-{
- Method* m = class_get_instance_method(object->class_pointer, op);
- const char *type;
- *((id*)method_get_first_argument (m, arg_frame, &type)) = object;
- *((SEL*)method_get_next_argument (arg_frame, &type)) = op;
- return __builtin_apply((apply_t)m->method_imp,
- arg_frame,
- method_get_sizeof_arguments (m));
-}
-
-void
-__objc_init_dispatch_tables()
-{
- __objc_uninstalled_dtable
- = sarray_new(200, 0);
-}
-
-/* This function is called by objc_msg_lookup when the
- dispatch table needs to be installed; thus it is called once
- for each class, namely when the very first message is sent to it. */
-static void
-__objc_init_install_dtable(id receiver, SEL op)
-{
- /* This may happen, if the programmer has taken the address of a
- method before the dtable was initialized... too bad for him! */
- if(receiver->class_pointer->dtable != __objc_uninstalled_dtable)
- return;
-
- objc_mutex_lock(__objc_runtime_mutex);
-
- if(CLS_ISCLASS(receiver->class_pointer))
- {
- /* receiver is an ordinary object */
- assert(CLS_ISCLASS(receiver->class_pointer));
-
- /* install instance methods table */
- __objc_install_dispatch_table_for_class (receiver->class_pointer);
-
- /* call +initialize -- this will in turn install the factory
- dispatch table if not already done :-) */
- __objc_send_initialize(receiver->class_pointer);
- }
- else
- {
- /* receiver is a class object */
- assert(CLS_ISCLASS((Class)receiver));
- assert(CLS_ISMETA(receiver->class_pointer));
-
- /* Install real dtable for factory methods */
- __objc_install_dispatch_table_for_class (receiver->class_pointer);
-
- if (strcmp (sel_get_name (op), "initialize"))
- __objc_send_initialize((Class)receiver);
- else
- CLS_SETINITIALIZED((Class)receiver);
- }
- objc_mutex_unlock(__objc_runtime_mutex);
-}
-
-/* Install dummy table for class which causes the first message to
- that class (or instances hereof) to be initialized properly */
-void
-__objc_install_premature_dtable(Class class)
-{
- assert(__objc_uninstalled_dtable);
- class->dtable = __objc_uninstalled_dtable;
-}
-
-/* Send +initialize to class if not already done */
-static void
-__objc_send_initialize(Class class)
-{
- /* This *must* be a class object */
- assert(CLS_ISCLASS(class));
- assert(!CLS_ISMETA(class));
-
- if (!CLS_ISINITIALIZED(class))
- {
- CLS_SETINITIALIZED(class);
- CLS_SETINITIALIZED(class->class_pointer);
-
- if(class->super_class)
- __objc_send_initialize(class->super_class);
-
- {
- SEL op = sel_register_name ("initialize");
- Class tmpclass = class;
- IMP imp = 0;
-
- while (!imp && tmpclass) {
- MethodList_t method_list = tmpclass->class_pointer->methods;
-
- while(!imp && method_list) {
- int i;
- Method_t method;
-
- for (i=0;i<method_list->method_count;i++) {
- method = &(method_list->method_list[i]);
- if (method->method_name
- && method->method_name->sel_id == op->sel_id) {
- imp = method->method_imp;
- break;
- }
- }
-
- method_list = method_list->method_next;
-
- }
-
- tmpclass = tmpclass->super_class;
- }
- if (imp)
- (*imp)((id)class, op);
-
- }
- }
-}
-
-/* Walk on the methods list of class and install the methods in the reverse
- order of the lists. Since methods added by categories are before the methods
- of class in the methods list, this allows categories to substitute methods
- declared in class. However if more than one category replaces the same
- method nothing is guaranteed about what method will be used.
- Assumes that __objc_runtime_mutex is locked down. */
-static void
-__objc_install_methods_in_dtable (Class class, MethodList_t method_list)
-{
- int i;
-
- if (!method_list)
- return;
-
- if (method_list->method_next)
- __objc_install_methods_in_dtable (class, method_list->method_next);
-
- for (i = 0; i < method_list->method_count; i++)
- {
- Method_t method = &(method_list->method_list[i]);
- sarray_at_put_safe (class->dtable,
- (sidx) method->method_name->sel_id,
- method->method_imp);
- }
-}
-
-/* Assumes that __objc_runtime_mutex is locked down. */
-static void
-__objc_install_dispatch_table_for_class (Class class)
-{
- Class super;
-
- /* If the class has not yet had its class links resolved, we must
- re-compute all class links */
- if(!CLS_ISRESOLV(class))
- __objc_resolve_class_links();
-
- super = class->super_class;
-
- if (super != 0 && (super->dtable == __objc_uninstalled_dtable))
- __objc_install_dispatch_table_for_class (super);
-
- /* Allocate dtable if necessary */
- if (super == 0)
- {
- objc_mutex_lock(__objc_runtime_mutex);
- class->dtable = sarray_new (__objc_selector_max_index, 0);
- objc_mutex_unlock(__objc_runtime_mutex);
- }
- else
- class->dtable = sarray_lazy_copy (super->dtable);
-
- __objc_install_methods_in_dtable (class, class->methods);
-}
-
-void
-__objc_update_dispatch_table_for_class (Class class)
-{
- Class next;
- struct sarray *arr;
-
- /* not yet installed -- skip it */
- if (class->dtable == __objc_uninstalled_dtable)
- return;
-
- objc_mutex_lock(__objc_runtime_mutex);
-
- arr = class->dtable;
- __objc_install_premature_dtable (class); /* someone might require it... */
- sarray_free (arr); /* release memory */
-
- /* could have been lazy... */
- __objc_install_dispatch_table_for_class (class);
-
- if (class->subclass_list) /* Traverse subclasses */
- for (next = class->subclass_list; next; next = next->sibling_class)
- __objc_update_dispatch_table_for_class (next);
-
- objc_mutex_unlock(__objc_runtime_mutex);
-}
-
-
-/* This function adds a method list to a class. This function is
- typically called by another function specific to the run-time. As
- such this function does not worry about thread safe issues.
-
- This one is only called for categories. Class objects have their
- methods installed right away, and their selectors are made into
- SEL's by the function __objc_register_selectors_from_class. */
-void
-class_add_method_list (Class class, MethodList_t list)
-{
- int i;
-
- /* Passing of a linked list is not allowed. Do multiple calls. */
- assert (!list->method_next);
-
- /* Check for duplicates. */
- for (i = 0; i < list->method_count; ++i)
- {
- Method_t method = &list->method_list[i];
-
- if (method->method_name) /* Sometimes these are NULL */
- {
- /* This is where selector names are transmogrified to SEL's */
- method->method_name =
- sel_register_typed_name ((const char*)method->method_name,
- method->method_types);
- }
- }
-
- /* Add the methods to the class's method list. */
- list->method_next = class->methods;
- class->methods = list;
-
- /* Update the dispatch table of class */
- __objc_update_dispatch_table_for_class (class);
-}
-
-Method_t
-class_get_instance_method(Class class, SEL op)
-{
- return search_for_method_in_hierarchy(class, op);
-}
-
-Method_t
-class_get_class_method(MetaClass class, SEL op)
-{
- return search_for_method_in_hierarchy(class, op);
-}
-
-
-/* Search for a method starting from the current class up its hierarchy.
- Return a pointer to the method's method structure if found. NULL
- otherwise. */
-
-static Method_t
-search_for_method_in_hierarchy (Class cls, SEL sel)
-{
- Method_t method = NULL;
- Class class;
-
- if (! sel_is_mapped (sel))
- return NULL;
-
- /* Scan the method list of the class. If the method isn't found in the
- list then step to its super class. */
- for (class = cls; ((! method) && class); class = class->super_class)
- method = search_for_method_in_list (class->methods, sel);
-
- return method;
-}
-
-
-
-/* Given a linked list of method and a method's name. Search for the named
- method's method structure. Return a pointer to the method's method
- structure if found. NULL otherwise. */
-Method_t
-search_for_method_in_list (MethodList_t list, SEL op)
-{
- MethodList_t method_list = list;
-
- if (! sel_is_mapped (op))
- return NULL;
-
- /* If not found then we'll search the list. */
- while (method_list)
- {
- int i;
-
- /* Search the method list. */
- for (i = 0; i < method_list->method_count; ++i)
- {
- Method_t method = &method_list->method_list[i];
-
- if (method->method_name)
- if (method->method_name->sel_id == op->sel_id)
- return method;
- }
-
- /* The method wasn't found. Follow the link to the next list of
- methods. */
- method_list = method_list->method_next;
- }
-
- return NULL;
-}
-
-static retval_t __objc_forward (id object, SEL sel, arglist_t args);
-
-/* Forwarding pointers/integers through the normal registers */
-static id
-__objc_word_forward (id rcv, SEL op, ...)
-{
- void *args, *res;
-
- args = __builtin_apply_args ();
- res = __objc_forward (rcv, op, args);
- if (res)
- __builtin_return (res);
- else
- return res;
-}
-
-/* Specific routine for forwarding floats/double because of
- architectural differences on some processors. i386s for
- example which uses a floating point stack versus general
- registers for floating point numbers. This forward routine
- makes sure that GCC restores the proper return values */
-static double
-__objc_double_forward (id rcv, SEL op, ...)
-{
- void *args, *res;
-
- args = __builtin_apply_args ();
- res = __objc_forward (rcv, op, args);
- __builtin_return (res);
-}
-
-#if INVISIBLE_STRUCT_RETURN
-static __big
-#else
-static id
-#endif
-__objc_block_forward (id rcv, SEL op, ...)
-{
- void *args, *res;
-
- args = __builtin_apply_args ();
- res = __objc_forward (rcv, op, args);
- if (res)
- __builtin_return (res);
- else
-#if INVISIBLE_STRUCT_RETURN
- return (__big) {{0, 0, 0, 0, 0, 0, 0, 0}};
-#else
- return nil;
-#endif
-}
-
-
-/* This function is installed in the dispatch table for all methods which are
- not implemented. Thus, it is called when a selector is not recognized. */
-static retval_t
-__objc_forward (id object, SEL sel, arglist_t args)
-{
- IMP imp;
- static SEL frwd_sel = 0; /* !T:SAFE2 */
- SEL err_sel;
-
- /* first try if the object understands forward:: */
- if (!frwd_sel)
- frwd_sel = sel_get_any_uid("forward::");
-
- if (__objc_responds_to (object, frwd_sel))
- {
- imp = get_imp(object->class_pointer, frwd_sel);
- return (*imp)(object, frwd_sel, sel, args);
- }
-
- /* If the object recognizes the doesNotRecognize: method then we're going
- to send it. */
- err_sel = sel_get_any_uid ("doesNotRecognize:");
- if (__objc_responds_to (object, err_sel))
- {
- imp = get_imp (object->class_pointer, err_sel);
- return (*imp) (object, err_sel, sel);
- }
-
- /* The object doesn't recognize the method. Check for responding to
- error:. If it does then sent it. */
- {
- size_t strlen (const char*);
- char msg[256 + strlen ((const char*)sel_get_name (sel))
- + strlen ((const char*)object->class_pointer->name)];
-
- sprintf (msg, "(%s) %s does not recognize %s",
- (CLS_ISMETA(object->class_pointer)
- ? "class"
- : "instance" ),
- object->class_pointer->name, sel_get_name (sel));
-
- err_sel = sel_get_any_uid ("error:");
- if (__objc_responds_to (object, err_sel))
- {
- imp = get_imp (object->class_pointer, err_sel);
- return (*imp) (object, sel_get_any_uid ("error:"), msg);
- }
-
- /* The object doesn't respond to doesNotRecognize: or error:; Therefore,
- a default action is taken. */
- objc_error (object, OBJC_ERR_UNIMPLEMENTED, "%s\n", msg);
-
- return 0;
- }
-}
-
-void
-__objc_print_dtable_stats()
-{
- int total = 0;
-
- objc_mutex_lock(__objc_runtime_mutex);
-
- printf("memory usage: (%s)\n",
-#ifdef OBJC_SPARSE2
- "2-level sparse arrays"
-#else
- "3-level sparse arrays"
-#endif
- );
-
- printf("arrays: %d = %ld bytes\n", narrays,
- (long)narrays*sizeof(struct sarray));
- total += narrays*sizeof(struct sarray);
- printf("buckets: %d = %ld bytes\n", nbuckets,
- (long)nbuckets*sizeof(struct sbucket));
- total += nbuckets*sizeof(struct sbucket);
-
- printf("idxtables: %d = %ld bytes\n", idxsize, (long)idxsize*sizeof(void*));
- total += idxsize*sizeof(void*);
- printf("-----------------------------------\n");
- printf("total: %d bytes\n", total);
- printf("===================================\n");
-
- objc_mutex_unlock(__objc_runtime_mutex);
-}
-
-/* Returns the uninstalled dispatch table indicator.
- If a class' dispatch table points to __objc_uninstalled_dtable
- then that means it needs its dispatch table to be installed. */
-__inline__
-struct sarray*
-objc_get_uninstalled_dtable()
-{
- return __objc_uninstalled_dtable;
-}