summaryrefslogtreecommitdiffstats
path: root/contrib
diff options
context:
space:
mode:
authorRalf Corsepius <ralf.corsepius@rtems.org>2007-11-13 08:29:18 +0000
committerRalf Corsepius <ralf.corsepius@rtems.org>2007-11-13 08:29:18 +0000
commitd96e1a9c94d75fe4a29cf425af09e4b20b17e503 (patch)
tree3e5228f559424166bfdd65551a25ff30f2612c11 /contrib
parentBump GCC_RPMREL. (diff)
downloadrtems-d96e1a9c94d75fe4a29cf425af09e4b20b17e503.tar.bz2
New.
Diffstat (limited to 'contrib')
-rw-r--r--contrib/crossrpms/patches/gcc-core-3.4.6-rtems4.9-20071111.diff6817
1 files changed, 6817 insertions, 0 deletions
diff --git a/contrib/crossrpms/patches/gcc-core-3.4.6-rtems4.9-20071111.diff b/contrib/crossrpms/patches/gcc-core-3.4.6-rtems4.9-20071111.diff
new file mode 100644
index 0000000000..8108e55a9d
--- /dev/null
+++ b/contrib/crossrpms/patches/gcc-core-3.4.6-rtems4.9-20071111.diff
@@ -0,0 +1,6817 @@
+diff -uNr gcc-3.4.6.orig/gcc/collect2.c gcc-3.4.6/gcc/collect2.c
+--- gcc-3.4.6.orig/gcc/collect2.c 2005-01-10 16:25:23.000000000 +0100
++++ gcc-3.4.6/gcc/collect2.c 2007-11-13 08:48:13.000000000 +0100
+@@ -1534,7 +1534,7 @@
+ if (redir)
+ {
+ /* Open response file. */
+- redir_handle = open (redir, O_WRONLY | O_TRUNC | O_CREAT);
++ redir_handle = open (redir, O_WRONLY | O_TRUNC | O_CREAT, S_IWUSR | S_IRUSR);
+
+ /* Duplicate the stdout and stderr file handles
+ so they can be restored later. */
+diff -uNr gcc-3.4.6.orig/gcc/collect2.c.orig gcc-3.4.6/gcc/collect2.c.orig
+--- gcc-3.4.6.orig/gcc/collect2.c.orig 1970-01-01 01:00:00.000000000 +0100
++++ gcc-3.4.6/gcc/collect2.c.orig 2005-01-10 16:25:23.000000000 +0100
+@@ -0,0 +1,2868 @@
++/* Collect static initialization info into data structures that can be
++ traversed by C++ initialization and finalization routines.
++ Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998,
++ 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++ Contributed by Chris Smith (csmith@convex.com).
++ Heavily modified by Michael Meissner (meissner@cygnus.com),
++ Per Bothner (bothner@cygnus.com), and John Gilmore (gnu@cygnus.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. */
++
++
++/* Build tables of static constructors and destructors and run ld. */
++
++#include "config.h"
++#include "system.h"
++#include "coretypes.h"
++#include "tm.h"
++#include <signal.h>
++#if ! defined( SIGCHLD ) && defined( SIGCLD )
++# define SIGCHLD SIGCLD
++#endif
++
++#ifdef vfork /* Autoconf may define this to fork for us. */
++# define VFORK_STRING "fork"
++#else
++# define VFORK_STRING "vfork"
++#endif
++#ifdef HAVE_VFORK_H
++#include <vfork.h>
++#endif
++#ifdef VMS
++#define vfork() (decc$$alloc_vfork_blocks() >= 0 ? \
++ lib$get_current_invo_context(decc$$get_vfork_jmpbuf()) : -1)
++#endif /* VMS */
++
++#ifndef LIBRARY_PATH_ENV
++#define LIBRARY_PATH_ENV "LIBRARY_PATH"
++#endif
++
++#define COLLECT
++
++#include "collect2.h"
++#include "demangle.h"
++#include "obstack.h"
++#include "intl.h"
++#include "version.h"
++
++/* On certain systems, we have code that works by scanning the object file
++ directly. But this code uses system-specific header files and library
++ functions, so turn it off in a cross-compiler. Likewise, the names of
++ the utilities are not correct for a cross-compiler; we have to hope that
++ cross-versions are in the proper directories. */
++
++#ifdef CROSS_COMPILE
++#undef SUNOS4_SHARED_LIBRARIES
++#undef OBJECT_FORMAT_COFF
++#undef MD_EXEC_PREFIX
++#undef REAL_LD_FILE_NAME
++#undef REAL_NM_FILE_NAME
++#undef REAL_STRIP_FILE_NAME
++#endif
++
++/* If we cannot use a special method, use the ordinary one:
++ run nm to find what symbols are present.
++ In a cross-compiler, this means you need a cross nm,
++ but that is not quite as unpleasant as special headers. */
++
++#if !defined (OBJECT_FORMAT_COFF)
++#define OBJECT_FORMAT_NONE
++#endif
++
++#ifdef OBJECT_FORMAT_COFF
++
++#include <a.out.h>
++#include <ar.h>
++
++#ifdef UMAX
++#include <sgs.h>
++#endif
++
++/* Many versions of ldfcn.h define these. */
++#ifdef FREAD
++#undef FREAD
++#undef FWRITE
++#endif
++
++#include <ldfcn.h>
++
++/* Some systems have an ISCOFF macro, but others do not. In some cases
++ the macro may be wrong. MY_ISCOFF is defined in tm.h files for machines
++ that either do not have an ISCOFF macro in /usr/include or for those
++ where it is wrong. */
++
++#ifndef MY_ISCOFF
++#define MY_ISCOFF(X) ISCOFF (X)
++#endif
++
++#endif /* OBJECT_FORMAT_COFF */
++
++#ifdef OBJECT_FORMAT_NONE
++
++/* Default flags to pass to nm. */
++#ifndef NM_FLAGS
++#define NM_FLAGS "-n"
++#endif
++
++#endif /* OBJECT_FORMAT_NONE */
++
++/* Some systems use __main in a way incompatible with its use in gcc, in these
++ cases use the macros NAME__MAIN to give a quoted symbol and SYMBOL__MAIN to
++ give the same symbol without quotes for an alternative entry point. */
++#ifndef NAME__MAIN
++#define NAME__MAIN "__main"
++#endif
++
++/* This must match tree.h. */
++#define DEFAULT_INIT_PRIORITY 65535
++
++#ifndef COLLECT_SHARED_INIT_FUNC
++#define COLLECT_SHARED_INIT_FUNC(STREAM, FUNC) \
++ fprintf ((STREAM), "void _GLOBAL__DI() {\n\t%s();\n}\n", (FUNC))
++#endif
++#ifndef COLLECT_SHARED_FINI_FUNC
++#define COLLECT_SHARED_FINI_FUNC(STREAM, FUNC) \
++ fprintf ((STREAM), "void _GLOBAL__DD() {\n\t%s();\n}\n", (FUNC))
++#endif
++
++#if defined (LDD_SUFFIX) || SUNOS4_SHARED_LIBRARIES
++#define SCAN_LIBRARIES
++#endif
++
++#ifdef USE_COLLECT2
++int do_collecting = 1;
++#else
++int do_collecting = 0;
++#endif
++
++#ifndef COLLECT_PARSE_FLAG
++#define COLLECT_PARSE_FLAG(FLAG)
++#endif
++
++/* Nonzero if we should suppress the automatic demangling of identifiers
++ in linker error messages. Set from COLLECT_NO_DEMANGLE. */
++int no_demangle;
++
++/* Linked lists of constructor and destructor names. */
++
++struct id
++{
++ struct id *next;
++ int sequence;
++ char name[1];
++};
++
++struct head
++{
++ struct id *first;
++ struct id *last;
++ int number;
++};
++
++/* Enumeration giving which pass this is for scanning the program file. */
++
++enum pass {
++ PASS_FIRST, /* without constructors */
++ PASS_OBJ, /* individual objects */
++ PASS_LIB, /* looking for shared libraries */
++ PASS_SECOND /* with constructors linked in */
++};
++
++int vflag; /* true if -v */
++static int rflag; /* true if -r */
++static int strip_flag; /* true if -s */
++#ifdef COLLECT_EXPORT_LIST
++static int export_flag; /* true if -bE */
++static int aix64_flag; /* true if -b64 */
++static int aixrtl_flag; /* true if -brtl */
++#endif
++
++int debug; /* true if -debug */
++
++static int shared_obj; /* true if -shared */
++
++static const char *c_file; /* <xxx>.c for constructor/destructor list. */
++static const char *o_file; /* <xxx>.o for constructor/destructor list. */
++#ifdef COLLECT_EXPORT_LIST
++static const char *export_file; /* <xxx>.x for AIX export list. */
++#endif
++const char *ldout; /* File for ld errors. */
++static const char *output_file; /* Output file for ld. */
++static const char *nm_file_name; /* pathname of nm */
++#ifdef LDD_SUFFIX
++static const char *ldd_file_name; /* pathname of ldd (or equivalent) */
++#endif
++static const char *strip_file_name; /* pathname of strip */
++const char *c_file_name; /* pathname of gcc */
++static char *initname, *fininame; /* names of init and fini funcs */
++
++static struct head constructors; /* list of constructors found */
++static struct head destructors; /* list of destructors found */
++#ifdef COLLECT_EXPORT_LIST
++static struct head exports; /* list of exported symbols */
++#endif
++static struct head frame_tables; /* list of frame unwind info tables */
++
++struct obstack temporary_obstack;
++char * temporary_firstobj;
++
++/* Holds the return value of pexecute and fork. */
++int pid;
++
++/* Structure to hold all the directories in which to search for files to
++ execute. */
++
++struct prefix_list
++{
++ const char *prefix; /* String to prepend to the path. */
++ struct prefix_list *next; /* Next in linked list. */
++};
++
++struct path_prefix
++{
++ struct prefix_list *plist; /* List of prefixes to try */
++ int max_len; /* Max length of a prefix in PLIST */
++ const char *name; /* Name of this list (used in config stuff) */
++};
++
++#ifdef COLLECT_EXPORT_LIST
++/* Lists to keep libraries to be scanned for global constructors/destructors. */
++static struct head libs; /* list of libraries */
++static struct path_prefix cmdline_lib_dirs; /* directories specified with -L */
++static struct path_prefix libpath_lib_dirs; /* directories in LIBPATH */
++static struct path_prefix *libpaths[3] = {&cmdline_lib_dirs,
++ &libpath_lib_dirs, NULL};
++#endif
++
++static void handler (int);
++static int is_ctor_dtor (const char *);
++static char *find_a_file (struct path_prefix *, const char *);
++static void add_prefix (struct path_prefix *, const char *);
++static void prefix_from_env (const char *, struct path_prefix *);
++static void prefix_from_string (const char *, struct path_prefix *);
++static void do_wait (const char *);
++static void fork_execute (const char *, char **);
++static void maybe_unlink (const char *);
++static void add_to_list (struct head *, const char *);
++static int extract_init_priority (const char *);
++static void sort_ids (struct head *);
++static void write_list (FILE *, const char *, struct id *);
++#ifdef COLLECT_EXPORT_LIST
++static void dump_list (FILE *, const char *, struct id *);
++#endif
++#if 0
++static void dump_prefix_list (FILE *, const char *, struct prefix_list *);
++#endif
++static void write_list_with_asm (FILE *, const char *, struct id *);
++static void write_c_file (FILE *, const char *);
++static void write_c_file_stat (FILE *, const char *);
++#ifndef LD_INIT_SWITCH
++static void write_c_file_glob (FILE *, const char *);
++#endif
++static void scan_prog_file (const char *, enum pass);
++#ifdef SCAN_LIBRARIES
++static void scan_libraries (const char *);
++#endif
++#if LINK_ELIMINATE_DUPLICATE_LDIRECTORIES
++static int is_in_args (const char *, const char **, const char **);
++#endif
++#ifdef COLLECT_EXPORT_LIST
++#if 0
++static int is_in_list (const char *, struct id *);
++#endif
++static void write_aix_file (FILE *, struct id *);
++static char *resolve_lib_name (const char *);
++#endif
++static char *extract_string (const char **);
++
++#ifndef HAVE_DUP2
++static int
++dup2 (int oldfd, int newfd)
++{
++ int fdtmp[256];
++ int fdx = 0;
++ int fd;
++
++ if (oldfd == newfd)
++ return oldfd;
++ close (newfd);
++ while ((fd = dup (oldfd)) != newfd && fd >= 0) /* good enough for low fd's */
++ fdtmp[fdx++] = fd;
++ while (fdx > 0)
++ close (fdtmp[--fdx]);
++
++ return fd;
++}
++#endif /* ! HAVE_DUP2 */
++
++/* Delete tempfiles and exit function. */
++
++void
++collect_exit (int status)
++{
++ if (c_file != 0 && c_file[0])
++ maybe_unlink (c_file);
++
++ if (o_file != 0 && o_file[0])
++ maybe_unlink (o_file);
++
++#ifdef COLLECT_EXPORT_LIST
++ if (export_file != 0 && export_file[0])
++ maybe_unlink (export_file);
++#endif
++
++ if (ldout != 0 && ldout[0])
++ {
++ dump_file (ldout);
++ maybe_unlink (ldout);
++ }
++
++ if (status != 0 && output_file != 0 && output_file[0])
++ maybe_unlink (output_file);
++
++ exit (status);
++}
++
++
++/* Notify user of a non-error. */
++void
++notice (const char *msgid, ...)
++{
++ va_list ap;
++
++ va_start (ap, msgid);
++ vfprintf (stderr, _(msgid), ap);
++ va_end (ap);
++}
++
++/* Die when sys call fails. */
++
++void
++fatal_perror (const char * msgid, ...)
++{
++ int e = errno;
++ va_list ap;
++
++ va_start (ap, msgid);
++ fprintf (stderr, "collect2: ");
++ vfprintf (stderr, _(msgid), ap);
++ fprintf (stderr, ": %s\n", xstrerror (e));
++ va_end (ap);
++
++ collect_exit (FATAL_EXIT_CODE);
++}
++
++/* Just die. */
++
++void
++fatal (const char * msgid, ...)
++{
++ va_list ap;
++
++ va_start (ap, msgid);
++ fprintf (stderr, "collect2: ");
++ vfprintf (stderr, _(msgid), ap);
++ fprintf (stderr, "\n");
++ va_end (ap);
++
++ collect_exit (FATAL_EXIT_CODE);
++}
++
++/* Write error message. */
++
++void
++error (const char * msgid, ...)
++{
++ va_list ap;
++
++ va_start (ap, msgid);
++ fprintf (stderr, "collect2: ");
++ vfprintf (stderr, _(msgid), ap);
++ fprintf (stderr, "\n");
++ va_end(ap);
++}
++
++/* In case obstack is linked in, and abort is defined to fancy_abort,
++ provide a default entry. */
++
++void
++fancy_abort (void)
++{
++ fatal ("internal error");
++}
++
++static void
++handler (int signo)
++{
++ if (c_file != 0 && c_file[0])
++ maybe_unlink (c_file);
++
++ if (o_file != 0 && o_file[0])
++ maybe_unlink (o_file);
++
++ if (ldout != 0 && ldout[0])
++ maybe_unlink (ldout);
++
++#ifdef COLLECT_EXPORT_LIST
++ if (export_file != 0 && export_file[0])
++ maybe_unlink (export_file);
++#endif
++
++ signal (signo, SIG_DFL);
++ kill (getpid (), signo);
++}
++
++
++int
++file_exists (const char *name)
++{
++ return access (name, R_OK) == 0;
++}
++
++/* Parse a reasonable subset of shell quoting syntax. */
++
++static char *
++extract_string (const char **pp)
++{
++ const char *p = *pp;
++ int backquote = 0;
++ int inside = 0;
++
++ for (;;)
++ {
++ char c = *p;
++ if (c == '\0')
++ break;
++ ++p;
++ if (backquote)
++ obstack_1grow (&temporary_obstack, c);
++ else if (! inside && c == ' ')
++ break;
++ else if (! inside && c == '\\')
++ backquote = 1;
++ else if (c == '\'')
++ inside = !inside;
++ else
++ obstack_1grow (&temporary_obstack, c);
++ }
++
++ obstack_1grow (&temporary_obstack, '\0');
++ *pp = p;
++ return obstack_finish (&temporary_obstack);
++}
++
++void
++dump_file (const char *name)
++{
++ FILE *stream = fopen (name, "r");
++
++ if (stream == 0)
++ return;
++ while (1)
++ {
++ int c;
++ while (c = getc (stream),
++ c != EOF && (ISIDNUM (c) || c == '$' || c == '.'))
++ obstack_1grow (&temporary_obstack, c);
++ if (obstack_object_size (&temporary_obstack) > 0)
++ {
++ const char *word, *p;
++ char *result;
++ obstack_1grow (&temporary_obstack, '\0');
++ word = obstack_finish (&temporary_obstack);
++
++ if (*word == '.')
++ ++word, putc ('.', stderr);
++ p = word;
++ if (!strncmp (p, USER_LABEL_PREFIX, strlen (USER_LABEL_PREFIX)))
++ p += strlen (USER_LABEL_PREFIX);
++
++ if (no_demangle)
++ result = 0;
++ else
++ result = cplus_demangle (p, DMGL_PARAMS | DMGL_ANSI | DMGL_VERBOSE);
++
++ if (result)
++ {
++ int diff;
++ fputs (result, stderr);
++
++ diff = strlen (word) - strlen (result);
++ while (diff > 0 && c == ' ')
++ --diff, putc (' ', stderr);
++ while (diff < 0 && c == ' ')
++ ++diff, c = getc (stream);
++
++ free (result);
++ }
++ else
++ fputs (word, stderr);
++
++ fflush (stderr);
++ obstack_free (&temporary_obstack, temporary_firstobj);
++ }
++ if (c == EOF)
++ break;
++ putc (c, stderr);
++ }
++ fclose (stream);
++}
++
++/* Decide whether the given symbol is: a constructor (1), a destructor
++ (2), a routine in a shared object that calls all the constructors
++ (3) or destructors (4), a DWARF exception-handling table (5), or
++ nothing special (0). */
++
++static int
++is_ctor_dtor (const char *s)
++{
++ struct names { const char *const name; const int len; const int ret;
++ const int two_underscores; };
++
++ const struct names *p;
++ int ch;
++ const char *orig_s = s;
++
++ static const struct names special[] = {
++#ifndef NO_DOLLAR_IN_LABEL
++ { "GLOBAL__I$", sizeof ("GLOBAL__I$")-1, 1, 0 },
++ { "GLOBAL__D$", sizeof ("GLOBAL__D$")-1, 2, 0 },
++#else
++#ifndef NO_DOT_IN_LABEL
++ { "GLOBAL__I.", sizeof ("GLOBAL__I.")-1, 1, 0 },
++ { "GLOBAL__D.", sizeof ("GLOBAL__D.")-1, 2, 0 },
++#endif /* NO_DOT_IN_LABEL */
++#endif /* NO_DOLLAR_IN_LABEL */
++ { "GLOBAL__I_", sizeof ("GLOBAL__I_")-1, 1, 0 },
++ { "GLOBAL__D_", sizeof ("GLOBAL__D_")-1, 2, 0 },
++ { "GLOBAL__F_", sizeof ("GLOBAL__F_")-1, 5, 0 },
++ { "GLOBAL__FI_", sizeof ("GLOBAL__FI_")-1, 3, 0 },
++ { "GLOBAL__FD_", sizeof ("GLOBAL__FD_")-1, 4, 0 },
++ { NULL, 0, 0, 0 }
++ };
++
++ while ((ch = *s) == '_')
++ ++s;
++
++ if (s == orig_s)
++ return 0;
++
++ for (p = &special[0]; p->len > 0; p++)
++ {
++ if (ch == p->name[0]
++ && (!p->two_underscores || ((s - orig_s) >= 2))
++ && strncmp(s, p->name, p->len) == 0)
++ {
++ return p->ret;
++ }
++ }
++ return 0;
++}
++
++/* We maintain two prefix lists: one from COMPILER_PATH environment variable
++ and one from the PATH variable. */
++
++static struct path_prefix cpath, path;
++
++#ifdef CROSS_COMPILE
++/* This is the name of the target machine. We use it to form the name
++ of the files to execute. */
++
++static const char *const target_machine = TARGET_MACHINE;
++#endif
++
++/* Search for NAME using prefix list PPREFIX. We only look for executable
++ files.
++
++ Return 0 if not found, otherwise return its name, allocated with malloc. */
++
++static char *
++find_a_file (struct path_prefix *pprefix, const char *name)
++{
++ char *temp;
++ struct prefix_list *pl;
++ int len = pprefix->max_len + strlen (name) + 1;
++
++ if (debug)
++ fprintf (stderr, "Looking for '%s'\n", name);
++
++#ifdef HOST_EXECUTABLE_SUFFIX
++ len += strlen (HOST_EXECUTABLE_SUFFIX);
++#endif
++
++ temp = xmalloc (len);
++
++ /* Determine the filename to execute (special case for absolute paths). */
++
++ if (*name == '/'
++#ifdef HAVE_DOS_BASED_FILE_SYSTEM
++ || (*name && name[1] == ':')
++#endif
++ )
++ {
++ if (access (name, X_OK) == 0)
++ {
++ strcpy (temp, name);
++
++ if (debug)
++ fprintf (stderr, " - found: absolute path\n");
++
++ return temp;
++ }
++
++#ifdef HOST_EXECUTABLE_SUFFIX
++ /* Some systems have a suffix for executable files.
++ So try appending that. */
++ strcpy (temp, name);
++ strcat (temp, HOST_EXECUTABLE_SUFFIX);
++
++ if (access (temp, X_OK) == 0)
++ return temp;
++#endif
++
++ if (debug)
++ fprintf (stderr, " - failed to locate using absolute path\n");
++ }
++ else
++ for (pl = pprefix->plist; pl; pl = pl->next)
++ {
++ struct stat st;
++
++ strcpy (temp, pl->prefix);
++ strcat (temp, name);
++
++ if (stat (temp, &st) >= 0
++ && ! S_ISDIR (st.st_mode)
++ && access (temp, X_OK) == 0)
++ return temp;
++
++#ifdef HOST_EXECUTABLE_SUFFIX
++ /* Some systems have a suffix for executable files.
++ So try appending that. */
++ strcat (temp, HOST_EXECUTABLE_SUFFIX);
++
++ if (stat (temp, &st) >= 0
++ && ! S_ISDIR (st.st_mode)
++ && access (temp, X_OK) == 0)
++ return temp;
++#endif
++ }
++
++ if (debug && pprefix->plist == NULL)
++ fprintf (stderr, " - failed: no entries in prefix list\n");
++
++ free (temp);
++ return 0;
++}
++
++/* Add an entry for PREFIX to prefix list PPREFIX. */
++
++static void
++add_prefix (struct path_prefix *pprefix, const char *prefix)
++{
++ struct prefix_list *pl, **prev;
++ int len;
++
++ if (pprefix->plist)
++ {
++ for (pl = pprefix->plist; pl->next; pl = pl->next)
++ ;
++ prev = &pl->next;
++ }
++ else
++ prev = &pprefix->plist;
++
++ /* Keep track of the longest prefix. */
++
++ len = strlen (prefix);
++ if (len > pprefix->max_len)
++ pprefix->max_len = len;
++
++ pl = xmalloc (sizeof (struct prefix_list));
++ pl->prefix = xstrdup (prefix);
++
++ if (*prev)
++ pl->next = *prev;
++ else
++ pl->next = (struct prefix_list *) 0;
++ *prev = pl;
++}
++
++/* Take the value of the environment variable ENV, break it into a path, and
++ add of the entries to PPREFIX. */
++
++static void
++prefix_from_env (const char *env, struct path_prefix *pprefix)
++{
++ const char *p;
++ GET_ENVIRONMENT (p, env);
++
++ if (p)
++ prefix_from_string (p, pprefix);
++}
++
++static void
++prefix_from_string (const char *p, struct path_prefix *pprefix)
++{
++ const char *startp, *endp;
++ char *nstore = xmalloc (strlen (p) + 3);
++
++ if (debug)
++ fprintf (stderr, "Convert string '%s' into prefixes, separator = '%c'\n", p, PATH_SEPARATOR);
++
++ startp = endp = p;
++ while (1)
++ {
++ if (*endp == PATH_SEPARATOR || *endp == 0)
++ {
++ strncpy (nstore, startp, endp-startp);
++ if (endp == startp)
++ {
++ strcpy (nstore, "./");
++ }
++ else if (! IS_DIR_SEPARATOR (endp[-1]))
++ {
++ nstore[endp-startp] = DIR_SEPARATOR;
++ nstore[endp-startp+1] = 0;
++ }
++ else
++ nstore[endp-startp] = 0;
++
++ if (debug)
++ fprintf (stderr, " - add prefix: %s\n", nstore);
++
++ add_prefix (pprefix, nstore);
++ if (*endp == 0)
++ break;
++ endp = startp = endp + 1;
++ }
++ else
++ endp++;
++ }
++}
++
++/* Main program. */
++
++int
++main (int argc, char **argv)
++{
++ static const char *const ld_suffix = "ld";
++ static const char *const real_ld_suffix = "real-ld";
++ static const char *const collect_ld_suffix = "collect-ld";
++ static const char *const nm_suffix = "nm";
++ static const char *const gnm_suffix = "gnm";
++#ifdef LDD_SUFFIX
++ static const char *const ldd_suffix = LDD_SUFFIX;
++#endif
++ static const char *const strip_suffix = "strip";
++ static const char *const gstrip_suffix = "gstrip";
++
++#ifdef CROSS_COMPILE
++ /* If we look for a program in the compiler directories, we just use
++ the short name, since these directories are already system-specific.
++ But it we look for a program in the system directories, we need to
++ qualify the program name with the target machine. */
++
++ const char *const full_ld_suffix =
++ concat(target_machine, "-", ld_suffix, NULL);
++ const char *const full_nm_suffix =
++ concat (target_machine, "-", nm_suffix, NULL);
++ const char *const full_gnm_suffix =
++ concat (target_machine, "-", gnm_suffix, NULL);
++#ifdef LDD_SUFFIX
++ const char *const full_ldd_suffix =
++ concat (target_machine, "-", ldd_suffix, NULL);
++#endif
++ const char *const full_strip_suffix =
++ concat (target_machine, "-", strip_suffix, NULL);
++ const char *const full_gstrip_suffix =
++ concat (target_machine, "-", gstrip_suffix, NULL);
++#else
++ const char *const full_ld_suffix = ld_suffix;
++ const char *const full_nm_suffix = nm_suffix;
++ const char *const full_gnm_suffix = gnm_suffix;
++#ifdef LDD_SUFFIX
++ const char *const full_ldd_suffix = ldd_suffix;
++#endif
++ const char *const full_strip_suffix = strip_suffix;
++ const char *const full_gstrip_suffix = gstrip_suffix;
++#endif /* CROSS_COMPILE */
++
++ const char *arg;
++ FILE *outf;
++#ifdef COLLECT_EXPORT_LIST
++ FILE *exportf;
++#endif
++ const char *ld_file_name;
++ const char *p;
++ char **c_argv;
++ const char **c_ptr;
++ char **ld1_argv;
++ const char **ld1;
++ char **ld2_argv;
++ const char **ld2;
++ char **object_lst;
++ const char **object;
++ int first_file;
++ int num_c_args = argc+9;
++
++ no_demangle = !! getenv ("COLLECT_NO_DEMANGLE");
++
++ /* Suppress demangling by the real linker, which may be broken. */
++ putenv (xstrdup ("COLLECT_NO_DEMANGLE="));
++
++#if defined (COLLECT2_HOST_INITIALIZATION)
++ /* Perform system dependent initialization, if necessary. */
++ COLLECT2_HOST_INITIALIZATION;
++#endif
++
++#ifdef SIGCHLD
++ /* We *MUST* set SIGCHLD to SIG_DFL so that the wait4() call will
++ receive the signal. A different setting is inheritable */
++ signal (SIGCHLD, SIG_DFL);
++#endif
++
++ gcc_init_libintl ();
++
++ /* Do not invoke xcalloc before this point, since locale needs to be
++ set first, in case a diagnostic is issued. */
++
++ ld1 = (const char **)(ld1_argv = xcalloc(sizeof (char *), argc+3));
++ ld2 = (const char **)(ld2_argv = xcalloc(sizeof (char *), argc+10));
++ object = (const char **)(object_lst = xcalloc(sizeof (char *), argc));
++
++#ifdef DEBUG
++ debug = 1;
++#endif
++
++ /* Parse command line early for instances of -debug. This allows
++ the debug flag to be set before functions like find_a_file()
++ are called. */
++ {
++ int i;
++
++ for (i = 1; argv[i] != NULL; i ++)
++ {
++ if (! strcmp (argv[i], "-debug"))
++ debug = 1;
++ COLLECT_PARSE_FLAG (argv[i]);
++ }
++ vflag = debug;
++ }
++
++#ifndef DEFAULT_A_OUT_NAME
++ output_file = "a.out";
++#else
++ output_file = DEFAULT_A_OUT_NAME;
++#endif
++
++ obstack_begin (&temporary_obstack, 0);
++ temporary_firstobj = obstack_alloc (&temporary_obstack, 0);
++
++ current_demangling_style = auto_demangling;
++ p = getenv ("COLLECT_GCC_OPTIONS");
++ while (p && *p)
++ {
++ const char *q = extract_string (&p);
++ if (*q == '-' && (q[1] == 'm' || q[1] == 'f'))
++ num_c_args++;
++ }
++ obstack_free (&temporary_obstack, temporary_firstobj);
++
++ /* -fno-profile-arcs -fno-test-coverage -fno-branch-probabilities
++ -fno-exceptions -w */
++ num_c_args += 5;
++
++ c_ptr = (const char **) (c_argv = xcalloc (sizeof (char *), num_c_args));
++
++ if (argc < 2)
++ fatal ("no arguments");
++
++#ifdef SIGQUIT
++ if (signal (SIGQUIT, SIG_IGN) != SIG_IGN)
++ signal (SIGQUIT, handler);
++#endif
++ if (signal (SIGINT, SIG_IGN) != SIG_IGN)
++ signal (SIGINT, handler);
++#ifdef SIGALRM
++ if (signal (SIGALRM, SIG_IGN) != SIG_IGN)
++ signal (SIGALRM, handler);
++#endif
++#ifdef SIGHUP
++ if (signal (SIGHUP, SIG_IGN) != SIG_IGN)
++ signal (SIGHUP, handler);
++#endif
++ if (signal (SIGSEGV, SIG_IGN) != SIG_IGN)
++ signal (SIGSEGV, handler);
++#ifdef SIGBUS
++ if (signal (SIGBUS, SIG_IGN) != SIG_IGN)
++ signal (SIGBUS, handler);
++#endif
++
++ /* Extract COMPILER_PATH and PATH into our prefix list. */
++ prefix_from_env ("COMPILER_PATH", &cpath);
++ prefix_from_env ("PATH", &path);
++
++ /* Try to discover a valid linker/nm/strip to use. */
++
++ /* Maybe we know the right file to use (if not cross). */
++ ld_file_name = 0;
++#ifdef DEFAULT_LINKER
++ if (access (DEFAULT_LINKER, X_OK) == 0)
++ ld_file_name = DEFAULT_LINKER;
++ if (ld_file_name == 0)
++#endif
++#ifdef REAL_LD_FILE_NAME
++ ld_file_name = find_a_file (&path, REAL_LD_FILE_NAME);
++ if (ld_file_name == 0)
++#endif
++ /* Search the (target-specific) compiler dirs for ld'. */
++ ld_file_name = find_a_file (&cpath, real_ld_suffix);
++ /* Likewise for `collect-ld'. */
++ if (ld_file_name == 0)
++ ld_file_name = find_a_file (&cpath, collect_ld_suffix);
++ /* Search the compiler directories for `ld'. We have protection against
++ recursive calls in find_a_file. */
++ if (ld_file_name == 0)
++ ld_file_name = find_a_file (&cpath, ld_suffix);
++ /* Search the ordinary system bin directories
++ for `ld' (if native linking) or `TARGET-ld' (if cross). */
++ if (ld_file_name == 0)
++ ld_file_name = find_a_file (&path, full_ld_suffix);
++
++#ifdef REAL_NM_FILE_NAME
++ nm_file_name = find_a_file (&path, REAL_NM_FILE_NAME);
++ if (nm_file_name == 0)
++#endif
++ nm_file_name = find_a_file (&cpath, gnm_suffix);
++ if (nm_file_name == 0)
++ nm_file_name = find_a_file (&path, full_gnm_suffix);
++ if (nm_file_name == 0)
++ nm_file_name = find_a_file (&cpath, nm_suffix);
++ if (nm_file_name == 0)
++ nm_file_name = find_a_file (&path, full_nm_suffix);
++
++#ifdef LDD_SUFFIX
++ ldd_file_name = find_a_file (&cpath, ldd_suffix);
++ if (ldd_file_name == 0)
++ ldd_file_name = find_a_file (&path, full_ldd_suffix);
++#endif
++
++#ifdef REAL_STRIP_FILE_NAME
++ strip_file_name = find_a_file (&path, REAL_STRIP_FILE_NAME);
++ if (strip_file_name == 0)
++#endif
++ strip_file_name = find_a_file (&cpath, gstrip_suffix);
++ if (strip_file_name == 0)
++ strip_file_name = find_a_file (&path, full_gstrip_suffix);
++ if (strip_file_name == 0)
++ strip_file_name = find_a_file (&cpath, strip_suffix);
++ if (strip_file_name == 0)
++ strip_file_name = find_a_file (&path, full_strip_suffix);
++
++ /* Determine the full path name of the C compiler to use. */
++ c_file_name = getenv ("COLLECT_GCC");
++ if (c_file_name == 0)
++ {
++#ifdef CROSS_COMPILE
++ c_file_name = concat (target_machine, "-gcc", NULL);
++#else
++ c_file_name = "gcc";
++#endif
++ }
++
++ p = find_a_file (&cpath, c_file_name);
++
++ /* Here it should be safe to use the system search path since we should have
++ already qualified the name of the compiler when it is needed. */
++ if (p == 0)
++ p = find_a_file (&path, c_file_name);
++
++ if (p)
++ c_file_name = p;
++
++ *ld1++ = *ld2++ = ld_file_name;
++
++ /* Make temp file names. */
++ c_file = make_temp_file (".c");
++ o_file = make_temp_file (".o");
++#ifdef COLLECT_EXPORT_LIST
++ export_file = make_temp_file (".x");
++#endif
++ ldout = make_temp_file (".ld");
++ *c_ptr++ = c_file_name;
++ *c_ptr++ = "-x";
++ *c_ptr++ = "c";
++ *c_ptr++ = "-c";
++ *c_ptr++ = "-o";
++ *c_ptr++ = o_file;
++
++#ifdef COLLECT_EXPORT_LIST
++ /* Generate a list of directories from LIBPATH. */
++ prefix_from_env ("LIBPATH", &libpath_lib_dirs);
++ /* Add to this list also two standard directories where
++ AIX loader always searches for libraries. */
++ add_prefix (&libpath_lib_dirs, "/lib");
++ add_prefix (&libpath_lib_dirs, "/usr/lib");
++#endif
++
++ /* Get any options that the upper GCC wants to pass to the sub-GCC.
++
++ AIX support needs to know if -shared has been specified before
++ parsing commandline arguments. */
++
++ p = getenv ("COLLECT_GCC_OPTIONS");
++ while (p && *p)
++ {
++ const char *q = extract_string (&p);
++ if (*q == '-' && (q[1] == 'm' || q[1] == 'f'))
++ *c_ptr++ = xstrdup (q);
++ if (strcmp (q, "-EL") == 0 || strcmp (q, "-EB") == 0)
++ *c_ptr++ = xstrdup (q);
++ if (strcmp (q, "-shared") == 0)
++ shared_obj = 1;
++ if (*q == '-' && q[1] == 'B')
++ {
++ *c_ptr++ = xstrdup (q);
++ if (q[2] == 0)
++ {
++ q = extract_string (&p);
++ *c_ptr++ = xstrdup (q);
++ }
++ }
++ }
++ obstack_free (&temporary_obstack, temporary_firstobj);
++ *c_ptr++ = "-fno-profile-arcs";
++ *c_ptr++ = "-fno-test-coverage";
++ *c_ptr++ = "-fno-branch-probabilities";
++ *c_ptr++ = "-fno-exceptions";
++ *c_ptr++ = "-w";
++
++ /* !!! When GCC calls collect2,
++ it does not know whether it is calling collect2 or ld.
++ So collect2 cannot meaningfully understand any options
++ except those ld understands.
++ If you propose to make GCC pass some other option,
++ just imagine what will happen if ld is really ld!!! */
++
++ /* Parse arguments. Remember output file spec, pass the rest to ld. */
++ /* After the first file, put in the c++ rt0. */
++
++ first_file = 1;
++ while ((arg = *++argv) != (char *) 0)
++ {
++ *ld1++ = *ld2++ = arg;
++
++ if (arg[0] == '-')
++ {
++ switch (arg[1])
++ {
++#ifdef COLLECT_EXPORT_LIST
++ /* We want to disable automatic exports on AIX when user
++ explicitly puts an export list in command line */
++ case 'b':
++ if (arg[2] == 'E' || strncmp (&arg[2], "export", 6) == 0)
++ export_flag = 1;
++ else if (arg[2] == '6' && arg[3] == '4')
++ aix64_flag = 1;
++ else if (arg[2] == 'r' && arg[3] == 't' && arg[4] == 'l')
++ aixrtl_flag = 1;
++ break;
++#endif
++
++ case 'd':
++ if (!strcmp (arg, "-debug"))
++ {
++ /* Already parsed. */
++ ld1--;
++ ld2--;
++ }
++ break;
++
++ case 'l':
++ if (first_file)
++ {
++ /* place o_file BEFORE this argument! */
++ first_file = 0;
++ ld2--;
++ *ld2++ = o_file;
++ *ld2++ = arg;
++ }
++#ifdef COLLECT_EXPORT_LIST
++ {
++ /* Resolving full library name. */
++ const char *s = resolve_lib_name (arg+2);
++
++ /* Saving a full library name. */
++ add_to_list (&libs, s);
++ }
++#endif
++ break;
++
++#ifdef COLLECT_EXPORT_LIST
++ /* Saving directories where to search for libraries. */
++ case 'L':
++ add_prefix (&cmdline_lib_dirs, arg+2);
++ break;
++#else
++#if LINK_ELIMINATE_DUPLICATE_LDIRECTORIES
++ case 'L':
++ if (is_in_args (arg, (const char **) ld1_argv, ld1-1))
++ --ld1;
++ break;
++#endif /* LINK_ELIMINATE_DUPLICATE_LDIRECTORIES */
++#endif
++
++ case 'o':
++ if (arg[2] == '\0')
++ output_file = *ld1++ = *ld2++ = *++argv;
++ else if (1
++#ifdef SWITCHES_NEED_SPACES
++ && ! strchr (SWITCHES_NEED_SPACES, arg[1])
++#endif
++ )
++
++ output_file = &arg[2];
++ break;
++
++ case 'r':
++ if (arg[2] == '\0')
++ rflag = 1;
++ break;
++
++ case 's':
++ if (arg[2] == '\0' && do_collecting)
++ {
++ /* We must strip after the nm run, otherwise C++ linking
++ will not work. Thus we strip in the second ld run, or
++ else with strip if there is no second ld run. */
++ strip_flag = 1;
++ ld1--;
++ }
++ break;
++
++ case 'v':
++ if (arg[2] == '\0')
++ vflag = 1;
++ break;
++ }
++ }
++ else if ((p = strrchr (arg, '.')) != (char *) 0
++ && (strcmp (p, ".o") == 0 || strcmp (p, ".a") == 0
++ || strcmp (p, ".so") == 0 || strcmp (p, ".lo") == 0
++ || strcmp (p, ".obj") == 0))
++ {
++ if (first_file)
++ {
++ first_file = 0;
++ if (p[1] == 'o')
++ *ld2++ = o_file;
++ else
++ {
++ /* place o_file BEFORE this argument! */
++ ld2--;
++ *ld2++ = o_file;
++ *ld2++ = arg;
++ }
++ }
++ if (p[1] == 'o' || p[1] == 'l')
++ *object++ = arg;
++#ifdef COLLECT_EXPORT_LIST
++ /* libraries can be specified directly, i.e. without -l flag. */
++ else
++ {
++ /* Saving a full library name. */
++ add_to_list (&libs, arg);
++ }
++#endif
++ }
++ }
++
++#ifdef COLLECT_EXPORT_LIST
++ /* This is added only for debugging purposes. */
++ if (debug)
++ {
++ fprintf (stderr, "List of libraries:\n");
++ dump_list (stderr, "\t", libs.first);
++ }
++
++ /* The AIX linker will discard static constructors in object files if
++ nothing else in the file is referenced, so look at them first. */
++ {
++ const char **export_object_lst = (const char **)object_lst;
++
++ while (export_object_lst < object)
++ scan_prog_file (*export_object_lst++, PASS_OBJ);
++ }
++ {
++ struct id *list = libs.first;
++
++ for (; list; list = list->next)
++ scan_prog_file (list->name, PASS_FIRST);
++ }
++
++ if (exports.first)
++ {
++ char *buf = concat ("-bE:", export_file, NULL);
++
++ *ld1++ = buf;
++ *ld2++ = buf;
++
++ exportf = fopen (export_file, "w");
++ if (exportf == (FILE *) 0)
++ fatal_perror ("fopen %s", export_file);
++ write_aix_file (exportf, exports.first);
++ if (fclose (exportf))
++ fatal_perror ("fclose %s", export_file);
++ }
++#endif
++
++ *c_ptr++ = c_file;
++ *c_ptr = *ld1 = *object = (char *) 0;
++
++ if (vflag)
++ {
++ notice ("collect2 version %s", version_string);
++#ifdef TARGET_VERSION
++ TARGET_VERSION;
++#endif
++ fprintf (stderr, "\n");
++ }
++
++ if (debug)
++ {
++ const char *ptr;
++ fprintf (stderr, "ld_file_name = %s\n",
++ (ld_file_name ? ld_file_name : "not found"));
++ fprintf (stderr, "c_file_name = %s\n",
++ (c_file_name ? c_file_name : "not found"));
++ fprintf (stderr, "nm_file_name = %s\n",
++ (nm_file_name ? nm_file_name : "not found"));
++#ifdef LDD_SUFFIX
++ fprintf (stderr, "ldd_file_name = %s\n",
++ (ldd_file_name ? ldd_file_name : "not found"));
++#endif
++ fprintf (stderr, "strip_file_name = %s\n",
++ (strip_file_name ? strip_file_name : "not found"));
++ fprintf (stderr, "c_file = %s\n",
++ (c_file ? c_file : "not found"));
++ fprintf (stderr, "o_file = %s\n",
++ (o_file ? o_file : "not found"));
++
++ ptr = getenv ("COLLECT_GCC_OPTIONS");
++ if (ptr)
++ fprintf (stderr, "COLLECT_GCC_OPTIONS = %s\n", ptr);
++
++ ptr = getenv ("COLLECT_GCC");
++ if (ptr)
++ fprintf (stderr, "COLLECT_GCC = %s\n", ptr);
++
++ ptr = getenv ("COMPILER_PATH");
++ if (ptr)
++ fprintf (stderr, "COMPILER_PATH = %s\n", ptr);
++
++ ptr = getenv (LIBRARY_PATH_ENV);
++ if (ptr)
++ fprintf (stderr, "%-20s= %s\n", LIBRARY_PATH_ENV, ptr);
++
++ fprintf (stderr, "\n");
++ }
++
++ /* Load the program, searching all libraries and attempting to provide
++ undefined symbols from repository information. */
++
++ /* On AIX we do this later. */
++#ifndef COLLECT_EXPORT_LIST
++ do_tlink (ld1_argv, object_lst);
++#endif
++
++ /* If -r or they will be run via some other method, do not build the
++ constructor or destructor list, just return now. */
++ if (rflag
++#ifndef COLLECT_EXPORT_LIST
++ || ! do_collecting
++#endif
++ )
++ {
++#ifdef COLLECT_EXPORT_LIST
++ /* Do the link we avoided above if we are exiting. */
++ do_tlink (ld1_argv, object_lst);
++
++ /* But make sure we delete the export file we may have created. */
++ if (export_file != 0 && export_file[0])
++ maybe_unlink (export_file);
++#endif
++ maybe_unlink (c_file);
++ maybe_unlink (o_file);
++ return 0;
++ }
++
++ /* Examine the namelist with nm and search it for static constructors
++ and destructors to call.
++ Write the constructor and destructor tables to a .s file and reload. */
++
++ /* On AIX we already scanned for global constructors/destructors. */
++#ifndef COLLECT_EXPORT_LIST
++ scan_prog_file (output_file, PASS_FIRST);
++#endif
++
++#ifdef SCAN_LIBRARIES
++ scan_libraries (output_file);
++#endif
++
++ if (debug)
++ {
++ notice ("%d constructor(s) found\n", constructors.number);
++ notice ("%d destructor(s) found\n", destructors.number);
++ notice ("%d frame table(s) found\n", frame_tables.number);
++ }
++
++ if (constructors.number == 0 && destructors.number == 0
++ && frame_tables.number == 0
++#if defined (SCAN_LIBRARIES) || defined (COLLECT_EXPORT_LIST)
++ /* If we will be running these functions ourselves, we want to emit
++ stubs into the shared library so that we do not have to relink
++ dependent programs when we add static objects. */
++ && ! shared_obj
++#endif
++ )
++ {
++#ifdef COLLECT_EXPORT_LIST
++ /* Do tlink without additional code generation. */
++ do_tlink (ld1_argv, object_lst);
++#endif
++ /* Strip now if it was requested on the command line. */
++ if (strip_flag)
++ {
++ char **real_strip_argv = xcalloc (sizeof (char *), 3);
++ const char ** strip_argv = (const char **) real_strip_argv;
++
++ strip_argv[0] = strip_file_name;
++ strip_argv[1] = output_file;
++ strip_argv[2] = (char *) 0;
++ fork_execute ("strip", real_strip_argv);
++ }
++
++#ifdef COLLECT_EXPORT_LIST
++ maybe_unlink (export_file);
++#endif
++ maybe_unlink (c_file);
++ maybe_unlink (o_file);
++ return 0;
++ }
++
++ /* Sort ctor and dtor lists by priority. */
++ sort_ids (&constructors);
++ sort_ids (&destructors);
++
++ maybe_unlink(output_file);
++ outf = fopen (c_file, "w");
++ if (outf == (FILE *) 0)
++ fatal_perror ("fopen %s", c_file);
++
++ write_c_file (outf, c_file);
++
++ if (fclose (outf))
++ fatal_perror ("fclose %s", c_file);
++
++ /* Tell the linker that we have initializer and finalizer functions. */
++#ifdef LD_INIT_SWITCH
++#ifdef COLLECT_EXPORT_LIST
++ *ld2++ = concat (LD_INIT_SWITCH, ":", initname, ":", fininame, NULL);
++#else
++ *ld2++ = LD_INIT_SWITCH;
++ *ld2++ = initname;
++ *ld2++ = LD_FINI_SWITCH;
++ *ld2++ = fininame;
++#endif
++#endif
++
++#ifdef COLLECT_EXPORT_LIST
++ if (shared_obj)
++ {
++ /* If we did not add export flag to link arguments before, add it to
++ second link phase now. No new exports should have been added. */
++ if (! exports.first)
++ *ld2++ = concat ("-bE:", export_file, NULL);
++
++#ifndef LD_INIT_SWITCH
++ add_to_list (&exports, initname);
++ add_to_list (&exports, fininame);
++ add_to_list (&exports, "_GLOBAL__DI");
++ add_to_list (&exports, "_GLOBAL__DD");
++#endif
++ exportf = fopen (export_file, "w");
++ if (exportf == (FILE *) 0)
++ fatal_perror ("fopen %s", export_file);
++ write_aix_file (exportf, exports.first);
++ if (fclose (exportf))
++ fatal_perror ("fclose %s", export_file);
++ }
++#endif
++
++ /* End of arguments to second link phase. */
++ *ld2 = (char*) 0;
++
++ if (debug)
++ {
++ fprintf (stderr, "\n========== output_file = %s, c_file = %s\n",
++ output_file, c_file);
++ write_c_file (stderr, "stderr");
++ fprintf (stderr, "========== end of c_file\n\n");
++#ifdef COLLECT_EXPORT_LIST
++ fprintf (stderr, "\n========== export_file = %s\n", export_file);
++ write_aix_file (stderr, exports.first);
++ fprintf (stderr, "========== end of export_file\n\n");
++#endif
++ }
++
++ /* Assemble the constructor and destructor tables.
++ Link the tables in with the rest of the program. */
++
++ fork_execute ("gcc", c_argv);
++#ifdef COLLECT_EXPORT_LIST
++ /* On AIX we must call tlink because of possible templates resolution. */
++ do_tlink (ld2_argv, object_lst);
++#else
++ /* Otherwise, simply call ld because tlink is already done. */
++ fork_execute ("ld", ld2_argv);
++
++ /* Let scan_prog_file do any final mods (OSF/rose needs this for
++ constructors/destructors in shared libraries. */
++ scan_prog_file (output_file, PASS_SECOND);
++#endif
++
++ maybe_unlink (c_file);
++ maybe_unlink (o_file);
++
++#ifdef COLLECT_EXPORT_LIST
++ maybe_unlink (export_file);
++#endif
++
++ return 0;
++}
++
++
++/* Wait for a process to finish, and exit if a nonzero status is found. */
++
++int
++collect_wait (const char *prog)
++{
++ int status;
++
++ pwait (pid, &status, 0);
++ if (status)
++ {
++ if (WIFSIGNALED (status))
++ {
++ int sig = WTERMSIG (status);
++ error ("%s terminated with signal %d [%s]%s",
++ prog, sig, strsignal(sig),
++ WCOREDUMP(status) ? ", core dumped" : "");
++ collect_exit (FATAL_EXIT_CODE);
++ }
++
++ if (WIFEXITED (status))
++ return WEXITSTATUS (status);
++ }
++ return 0;
++}
++
++static void
++do_wait (const char *prog)
++{
++ int ret = collect_wait (prog);
++ if (ret != 0)
++ {
++ error ("%s returned %d exit status", prog, ret);
++ collect_exit (ret);
++ }
++}
++
++
++/* Execute a program, and wait for the reply. */
++
++void
++collect_execute (const char *prog, char **argv, const char *redir)
++{
++ char *errmsg_fmt;
++ char *errmsg_arg;
++ int redir_handle = -1;
++ int stdout_save = -1;
++ int stderr_save = -1;
++
++ if (vflag || debug)
++ {
++ char **p_argv;
++ const char *str;
++
++ if (argv[0])
++ fprintf (stderr, "%s", argv[0]);
++ else
++ notice ("[cannot find %s]", prog);
++
++ for (p_argv = &argv[1]; (str = *p_argv) != (char *) 0; p_argv++)
++ fprintf (stderr, " %s", str);
++
++ fprintf (stderr, "\n");
++ }
++
++ fflush (stdout);
++ fflush (stderr);
++
++ /* If we cannot find a program we need, complain error. Do this here
++ since we might not end up needing something that we could not find. */
++
++ if (argv[0] == 0)
++ fatal ("cannot find `%s'", prog);
++
++ if (redir)
++ {
++ /* Open response file. */
++ redir_handle = open (redir, O_WRONLY | O_TRUNC | O_CREAT);
++
++ /* Duplicate the stdout and stderr file handles
++ so they can be restored later. */
++ stdout_save = dup (STDOUT_FILENO);
++ if (stdout_save == -1)
++ fatal_perror ("redirecting stdout: %s", redir);
++ stderr_save = dup (STDERR_FILENO);
++ if (stderr_save == -1)
++ fatal_perror ("redirecting stdout: %s", redir);
++
++ /* Redirect stdout & stderr to our response file. */
++ dup2 (redir_handle, STDOUT_FILENO);
++ dup2 (redir_handle, STDERR_FILENO);
++ }
++
++ pid = pexecute (argv[0], argv, argv[0], NULL, &errmsg_fmt, &errmsg_arg,
++ (PEXECUTE_FIRST | PEXECUTE_LAST | PEXECUTE_SEARCH));
++
++ if (redir)
++ {
++ /* Restore stdout and stderr to their previous settings. */
++ dup2 (stdout_save, STDOUT_FILENO);
++ dup2 (stderr_save, STDERR_FILENO);
++
++ /* Close response file. */
++ close (redir_handle);
++ }
++
++ if (pid == -1)
++ fatal_perror (errmsg_fmt, errmsg_arg);
++}
++
++static void
++fork_execute (const char *prog, char **argv)
++{
++ collect_execute (prog, argv, NULL);
++ do_wait (prog);
++}
++
++/* Unlink a file unless we are debugging. */
++
++static void
++maybe_unlink (const char *file)
++{
++ if (!debug)
++ unlink (file);
++ else
++ notice ("[Leaving %s]\n", file);
++}
++
++
++static long sequence_number = 0;
++
++/* Add a name to a linked list. */
++
++static void
++add_to_list (struct head *head_ptr, const char *name)
++{
++ struct id *newid = xcalloc (sizeof (struct id) + strlen (name), 1);
++ struct id *p;
++ strcpy (newid->name, name);
++
++ if (head_ptr->first)
++ head_ptr->last->next = newid;
++ else
++ head_ptr->first = newid;
++
++ /* Check for duplicate symbols. */
++ for (p = head_ptr->first;
++ strcmp (name, p->name) != 0;
++ p = p->next)
++ ;
++ if (p != newid)
++ {
++ head_ptr->last->next = 0;
++ free (newid);
++ return;
++ }
++
++ newid->sequence = ++sequence_number;
++ head_ptr->last = newid;
++ head_ptr->number++;
++}
++
++/* Grab the init priority number from an init function name that
++ looks like "_GLOBAL_.I.12345.foo". */
++
++static int
++extract_init_priority (const char *name)
++{
++ int pos = 0, pri;
++
++ while (name[pos] == '_')
++ ++pos;
++ pos += 10; /* strlen ("GLOBAL__X_") */
++
++ /* Extract init_p number from ctor/dtor name. */
++ pri = atoi (name + pos);
++ return pri ? pri : DEFAULT_INIT_PRIORITY;
++}
++
++/* Insertion sort the ids from ctor/dtor list HEAD_PTR in descending order.
++ ctors will be run from right to left, dtors from left to right. */
++
++static void
++sort_ids (struct head *head_ptr)
++{
++ /* id holds the current element to insert. id_next holds the next
++ element to insert. id_ptr iterates through the already sorted elements
++ looking for the place to insert id. */
++ struct id *id, *id_next, **id_ptr;
++
++ id = head_ptr->first;
++
++ /* We don't have any sorted elements yet. */
++ head_ptr->first = NULL;
++
++ for (; id; id = id_next)
++ {
++ id_next = id->next;
++ id->sequence = extract_init_priority (id->name);
++
++ for (id_ptr = &(head_ptr->first); ; id_ptr = &((*id_ptr)->next))
++ if (*id_ptr == NULL
++ /* If the sequence numbers are the same, we put the id from the
++ file later on the command line later in the list. */
++ || id->sequence > (*id_ptr)->sequence
++ /* Hack: do lexical compare, too.
++ || (id->sequence == (*id_ptr)->sequence
++ && strcmp (id->name, (*id_ptr)->name) > 0) */
++ )
++ {
++ id->next = *id_ptr;
++ *id_ptr = id;
++ break;
++ }
++ }
++
++ /* Now set the sequence numbers properly so write_c_file works. */
++ for (id = head_ptr->first; id; id = id->next)
++ id->sequence = ++sequence_number;
++}
++
++/* Write: `prefix', the names on list LIST, `suffix'. */
++
++static void
++write_list (FILE *stream, const char *prefix, struct id *list)
++{
++ while (list)
++ {
++ fprintf (stream, "%sx%d,\n", prefix, list->sequence);
++ list = list->next;
++ }
++}
++
++#if LINK_ELIMINATE_DUPLICATE_LDIRECTORIES
++/* Given a STRING, return nonzero if it occurs in the list in range
++ [ARGS_BEGIN,ARGS_END). */
++
++static int
++is_in_args (const char *string, const char **args_begin,
++ const char **args_end)
++{
++ const char **args_pointer;
++ for (args_pointer = args_begin; args_pointer != args_end; ++args_pointer)
++ if (strcmp (string, *args_pointer) == 0)
++ return 1;
++ return 0;
++}
++#endif /* LINK_ELIMINATE_DUPLICATE_LDIRECTORIES */
++
++#ifdef COLLECT_EXPORT_LIST
++/* This function is really used only on AIX, but may be useful. */
++#if 0
++static int
++is_in_list (const char *prefix, struct id *list)
++{
++ while (list)
++ {
++ if (!strcmp (prefix, list->name)) return 1;
++ list = list->next;
++ }
++ return 0;
++}
++#endif
++#endif /* COLLECT_EXPORT_LIST */
++
++/* Added for debugging purpose. */
++#ifdef COLLECT_EXPORT_LIST
++static void
++dump_list (FILE *stream, const char *prefix, struct id *list)
++{
++ while (list)
++ {
++ fprintf (stream, "%s%s,\n", prefix, list->name);
++ list = list->next;
++ }
++}
++#endif
++
++#if 0
++static void
++dump_prefix_list (FILE *stream, const char *prefix, struct prefix_list *list)
++{
++ while (list)
++ {
++ fprintf (stream, "%s%s,\n", prefix, list->prefix);
++ list = list->next;
++ }
++}
++#endif
++
++static void
++write_list_with_asm (FILE *stream, const char *prefix, struct id *list)
++{
++ while (list)
++ {
++ fprintf (stream, "%sx%d __asm__ (\"%s\");\n",
++ prefix, list->sequence, list->name);
++ list = list->next;
++ }
++}
++
++/* Write out the constructor and destructor tables statically (for a shared
++ object), along with the functions to execute them. */
++
++static void
++write_c_file_stat (FILE *stream, const char *name ATTRIBUTE_UNUSED)
++{
++ const char *p, *q;
++ char *prefix, *r;
++ int frames = (frame_tables.number > 0);
++
++ /* Figure out name of output_file, stripping off .so version. */
++ p = strrchr (output_file, '/');
++ if (p == 0)
++ p = output_file;
++ else
++ p++;
++ q = p;
++ while (q)
++ {
++ q = strchr (q,'.');
++ if (q == 0)
++ {
++ q = p + strlen (p);
++ break;
++ }
++ else
++ {
++ if (strncmp (q, ".so", 3) == 0)
++ {
++ q += 3;
++ break;
++ }
++ else
++ q++;
++ }
++ }
++ /* q points to null at end of the string (or . of the .so version) */
++ prefix = xmalloc (q - p + 1);
++ strncpy (prefix, p, q - p);
++ prefix[q - p] = 0;
++ for (r = prefix; *r; r++)
++ if (!ISALNUM ((unsigned char)*r))
++ *r = '_';
++ if (debug)
++ notice ("\nwrite_c_file - output name is %s, prefix is %s\n",
++ output_file, prefix);
++
++ initname = concat ("_GLOBAL__FI_", prefix, NULL);
++ fininame = concat ("_GLOBAL__FD_", prefix, NULL);
++
++ free (prefix);
++
++ /* Write the tables as C code. */
++
++ fprintf (stream, "static int count;\n");
++ fprintf (stream, "typedef void entry_pt();\n");
++ write_list_with_asm (stream, "extern entry_pt ", constructors.first);
++
++ if (frames)
++ {
++ write_list_with_asm (stream, "extern void *", frame_tables.first);
++
++ fprintf (stream, "\tstatic void *frame_table[] = {\n");
++ write_list (stream, "\t\t&", frame_tables.first);
++ fprintf (stream, "\t0\n};\n");
++
++ /* This must match what's in frame.h. */
++ fprintf (stream, "struct object {\n");
++ fprintf (stream, " void *pc_begin;\n");
++ fprintf (stream, " void *pc_end;\n");
++ fprintf (stream, " void *fde_begin;\n");
++ fprintf (stream, " void *fde_array;\n");
++ fprintf (stream, " __SIZE_TYPE__ count;\n");
++ fprintf (stream, " struct object *next;\n");
++ fprintf (stream, "};\n");
++
++ fprintf (stream, "extern void __register_frame_info_table (void *, struct object *);\n");
++ fprintf (stream, "extern void *__deregister_frame_info (void *);\n");
++
++ fprintf (stream, "static void reg_frame () {\n");
++ fprintf (stream, "\tstatic struct object ob;\n");
++ fprintf (stream, "\t__register_frame_info_table (frame_table, &ob);\n");
++ fprintf (stream, "\t}\n");
++
++ fprintf (stream, "static void dereg_frame () {\n");
++ fprintf (stream, "\t__deregister_frame_info (frame_table);\n");
++ fprintf (stream, "\t}\n");
++ }
++
++ fprintf (stream, "void %s() {\n", initname);
++ if (constructors.number > 0 || frames)
++ {
++ fprintf (stream, "\tstatic entry_pt *ctors[] = {\n");
++ write_list (stream, "\t\t", constructors.first);
++ if (frames)
++ fprintf (stream, "\treg_frame,\n");
++ fprintf (stream, "\t};\n");
++ fprintf (stream, "\tentry_pt **p;\n");
++ fprintf (stream, "\tif (count++ != 0) return;\n");
++ fprintf (stream, "\tp = ctors + %d;\n", constructors.number + frames);
++ fprintf (stream, "\twhile (p > ctors) (*--p)();\n");
++ }
++ else
++ fprintf (stream, "\t++count;\n");
++ fprintf (stream, "}\n");
++ write_list_with_asm (stream, "extern entry_pt ", destructors.first);
++ fprintf (stream, "void %s() {\n", fininame);
++ if (destructors.number > 0 || frames)
++ {
++ fprintf (stream, "\tstatic entry_pt *dtors[] = {\n");
++ write_list (stream, "\t\t", destructors.first);
++ if (frames)
++ fprintf (stream, "\tdereg_frame,\n");
++ fprintf (stream, "\t};\n");
++ fprintf (stream, "\tentry_pt **p;\n");
++ fprintf (stream, "\tif (--count != 0) return;\n");
++ fprintf (stream, "\tp = dtors;\n");
++ fprintf (stream, "\twhile (p < dtors + %d) (*p++)();\n",
++ destructors.number + frames);
++ }
++ fprintf (stream, "}\n");
++
++ if (shared_obj)
++ {
++ COLLECT_SHARED_INIT_FUNC(stream, initname);
++ COLLECT_SHARED_FINI_FUNC(stream, fininame);
++ }
++}
++
++/* Write the constructor/destructor tables. */
++
++#ifndef LD_INIT_SWITCH
++static void
++write_c_file_glob (FILE *stream, const char *name ATTRIBUTE_UNUSED)
++{
++ /* Write the tables as C code. */
++
++ int frames = (frame_tables.number > 0);
++
++ fprintf (stream, "typedef void entry_pt();\n\n");
++
++ write_list_with_asm (stream, "extern entry_pt ", constructors.first);
++
++ if (frames)
++ {
++ write_list_with_asm (stream, "extern void *", frame_tables.first);
++
++ fprintf (stream, "\tstatic void *frame_table[] = {\n");
++ write_list (stream, "\t\t&", frame_tables.first);
++ fprintf (stream, "\t0\n};\n");
++
++ /* This must match what's in frame.h. */
++ fprintf (stream, "struct object {\n");
++ fprintf (stream, " void *pc_begin;\n");
++ fprintf (stream, " void *pc_end;\n");
++ fprintf (stream, " void *fde_begin;\n");
++ fprintf (stream, " void *fde_array;\n");
++ fprintf (stream, " __SIZE_TYPE__ count;\n");
++ fprintf (stream, " struct object *next;\n");
++ fprintf (stream, "};\n");
++
++ fprintf (stream, "extern void __register_frame_info_table (void *, struct object *);\n");
++ fprintf (stream, "extern void *__deregister_frame_info (void *);\n");
++
++ fprintf (stream, "static void reg_frame () {\n");
++ fprintf (stream, "\tstatic struct object ob;\n");
++ fprintf (stream, "\t__register_frame_info_table (frame_table, &ob);\n");
++ fprintf (stream, "\t}\n");
++
++ fprintf (stream, "static void dereg_frame () {\n");
++ fprintf (stream, "\t__deregister_frame_info (frame_table);\n");
++ fprintf (stream, "\t}\n");
++ }
++
++ fprintf (stream, "\nentry_pt * __CTOR_LIST__[] = {\n");
++ fprintf (stream, "\t(entry_pt *) %d,\n", constructors.number + frames);
++ write_list (stream, "\t", constructors.first);
++ if (frames)
++ fprintf (stream, "\treg_frame,\n");
++ fprintf (stream, "\t0\n};\n\n");
++
++ write_list_with_asm (stream, "extern entry_pt ", destructors.first);
++
++ fprintf (stream, "\nentry_pt * __DTOR_LIST__[] = {\n");
++ fprintf (stream, "\t(entry_pt *) %d,\n", destructors.number + frames);
++ write_list (stream, "\t", destructors.first);
++ if (frames)
++ fprintf (stream, "\tdereg_frame,\n");
++ fprintf (stream, "\t0\n};\n\n");
++
++ fprintf (stream, "extern entry_pt %s;\n", NAME__MAIN);
++ fprintf (stream, "entry_pt *__main_reference = %s;\n\n", NAME__MAIN);
++}
++#endif /* ! LD_INIT_SWITCH */
++
++static void
++write_c_file (FILE *stream, const char *name)
++{
++ fprintf (stream, "#ifdef __cplusplus\nextern \"C\" {\n#endif\n");
++#ifndef LD_INIT_SWITCH
++ if (! shared_obj)
++ write_c_file_glob (stream, name);
++ else
++#endif
++ write_c_file_stat (stream, name);
++ fprintf (stream, "#ifdef __cplusplus\n}\n#endif\n");
++}
++
++#ifdef COLLECT_EXPORT_LIST
++static void
++write_aix_file (FILE *stream, struct id *list)
++{
++ for (; list; list = list->next)
++ {
++ fputs (list->name, stream);
++ putc ('\n', stream);
++ }
++}
++#endif
++
++#ifdef OBJECT_FORMAT_NONE
++
++/* Generic version to scan the name list of the loaded program for
++ the symbols g++ uses for static constructors and destructors.
++
++ The constructor table begins at __CTOR_LIST__ and contains a count
++ of the number of pointers (or -1 if the constructors are built in a
++ separate section by the linker), followed by the pointers to the
++ constructor functions, terminated with a null pointer. The
++ destructor table has the same format, and begins at __DTOR_LIST__. */
++
++static void
++scan_prog_file (const char *prog_name, enum pass which_pass)
++{
++ void (*int_handler) (int);
++ void (*quit_handler) (int);
++ char *real_nm_argv[4];
++ const char **nm_argv = (const char **) real_nm_argv;
++ int argc = 0;
++ int pipe_fd[2];
++ char *p, buf[1024];
++ FILE *inf;
++
++ if (which_pass == PASS_SECOND)
++ return;
++
++ /* If we do not have an `nm', complain. */
++ if (nm_file_name == 0)
++ fatal ("cannot find `nm'");
++
++ nm_argv[argc++] = nm_file_name;
++ if (NM_FLAGS[0] != '\0')
++ nm_argv[argc++] = NM_FLAGS;
++
++ nm_argv[argc++] = prog_name;
++ nm_argv[argc++] = (char *) 0;
++
++ if (pipe (pipe_fd) < 0)
++ fatal_perror ("pipe");
++
++ inf = fdopen (pipe_fd[0], "r");
++ if (inf == (FILE *) 0)
++ fatal_perror ("fdopen");
++
++ /* Trace if needed. */
++ if (vflag)
++ {
++ const char **p_argv;
++ const char *str;
++
++ for (p_argv = &nm_argv[0]; (str = *p_argv) != (char *) 0; p_argv++)
++ fprintf (stderr, " %s", str);
++
++ fprintf (stderr, "\n");
++ }
++
++ fflush (stdout);
++ fflush (stderr);
++
++ /* Spawn child nm on pipe. */
++ pid = vfork ();
++ if (pid == -1)
++ fatal_perror (VFORK_STRING);
++
++ if (pid == 0) /* child context */
++ {
++ /* setup stdout */
++ if (dup2 (pipe_fd[1], 1) < 0)
++ fatal_perror ("dup2 %d 1", pipe_fd[1]);
++
++ if (close (pipe_fd[0]) < 0)
++ fatal_perror ("close %d", pipe_fd[0]);
++
++ if (close (pipe_fd[1]) < 0)
++ fatal_perror ("close %d", pipe_fd[1]);
++
++ execv (nm_file_name, real_nm_argv);
++ fatal_perror ("execv %s", nm_file_name);
++ }
++
++ /* Parent context from here on. */
++ int_handler = (void (*) (int)) signal (SIGINT, SIG_IGN);
++#ifdef SIGQUIT
++ quit_handler = (void (*) (int)) signal (SIGQUIT, SIG_IGN);
++#endif
++
++ if (close (pipe_fd[1]) < 0)
++ fatal_perror ("close %d", pipe_fd[1]);
++
++ if (debug)
++ fprintf (stderr, "\nnm output with constructors/destructors.\n");
++
++ /* Read each line of nm output. */
++ while (fgets (buf, sizeof buf, inf) != (char *) 0)
++ {
++ int ch, ch2;
++ char *name, *end;
++
++ /* If it contains a constructor or destructor name, add the name
++ to the appropriate list. */
++
++ for (p = buf; (ch = *p) != '\0' && ch != '\n' && ch != '_'; p++)
++ if (ch == ' ' && p[1] == 'U' && p[2] == ' ')
++ break;
++
++ if (ch != '_')
++ continue;
++
++ name = p;
++ /* Find the end of the symbol name.
++ Do not include `|', because Encore nm can tack that on the end. */
++ for (end = p; (ch2 = *end) != '\0' && !ISSPACE (ch2) && ch2 != '|';
++ end++)
++ continue;
++
++
++ *end = '\0';
++ switch (is_ctor_dtor (name))
++ {
++ case 1:
++ if (which_pass != PASS_LIB)
++ add_to_list (&constructors, name);
++ break;
++
++ case 2:
++ if (which_pass != PASS_LIB)
++ add_to_list (&destructors, name);
++ break;
++
++ case 3:
++ if (which_pass != PASS_LIB)
++ fatal ("init function found in object %s", prog_name);
++#ifndef LD_INIT_SWITCH
++ add_to_list (&constructors, name);
++#endif
++ break;
++
++ case 4:
++ if (which_pass != PASS_LIB)
++ fatal ("fini function found in object %s", prog_name);
++#ifndef LD_FINI_SWITCH
++ add_to_list (&destructors, name);
++#endif
++ break;
++
++ case 5:
++ if (which_pass != PASS_LIB)
++ add_to_list (&frame_tables, name);
++ break;
++
++ default: /* not a constructor or destructor */
++ continue;
++ }
++
++ if (debug)
++ fprintf (stderr, "\t%s\n", buf);
++ }
++
++ if (debug)
++ fprintf (stderr, "\n");
++
++ if (fclose (inf) != 0)
++ fatal_perror ("fclose");
++
++ do_wait (nm_file_name);
++
++ signal (SIGINT, int_handler);
++#ifdef SIGQUIT
++ signal (SIGQUIT, quit_handler);
++#endif
++}
++
++#if SUNOS4_SHARED_LIBRARIES
++
++/* Routines to scan the SunOS 4 _DYNAMIC structure to find shared libraries
++ that the output file depends upon and their initialization/finalization
++ routines, if any. */
++
++#include <a.out.h>
++#include <fcntl.h>
++#include <link.h>
++#include <sys/mman.h>
++#include <sys/param.h>
++#include <unistd.h>
++#include <sys/dir.h>
++
++/* pointers to the object file */
++unsigned object; /* address of memory mapped file */
++unsigned objsize; /* size of memory mapped to file */
++char * code; /* pointer to code segment */
++char * data; /* pointer to data segment */
++struct nlist *symtab; /* pointer to symbol table */
++struct link_dynamic *ld;
++struct link_dynamic_2 *ld_2;
++struct head libraries;
++
++/* Map the file indicated by NAME into memory and store its address. */
++
++static void
++mapfile (const char *name)
++{
++ int fp;
++ struct stat s;
++ if ((fp = open (name, O_RDONLY)) == -1)
++ fatal ("unable to open file '%s'", name);
++ if (fstat (fp, &s) == -1)
++ fatal ("unable to stat file '%s'", name);
++
++ objsize = s.st_size;
++ object = (unsigned) mmap (0, objsize, PROT_READ|PROT_WRITE, MAP_PRIVATE,
++ fp, 0);
++ if (object == (unsigned)-1)
++ fatal ("unable to mmap file '%s'", name);
++
++ close (fp);
++}
++
++/* Helpers for locatelib. */
++
++static const char *libname;
++
++static int
++libselect (struct direct *d)
++{
++ return (strncmp (libname, d->d_name, strlen (libname)) == 0);
++}
++
++/* If one file has an additional numeric extension past LIBNAME, then put
++ that one first in the sort. If both files have additional numeric
++ extensions, then put the one with the higher number first in the sort.
++
++ We must verify that the extension is numeric, because Sun saves the
++ original versions of patched libraries with a .FCS extension. Files with
++ invalid extensions must go last in the sort, so that they will not be used. */
++
++static int
++libcompare (struct direct **d1, struct direct **d2)
++{
++ int i1, i2 = strlen (libname);
++ char *e1 = (*d1)->d_name + i2;
++ char *e2 = (*d2)->d_name + i2;
++
++ while (*e1 && *e2 && *e1 == '.' && *e2 == '.'
++ && e1[1] && ISDIGIT (e1[1]) && e2[1] && ISDIGIT (e2[1]))
++ {
++ ++e1;
++ ++e2;
++ i1 = strtol (e1, &e1, 10);
++ i2 = strtol (e2, &e2, 10);
++ if (i1 != i2)
++ return i1 - i2;
++ }
++
++ if (*e1)
++ {
++ /* It has a valid numeric extension, prefer this one. */
++ if (*e1 == '.' && e1[1] && ISDIGIT (e1[1]))
++ return 1;
++ /* It has an invalid numeric extension, must prefer the other one. */
++ else
++ return -1;
++ }
++ else if (*e2)
++ {
++ /* It has a valid numeric extension, prefer this one. */
++ if (*e2 == '.' && e2[1] && ISDIGIT (e2[1]))
++ return -1;
++ /* It has an invalid numeric extension, must prefer the other one. */
++ else
++ return 1;
++ }
++ else
++ return 0;
++}
++
++/* Given the name NAME of a dynamic dependency, find its pathname and add
++ it to the list of libraries. */
++
++static void
++locatelib (const char *name)
++{
++ static const char **l;
++ static int cnt;
++ char buf[MAXPATHLEN];
++ char *p, *q;
++ const char **pp;
++
++ if (l == 0)
++ {
++ char *ld_rules;
++ char *ldr = 0;
++ /* counting elements in array, need 1 extra for null */
++ cnt = 1;
++ ld_rules = (char *) (ld_2->ld_rules + code);
++ if (ld_rules)
++ {
++ cnt++;
++ for (; *ld_rules != 0; ld_rules++)
++ if (*ld_rules == ':')
++ cnt++;
++ ld_rules = (char *) (ld_2->ld_rules + code);
++ ldr = xstrdup (ld_rules);
++ }
++ p = getenv ("LD_LIBRARY_PATH");
++ q = 0;
++ if (p)
++ {
++ cnt++;
++ for (q = p ; *q != 0; q++)
++ if (*q == ':')
++ cnt++;
++ q = xstrdup (p);
++ }
++ l = xmalloc ((cnt + 3) * sizeof (char *));
++ pp = l;
++ if (ldr)
++ {
++ *pp++ = ldr;
++ for (; *ldr != 0; ldr++)
++ if (*ldr == ':')
++ {
++ *ldr++ = 0;
++ *pp++ = ldr;
++ }
++ }
++ if (q)
++ {
++ *pp++ = q;
++ for (; *q != 0; q++)
++ if (*q == ':')
++ {
++ *q++ = 0;
++ *pp++ = q;
++ }
++ }
++ /* built in directories are /lib, /usr/lib, and /usr/local/lib */
++ *pp++ = "/lib";
++ *pp++ = "/usr/lib";
++ *pp++ = "/usr/local/lib";
++ *pp = 0;
++ }
++ libname = name;
++ for (pp = l; *pp != 0 ; pp++)
++ {
++ struct direct **namelist;
++ int entries;
++ if ((entries = scandir (*pp, &namelist, libselect, libcompare)) > 0)
++ {
++ sprintf (buf, "%s/%s", *pp, namelist[entries - 1]->d_name);
++ add_to_list (&libraries, buf);
++ if (debug)
++ fprintf (stderr, "%s\n", buf);
++ break;
++ }
++ }
++ if (*pp == 0)
++ {
++ if (debug)
++ notice ("not found\n");
++ else
++ fatal ("dynamic dependency %s not found", name);
++ }
++}
++
++/* Scan the _DYNAMIC structure of the output file to find shared libraries
++ that it depends upon and any constructors or destructors they contain. */
++
++static void
++scan_libraries (const char *prog_name)
++{
++ struct exec *header;
++ char *base;
++ struct link_object *lo;
++ char buff[MAXPATHLEN];
++ struct id *list;
++
++ mapfile (prog_name);
++ header = (struct exec *)object;
++ if (N_BADMAG (*header))
++ fatal ("bad magic number in file '%s'", prog_name);
++ if (header->a_dynamic == 0)
++ return;
++
++ code = (char *) (N_TXTOFF (*header) + (long) header);
++ data = (char *) (N_DATOFF (*header) + (long) header);
++ symtab = (struct nlist *) (N_SYMOFF (*header) + (long) header);
++
++ if (header->a_magic == ZMAGIC && header->a_entry == 0x20)
++ {
++ /* shared object */
++ ld = (struct link_dynamic *) (symtab->n_value + code);
++ base = code;
++ }
++ else
++ {
++ /* executable */
++ ld = (struct link_dynamic *) data;
++ base = code-PAGSIZ;
++ }
++
++ if (debug)
++ notice ("dynamic dependencies.\n");
++
++ ld_2 = (struct link_dynamic_2 *) ((long) ld->ld_un.ld_2 + (long)base);
++ for (lo = (struct link_object *) ld_2->ld_need; lo;
++ lo = (struct link_object *) lo->lo_next)
++ {
++ char *name;
++ lo = (struct link_object *) ((long) lo + code);
++ name = (char *) (code + lo->lo_name);
++ if (lo->lo_library)
++ {
++ if (debug)
++ fprintf (stderr, "\t-l%s.%d => ", name, lo->lo_major);
++ sprintf (buff, "lib%s.so.%d.%d", name, lo->lo_major, lo->lo_minor);
++ locatelib (buff);
++ }
++ else
++ {
++ if (debug)
++ fprintf (stderr, "\t%s\n", name);
++ add_to_list (&libraries, name);
++ }
++ }
++
++ if (debug)
++ fprintf (stderr, "\n");
++
++ /* Now iterate through the library list adding their symbols to
++ the list. */
++ for (list = libraries.first; list; list = list->next)
++ scan_prog_file (list->name, PASS_LIB);
++}
++
++#else /* SUNOS4_SHARED_LIBRARIES */
++#ifdef LDD_SUFFIX
++
++/* Use the List Dynamic Dependencies program to find shared libraries that
++ the output file depends upon and their initialization/finalization
++ routines, if any. */
++
++static void
++scan_libraries (const char *prog_name)
++{
++ static struct head libraries; /* list of shared libraries found */
++ struct id *list;
++ void (*int_handler) (int);
++ void (*quit_handler) (int);
++ char *real_ldd_argv[4];
++ const char **ldd_argv = (const char **) real_ldd_argv;
++ int argc = 0;
++ int pipe_fd[2];
++ char buf[1024];
++ FILE *inf;
++
++ /* If we do not have an `ldd', complain. */
++ if (ldd_file_name == 0)
++ {
++ error ("cannot find `ldd'");
++ return;
++ }
++
++ ldd_argv[argc++] = ldd_file_name;
++ ldd_argv[argc++] = prog_name;
++ ldd_argv[argc++] = (char *) 0;
++
++ if (pipe (pipe_fd) < 0)
++ fatal_perror ("pipe");
++
++ inf = fdopen (pipe_fd[0], "r");
++ if (inf == (FILE *) 0)
++ fatal_perror ("fdopen");
++
++ /* Trace if needed. */
++ if (vflag)
++ {
++ const char **p_argv;
++ const char *str;
++
++ for (p_argv = &ldd_argv[0]; (str = *p_argv) != (char *) 0; p_argv++)
++ fprintf (stderr, " %s", str);
++
++ fprintf (stderr, "\n");
++ }
++
++ fflush (stdout);
++ fflush (stderr);
++
++ /* Spawn child ldd on pipe. */
++ pid = vfork ();
++ if (pid == -1)
++ fatal_perror (VFORK_STRING);
++
++ if (pid == 0) /* child context */
++ {
++ /* setup stdout */
++ if (dup2 (pipe_fd[1], 1) < 0)
++ fatal_perror ("dup2 %d 1", pipe_fd[1]);
++
++ if (close (pipe_fd[0]) < 0)
++ fatal_perror ("close %d", pipe_fd[0]);
++
++ if (close (pipe_fd[1]) < 0)
++ fatal_perror ("close %d", pipe_fd[1]);
++
++ execv (ldd_file_name, real_ldd_argv);
++ fatal_perror ("execv %s", ldd_file_name);
++ }
++
++ /* Parent context from here on. */
++ int_handler = (void (*) (int)) signal (SIGINT, SIG_IGN);
++#ifdef SIGQUIT
++ quit_handler = (void (*) (int)) signal (SIGQUIT, SIG_IGN);
++#endif
++
++ if (close (pipe_fd[1]) < 0)
++ fatal_perror ("close %d", pipe_fd[1]);
++
++ if (debug)
++ notice ("\nldd output with constructors/destructors.\n");
++
++ /* Read each line of ldd output. */
++ while (fgets (buf, sizeof buf, inf) != (char *) 0)
++ {
++ int ch2;
++ char *name, *end, *p = buf;
++
++ /* Extract names of libraries and add to list. */
++ PARSE_LDD_OUTPUT (p);
++ if (p == 0)
++ continue;
++
++ name = p;
++ if (strncmp (name, "not found", sizeof ("not found") - 1) == 0)
++ fatal ("dynamic dependency %s not found", buf);
++
++ /* Find the end of the symbol name. */
++ for (end = p;
++ (ch2 = *end) != '\0' && ch2 != '\n' && !ISSPACE (ch2) && ch2 != '|';
++ end++)
++ continue;
++ *end = '\0';
++
++ if (access (name, R_OK) == 0)
++ add_to_list (&libraries, name);
++ else
++ fatal ("unable to open dynamic dependency '%s'", buf);
++
++ if (debug)
++ fprintf (stderr, "\t%s\n", buf);
++ }
++ if (debug)
++ fprintf (stderr, "\n");
++
++ if (fclose (inf) != 0)
++ fatal_perror ("fclose");
++
++ do_wait (ldd_file_name);
++
++ signal (SIGINT, int_handler);
++#ifdef SIGQUIT
++ signal (SIGQUIT, quit_handler);
++#endif
++
++ /* Now iterate through the library list adding their symbols to
++ the list. */
++ for (list = libraries.first; list; list = list->next)
++ scan_prog_file (list->name, PASS_LIB);
++}
++
++#endif /* LDD_SUFFIX */
++#endif /* SUNOS4_SHARED_LIBRARIES */
++
++#endif /* OBJECT_FORMAT_NONE */
++
++
++/*
++ * COFF specific stuff.
++ */
++
++#ifdef OBJECT_FORMAT_COFF
++
++#if defined (EXTENDED_COFF)
++
++# define GCC_SYMBOLS(X) (SYMHEADER(X).isymMax + SYMHEADER(X).iextMax)
++# define GCC_SYMENT SYMR
++# define GCC_OK_SYMBOL(X) ((X).st == stProc || (X).st == stGlobal)
++# define GCC_SYMINC(X) (1)
++# define GCC_SYMZERO(X) (SYMHEADER(X).isymMax)
++# define GCC_CHECK_HDR(X) (PSYMTAB(X) != 0)
++
++#else
++
++# define GCC_SYMBOLS(X) (HEADER(ldptr).f_nsyms)
++# define GCC_SYMENT SYMENT
++# if defined (C_WEAKEXT)
++# define GCC_OK_SYMBOL(X) \
++ (((X).n_sclass == C_EXT || (X).n_sclass == C_WEAKEXT) && \
++ ((X).n_scnum > N_UNDEF) && \
++ (aix64_flag \
++ || (((X).n_type & N_TMASK) == (DT_NON << N_BTSHFT) \
++ || ((X).n_type & N_TMASK) == (DT_FCN << N_BTSHFT))))
++# define GCC_UNDEF_SYMBOL(X) \
++ (((X).n_sclass == C_EXT || (X).n_sclass == C_WEAKEXT) && \
++ ((X).n_scnum == N_UNDEF))
++# else
++# define GCC_OK_SYMBOL(X) \
++ (((X).n_sclass == C_EXT) && \
++ ((X).n_scnum > N_UNDEF) && \
++ (aix64_flag \
++ || (((X).n_type & N_TMASK) == (DT_NON << N_BTSHFT) \
++ || ((X).n_type & N_TMASK) == (DT_FCN << N_BTSHFT))))
++# define GCC_UNDEF_SYMBOL(X) \
++ (((X).n_sclass == C_EXT) && ((X).n_scnum == N_UNDEF))
++# endif
++# define GCC_SYMINC(X) ((X).n_numaux+1)
++# define GCC_SYMZERO(X) 0
++
++/* 0757 = U803XTOCMAGIC (AIX 4.3) and 0767 = U64_TOCMAGIC (AIX V5) */
++#ifdef _AIX51
++# define GCC_CHECK_HDR(X) \
++ ((HEADER (X).f_magic == U802TOCMAGIC && ! aix64_flag) \
++ || (HEADER (X).f_magic == 0767 && aix64_flag))
++#else
++# define GCC_CHECK_HDR(X) \
++ ((HEADER (X).f_magic == U802TOCMAGIC && ! aix64_flag) \
++ || (HEADER (X).f_magic == 0757 && aix64_flag))
++#endif
++
++#endif
++
++#ifdef COLLECT_EXPORT_LIST
++/* Array of standard AIX libraries which should not
++ be scanned for ctors/dtors. */
++static const char *const aix_std_libs[] = {
++ "/unix",
++ "/lib/libc.a",
++ "/lib/libm.a",
++ "/lib/libc_r.a",
++ "/lib/libm_r.a",
++ "/usr/lib/libc.a",
++ "/usr/lib/libm.a",
++ "/usr/lib/libc_r.a",
++ "/usr/lib/libm_r.a",
++ "/usr/lib/threads/libc.a",
++ "/usr/ccs/lib/libc.a",
++ "/usr/ccs/lib/libm.a",
++ "/usr/ccs/lib/libc_r.a",
++ "/usr/ccs/lib/libm_r.a",
++ NULL
++};
++
++/* This function checks the filename and returns 1
++ if this name matches the location of a standard AIX library. */
++static int ignore_library (const char *);
++static int
++ignore_library (const char *name)
++{
++ const char *const *p = &aix_std_libs[0];
++ while (*p++ != NULL)
++ if (! strcmp (name, *p)) return 1;
++ return 0;
++}
++#endif /* COLLECT_EXPORT_LIST */
++
++#if defined (HAVE_DECL_LDGETNAME) && !HAVE_DECL_LDGETNAME
++extern char *ldgetname (LDFILE *, GCC_SYMENT *);
++#endif
++
++/* COFF version to scan the name list of the loaded program for
++ the symbols g++ uses for static constructors and destructors.
++
++ The constructor table begins at __CTOR_LIST__ and contains a count
++ of the number of pointers (or -1 if the constructors are built in a
++ separate section by the linker), followed by the pointers to the
++ constructor functions, terminated with a null pointer. The
++ destructor table has the same format, and begins at __DTOR_LIST__. */
++
++static void
++scan_prog_file (const char *prog_name, enum pass which_pass)
++{
++ LDFILE *ldptr = NULL;
++ int sym_index, sym_count;
++ int is_shared = 0;
++
++ if (which_pass != PASS_FIRST && which_pass != PASS_OBJ)
++ return;
++
++#ifdef COLLECT_EXPORT_LIST
++ /* We do not need scanning for some standard C libraries. */
++ if (which_pass == PASS_FIRST && ignore_library (prog_name))
++ return;
++
++ /* On AIX we have a loop, because there is not much difference
++ between an object and an archive. This trick allows us to
++ eliminate scan_libraries() function. */
++ do
++ {
++#endif
++ /* Some platforms (e.g. OSF4) declare ldopen as taking a
++ non-const char * filename parameter, even though it will not
++ modify that string. So we must cast away const-ness here,
++ which will cause -Wcast-qual to burp. */
++ if ((ldptr = ldopen ((char *)prog_name, ldptr)) != NULL)
++ {
++ if (! MY_ISCOFF (HEADER (ldptr).f_magic))
++ fatal ("%s: not a COFF file", prog_name);
++
++ if (GCC_CHECK_HDR (ldptr))
++ {
++ sym_count = GCC_SYMBOLS (ldptr);
++ sym_index = GCC_SYMZERO (ldptr);
++
++#ifdef COLLECT_EXPORT_LIST
++ /* Is current archive member a shared object? */
++ is_shared = HEADER (ldptr).f_flags & F_SHROBJ;
++#endif
++
++ while (sym_index < sym_count)
++ {
++ GCC_SYMENT symbol;
++
++ if (ldtbread (ldptr, sym_index, &symbol) <= 0)
++ break;
++ sym_index += GCC_SYMINC (symbol);
++
++ if (GCC_OK_SYMBOL (symbol))
++ {
++ char *name;
++
++ if ((name = ldgetname (ldptr, &symbol)) == NULL)
++ continue; /* Should never happen. */
++
++#ifdef XCOFF_DEBUGGING_INFO
++ /* All AIX function names have a duplicate entry
++ beginning with a dot. */
++ if (*name == '.')
++ ++name;
++#endif
++
++ switch (is_ctor_dtor (name))
++ {
++ case 1:
++ if (! is_shared)
++ add_to_list (&constructors, name);
++#if defined (COLLECT_EXPORT_LIST) && !defined (LD_INIT_SWITCH)
++ if (which_pass == PASS_OBJ)
++ add_to_list (&exports, name);
++#endif
++ break;
++
++ case 2:
++ if (! is_shared)
++ add_to_list (&destructors, name);
++#if defined (COLLECT_EXPORT_LIST) && !defined (LD_INIT_SWITCH)
++ if (which_pass == PASS_OBJ)
++ add_to_list (&exports, name);
++#endif
++ break;
++
++#ifdef COLLECT_EXPORT_LIST
++ case 3:
++#ifndef LD_INIT_SWITCH
++ if (is_shared)
++ add_to_list (&constructors, name);
++#endif
++ break;
++
++ case 4:
++#ifndef LD_INIT_SWITCH
++ if (is_shared)
++ add_to_list (&destructors, name);
++#endif
++ break;
++#endif
++
++ case 5:
++ if (! is_shared)
++ add_to_list (&frame_tables, name);
++#if defined (COLLECT_EXPORT_LIST) && !defined (LD_INIT_SWITCH)
++ if (which_pass == PASS_OBJ)
++ add_to_list (&exports, name);
++#endif
++ break;
++
++ default: /* not a constructor or destructor */
++#ifdef COLLECT_EXPORT_LIST
++ /* Explicitly export all global symbols when
++ building a shared object on AIX, but do not
++ re-export symbols from another shared object
++ and do not export symbols if the user
++ provides an explicit export list. */
++ if (shared_obj && !is_shared
++ && which_pass == PASS_OBJ && !export_flag)
++ add_to_list (&exports, name);
++#endif
++ continue;
++ }
++
++ if (debug)
++#if !defined(EXTENDED_COFF)
++ fprintf (stderr, "\tsec=%d class=%d type=%s%o %s\n",
++ symbol.n_scnum, symbol.n_sclass,
++ (symbol.n_type ? "0" : ""), symbol.n_type,
++ name);
++#else
++ fprintf (stderr,
++ "\tiss = %5d, value = %5ld, index = %5d, name = %s\n",
++ symbol.iss, (long) symbol.value, symbol.index, name);
++#endif
++ }
++ }
++ }
++#ifdef COLLECT_EXPORT_LIST
++ else
++ {
++ /* If archive contains both 32-bit and 64-bit objects,
++ we want to skip objects in other mode so mismatch normal. */
++ if (debug)
++ fprintf (stderr, "%s : magic=%o aix64=%d mismatch\n",
++ prog_name, HEADER (ldptr).f_magic, aix64_flag);
++ }
++#endif
++ }
++ else
++ {
++ fatal ("%s: cannot open as COFF file", prog_name);
++ }
++#ifdef COLLECT_EXPORT_LIST
++ /* On AIX loop continues while there are more members in archive. */
++ }
++ while (ldclose (ldptr) == FAILURE);
++#else
++ /* Otherwise we simply close ldptr. */
++ (void) ldclose(ldptr);
++#endif
++}
++#endif /* OBJECT_FORMAT_COFF */
++
++#ifdef COLLECT_EXPORT_LIST
++/* Given a library name without "lib" prefix, this function
++ returns a full library name including a path. */
++static char *
++resolve_lib_name (const char *name)
++{
++ char *lib_buf;
++ int i, j, l = 0;
++ /* Library extensions for AIX dynamic linking. */
++ const char * const libexts[2] = {"a", "so"};
++
++ for (i = 0; libpaths[i]; i++)
++ if (libpaths[i]->max_len > l)
++ l = libpaths[i]->max_len;
++
++ lib_buf = xmalloc (l + strlen(name) + 10);
++
++ for (i = 0; libpaths[i]; i++)
++ {
++ struct prefix_list *list = libpaths[i]->plist;
++ for (; list; list = list->next)
++ {
++ /* The following lines are needed because path_prefix list
++ may contain directories both with trailing '/' and
++ without it. */
++ const char *p = "";
++ if (list->prefix[strlen(list->prefix)-1] != '/')
++ p = "/";
++ for (j = 0; j < 2; j++)
++ {
++ sprintf (lib_buf, "%s%slib%s.%s",
++ list->prefix, p, name,
++ libexts[(j + aixrtl_flag) % 2]);
++ if (debug) fprintf (stderr, "searching for: %s\n", lib_buf);
++ if (file_exists (lib_buf))
++ {
++ if (debug) fprintf (stderr, "found: %s\n", lib_buf);
++ return (lib_buf);
++ }
++ }
++ }
++ }
++ if (debug)
++ fprintf (stderr, "not found\n");
++ else
++ fatal ("library lib%s not found", name);
++ return (NULL);
++}
++#endif /* COLLECT_EXPORT_LIST */
+diff -uNr gcc-3.4.6.orig/gcc/Makefile.in gcc-3.4.6/gcc/Makefile.in
+--- gcc-3.4.6.orig/gcc/Makefile.in 2005-02-24 10:26:59.000000000 +0100
++++ gcc-3.4.6/gcc/Makefile.in 2007-11-13 08:48:20.000000000 +0100
+@@ -2945,9 +2945,9 @@
+ install-driver: installdirs xgcc$(exeext)
+ -rm -f $(DESTDIR)$(bindir)/$(GCC_INSTALL_NAME)$(exeext)
+ -$(INSTALL_PROGRAM) xgcc$(exeext) $(DESTDIR)$(bindir)/$(GCC_INSTALL_NAME)$(exeext)
+- -rm -f $(DESTDIR)$(bindir)/$(target_noncanonical)-gcc-$(version)
++ -rm -f $(DESTDIR)$(bindir)/$(target_noncanonical)-gcc-$(version)$(exeext)
+ -( cd $(DESTDIR)$(bindir) && \
+- $(LN) $(GCC_INSTALL_NAME)$(exeext) $(target_noncanonical)-gcc-$(version) )
++ $(LN) $(GCC_INSTALL_NAME)$(exeext) $(target_noncanonical)-gcc-$(version)$(exeext) )
+ -if [ -f gcc-cross$(exeext) ] ; then \
+ if [ -d $(DESTDIR)$(gcc_tooldir)/bin/. ] ; then \
+ rm -f $(DESTDIR)$(gcc_tooldir)/bin/gcc$(exeext); \
+diff -uNr gcc-3.4.6.orig/gcc/Makefile.in.orig gcc-3.4.6/gcc/Makefile.in.orig
+--- gcc-3.4.6.orig/gcc/Makefile.in.orig 1970-01-01 01:00:00.000000000 +0100
++++ gcc-3.4.6/gcc/Makefile.in.orig 2005-02-24 10:26:59.000000000 +0100
+@@ -0,0 +1,3914 @@
++# Makefile for GNU Compiler Collection
++# Run 'configure' to generate Makefile from Makefile.in
++
++# Copyright (C) 1987, 1988, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
++# 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
++
++#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.
++
++# The targets for external use include:
++# all, doc, proto, install, install-cross, install-cross-rest,
++# uninstall, TAGS, mostlyclean, clean, distclean, maintainer-clean,
++# stage1, stage2, stage3, stage4.
++
++# This is the default target.
++# Set by autoconf to "all.internal" for a native build, or
++# "all.cross" to build a cross compiler.
++all: @ALL@
++
++# Depend on this to specify a phony target portably.
++force:
++
++# This tells GNU make version 3 not to export the variables
++# defined in this file into the environment (and thus recursive makes).
++.NOEXPORT:
++# And this tells it not to automatically pass command-line variables
++# to recursive makes.
++MAKEOVERRIDES =
++
++# Suppress smart makes who think they know how to automake yacc and flex file
++.y.c:
++.l.c:
++
++# The only suffixes we want for implicit rules are .c and .o, so clear
++# the list and add them. This speeds up GNU Make, and allows -r to work.
++# For i18n support, we also need .gmo, .po, .pox.
++# This must come before the language makefile fragments to allow them to
++# add suffixes and rules of their own.
++.SUFFIXES:
++.SUFFIXES: .c .o .po .pox .gmo
++
++# -------------------------------
++# Standard autoconf-set variables
++# -------------------------------
++
++build=@build@
++host=@host@
++target=@target@
++target_noncanonical:=@target_noncanonical@
++
++# Sed command to transform gcc to installed name.
++program_transform_name := @program_transform_name@
++
++# -----------------------------
++# Directories used during build
++# -----------------------------
++
++# Directory where sources are, from where we are.
++srcdir = @srcdir@
++docdir = @srcdir@/doc
++
++# Directory where sources are, absolute.
++abs_srcdir = @abs_srcdir@
++abs_docdir = @abs_srcdir@/doc
++
++# Top build directory, relative to here.
++top_builddir = ..
++# objdir is set by configure.
++# It's normally the absolute path to the current directory.
++objdir = @objdir@
++
++# --------
++# Defined vpaths
++# --------
++
++# Directory where sources are, from where we are.
++VPATH = @srcdir@
++
++# We define a vpath for the sources of the .texi files here because they
++# are split between multiple directories and we would rather use one implicit
++# pattern rule for everything.
++# This vpath could be extended within the Make-lang fragments.
++
++vpath %.texi $(docdir):$(docdir)/include
++
++# ----
++# Default values for variables overridden in Makefile fragments.
++# These need to be quite early in the Makefile so as to avoid
++# trouble induced by changes in fragment ordering.
++# ----
++
++# For ada/Make-lang.in; overridden in, for example, config/pa/x-ada.
++X_ADA_CFLAGS =
++T_ADA_CFLAGS =
++X_ADAFLAGS =
++T_ADAFLAGS =
++
++# --------
++# UNSORTED
++# --------
++
++# Variables that exist for you to override.
++# See below for how to change them for certain systems.
++
++# List of language subdirectories.
++SUBDIRS =@subdirs@
++
++# Selection of languages to be made.
++CONFIG_LANGUAGES = @all_languages@
++LANGUAGES = c gcov$(exeext) gcov-dump$(exeext) $(CONFIG_LANGUAGES)
++
++# Selection of languages to be made during stage1 build.
++BOOT_LANGUAGES = c @all_boot_languages@
++
++# Various ways of specifying flags for compilations:
++# CFLAGS is for the user to override to, e.g., do a cross build with -O2.
++# For recursive bootstrap builds CFLAGS is used to pass in STAGE1_CFLAGS
++# or BOOT_CFLAGS
++# STAGE1_CFLAGS is set by configure on some targets or passed from toplevel
++# and sets the CFLAGS passed to stage1 of a bootstrap compilation.
++# BOOT_CFLAGS is the value of CFLAGS to pass to the stage2, stage3 and stage4
++# bootstrap compilations.
++# XCFLAGS is used for most compilations but not when using the GCC just built.
++# TCFLAGS is used for compilations with the GCC just built.
++XCFLAGS =
++TCFLAGS =
++CFLAGS = -g
++STAGE1_CFLAGS = -g @stage1_cflags@
++BOOT_CFLAGS = -g -O2
++
++# Flags to determine code coverage. When coverage is disabled, this will
++# contain the optimization flags, as you normally want code coverage
++# without optimization.
++COVERAGE_FLAGS = @coverage_flags@
++coverageexts = .{gcda,gcno}
++
++# The warning flags are separate from BOOT_CFLAGS because people tend to
++# override optimization flags and we'd like them to still have warnings
++# turned on. These flags are also used to pass other stage dependent
++# flags from configure. The user is free to explicitly turn these flags
++# off if they wish.
++# LOOSE_WARN are the warning flags to use when compiling something
++# which is only compiled with gcc, such as libgcc and the frontends
++# other than C.
++# STRICT_WARN and STRICT2_WARN are the additional warning flags to
++# apply to the back end and the C front end, which may be compiled
++# with other compilers. This is partially controlled by configure in
++# stage1, as not all versions of gcc understand -Wno-long-long.
++LOOSE_WARN = -W -Wall -Wwrite-strings -Wstrict-prototypes -Wmissing-prototypes
++STRICT_WARN = @strict1_warn@
++STRICT2_WARN = -pedantic -Wno-long-long -Wold-style-definition @WERROR@
++
++# This is set by --enable-checking. The idea is to catch forgotten
++# "extern" tags in header files.
++NOCOMMON_FLAG = @nocommon_flag@
++
++# This is set by --disable-maintainer-mode (default) to "#"
++MAINT := @MAINT@
++
++# These are set by --enable-checking=valgrind.
++RUN_GEN = @valgrind_command@
++VALGRIND_DRIVER_DEFINES = @valgrind_path_defines@
++
++# This is how we control whether or not the additional warnings are applied.
++.-warn = $(STRICT_WARN)
++GCC_WARN_CFLAGS = $(LOOSE_WARN) $($(@D)-warn) $(NOCOMMON_FLAG) $($@-warn)
++
++# These files are to have -Werror bypassed in stage2:
++# These are very hard to completely clean due to target complexities.
++gcc.o-warn = -Wno-error
++insn-conditions.o-warn = -Wno-error
++# Bison-1.75 output often yields (harmless) -Wtraditional warnings
++gengtype-yacc.o-warn = -Wno-error
++c-parse.o-warn = -Wno-error
++# flex output may yield harmless "no previous prototype" warnings
++gengtype-lex.o-warn = -Wno-error
++# SYSCALLS.c misses prototypes
++SYSCALLS.c.X-warn = -Wno-strict-prototypes -Wno-error
++
++# All warnings have to be shut off in stage1 if the compiler used then
++# isn't gcc; configure determines that. WARN_CFLAGS will be either
++# $(GCC_WARN_CFLAGS), or nothing.
++WARN_CFLAGS = @warn_cflags@
++
++CPPFLAGS = @CPPFLAGS@
++
++# These exists to be overridden by the x-* and t-* files, respectively.
++X_CFLAGS =
++T_CFLAGS =
++
++X_CPPFLAGS =
++T_CPPFLAGS =
++
++AWK = @AWK@
++CC = @CC@
++BISON = @BISON@
++BISONFLAGS =
++FLEX = @FLEX@
++FLEXFLAGS =
++AR = ar
++AR_FLAGS = rc
++RANLIB = @RANLIB@
++
++# -------------------------------------------
++# Programs which operate on the build machine
++# -------------------------------------------
++
++SHELL = @SHELL@
++# pwd command to use. Allow user to override default by setting PWDCMD in
++# the environment to account for automounters. The make variable must not
++# be called PWDCMD, otherwise the value set here is passed to make
++# subprocesses and overrides the setting from the user's environment.
++# Don't use PWD since it is a common shell environment variable and we
++# don't want to corrupt it.
++PWD_COMMAND = $${PWDCMD-pwd}
++# on sysV, define this as cp.
++INSTALL = @INSTALL@
++# Some systems may be missing symbolic links, regular links, or both.
++# Allow configure to check this and use "ln -s", "ln", or "cp" as appropriate.
++LN=@LN@
++LN_S=@LN_S@
++# These permit overriding just for certain files.
++INSTALL_PROGRAM = @INSTALL_PROGRAM@
++INSTALL_DATA = @INSTALL_DATA@
++INSTALL_SCRIPT = @INSTALL@
++MAKEINFO = @MAKEINFO@
++MAKEINFOFLAGS = --no-split
++TEXI2DVI = texi2dvi
++TEXI2POD = perl $(srcdir)/../contrib/texi2pod.pl
++POD2MAN = pod2man --center="GNU" --release="gcc-$(version)"
++# Some versions of `touch' (such as the version on Solaris 2.8)
++# do not correctly set the timestamp due to buggy versions of `utime'
++# in the kernel. So, we use `echo' instead.
++STAMP = echo timestamp >
++
++# Make sure the $(MAKE) variable is defined.
++@SET_MAKE@
++REMAKEFLAGS=LANGUAGES="$(LANGUAGES)" BOOT_CFLAGS="$(BOOT_CFLAGS)"
++
++# --------
++# UNSORTED
++# --------
++
++# Some compilers can't handle cc -c blah.c -o foo/blah.o.
++# In stage2 and beyond, we force this to "-o $@" since we know we're using gcc.
++OUTPUT_OPTION = @OUTPUT_OPTION@
++
++# This is where we get zlib from. zlibdir is -L../zlib and zlibinc is
++# -I../zlib, unless we were configured with --with-system-zlib, in which
++# case both are empty.
++ZLIB = @zlibdir@ -lz
++ZLIBINC = @zlibinc@
++
++# Substitution type for target's getgroups 2nd arg.
++TARGET_GETGROUPS_T = @TARGET_GETGROUPS_T@
++
++# Target to use when installing include directory. Either
++# install-headers-tar, install-headers-cpio or install-headers-cp.
++INSTALL_HEADERS_DIR = @build_install_headers_dir@
++
++# Header files that are made available under the same name
++# to programs compiled with GCC.
++USER_H = $(srcdir)/ginclude/float.h \
++ $(srcdir)/ginclude/iso646.h \
++ $(srcdir)/ginclude/stdarg.h \
++ $(srcdir)/ginclude/stdbool.h \
++ $(srcdir)/ginclude/stddef.h \
++ $(srcdir)/ginclude/varargs.h \
++ $(srcdir)/unwind.h \
++ $(EXTRA_HEADERS)
++
++# The GCC to use for compiling libgcc.a and crt*.o.
++# Usually the one we just built.
++# Don't use this as a dependency--use $(GCC_PASSES) or $(GCC_PARTS).
++GCC_FOR_TARGET = $(STAGE_CC_WRAPPER) ./xgcc -B./ -B$(build_tooldir)/bin/ -isystem $(build_tooldir)/include -isystem $(build_tooldir)/sys-include -L$(objdir)/../ld
++
++# This is used instead of ALL_CFLAGS when compiling with GCC_FOR_TARGET.
++# It omits XCFLAGS, and specifies -B./.
++# It also specifies -isystem ./include to find, e.g., stddef.h.
++GCC_CFLAGS=$(INTERNAL_CFLAGS) $(X_CFLAGS) $(T_CFLAGS) $(LOOSE_WARN) -Wold-style-definition $($@-warn) -isystem ./include $(TCFLAGS)
++
++# ---------------------------------------------------
++# Programs which produce files for the target machine
++# ---------------------------------------------------
++
++AR_FOR_TARGET = ` \
++ if [ -f $(objdir)/../binutils/ar ] ; then \
++ echo $(objdir)/../binutils/ar ; \
++ else \
++ if [ "$(host)" = "$(target)" ] ; then \
++ echo ar; \
++ else \
++ t='$(program_transform_name)'; echo ar | sed -e $$t ; \
++ fi; \
++ fi`
++AR_FLAGS_FOR_TARGET =
++AR_CREATE_FOR_TARGET = $(AR_FOR_TARGET) $(AR_FLAGS_FOR_TARGET) rc
++AR_EXTRACT_FOR_TARGET = $(AR_FOR_TARGET) $(AR_FLAGS_FOR_TARGET) x
++RANLIB_FOR_TARGET = ` \
++ if [ -f $(objdir)/../binutils/ranlib ] ; then \
++ echo $(objdir)/../binutils/ranlib ; \
++ else \
++ if [ "$(host)" = "$(target)" ] ; then \
++ echo $(RANLIB); \
++ else \
++ t='$(program_transform_name)'; echo ranlib | sed -e $$t ; \
++ fi; \
++ fi`
++NM_FOR_TARGET = ` \
++ if [ -f ./nm ] ; then \
++ echo ./nm ; \
++ elif [ -f $(objdir)/../binutils/nm-new ] ; then \
++ echo $(objdir)/../binutils/nm-new ; \
++ else \
++ if [ "$(host)" = "$(target)" ] ; then \
++ echo nm; \
++ else \
++ t='$(program_transform_name)'; echo nm | sed -e $$t ; \
++ fi; \
++ fi`
++
++# --------
++# UNSORTED
++# --------
++
++# Where to find some libiberty headers.
++HASHTAB_H = $(srcdir)/../include/hashtab.h
++OBSTACK_H = $(srcdir)/../include/obstack.h
++SPLAY_TREE_H= $(srcdir)/../include/splay-tree.h
++FIBHEAP_H = $(srcdir)/../include/fibheap.h
++PARTITION_H = $(srcdir)/../include/partition.h
++
++# Default native SYSTEM_HEADER_DIR, to be overridden by targets.
++NATIVE_SYSTEM_HEADER_DIR = /usr/include
++# Default cross SYSTEM_HEADER_DIR, to be overridden by targets.
++CROSS_SYSTEM_HEADER_DIR = @CROSS_SYSTEM_HEADER_DIR@
++
++# autoconf sets SYSTEM_HEADER_DIR to one of the above.
++SYSTEM_HEADER_DIR = @SYSTEM_HEADER_DIR@
++
++# Control whether to run fixproto and fixincludes.
++STMP_FIXPROTO = @STMP_FIXPROTO@
++STMP_FIXINC = @STMP_FIXINC@
++
++# Test to see whether <limits.h> exists in the system header files.
++LIMITS_H_TEST = [ -f $(SYSTEM_HEADER_DIR)/limits.h ]
++
++# Directory for prefix to system directories, for
++# each of $(system_prefix)/usr/include, $(system_prefix)/usr/lib, etc.
++TARGET_SYSTEM_ROOT = @TARGET_SYSTEM_ROOT@
++
++xmake_file=@xmake_file@
++tmake_file=@tmake_file@
++out_file=$(srcdir)/config/@out_file@
++out_object_file=@out_object_file@
++md_file=$(srcdir)/config/@md_file@
++tm_file_list=@tm_file_list@
++tm_include_list=@tm_include_list@
++tm_defines=@tm_defines@
++tm_p_file_list=@tm_p_file_list@
++tm_p_include_list=@tm_p_include_list@
++build_xm_file_list=@build_xm_file_list@
++build_xm_include_list=@build_xm_include_list@
++build_xm_defines=@build_xm_defines@
++host_xm_file_list=@host_xm_file_list@
++host_xm_include_list=@host_xm_include_list@
++host_xm_defines=@host_xm_defines@
++xm_file_list=@xm_file_list@
++xm_include_list=@xm_include_list@
++xm_defines=@xm_defines@
++lang_checks=check-gcc
++lang_opt_files=@lang_opt_files@ $(srcdir)/c.opt $(srcdir)/common.opt
++lang_specs_files=@lang_specs_files@
++lang_tree_files=@lang_tree_files@
++target_cpu_default=@target_cpu_default@
++GCC_THREAD_FILE=@thread_file@
++OBJC_BOEHM_GC=@objc_boehm_gc@
++GTHREAD_FLAGS=@gthread_flags@
++extra_modes_file=@extra_modes_file@
++host_hook_obj=@out_host_hook_obj@
++# Be prepared for gcc2 merges.
++gcc_version=@gcc_version@
++gcc_version_trigger=@gcc_version_trigger@
++version=$(gcc_version)
++mainversion=`grep version_string $(srcdir)/version.c | sed -e 's/.*\"\([0-9]*\.[0-9]*\).*/\1/'`
++
++# ------------------------
++# Installation directories
++# ------------------------
++
++# Common prefix for installation directories.
++# NOTE: This directory must exist when you start installation.
++prefix = @prefix@
++# Directory in which to put localized header files. On the systems with
++# gcc as the native cc, `local_prefix' may not be `prefix' which is
++# `/usr'.
++# NOTE: local_prefix *should not* default from prefix.
++local_prefix = @local_prefix@
++# Directory in which to put host dependent programs and libraries
++exec_prefix = @exec_prefix@
++# Directory in which to put the executable for the command `gcc'
++bindir = @bindir@
++# Directory in which to put the directories used by the compiler.
++libdir = @libdir@
++# Directory in which GCC puts its executables.
++libexecdir = @libexecdir@
++
++# --------
++# UNSORTED
++# --------
++
++# Directory in which the compiler finds libraries etc.
++libsubdir = $(libdir)/gcc/$(target_noncanonical)/$(version)
++# Directory in which the compiler finds executables
++libexecsubdir = $(libexecdir)/gcc/$(target_noncanonical)/$(version)
++# Used to produce a relative $(gcc_tooldir) in gcc.o
++unlibsubdir = ../../..
++# Directory in which to find other cross-compilation tools and headers.
++dollar = @dollar@
++# Used in install-cross.
++gcc_tooldir = @gcc_tooldir@
++# Used to install the shared libgcc.
++slibdir = @slibdir@
++# Since gcc_tooldir does not exist at build-time, use -B$(build_tooldir)/bin/
++build_tooldir = $(exec_prefix)/$(target_noncanonical)
++# Directory in which the compiler finds target-independent g++ includes.
++gcc_gxx_include_dir = @gcc_gxx_include_dir@
++# Directory to search for site-specific includes.
++local_includedir = $(local_prefix)/include
++includedir = $(prefix)/include
++# where the info files go
++infodir = @infodir@
++# Where cpp should go besides $prefix/bin if necessary
++cpp_install_dir = @cpp_install_dir@
++# where the locale files go
++datadir = @datadir@
++localedir = $(datadir)/locale
++# Extension (if any) to put in installed man-page filename.
++man1ext = .1
++man7ext = .7
++objext = .o
++exeext = @host_exeext@
++build_exeext = @build_exeext@
++
++# Directory in which to put man pages.
++mandir = @mandir@
++man1dir = $(mandir)/man1
++man7dir = $(mandir)/man7
++# Dir for temp files.
++tmpdir = /tmp
++
++# Whether we were configured with NLS.
++USE_NLS = @USE_NLS@
++
++# Internationalization library.
++LIBINTL = @LIBINTL@
++LIBINTL_DEP = @LIBINTL_DEP@
++
++# Character encoding conversion library.
++LIBICONV = @LIBICONV@
++LIBICONV_DEP = @LIBICONV_DEP@
++
++# The GC method to be used on this system.
++GGC=@GGC@.o
++
++# If a supplementary library is being used for the GC.
++GGC_LIB=
++
++# libgcc.a may be built directly or via stmp-multilib,
++# and installed likewise. Overridden by t-fragment.
++LIBGCC = libgcc.a
++INSTALL_LIBGCC = install-libgcc
++
++# Options to use when compiling libgcc2.a.
++#
++LIBGCC2_DEBUG_CFLAGS = -g
++LIBGCC2_CFLAGS = -O2 $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) $(TARGET_LIBGCC2_CFLAGS) $(LIBGCC2_DEBUG_CFLAGS) $(GTHREAD_FLAGS) -DIN_LIBGCC2 -D__GCC_FLOAT_NOT_NEEDED @inhibit_libc@
++
++# Additional options to use when compiling libgcc2.a.
++# Some targets override this to -isystem include
++LIBGCC2_INCLUDES =
++
++# Additional target-dependent options for compiling libgcc2.a.
++TARGET_LIBGCC2_CFLAGS =
++
++# Options to use when compiling crtbegin/end.
++CRTSTUFF_CFLAGS = -O2 $(GCC_CFLAGS) $(INCLUDES) $(MULTILIB_CFLAGS) -g0 \
++ -finhibit-size-directive -fno-inline-functions -fno-exceptions \
++ -fno-zero-initialized-in-bss -fno-unit-at-a-time
++
++# Additional sources to handle exceptions; overridden by targets as needed.
++LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/unwind-dw2-fde.c \
++ $(srcdir)/unwind-sjlj.c $(srcdir)/gthr-gnat.c $(srcdir)/unwind-c.c
++LIB2ADDEHSTATIC = $(LIB2ADDEH)
++LIB2ADDEHSHARED = $(LIB2ADDEH)
++LIB2ADDEHDEP = unwind.inc unwind-dw2-fde.h
++
++# Don't build libunwind by default.
++LIBUNWIND =
++LIBUNWINDDEP =
++SHLIBUNWIND_LINK =
++SHLIBUNWIND_INSTALL =
++
++# nm flags to list global symbols in libgcc object files.
++SHLIB_NM_FLAGS = -pg
++
++# List of extra executables that should be compiled for this target machine
++# that are used for compiling from source code to object code.
++# The rules for compiling them should be in the t-* file for the machine.
++EXTRA_PASSES =@extra_passes@
++
++# Like EXTRA_PASSES, but these are used when linking.
++EXTRA_PROGRAMS = @extra_programs@
++
++# List of extra object files that should be compiled for this target machine.
++# The rules for compiling them should be in the t-* file for the machine.
++EXTRA_PARTS = @extra_parts@
++
++# List of extra object files that should be compiled and linked with
++# compiler proper (cc1, cc1obj, cc1plus).
++EXTRA_OBJS = @extra_objs@
++
++# List of extra object files that should be compiled and linked with
++# the gcc driver.
++EXTRA_GCC_OBJS =@extra_gcc_objs@
++
++# List of additional header files to install.
++EXTRA_HEADERS =@extra_headers_list@
++
++# It is convenient for configure to add the assignment at the beginning,
++# so don't override it here.
++USE_COLLECT2 = collect2$(exeext)
++
++# List of extra C and assembler files to add to static and shared libgcc2.
++# Assembler files should have names ending in `.asm'.
++LIB2FUNCS_EXTRA =
++
++# List of extra C and assembler files to add to static libgcc2.
++# Assembler files should have names ending in `.asm'.
++LIB2FUNCS_STATIC_EXTRA =
++
++# List of extra C and assembler files to add to shared libgcc2.
++# Assembler files should have names ending in `.asm'.
++LIB2FUNCS_SHARED_EXTRA =
++
++# Program to convert libraries.
++LIBCONVERT =
++
++# Control whether header files are installed.
++INSTALL_HEADERS=install-headers install-mkheaders
++
++# Control whether Info documentation is built and installed.
++BUILD_INFO = @BUILD_INFO@
++
++# Control whether manpages generated by texi2pod.pl can be rebuilt.
++GENERATED_MANPAGES = @GENERATED_MANPAGES@
++
++# Additional directories of header files to run fixincludes on.
++# These should be directories searched automatically by default
++# just as /usr/include is.
++# *Do not* use this for directories that happen to contain
++# header files, but are not searched automatically by default.
++# On most systems, this is empty.
++OTHER_FIXINCLUDES_DIRS=
++
++# A list of all the language-specific executables.
++COMPILERS = cc1$(exeext) @all_compilers@
++
++# List of things which should already be built whenever we try to use xgcc
++# to compile anything (without linking).
++GCC_PASSES=xgcc$(exeext) cc1$(exeext) specs $(EXTRA_PASSES)
++
++# List of things which should already be built whenever we try to use xgcc
++# to link anything.
++GCC_PARTS=$(GCC_PASSES) $(LIBGCC) $(EXTRA_PROGRAMS) $(USE_COLLECT2) $(EXTRA_PARTS)
++
++# Directory to link to, when using the target `maketest'.
++DIR = ../gcc
++
++# Flags to use when cross-building GCC.
++# Prefix to apply to names of object files when using them
++# to run on the machine we are compiling on.
++BUILD_PREFIX = @BUILD_PREFIX@
++# Prefix to apply to names of object files when compiling them
++# to run on the machine we are compiling on.
++# The default for this variable is chosen to keep these rules
++# out of the way of the other rules for compiling the same source files.
++BUILD_PREFIX_1 = @BUILD_PREFIX_1@
++# Native compiler for the build machine and its switches.
++CC_FOR_BUILD = @CC_FOR_BUILD@
++BUILD_CFLAGS= @BUILD_CFLAGS@ -DGENERATOR_FILE
++
++# Native linker and preprocessor flags. For x-fragment overrides.
++BUILD_LDFLAGS=$(LDFLAGS)
++BUILD_CPPFLAGS=$(ALL_CPPFLAGS)
++
++# Actual name to use when installing a native compiler.
++GCC_INSTALL_NAME := $(shell echo gcc|sed '$(program_transform_name)')
++GCC_TARGET_INSTALL_NAME := $(target_noncanonical)-$(shell echo gcc|sed '$(program_transform_name)')
++CPP_INSTALL_NAME := $(shell echo cpp|sed '$(program_transform_name)')
++PROTOIZE_INSTALL_NAME := $(shell echo protoize|sed '$(program_transform_name)')
++UNPROTOIZE_INSTALL_NAME := $(shell echo unprotoize|sed '$(program_transform_name)')
++GCOV_INSTALL_NAME := $(shell echo gcov|sed '$(program_transform_name)')
++GCCBUG_INSTALL_NAME := $(shell echo gccbug|sed '$(program_transform_name)')
++
++# Setup the testing framework, if you have one
++EXPECT = `if [ -f $${rootme}/../expect/expect ] ; then \
++ echo $${rootme}/../expect/expect ; \
++ else echo expect ; fi`
++
++RUNTEST = `if [ -f $${srcdir}/../dejagnu/runtest ] ; then \
++ echo $${srcdir}/../dejagnu/runtest ; \
++ else echo runtest; fi`
++RUNTESTFLAGS =
++
++# Extra symbols for fixproto to define when parsing headers.
++FIXPROTO_DEFINES =
++
++# Extra flags to use when compiling crt{begin,end}.o.
++CRTSTUFF_T_CFLAGS =
++
++# Extra flags to use when compiling [m]crt0.o.
++CRT0STUFF_T_CFLAGS =
++
++# "t" or nothing, for building multilibbed versions of, say, crtbegin.o.
++T =
++
++# Should T contain a `=', libgcc.mk will make T_TARGET, setting
++# $(T_TARGET) to the name of the actual target filename.
++T_TARGET =
++T_TARGET : $(T_TARGET)
++
++# This should name the specs file that we're going to install. Target
++# Makefiles may override it and name another file to be generated from
++# the built-in specs and installed as the default spec, as long as
++# they also introduce a rule to generate a file name specs, to be used
++# at build time.
++SPECS = specs
++
++# End of variables for you to override.
++
++# GTM_H lists the config files that the generator files depend on,
++# while TM_H lists the ones ordinary gcc files depend on, which
++# includes several files generated by those generators.
++BCONFIG_H = bconfig.h $(build_xm_file_list)
++CONFIG_H = config.h $(host_xm_file_list)
++TCONFIG_H = tconfig.h $(xm_file_list)
++TM_P_H = tm_p.h $(tm_p_file_list)
++GTM_H = tm.h $(tm_file_list)
++TM_H = $(GTM_H) insn-constants.h insn-flags.h
++
++TARGET_H = $(TM_H) target.h
++HOOKS_H = hooks.h
++LANGHOOKS_DEF_H = langhooks-def.h $(HOOKS_H)
++TARGET_DEF_H = target-def.h $(HOOKS_H)
++MACHMODE_H = machmode.h mode-classes.def insn-modes.h
++RTL_BASE_H = rtl.h rtl.def $(MACHMODE_H)
++RTL_H = $(RTL_BASE_H) genrtl.h input.h
++PARAMS_H = params.h params.def
++TREE_H = tree.h tree.def $(MACHMODE_H) tree-check.h version.h builtins.def \
++ input.h
++BASIC_BLOCK_H = basic-block.h bitmap.h sbitmap.h varray.h $(PARTITION_H) \
++ hard-reg-set.h cfghooks.h
++COVERAGE_H = coverage.h gcov-io.h gcov-iov.h
++DEMANGLE_H = $(srcdir)/../include/demangle.h
++RECOG_H = recog.h
++EXPR_H = expr.h
++OPTABS_H = optabs.h insn-codes.h
++REGS_H = regs.h varray.h $(MACHMODE_H)
++INTEGRATE_H = integrate.h varray.h
++LOOP_H = loop.h varray.h bitmap.h
++GCC_H = gcc.h version.h
++GGC_H = ggc.h gtype-desc.h
++TIMEVAR_H = timevar.h timevar.def
++INSN_ATTR_H = insn-attr.h $(srcdir)/insn-addr.h $(srcdir)/varray.h
++C_COMMON_H = c-common.h $(SPLAY_TREE_H) $(CPPLIB_H)
++C_TREE_H = c-tree.h $(C_COMMON_H)
++SYSTEM_H = system.h hwint.h $(srcdir)/../include/libiberty.h
++PREDICT_H = predict.h predict.def
++CPPLIB_H = cpplib.h line-map.h
++PRETTY_PRINT_H = pretty-print.h input.h $(OBSTACK_H)
++DIAGNOSTIC_H = diagnostic.h diagnostic.def $(PRETTY_PRINT_H)
++C_PRETTY_PRINT_H = $(PRETTY_PRINT_H) $(C_COMMON_H) $(TREE_H)
++
++#
++# Now figure out from those variables how to compile and link.
++
++# IN_GCC distinguishes between code compiled into GCC itself and other
++# programs built during a bootstrap.
++# autoconf inserts -DCROSS_COMPILE if we are building a cross compiler.
++INTERNAL_CFLAGS = -DIN_GCC @CROSS@
++
++# This is the variable actually used when we compile. If you change this,
++# you probably want to update BUILD_CFLAGS in configure.ac
++ALL_CFLAGS = $(X_CFLAGS) $(T_CFLAGS) \
++ $(CFLAGS) $(INTERNAL_CFLAGS) $(COVERAGE_FLAGS) $(WARN_CFLAGS) $(XCFLAGS) @DEFS@
++
++# Likewise.
++ALL_CPPFLAGS = $(CPPFLAGS) $(X_CPPFLAGS) $(T_CPPFLAGS)
++
++# Build and host support libraries. FORBUILD is either
++# .. or ../$(build_alias) depending on whether host != build.
++LIBIBERTY = ../libiberty/libiberty.a
++BUILD_LIBIBERTY = @FORBUILD@/libiberty/libiberty.a
++
++# Dependencies on the intl and portability libraries.
++LIBDEPS= $(LIBIBERTY) $(LIBINTL_DEP) $(LIBICONV_DEP)
++
++# Likewise, for use in the tools that must run on this machine
++# even if we are cross-building GCC.
++BUILD_LIBDEPS= $(BUILD_LIBIBERTY)
++
++# How to link with both our special library facilities
++# and the system's installed libraries.
++LIBS = @LIBS@ $(LIBIBERTY) $(LIBINTL) $(LIBICONV)
++
++# Any system libraries needed just for GNAT.
++SYSLIBS = @GNAT_LIBEXC@
++
++# Libs needed (at present) just for jcf-dump.
++LDEXP_LIB = @LDEXP_LIB@
++
++# Likewise, for use in the tools that must run on this machine
++# even if we are cross-building GCC.
++BUILD_LIBS = $(BUILD_LIBIBERTY)
++
++BUILD_RTL = $(BUILD_PREFIX)rtl.o read-rtl.o $(BUILD_PREFIX)bitmap.o \
++ $(BUILD_PREFIX)ggc-none.o min-insn-modes.o
++BUILD_SUPPORT = gensupport.o insn-conditions.o
++BUILD_EARLY_SUPPORT = gensupport.o dummy-conditions.o
++
++BUILD_PRINT = print-rtl1.o
++BUILD_ERRORS = $(BUILD_PREFIX)errors.o
++BUILD_VARRAY = $(BUILD_PREFIX)varray.o
++
++# Specify the directories to be searched for header files.
++# Both . and srcdir are used, in that order,
++# so that *config.h will be found in the compilation
++# subdirectory rather than in the source directory.
++# -I$(@D) and -I$(srcdir)/$(@D) cause the subdirectory of the file
++# currently being compiled, in both source trees, to be examined as well.
++# libintl.h will be found in ../intl if we are using the included libintl.
++INCLUDES = -I. -I$(@D) -I$(srcdir) -I$(srcdir)/$(@D) \
++ -I$(srcdir)/../include @INCINTL@
++
++.c.o:
++ $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)
++
++#
++# Support for additional languages (other than C).
++# C can be supported this way too (leave for later).
++
++LANG_MAKEFRAGS = @all_lang_makefrags@
++LANG_MAKEFILES = @all_lang_makefiles@
++LANG_STAGESTUFF = @all_stagestuff@
++
++# Flags to pass to recursive makes.
++# CC is set by configure. Hosts without symlinks need special handling
++# because we need CC="stage1/xgcc -Bstage1/" to work in the language
++# subdirectories.
++# ??? The choices here will need some experimenting with.
++
++export AR_FOR_TARGET
++export AR_CREATE_FOR_TARGET
++export AR_FLAGS_FOR_TARGET
++export AR_EXTRACT_FOR_TARGET
++export AWK
++export BUILD_PREFIX
++export BUILD_PREFIX_1
++export DESTDIR
++export GCC_FOR_TARGET
++export INCLUDES
++export INSTALL_DATA
++export LIB1ASMSRC
++export LIBGCC2_CFLAGS
++export MACHMODE_H
++export NM_FOR_TARGET
++export RANLIB_FOR_TARGET
++export libsubdir
++export slibdir
++
++ORDINARY_FLAGS_TO_PASS = \
++ "BISON=$(BISON)" \
++ "BISONFLAGS=$(BISONFLAGS)" \
++ "CFLAGS=$(CFLAGS) $(WARN_CFLAGS)" \
++ "LDFLAGS=$(LDFLAGS)" \
++ "FLEX=$(FLEX)" \
++ "FLEXFLAGS=$(FLEXFLAGS)" \
++ "LN=$(LN)" \
++ "LN_S=$(LN_S)" \
++ "MAKEINFO=$(MAKEINFO)" \
++ "MAKEINFOFLAGS=$(MAKEINFOFLAGS)" \
++ "MAKEOVERRIDES=" \
++ "SHELL=$(SHELL)" \
++ "exeext=$(exeext)" \
++ "build_exeext=$(build_exeext)" \
++ "objext=$(objext)" \
++ "exec_prefix=$(exec_prefix)" \
++ "prefix=$(prefix)" \
++ "local_prefix=$(local_prefix)" \
++ "gxx_include_dir=$(gcc_gxx_include_dir)" \
++ "build_tooldir=$(build_tooldir)" \
++ "gcc_tooldir=$(gcc_tooldir)" \
++ "bindir=$(bindir)" \
++ "libexecsubdir=$(libsubdir)" \
++ "datadir=$(datadir)" \
++ "localedir=$(localedir)"
++FLAGS_TO_PASS = $(ORDINARY_FLAGS_TO_PASS) "CC=@cc_set_by_configure@" \
++ "STAGE_PREFIX=@stage_prefix_set_by_configure@"
++PREPEND_DOTDOT_TO_RELATIVE_PATHS = sed \
++ -e 's|^ *[^ /][^ /]*/|%&|' \
++ -e 's| -B| -B%|g' \
++ -e 's|% *[^- /]|%&|g' \
++ -e 's|%% *|../|g' \
++ -e 's|%||g'
++SUBDIR_FLAGS_TO_PASS = $(ORDINARY_FLAGS_TO_PASS) \
++ "CC=`echo @quoted_cc_set_by_configure@ | $(PREPEND_DOTDOT_TO_RELATIVE_PATHS)`" \
++ "STAGE_PREFIX=`echo @quoted_stage_prefix_set_by_configure@ | $(PREPEND_DOTDOT_TO_RELATIVE_PATHS)`"
++#
++# Lists of files for various purposes.
++
++# Target specific, C specific object file
++C_TARGET_OBJS=@c_target_objs@
++
++# Target specific, C++ specific object file
++CXX_TARGET_OBJS=@cxx_target_objs@
++
++# Language-specific object files for C and Objective C.
++C_AND_OBJC_OBJS = attribs.o c-errors.o c-lex.o c-pragma.o c-decl.o c-typeck.o \
++ c-convert.o c-aux-info.o c-common.o c-opts.o c-format.o c-semantics.o \
++ c-incpath.o cppdefault.o c-ppoutput.o c-cppbuiltin.o prefix.o \
++ c-objc-common.o c-dump.o c-pch.o libcpp.a $(C_TARGET_OBJS)
++
++# Language-specific object files for C.
++C_OBJS = c-parse.o c-lang.o c-pretty-print.o stub-objc.o $(C_AND_OBJC_OBJS)
++
++# Language-independent object files.
++
++OBJS-common = \
++ alias.o bb-reorder.o bitmap.o builtins.o caller-save.o calls.o \
++ cfg.o cfganal.o cfgbuild.o cfgcleanup.o cfglayout.o cfgloop.o \
++ cfgloopanal.o cfgloopmanip.o loop-init.o loop-unswitch.o loop-unroll.o \
++ cfgrtl.o combine.o conflict.o convert.o coverage.o cse.o cselib.o \
++ dbxout.o debug.o df.o diagnostic.o dojump.o doloop.o dominance.o \
++ dwarf2asm.o dwarf2out.o emit-rtl.o except.o explow.o \
++ expmed.o expr.o final.o flow.o fold-const.o function.o gcse.o \
++ genrtl.o ggc-common.o global.o graph.o gtype-desc.o \
++ haifa-sched.o hooks.o ifcvt.o insn-attrtab.o insn-emit.o insn-modes.o \
++ insn-extract.o insn-opinit.o insn-output.o insn-peep.o insn-recog.o \
++ integrate.o intl.o jump.o langhooks.o lcm.o lists.o local-alloc.o \
++ loop.o optabs.o options.o opts.o params.o postreload.o predict.o \
++ print-rtl.o print-tree.o value-prof.o \
++ profile.o ra.o ra-build.o ra-colorize.o ra-debug.o ra-rewrite.o \
++ real.o recog.o reg-stack.o regclass.o regmove.o regrename.o \
++ reload.o reload1.o reorg.o resource.o rtl.o rtlanal.o rtl-error.o \
++ sbitmap.o sched-deps.o sched-ebb.o sched-rgn.o sched-vis.o sdbout.o \
++ sibcall.o simplify-rtx.o sreal.o stmt.o stor-layout.o stringpool.o \
++ targhooks.o timevar.o toplev.o tracer.o tree.o tree-dump.o unroll.o \
++ varasm.o varray.o version.o vmsdbgout.o xcoffout.o alloc-pool.o \
++ et-forest.o cfghooks.o bt-load.o pretty-print.o $(GGC) web.o
++
++OBJS-md = $(out_object_file)
++OBJS-archive = $(EXTRA_OBJS) $(host_hook_obj) hashtable.o tree-inline.o \
++ tree-optimize.o cgraph.o cgraphunit.o
++
++OBJS = $(OBJS-common) $(out_object_file) $(OBJS-archive)
++
++OBJS-onestep = libbackend.o $(OBJS-archive)
++
++BACKEND = main.o libbackend.a
++
++# Files to be copied away after each stage in building.
++STAGESTUFF = *$(objext) insn-flags.h insn-config.h insn-codes.h \
++ insn-output.c insn-recog.c insn-emit.c insn-extract.c insn-peep.c \
++ insn-attr.h insn-attrtab.c insn-opinit.c insn-constants.h tm-preds.h \
++ tree-check.h insn-conditions.c min-insn-modes.c insn-modes.c insn-modes.h \
++ s-flags s-config s-codes s-mlib s-genrtl s-modes s-gtype gtyp-gen.h \
++ s-output s-recog s-emit s-extract s-peep s-check s-conditions \
++ s-attr s-attrtab s-opinit s-preds s-constants s-crt0 \
++ genemit$(build_exeext) genoutput$(build_exeext) genrecog$(build_exeext) \
++ genextract$(build_exeext) genflags$(build_exeext) gencodes$(build_exeext) \
++ genconfig$(build_exeext) genpeep$(build_exeext) genattrtab$(build_exeext) \
++ genattr$(build_exeext) genopinit$(build_exeext) gengenrtl$(build_exeext) \
++ gencheck$(build_exeext) genpreds$(build_exeext) genconstants$(build_exeext) \
++ gengtype$(build_exeext) genconditions$(build_exeext) genmodes$(build_exeext) \
++ genrtl.c genrtl.h gt-*.h gtype-*.h gtype-desc.c \
++ xgcc$(exeext) cpp$(exeext) cc1$(exeext) $(EXTRA_PASSES) \
++ $(EXTRA_PARTS) $(EXTRA_PROGRAMS) gcc-cross$(exeext) \
++ protoize$(exeext) unprotoize$(exeext) \
++ $(SPECS) collect2$(exeext) $(USE_COLLECT2) \
++ gcov-iov$(build_exeext) gcov$(exeext) gcov-dump$(exeext) \
++ *.[0-9][0-9].* *.[si] libcpp.a libbackend.a libgcc.mk \
++ $(LANG_STAGESTUFF)
++
++# Defined in libgcc2.c, included only in the static library.
++LIB2FUNCS_ST = _eprintf __gcc_bcmp
++
++# Defined in libgcov.c, included only in gcov library
++LIBGCOV = _gcov _gcov_merge_add _gcov_merge_single _gcov_merge_delta
++
++FPBIT_FUNCS = _pack_sf _unpack_sf _addsub_sf _mul_sf _div_sf \
++ _fpcmp_parts_sf _compare_sf _eq_sf _ne_sf _gt_sf _ge_sf \
++ _lt_sf _le_sf _unord_sf _si_to_sf _sf_to_si _negate_sf _make_sf \
++ _sf_to_df _sf_to_tf _thenan_sf _sf_to_usi _usi_to_sf
++
++DPBIT_FUNCS = _pack_df _unpack_df _addsub_df _mul_df _div_df \
++ _fpcmp_parts_df _compare_df _eq_df _ne_df _gt_df _ge_df \
++ _lt_df _le_df _unord_df _si_to_df _df_to_si _negate_df _make_df \
++ _df_to_sf _df_to_tf _thenan_df _df_to_usi _usi_to_df
++
++TPBIT_FUNCS = _pack_tf _unpack_tf _addsub_tf _mul_tf _div_tf \
++ _fpcmp_parts_tf _compare_tf _eq_tf _ne_tf _gt_tf _ge_tf \
++ _lt_tf _le_tf _unord_tf _si_to_tf _tf_to_si _negate_tf _make_tf \
++ _tf_to_df _tf_to_sf _thenan_tf _tf_to_usi _usi_to_tf
++
++# These might cause a divide overflow trap and so are compiled with
++# unwinder info.
++LIB2_DIVMOD_FUNCS = _divdi3 _moddi3 _udivdi3 _umoddi3 _udiv_w_sdiv _udivmoddi4
++
++#
++# Language makefile fragments.
++
++# The following targets define the interface between us and the languages.
++#
++# all.cross, start.encap, rest.encap,
++# install-normal, install-common, install-info, install-man,
++# uninstall,
++# mostlyclean, clean, distclean, maintainer-clean,
++# stage1, stage2, stage3, stage4
++#
++# Each language is linked in with a series of hooks. The name of each
++# hooked is "lang.${target_name}" (eg: lang.info). Configure computes
++# and adds these here. We use double-colon rules for some of the hooks;
++# double-colon rules should be preferred for any new hooks.
++
++# language hooks, generated by configure
++@language_hooks@
++
++# Set up library path if needed.
++@set_gcc_lib_path@
++
++# per-language makefile fragments
++ifneq ($(LANG_MAKEFRAGS),)
++include $(LANG_MAKEFRAGS)
++endif
++
++# target and host overrides must follow the per-language makefile fragments
++# so they can override or augment language-specific variables
++
++# target overrides
++ifneq ($(tmake_file),)
++include $(tmake_file)
++endif
++
++# host overrides
++ifneq ($(xmake_file),)
++include $(xmake_file)
++endif
++
++#
++
++# -----------------------------
++# Rebuilding this configuration
++# -----------------------------
++
++Makefile: config.status $(srcdir)/Makefile.in $(srcdir)/version.c $(LANG_MAKEFRAGS)
++ LANGUAGES="$(CONFIG_LANGUAGES)" \
++ CONFIG_HEADERS= \
++ CONFIG_SHELL="$(SHELL)" \
++ CONFIG_FILES=$@ $(SHELL) config.status
++
++config.h: cs-config.h ; @true
++bconfig.h: cs-bconfig.h ; @true
++tconfig.h: cs-tconfig.h ; @true
++tm.h: cs-tm.h ; @true
++tm_p.h: cs-tm_p.h ; @true
++
++cs-config.h: Makefile
++ TARGET_CPU_DEFAULT="" \
++ HEADERS="$(host_xm_include_list)" DEFINES="$(host_xm_defines)" \
++ $(SHELL) $(srcdir)/mkconfig.sh config.h
++
++cs-bconfig.h: Makefile
++ TARGET_CPU_DEFAULT="" \
++ HEADERS="$(build_xm_include_list)" DEFINES="$(build_xm_defines)" \
++ $(SHELL) $(srcdir)/mkconfig.sh bconfig.h
++
++cs-tconfig.h: Makefile
++ TARGET_CPU_DEFAULT="" \
++ HEADERS="$(xm_include_list)" DEFINES="$(xm_defines)" \
++ $(SHELL) $(srcdir)/mkconfig.sh tconfig.h
++
++cs-tm.h: Makefile
++ TARGET_CPU_DEFAULT="$(target_cpu_default)" \
++ HEADERS="$(tm_include_list)" DEFINES="$(tm_defines)" \
++ $(SHELL) $(srcdir)/mkconfig.sh tm.h
++
++cs-tm_p.h: Makefile
++ TARGET_CPU_DEFAULT="" \
++ HEADERS="$(tm_p_include_list)" DEFINES="" \
++ $(SHELL) $(srcdir)/mkconfig.sh tm_p.h
++
++# Don't automatically run autoconf, since configure.ac might be accidentally
++# newer than configure. Also, this writes into the source directory which
++# might be on a read-only file system. If configured for maintainer mode
++# then do allow autoconf to be run.
++
++$(srcdir)/configure: @MAINT@ $(srcdir)/configure.ac
++ (cd $(srcdir) && autoconf)
++
++gccbug: $(srcdir)/gccbug.in
++ CONFIG_FILES=gccbug CONFIG_HEADERS= ./config.status
++
++mklibgcc: $(srcdir)/mklibgcc.in
++ CONFIG_FILES=mklibgcc CONFIG_HEADERS= ./config.status
++
++mkheaders: $(srcdir)/mkheaders.in
++ CONFIG_FILES=mkheaders CONFIG_HEADERS= ./config.status
++
++# cstamp-h.in controls rebuilding of config.in.
++# It is named cstamp-h.in and not stamp-h.in so the mostlyclean rule doesn't
++# delete it. A stamp file is needed as autoheader won't update the file if
++# nothing has changed.
++# It remains in the source directory and is part of the distribution.
++# This follows what is done in shellutils, fileutils, etc.
++# "echo timestamp" is used instead of touch to be consistent with other
++# packages that use autoconf (??? perhaps also to avoid problems with patch?).
++# ??? Newer versions have a maintainer mode that may be useful here.
++
++# Don't run autoheader automatically either.
++# Only run it if maintainer mode is enabled.
++@MAINT@ $(srcdir)/config.in: $(srcdir)/cstamp-h.in
++@MAINT@ $(srcdir)/cstamp-h.in: $(srcdir)/configure.ac
++@MAINT@ (cd $(srcdir) && autoheader)
++@MAINT@ @rm -f $(srcdir)/cstamp-h.in
++@MAINT@ echo timestamp > $(srcdir)/cstamp-h.in
++auto-host.h: cstamp-h ; @true
++cstamp-h: config.in config.status
++ CONFIG_HEADERS=auto-host.h:config.in \
++ CONFIG_FILES= \
++ LANGUAGES="$(CONFIG_LANGUAGES)" $(SHELL) config.status
++
++# Really, really stupid make features, such as SUN's KEEP_STATE, may force
++# a target to build even if it is up-to-date. So we must verify that
++# config.status does not exist before failing.
++config.status: $(srcdir)/configure $(srcdir)/config.gcc version.c
++ @if [ ! -f config.status ] ; then \
++ echo You must configure gcc. Look at http://gcc.gnu.org/install/ for details.; \
++ false; \
++ else \
++ LANGUAGES="$(CONFIG_LANGUAGES)" $(SHELL) config.status --recheck; \
++ fi
++
++# --------
++# UNSORTED
++# --------
++
++all.internal: start.encap rest.encap doc
++# This is what to compile if making a cross-compiler.
++all.cross: native gcc-cross cpp$(exeext) specs \
++ $(LIBGCC) $(EXTRA_PARTS) lang.all.cross doc
++# This is what must be made before installing GCC and converting libraries.
++start.encap: native xgcc$(exeext) cpp$(exeext) specs \
++ xlimits.h lang.start.encap @GENINSRC@ srcextra
++# These can't be made until after GCC can run.
++rest.encap: $(STMP_FIXPROTO) $(LIBGCC) $(EXTRA_PARTS) lang.rest.encap
++# This is what is made with the host's compiler
++# whether making a cross compiler or not.
++native: config.status auto-host.h build-@POSUB@ $(LANGUAGES) \
++ $(EXTRA_PASSES) $(EXTRA_PROGRAMS) $(USE_COLLECT2)
++
++# Define the names for selecting languages in LANGUAGES.
++C c: cc1$(exeext)
++PROTO: proto
++
++# Tell GNU make these are phony targets.
++.PHONY: C c PROTO proto
++
++# On the target machine, finish building a cross compiler.
++# This does the things that can't be done on the host machine.
++rest.cross: $(LIBGCC) specs
++
++# Recompile all the language-independent object files.
++# This is used only if the user explicitly asks for it.
++compilations: $(BACKEND)
++
++# Like libcpp.a, this archive is strictly for the host.
++libbackend.a: $(OBJS@onestep@)
++ -rm -rf libbackend.a
++ $(AR) $(AR_FLAGS) libbackend.a $(OBJS@onestep@)
++ -$(RANLIB) libbackend.a
++
++# We call this executable `xgcc' rather than `gcc'
++# to avoid confusion if the current directory is in the path
++# and CC is `gcc'. It is renamed to `gcc' when it is installed.
++xgcc$(exeext): gcc.o gccspec.o version.o intl.o prefix.o \
++ version.o $(LIBDEPS) $(EXTRA_GCC_OBJS)
++ $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ gcc.o gccspec.o intl.o \
++ prefix.o version.o $(EXTRA_GCC_OBJS) $(LIBS)
++
++# cpp is to cpp0 as gcc is to cc1.
++# The only difference from xgcc is that it's linked with cppspec.o
++# instead of gccspec.o.
++cpp$(exeext): gcc.o cppspec.o version.o intl.o prefix.o \
++ version.o $(LIBDEPS) $(EXTRA_GCC_OBJS)
++ $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ gcc.o cppspec.o intl.o \
++ prefix.o version.o $(EXTRA_GCC_OBJS) $(LIBS)
++
++# Dump a specs file to make -B./ read these specs over installed ones.
++$(SPECS): xgcc$(exeext)
++ $(GCC_FOR_TARGET) -dumpspecs > tmp-specs
++ mv tmp-specs $(SPECS)
++
++# We do want to create an executable named `xgcc', so we can use it to
++# compile libgcc2.a.
++# Also create gcc-cross, so that install-common will install properly.
++gcc-cross: xgcc$(exeext)
++ cp xgcc$(exeext) gcc-cross$(exeext)
++
++cc1$(exeext): $(C_OBJS) $(BACKEND) $(LIBDEPS)
++ $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o cc1$(exeext) \
++ $(C_OBJS) $(BACKEND) $(LIBS)
++
++# Build the version of limits.h that we will install.
++xlimits.h: glimits.h limitx.h limity.h
++ if $(LIMITS_H_TEST) ; then \
++ cat $(srcdir)/limitx.h $(srcdir)/glimits.h $(srcdir)/limity.h > tmp-xlimits.h; \
++ else \
++ cat $(srcdir)/glimits.h > tmp-xlimits.h; \
++ fi
++ mv tmp-xlimits.h xlimits.h
++#
++# Build libgcc.a.
++
++LIB2ADD = $(LIB2FUNCS_EXTRA)
++LIB2ADD_ST = $(LIB2FUNCS_STATIC_EXTRA)
++LIB2ADD_SH = $(LIB2FUNCS_SHARED_EXTRA)
++
++libgcc.mk: config.status Makefile mklibgcc $(LIB2ADD) $(LIB2ADD_ST) $(LIB2ADD_SH) \
++ xgcc$(exeext) specs
++ objext='$(objext)' \
++ LIB1ASMFUNCS='$(LIB1ASMFUNCS)' \
++ LIB2FUNCS_ST='$(LIB2FUNCS_ST)' \
++ LIBGCOV='$(LIBGCOV)' \
++ LIB2ADD='$(LIB2ADD)' \
++ LIB2ADD_ST='$(LIB2ADD_ST)' \
++ LIB2ADD_SH='$(LIB2ADD_SH)' \
++ LIB2ADDEH='$(LIB2ADDEH)' \
++ LIB2ADDEHSTATIC='$(LIB2ADDEHSTATIC)' \
++ LIB2ADDEHSHARED='$(LIB2ADDEHSHARED)' \
++ LIB2ADDEHDEP='$(LIB2ADDEHDEP)' \
++ LIBUNWIND='$(LIBUNWIND)' \
++ LIBUNWINDDEP='$(LIBUNWINDDEP)' \
++ SHLIBUNWIND_LINK='$(SHLIBUNWIND_LINK)' \
++ SHLIBUNWIND_INSTALL='$(SHLIBUNWIND_INSTALL)' \
++ FPBIT='$(FPBIT)' \
++ FPBIT_FUNCS='$(FPBIT_FUNCS)' \
++ LIB2_DIVMOD_FUNCS='$(LIB2_DIVMOD_FUNCS)' \
++ DPBIT='$(DPBIT)' \
++ DPBIT_FUNCS='$(DPBIT_FUNCS)' \
++ TPBIT='$(TPBIT)' \
++ TPBIT_FUNCS='$(TPBIT_FUNCS)' \
++ MULTILIBS=`$(GCC_FOR_TARGET) --print-multi-lib` \
++ EXTRA_MULTILIB_PARTS='$(EXTRA_MULTILIB_PARTS)' \
++ SHLIB_LINK='$(SHLIB_LINK)' \
++ SHLIB_INSTALL='$(SHLIB_INSTALL)' \
++ SHLIB_EXT='$(SHLIB_EXT)' \
++ SHLIB_MULTILIB='$(SHLIB_MULTILIB)' \
++ SHLIB_MKMAP='$(SHLIB_MKMAP)' \
++ SHLIB_MKMAP_OPTS='$(SHLIB_MKMAP_OPTS)' \
++ SHLIB_MAPFILES='$(SHLIB_MAPFILES)' \
++ SHLIB_NM_FLAGS='$(SHLIB_NM_FLAGS)' \
++ MULTILIB_OSDIRNAMES='$(MULTILIB_OSDIRNAMES)' \
++ mkinstalldirs='$(SHELL) $(srcdir)/mkinstalldirs' \
++ $(SHELL) mklibgcc > tmp-libgcc.mk
++ mv tmp-libgcc.mk libgcc.mk
++
++# All the things that might cause us to want to recompile bits of libgcc.
++LIBGCC_DEPS = $(GCC_PASSES) $(LANGUAGES) stmp-int-hdrs $(STMP_FIXPROTO) \
++ libgcc.mk $(srcdir)/libgcc2.c $(srcdir)/libgcov.c $(TCONFIG_H) \
++ $(MACHMODE_H) longlong.h gbl-ctors.h config.status stmp-int-hdrs \
++ tsystem.h $(FPBIT) $(DPBIT) $(TPBIT) $(LIB2ADD) \
++ $(LIB2ADD_ST) $(LIB2ADD_SH) $(LIB2ADDEH) $(LIB2ADDEHDEP) \
++ $(EXTRA_PARTS) $(srcdir)/config/$(LIB1ASMSRC) \
++ $(srcdir)/gcov-io.h $(srcdir)/gcov-io.c gcov-iov.h
++
++libgcov.a: libgcc.a; @true
++
++libgcc.a: $(LIBGCC_DEPS)
++ $(MAKE) \
++ CFLAGS="$(CFLAGS) $(WARN_CFLAGS)" \
++ CONFIG_H="$(TCONFIG_H)" TM_H="$(TM_H)" \
++ INCLUDES="$(INCLUDES)" \
++ MAKEOVERRIDES= \
++ -f libgcc.mk all
++
++# Use the genmultilib shell script to generate the information the gcc
++# driver program needs to select the library directory based on the
++# switches.
++multilib.h: s-mlib; @true
++s-mlib: $(srcdir)/genmultilib Makefile
++ if test @enable_multilib@ = yes \
++ || test -n "$(MULTILIB_OSDIRNAMES)"; then \
++ $(SHELL) $(srcdir)/genmultilib \
++ "$(MULTILIB_OPTIONS)" \
++ "$(MULTILIB_DIRNAMES)" \
++ "$(MULTILIB_MATCHES)" \
++ "$(MULTILIB_EXCEPTIONS)" \
++ "$(MULTILIB_EXTRA_OPTS)" \
++ "$(MULTILIB_EXCLUSIONS)" \
++ "$(MULTILIB_OSDIRNAMES)" \
++ "@enable_multilib@" \
++ > tmp-mlib.h; \
++ else \
++ $(SHELL) $(srcdir)/genmultilib '' '' '' '' '' '' '' no \
++ > tmp-mlib.h; \
++ fi
++ $(SHELL) $(srcdir)/move-if-change tmp-mlib.h multilib.h
++ $(STAMP) s-mlib
++
++# Build multiple copies of libgcc.a, one for each target switch.
++stmp-multilib: $(LIBGCC_DEPS)
++ $(MAKE) \
++ CFLAGS="$(CFLAGS) $(WARN_CFLAGS)" \
++ CONFIG_H="$(CONFIG_H)" \
++ MAKEOVERRIDES= \
++ -f libgcc.mk all
++ $(STAMP) stmp-multilib
++
++# Compile two additional files that are linked with every program
++# linked using GCC on systems using COFF or ELF, for the sake of C++
++# constructors.
++$(T)crtbegin.o: crtstuff.c $(GCC_PASSES) $(TCONFIG_H) auto-host.h \
++ gbl-ctors.h stmp-int-hdrs tsystem.h coretypes.h $(TM_H)
++ $(GCC_FOR_TARGET) $(CRTSTUFF_CFLAGS) $(CRTSTUFF_T_CFLAGS) \
++ @inhibit_libc@ -c $(srcdir)/crtstuff.c -DCRT_BEGIN \
++ -o $(T)crtbegin$(objext)
++
++$(T)crtend.o: crtstuff.c $(GCC_PASSES) $(TCONFIG_H) auto-host.h \
++ gbl-ctors.h stmp-int-hdrs tsystem.h coretypes.h $(TM_H)
++ $(GCC_FOR_TARGET) $(CRTSTUFF_CFLAGS) $(CRTSTUFF_T_CFLAGS) \
++ @inhibit_libc@ -c $(srcdir)/crtstuff.c -DCRT_END \
++ -o $(T)crtend$(objext)
++
++# These are versions of crtbegin and crtend for shared libraries.
++$(T)crtbeginS.o: crtstuff.c $(GCC_PASSES) $(TCONFIG_H) auto-host.h \
++ gbl-ctors.h stmp-int-hdrs tsystem.h coretypes.h $(TM_H)
++ $(GCC_FOR_TARGET) $(CRTSTUFF_CFLAGS) $(CRTSTUFF_T_CFLAGS_S) \
++ @inhibit_libc@ -c $(srcdir)/crtstuff.c -DCRT_BEGIN -DCRTSTUFFS_O \
++ -o $(T)crtbeginS$(objext)
++
++$(T)crtendS.o: crtstuff.c $(GCC_PASSES) $(TCONFIG_H) auto-host.h \
++ gbl-ctors.h stmp-int-hdrs tsystem.h coretypes.h $(TM_H)
++ $(GCC_FOR_TARGET) $(CRTSTUFF_CFLAGS) $(CRTSTUFF_T_CFLAGS_S) \
++ @inhibit_libc@ -c $(srcdir)/crtstuff.c -DCRT_END -DCRTSTUFFS_O \
++ -o $(T)crtendS$(objext)
++
++# This is a version of crtbegin for -static links.
++$(T)crtbeginT.o: crtstuff.c $(GCC_PASSES) $(TCONFIG_H) auto-host.h \
++ gbl-ctors.h stmp-int-hdrs tsystem.h coretypes.h $(TM_H)
++ $(GCC_FOR_TARGET) $(CRTSTUFF_CFLAGS) $(CRTSTUFF_T_CFLAGS) \
++ @inhibit_libc@ -c $(srcdir)/crtstuff.c -DCRT_BEGIN -DCRTSTUFFT_O \
++ -o $(T)crtbeginT$(objext)
++
++# Compile the start modules crt0.o and mcrt0.o that are linked with
++# every program
++crt0.o: s-crt0 ; @true
++mcrt0.o: s-crt0; @true
++
++s-crt0: $(CRT0_S) $(MCRT0_S) $(GCC_PASSES) $(CONFIG_H)
++ $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(CRT0STUFF_T_CFLAGS) \
++ -o crt0.o -c $(CRT0_S)
++ $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(CRT0STUFF_T_CFLAGS) \
++ -o mcrt0.o -c $(MCRT0_S)
++ $(STAMP) s-crt0
++#
++# Compiling object files from source files.
++
++# Note that dependencies on obstack.h are not written
++# because that file is not part of GCC.
++
++# C language specific files.
++
++c-errors.o: c-errors.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
++ $(C_TREE_H) flags.h $(DIAGNOSTIC_H) $(TM_P_H)
++c-parse.o : c-parse.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
++ $(GGC_H) intl.h $(C_TREE_H) input.h flags.h toplev.h output.h $(CPPLIB_H) \
++ varray.h gt-c-parse.h
++
++srcextra: gcc.srcextra lang.srcextra
++
++gcc.srcextra: c-parse.y c-parse.c gengtype-lex.c gengtype-yacc.c gengtype-yacc.h
++ -cp -p $^ $(srcdir)
++
++c-parse.c: c-parse.y
++ -$(BISON) $(BISONFLAGS) -o $@ $<
++
++c-parse.y: c-parse.in
++ echo '/*WARNING: This file is automatically generated!*/' >tmp-c-parse.y
++ sed -e "/^@@ifobjc.*/,/^@@end_ifobjc.*/d" \
++ -e "/^@@ifc.*/d" -e "/^@@end_ifc.*/d" $< >>tmp-c-parse.y
++ $(SHELL) $(srcdir)/move-if-change tmp-c-parse.y $@
++
++c-incpath.o: c-incpath.c c-incpath.h $(CONFIG_H) $(SYSTEM_H) $(CPPLIB_H) \
++ intl.h prefix.h coretypes.h $(TM_H) cppdefault.h
++
++c-decl.o : c-decl.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
++ $(RTL_H) $(C_TREE_H) $(GGC_H) $(TARGET_H) flags.h function.h output.h \
++ $(EXPR_H) debug.h toplev.h intl.h $(TM_P_H) tree-inline.h $(TIMEVAR_H) \
++ opts.h c-pragma.h gt-c-decl.h cgraph.h $(HASHTAB_H) libfuncs.h except.h \
++ $(LANGHOOKS_DEF_H)
++c-typeck.o : c-typeck.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(C_TREE_H) \
++ $(TARGET_H) flags.h intl.h output.h $(EXPR_H) $(RTL_H) toplev.h $(TM_P_H)
++c-lang.o : c-lang.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
++ $(C_TREE_H) $(C_PRETTY_PRINT_H) $(DIAGNOSTIC_H) \
++ $(GGC_H) langhooks.h $(LANGHOOKS_DEF_H) $(C_COMMON_H) gtype-c.h
++stub-objc.o : stub-objc.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TREE_H) \
++ $(GGC_H) $(C_COMMON_H)
++c-lex.o : c-lex.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
++ $(RTL_H) debug.h $(C_TREE_H) $(C_COMMON_H) real.h c-incpath.h cppdefault.h \
++ c-pragma.h input.h intl.h flags.h toplev.h output.h \
++ $(CPPLIB_H) $(EXPR_H) $(TM_P_H)
++c-ppoutput.o : c-ppoutput.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
++ $(C_COMMON_H) $(TREE_H) $(CPPLIB_H) cpphash.h $(TM_P_H) c-pragma.h
++c-objc-common.o : c-objc-common.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
++ $(C_TREE_H) $(RTL_H) insn-config.h $(INTEGRATE_H) $(EXPR_H) $(C_TREE_H) \
++ flags.h toplev.h tree-inline.h $(DIAGNOSTIC_H) $(VARRAY_H) \
++ langhooks.h $(GGC_H) $(TARGET_H) cgraph.h
++c-aux-info.o : c-aux-info.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
++ $(C_TREE_H) flags.h toplev.h
++c-convert.o : c-convert.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
++ flags.h toplev.h $(C_COMMON_H) real.h
++c-pragma.o: c-pragma.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
++ function.h c-pragma.h toplev.h output.h $(GGC_H) $(TM_P_H) $(C_COMMON_H) gt-c-pragma.h
++graph.o: graph.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) toplev.h flags.h output.h \
++ $(RTL_H) function.h hard-reg-set.h $(BASIC_BLOCK_H) graph.h
++sbitmap.o: sbitmap.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) flags.h \
++ hard-reg-set.h $(BASIC_BLOCK_H)
++
++COLLECT2_OBJS = collect2.o tlink.o intl.o version.o
++COLLECT2_LIBS = @COLLECT2_LIBS@
++collect2$(exeext): $(COLLECT2_OBJS) $(LIBDEPS)
++# Don't try modifying collect2 (aka ld) in place--it might be linking this.
++ $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o T$@ \
++ $(COLLECT2_OBJS) $(LIBS) $(COLLECT2_LIBS)
++ mv -f T$@ $@
++
++collect2.o : collect2.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) gstab.h intl.h \
++ $(OBSTACK_H) $(DEMANGLE_H) collect2.h version.h
++ $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
++ -DTARGET_MACHINE=\"$(target_noncanonical)\" \
++ -c $(srcdir)/collect2.c $(OUTPUT_OPTION)
++
++tlink.o: tlink.c $(DEMANGLE_H) $(HASHTAB_H) $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
++ $(OBSTACK_H) collect2.h intl.h
++
++# A file used by all variants of C.
++
++c-common.o : c-common.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
++ $(OBSTACK_H) $(C_COMMON_H) flags.h toplev.h output.h c-pragma.h intl.h \
++ $(GGC_H) $(EXPR_H) $(TM_P_H) builtin-types.def builtin-attrs.def \
++ $(DIAGNOSTIC_H) gt-c-common.h langhooks.h varray.h $(RTL_H) \
++ $(TARGET_H) $(C_TREE_H)
++c-pretty-print.o : c-pretty-print.c $(C_PRETTY_PRINT_H) \
++ $(C_COMMON_H) $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) real.h
++
++c-opts.o : c-opts.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
++ c-pragma.h flags.h toplev.h langhooks.h tree-inline.h $(DIAGNOSTIC_H) \
++ intl.h debug.h $(C_COMMON_H) opts.h options.h $(PARAMS_H)
++ $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
++ $< $(OUTPUT_OPTION) @TARGET_SYSTEM_ROOT_DEFINE@
++
++c-cppbuiltin.o : c-cppbuiltin.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
++ $(TREE_H) $(C_COMMON_H) c-pragma.h flags.h toplev.h langhooks.h \
++ output.h except.h real.h $(TM_P_H)
++
++# A file used by all variants of C and some other languages.
++
++attribs.o : attribs.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) flags.h \
++ toplev.h output.h c-pragma.h $(RTL_H) $(GGC_H) $(EXPR_H) $(TM_P_H) \
++ builtin-types.def $(TARGET_H) langhooks.h
++
++c-format.o : c-format.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) langhooks.h \
++ $(C_COMMON_H) flags.h toplev.h intl.h $(DIAGNOSTIC_H)
++
++c-semantics.o : c-semantics.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
++ $(C_TREE_H) flags.h toplev.h output.h c-pragma.h $(RTL_H) $(GGC_H) \
++ $(EXPR_H) $(PREDICT_H) tree-inline.h
++
++c-dump.o : c-dump.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
++ $(C_TREE_H) tree-dump.h
++
++c-pch.o : c-pch.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(CPPLIB_H) $(TREE_H) \
++ $(C_COMMON_H) output.h toplev.h c-pragma.h $(GGC_H) debug.h \
++ langhooks.h flags.h hosthooks.h version.h $(TARGET_H)
++ $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
++ -DHOST_MACHINE=\"$(host)\" -DTARGET_MACHINE=\"$(target)\" \
++ $< $(OUTPUT_OPTION)
++
++# Language-independent files.
++
++DRIVER_DEFINES = \
++ -DSTANDARD_STARTFILE_PREFIX=\"$(unlibsubdir)/\" \
++ -DSTANDARD_EXEC_PREFIX=\"$(libdir)/gcc/\" \
++ -DSTANDARD_LIBEXEC_PREFIX=\"$(libexecdir)/gcc/\" \
++ -DDEFAULT_TARGET_VERSION=\"$(version)\" \
++ -DDEFAULT_TARGET_MACHINE=\"$(target_noncanonical)\" \
++ -DSTANDARD_BINDIR_PREFIX=\"$(bindir)/\" \
++ -DTOOLDIR_BASE_PREFIX=\"$(unlibsubdir)/../\" \
++ @TARGET_SYSTEM_ROOT_DEFINE@ \
++ $(VALGRIND_DRIVER_DEFINES) \
++ `test "X$${SHLIB_LINK}" = "X" || test "@enable_shared@" != "yes" || echo "-DENABLE_SHARED_LIBGCC"` \
++ `test "X$${SHLIB_MULTILIB}" = "X" || echo "-DNO_SHARED_LIBGCC_MULTILIB"`
++
++gcc.o: gcc.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) intl.h multilib.h \
++ Makefile $(lang_specs_files) specs.h prefix.h $(GCC_H)
++ (SHLIB_LINK='$(SHLIB_LINK)' \
++ SHLIB_MULTILIB='$(SHLIB_MULTILIB)'; \
++ $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
++ $(DRIVER_DEFINES) \
++ -c $(srcdir)/gcc.c $(OUTPUT_OPTION))
++
++gccspec.o: gccspec.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(GCC_H)
++ (SHLIB_LINK='$(SHLIB_LINK)' \
++ SHLIB_MULTILIB='$(SHLIB_MULTILIB)'; \
++ $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
++ $(DRIVER_DEFINES) \
++ -c $(srcdir)/gccspec.c $(OUTPUT_OPTION))
++
++cppspec.o: cppspec.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(GCC_H)
++
++tree-check.h: s-check ; @true
++s-check : gencheck$(build_exeext) $(srcdir)/move-if-change
++ $(RUN_GEN) ./gencheck$(build_exeext) > tmp-check.h
++ $(SHELL) $(srcdir)/move-if-change tmp-check.h tree-check.h
++ $(STAMP) s-check
++
++gencheck$(build_exeext) : gencheck.o $(BUILD_LIBDEPS)
++ $(CC_FOR_BUILD) $(BUILD_CFLAGS) $(BUILD_LDFLAGS) -o $@ \
++ gencheck.o $(BUILD_LIBS)
++
++gencheck.o : gencheck.c gencheck.h tree.def $(BCONFIG_H) $(SYSTEM_H) \
++ coretypes.h $(GTM_H) $(lang_tree_files)
++
++gencheck.h : s-gencheck ; @true
++s-gencheck : Makefile
++ ltf="$(lang_tree_files)"; for f in $$ltf; do \
++ echo "#include \"$$f\""; \
++ done | sed 's|$(srcdir)/||' > tmp-gencheck.h
++ $(SHELL) $(srcdir)/move-if-change tmp-gencheck.h gencheck.h
++ $(STAMP) s-gencheck
++
++specs.h : s-specs ; @true
++s-specs : Makefile
++ lsf="$(lang_specs_files)"; for f in $$lsf; do \
++ echo "#include \"$$f\""; \
++ done | sed 's|$(srcdir)/||' > tmp-specs.h
++ $(SHELL) $(srcdir)/move-if-change tmp-specs.h specs.h
++ $(STAMP) s-specs
++
++options.c: $(lang_opt_files) $(srcdir)/opts.sh options.h intl.h
++
++options.h: $(lang_opt_files) $(srcdir)/opts.sh Makefile
++ AWK=$(AWK) $(SHELL) $(srcdir)/opts.sh \
++ '$(SHELL) $(srcdir)/move-if-change' \
++ options.c options.h $(lang_opt_files)
++
++dumpvers: dumpvers.c
++
++version.o: version.c version.h
++
++gtype-desc.o: gtype-desc.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) varray.h \
++ $(HASHTAB_H) $(TREE_H) $(RTL_H) function.h insn-config.h $(EXPR_H) $(OPTABS_H) \
++ libfuncs.h debug.h $(GGC_H) bitmap.h $(BASIC_BLOCK_H) hard-reg-set.h \
++ cselib.h insn-addr.h
++
++ggc-common.o: ggc-common.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(GGC_H) \
++ $(HASHTAB_H) toplev.h $(PARAMS_H) hosthooks.h
++
++ggc-simple.o: ggc-simple.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
++ flags.h $(GGC_H) varray.h $(TIMEVAR_H) $(TM_P_H) $(PARAMS_H)
++
++ggc-page.o: ggc-page.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
++ flags.h toplev.h $(GGC_H) $(TIMEVAR_H) $(TM_P_H) $(PARAMS_H)
++
++ggc-zone.o: ggc-zone.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
++ flags.h toplev.h $(GGC_H) $(TIMEVAR_H) $(TM_P_H) $(PARAMS_H)
++
++stringpool.o: stringpool.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
++ $(TREE_H) $(GGC_H) gt-stringpool.h
++
++ggc-none.o: ggc-none.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(GTM_H) $(GGC_H)
++ $(CC) -c $(ALL_CFLAGS) -DGENERATOR_FILE $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)
++
++prefix.o: prefix.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) Makefile prefix.h
++ $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
++ -DPREFIX=\"$(prefix)\" \
++ -c $(srcdir)/prefix.c $(OUTPUT_OPTION)
++
++convert.o: convert.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) flags.h \
++ convert.h toplev.h langhooks.h
++
++langhooks.o : langhooks.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) toplev.h \
++ tree-inline.h $(RTL_H) insn-config.h $(INTEGRATE_H) langhooks.h \
++ $(LANGHOOKS_DEF_H) flags.h $(GGC_H) gt-langhooks.h diagnostic.h
++tree.o : tree.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) flags.h function.h \
++ toplev.h $(GGC_H) $(HASHTAB_H) $(TARGET_H) output.h $(TM_P_H) langhooks.h \
++ real.h gt-tree.h
++tree-dump.o: tree-dump.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
++ $(C_TREE_H) flags.h langhooks.h toplev.h output.h c-pragma.h $(RTL_H) $(GGC_H) \
++ $(EXPR_H) $(SPLAY_TREE_H) tree-dump.h
++tree-inline.o : tree-inline.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
++ $(TREE_H) $(RTL_H) $(EXPR_H) flags.h $(PARAMS_H) input.h insn-config.h \
++ $(INTEGRATE_H) $(VARRAY_H) $(HASHTAB_H) $(SPLAY_TREE_H) toplev.h \
++ langhooks.h $(C_COMMON_H) tree-inline.h cgraph.h intl.h
++tree-optimize.o : tree-optimize.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
++ $(TREE_H) toplev.h langhooks.h cgraph.h $(TIMEVAR_H) function.h $(GGC_H)
++
++print-tree.o : print-tree.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
++ $(GGC_H) langhooks.h real.h
++stor-layout.o : stor-layout.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
++ flags.h function.h $(EXPR_H) $(RTL_H) toplev.h $(GGC_H) $(TM_P_H) $(TARGET_H) \
++ langhooks.h
++fold-const.o : fold-const.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
++ flags.h real.h toplev.h $(HASHTAB_H) $(EXPR_H) $(RTL_H) $(GGC_H) $(TM_P_H) langhooks.h
++diagnostic.o : diagnostic.c $(DIAGNOSTIC_H) real.h \
++ $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(TM_P_H) flags.h $(GGC_H) \
++ input.h toplev.h intl.h langhooks.h $(LANGHOOKS_DEF_H)
++opts.o : opts.c opts.h options.h toplev.h $(CONFIG_H) $(SYSTEM_H) \
++ coretypes.h $(TREE_H) $(TM_H) langhooks.h $(GGC_H) $(RTL_H) \
++ output.h $(DIAGNOSTIC_H) $(TM_P_H) $(INSN_ATTR_H) intl.h
++targhooks.o : targhooks.c targhooks.h $(CONFIG_H) $(SYSTEM_H) \
++ coretypes.h $(TREE_H) $(TM_H) $(RTL_H) $(TM_P_H) function.h \
++ output.h toplev.h
++
++toplev.o : toplev.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(RTL_H) \
++ function.h flags.h xcoffout.h input.h $(INSN_ATTR_H) output.h $(DIAGNOSTIC_H) \
++ debug.h insn-config.h intl.h $(RECOG_H) Makefile toplev.h \
++ dwarf2out.h sdbout.h dbxout.h $(EXPR_H) hard-reg-set.h $(BASIC_BLOCK_H) \
++ graph.h $(LOOP_H) except.h $(REGS_H) $(TIMEVAR_H) value-prof.h \
++ $(PARAMS_H) $(TM_P_H) reload.h dwarf2asm.h $(TARGET_H) \
++ langhooks.h insn-flags.h cfglayout.h real.h cfgloop.h \
++ hosthooks.h $(LANGHOOKS_DEF_H) cgraph.h $(COVERAGE_H) alloc-pool.h
++ $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
++ -DTARGET_NAME=\"$(target_noncanonical)\" \
++ -c $(srcdir)/toplev.c $(OUTPUT_OPTION)
++main.o : main.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) toplev.h
++
++host-default.o : host-default.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
++ hosthooks.h hosthooks-def.h
++
++rtl-error.o: rtl-error.c $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(INSN_ATTR_H) \
++ insn-config.h input.h toplev.h intl.h $(DIAGNOSTIC_H) $(CONFIG_H)
++
++rtl.o : rtl.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(GTM_H) $(RTL_H) real.h \
++ $(GGC_H) errors.h
++ $(CC) -c $(ALL_CFLAGS) -DGENERATOR_FILE $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)
++
++print-rtl.o : print-rtl.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
++ $(RTL_H) $(TREE_H) hard-reg-set.h $(BASIC_BLOCK_H) real.h $(TM_P_H)
++rtlanal.o : rtlanal.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) toplev.h \
++ $(RTL_H) hard-reg-set.h $(TM_P_H) insn-config.h $(RECOG_H) real.h flags.h \
++ $(BASIC_BLOCK_H)
++
++errors.o : errors.c $(CONFIG_H) $(SYSTEM_H) errors.h
++ $(CC) -c $(ALL_CFLAGS) -DGENERATOR_FILE $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)
++
++varasm.o : varasm.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(RTL_H) \
++ flags.h function.h $(EXPR_H) hard-reg-set.h $(REGS_H) \
++ output.h c-pragma.h toplev.h xcoffout.h debug.h $(GGC_H) $(TM_P_H) \
++ $(HASHTAB_H) $(TARGET_H) langhooks.h gt-varasm.h real.h
++function.o : function.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
++ flags.h function.h $(EXPR_H) $(OPTABS_H) libfuncs.h $(REGS_H) hard-reg-set.h \
++ insn-config.h $(RECOG_H) output.h toplev.h except.h $(HASHTAB_H) $(GGC_H) \
++ $(TM_P_H) langhooks.h gt-function.h $(TARGET_H)
++stmt.o : stmt.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) flags.h \
++ function.h insn-config.h hard-reg-set.h $(EXPR_H) libfuncs.h except.h \
++ $(LOOP_H) $(RECOG_H) toplev.h output.h varray.h $(GGC_H) $(TM_P_H) \
++ langhooks.h $(PREDICT_H) gt-stmt.h $(OPTABS_H) $(TARGET_H)
++except.o : except.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
++ $(TREE_H) flags.h except.h function.h $(EXPR_H) libfuncs.h $(INTEGRATE_H) \
++ langhooks.h insn-config.h hard-reg-set.h $(BASIC_BLOCK_H) output.h \
++ dwarf2asm.h dwarf2out.h toplev.h $(HASHTAB_H) intl.h $(GGC_H) \
++ gt-except.h cgraph.h
++expr.o : expr.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) flags.h \
++ function.h $(REGS_H) $(EXPR_H) $(OPTABS_H) libfuncs.h $(INSN_ATTR_H) insn-config.h \
++ $(RECOG_H) output.h typeclass.h hard-reg-set.h toplev.h hard-reg-set.h \
++ except.h reload.h $(GGC_H) langhooks.h intl.h $(TM_P_H) real.h $(TARGET_H)
++dojump.o : dojump.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
++ flags.h function.h $(EXPR_H) $(OPTABS_H) $(INSN_ATTR_H) insn-config.h \
++ langhooks.h $(GGC_H) gt-dojump.h
++builtins.o : builtins.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H)\
++ flags.h $(TARGET_H) function.h $(REGS_H) $(EXPR_H) $(OPTABS_H) insn-config.h \
++ $(RECOG_H) output.h typeclass.h hard-reg-set.h toplev.h hard-reg-set.h \
++ except.h $(TM_P_H) $(PREDICT_H) libfuncs.h real.h langhooks.h
++calls.o : calls.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) flags.h \
++ $(EXPR_H) $(OPTABS_H) langhooks.h $(TARGET_H) \
++ libfuncs.h $(REGS_H) toplev.h output.h function.h $(TIMEVAR_H) $(TM_P_H) cgraph.h except.h
++expmed.o : expmed.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
++ flags.h insn-config.h $(EXPR_H) $(OPTABS_H) $(RECOG_H) real.h \
++ toplev.h $(TM_P_H) langhooks.h
++explow.o : explow.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
++ flags.h hard-reg-set.h insn-config.h $(EXPR_H) $(OPTABS_H) $(RECOG_H) \
++ toplev.h function.h $(GGC_H) $(TM_P_H) langhooks.h gt-explow.h
++optabs.o : optabs.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
++ flags.h insn-config.h $(EXPR_H) $(OPTABS_H) libfuncs.h $(RECOG_H) reload.h \
++ toplev.h $(GGC_H) real.h $(TM_P_H) except.h gt-optabs.h $(BASIC_BLOCK_H) \
++ $(TARGET_H)
++dbxout.o : dbxout.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(RTL_H) \
++ flags.h $(REGS_H) debug.h $(TM_P_H) $(TARGET_H) function.h langhooks.h \
++ insn-config.h reload.h gstab.h xcoffout.h output.h dbxout.h toplev.h \
++ $(GGC_H) gt-dbxout.h
++debug.o : debug.c debug.h $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H)
++sdbout.o : sdbout.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(RTL_H) \
++ flags.h function.h $(EXPR_H) output.h hard-reg-set.h $(REGS_H) real.h \
++ insn-config.h xcoffout.h c-pragma.h $(GGC_H) $(TARGET_H) \
++ sdbout.h toplev.h $(TM_P_H) except.h debug.h langhooks.h gt-sdbout.h
++dwarf2out.o : dwarf2out.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
++ $(RTL_H) dwarf2.h debug.h flags.h insn-config.h reload.h output.h $(DIAGNOSTIC_H) real.h \
++ hard-reg-set.h $(REGS_H) $(EXPR_H) libfuncs.h toplev.h dwarf2out.h varray.h \
++ $(GGC_H) except.h dwarf2asm.h $(TM_P_H) langhooks.h $(HASHTAB_H) \
++ gt-dwarf2out.h $(TARGET_H) cgraph.h
++dwarf2asm.o : dwarf2asm.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) flags.h $(RTL_H) \
++ $(TREE_H) output.h dwarf2asm.h $(TM_P_H) $(GGC_H) gt-dwarf2asm.h
++vmsdbgout.o : vmsdbgout.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
++ $(RTL_H) flags.h output.h vmsdbg.h debug.h langhooks.h function.h $(TARGET_H)
++xcoffout.o : xcoffout.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) $(RTL_H) \
++ xcoffout.h flags.h toplev.h output.h dbxout.h $(GGC_H) $(TARGET_H)
++emit-rtl.o : emit-rtl.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
++ flags.h function.h $(REGS_H) insn-config.h $(RECOG_H) real.h $(GGC_H) \
++ $(EXPR_H) $(OBSTACK_H) hard-reg-set.h bitmap.h toplev.h \
++ $(HASHTAB_H) $(TM_P_H) debug.h langhooks.h gt-emit-rtl.h
++real.o : real.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) toplev.h $(TM_P_H)
++integrate.o : integrate.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
++ flags.h debug.h $(INTEGRATE_H) insn-config.h $(EXPR_H) real.h $(REGS_H) \
++ intl.h function.h output.h $(RECOG_H) except.h toplev.h $(LOOP_H) \
++ $(PARAMS_H) $(TM_P_H) $(TARGET_H) langhooks.h gt-integrate.h
++jump.o : jump.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) flags.h \
++ hard-reg-set.h $(REGS_H) insn-config.h $(RECOG_H) $(EXPR_H) real.h except.h function.h \
++ toplev.h $(INSN_ATTR_H) $(TM_P_H) reload.h $(PREDICT_H) $(TIMEVAR_H) \
++ $(DIAGNOSTIC_H)
++
++simplify-rtx.o : simplify-rtx.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
++ $(REGS_H) hard-reg-set.h flags.h real.h insn-config.h $(RECOG_H) $(EXPR_H) toplev.h \
++ output.h function.h $(GGC_H) $(OBSTACK_H) $(TM_P_H) $(TREE_H) $(TARGET_H)
++cgraph.o : cgraph.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
++ langhooks.h toplev.h flags.h $(GGC_H) $(TARGET_H) cgraph.h gt-cgraph.h \
++ output.h intl.h
++cgraphunit.o : cgraphunit.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TREE_H) \
++ langhooks.h tree-inline.h toplev.h flags.h $(GGC_H) $(TARGET_H) cgraph.h intl.h \
++ function.h
++coverage.o : coverage.c gcov-io.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
++ $(TM_H) $(RTL_H) $(TREE_H) flags.h output.h $(REGS_H) $(EXPR_H) function.h \
++ toplev.h $(GGC_H) $(TARGET_H) langhooks.h $(COVERAGE_H) libfuncs.h \
++ gt-coverage.h $(HASHTAB_H)
++cselib.o : cselib.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(REGS_H) \
++ hard-reg-set.h flags.h real.h insn-config.h $(RECOG_H) $(EXPR_H) toplev.h \
++ output.h function.h cselib.h $(GGC_H) $(TM_P_H) gt-cselib.h $(PARAMS_H)
++cse.o : cse.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(REGS_H) \
++ hard-reg-set.h flags.h real.h insn-config.h $(RECOG_H) $(EXPR_H) toplev.h \
++ output.h function.h $(BASIC_BLOCK_H) $(GGC_H) $(TM_P_H) $(TIMEVAR_H) \
++ except.h $(TARGET_H) $(PARAMS_H)
++web.o : web.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(REGS_H) \
++ hard-reg-set.h flags.h $(BASIC_BLOCK_H) function.h output.h toplev.h df.h
++gcse.o : gcse.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(REGS_H) \
++ hard-reg-set.h flags.h real.h insn-config.h $(GGC_H) $(RECOG_H) $(EXPR_H) \
++ $(BASIC_BLOCK_H) function.h output.h toplev.h $(TM_P_H) $(PARAMS_H) \
++ except.h gt-gcse.h $(TREE_H) cselib.h
++sibcall.o : sibcall.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(REGS_H) \
++ function.h hard-reg-set.h flags.h insn-config.h $(RECOG_H) $(BASIC_BLOCK_H)
++resource.o : resource.c $(CONFIG_H) $(RTL_H) hard-reg-set.h $(SYSTEM_H) coretypes.h \
++ $(TM_H) $(BASIC_BLOCK_H) $(REGS_H) flags.h output.h resource.h function.h toplev.h \
++ $(INSN_ATTR_H) except.h $(PARAMS_H) $(TM_P_H)
++lcm.o : lcm.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(REGS_H) \
++ hard-reg-set.h flags.h real.h insn-config.h $(INSN_ATTR_H) $(RECOG_H) $(EXPR_H) \
++ $(BASIC_BLOCK_H) $(TM_P_H) df.h function.h
++df.o : df.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
++ insn-config.h $(RECOG_H) function.h $(REGS_H) alloc-pool.h hard-reg-set.h \
++ $(BASIC_BLOCK_H) df.h $(FIBHEAP_H)
++conflict.o : conflict.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(OBSTACK_H) \
++ $(HASHTAB_H) $(RTL_H) hard-reg-set.h $(BASIC_BLOCK_H)
++profile.o : profile.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
++ $(TREE_H) flags.h output.h $(REGS_H) $(EXPR_H) function.h \
++ toplev.h $(BASIC_BLOCK_H) $(COVERAGE_H) $(TREE_H) value-prof.h
++value-prof.o : value-prof.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
++ $(BASIC_BLOCK_H) hard-reg-set.h value-prof.h $(EXPR_H) output.h flags.h \
++ $(RECOG_H) insn-config.h $(OPTABS_H) $(REGS_H)
++loop.o : loop.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) flags.h $(LOOP_H) \
++ insn-config.h $(REGS_H) hard-reg-set.h $(RECOG_H) $(EXPR_H) \
++ real.h $(PREDICT_H) $(BASIC_BLOCK_H) function.h cfgloop.h \
++ toplev.h varray.h except.h cselib.h $(OPTABS_H) $(TM_P_H) $(GGC_H)
++doloop.o : doloop.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) flags.h \
++ $(LOOP_H) $(EXPR_H) hard-reg-set.h $(BASIC_BLOCK_H) $(TM_P_H) toplev.h \
++ cfgloop.h
++unroll.o : unroll.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) insn-config.h \
++ function.h $(INTEGRATE_H) $(REGS_H) $(RECOG_H) flags.h $(EXPR_H) $(LOOP_H) toplev.h \
++ hard-reg-set.h varray.h $(BASIC_BLOCK_H) $(TM_P_H) $(PREDICT_H) $(PARAMS_H) \
++ cfgloop.h
++alloc-pool.o : alloc-pool.c $(CONFIG_H) $(SYSTEM_H) alloc-pool.h $(HASHTAB_H)
++flow.o : flow.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
++ flags.h insn-config.h $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h output.h toplev.h \
++ $(RECOG_H) function.h except.h $(EXPR_H) $(GGC_H) $(TM_P_H)
++cfg.o : cfg.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) flags.h insn-config.h \
++ $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h output.h toplev.h $(RECOG_H) \
++ function.h except.h $(GGC_H) $(TM_P_H) alloc-pool.h
++cfghooks.o: cfghooks.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
++ $(BASIC_BLOCK_H) cfglayout.h
++cfgrtl.o : cfgrtl.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) flags.h \
++ insn-config.h $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h output.h toplev.h $(RECOG_H) \
++ function.h except.h $(GGC_H) $(TM_P_H) insn-config.h $(EXPR_H)
++cfganal.o : cfganal.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
++ $(BASIC_BLOCK_H) hard-reg-set.h insn-config.h $(RECOG_H) $(GGC_H) $(TM_P_H)
++cfgbuild.o : cfgbuild.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) flags.h \
++ insn-config.h $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h output.h toplev.h $(RECOG_H) \
++ function.h except.h $(GGC_H)
++cfgcleanup.o : cfgcleanup.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
++ $(RTL_H) $(TIMEVAR_H) $(BASIC_BLOCK_H) hard-reg-set.h output.h flags.h \
++ $(RECOG_H) toplev.h $(GGC_H) insn-config.h cselib.h $(TARGET_H) $(TM_P_H) \
++ $(PARAMS_H)
++cfgloop.o : cfgloop.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) coretypes.h $(TM_H) \
++ $(BASIC_BLOCK_H) hard-reg-set.h cfgloop.h flags.h
++cfgloopanal.o : cfgloopanal.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) \
++ $(BASIC_BLOCK_H) hard-reg-set.h cfgloop.h $(EXPR_H) coretypes.h $(TM_H)
++cfgloopmanip.o : cfgloopmanip.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) \
++ $(BASIC_BLOCK_H) hard-reg-set.h cfgloop.h cfglayout.h output.h coretypes.h $(TM_H)
++loop-init.o : loop-init.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) \
++ $(BASIC_BLOCK_H) hard-reg-set.h cfgloop.h cfglayout.h \
++ coretypes.h $(TM_H)
++loop-unswitch.o : loop-unswitch.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TM_H) \
++ $(BASIC_BLOCK_H) hard-reg-set.h cfgloop.h cfglayout.h $(PARAMS_H) \
++ output.h $(EXPR_H) coretypes.h $(TM_H)
++loop-unroll.o: loop-unroll.c $(CONFIG_H) $(SYSTEM_H) $(RTL_H) $(TM_H) \
++ $(BASIC_BLOCK_H) hard-reg-set.h cfgloop.h cfglayout.h $(PARAMS_H) \
++ output.h $(EXPR_H) coretypes.h $(TM_H)
++dominance.o : dominance.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
++ hard-reg-set.h $(BASIC_BLOCK_H) et-forest.h
++et-forest.o : et-forest.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) et-forest.h alloc-pool.h
++combine.o : combine.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) flags.h \
++ function.h insn-config.h $(INSN_ATTR_H) $(REGS_H) $(EXPR_H) \
++ $(BASIC_BLOCK_H) $(RECOG_H) real.h hard-reg-set.h toplev.h $(TM_P_H) \
++ $(TREE_H) $(TARGET_H) $(PARAMS_H)
++regclass.o : regclass.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
++ hard-reg-set.h flags.h $(BASIC_BLOCK_H) $(REGS_H) insn-config.h $(RECOG_H) reload.h \
++ real.h toplev.h function.h output.h $(GGC_H) $(TM_P_H) $(EXPR_H) $(TIMEVAR_H)
++local-alloc.o : local-alloc.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
++ flags.h $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h insn-config.h $(RECOG_H) \
++ output.h function.h $(INSN_ATTR_H) toplev.h except.h $(TM_P_H)
++bitmap.o : bitmap.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(GTM_H) $(RTL_H) flags.h \
++ $(BASIC_BLOCK_H) $(REGS_H) $(GGC_H)
++ $(CC) -c $(ALL_CFLAGS) -DGENERATOR_FILE $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)
++global.o : global.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) flags.h \
++ reload.h function.h $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h insn-config.h output.h \
++ toplev.h $(TM_P_H)
++varray.o : varray.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) varray.h $(GGC_H) errors.h
++ra.o : ra.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TM_P_H) insn-config.h \
++ $(RECOG_H) $(INTEGRATE_H) function.h $(REGS_H) $(OBSTACK_H) hard-reg-set.h \
++ $(BASIC_BLOCK_H) df.h $(EXPR_H) output.h toplev.h flags.h reload.h ra.h
++ra-build.o : ra-build.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TM_P_H) \
++ insn-config.h $(RECOG_H) function.h $(REGS_H) hard-reg-set.h \
++ $(BASIC_BLOCK_H) df.h output.h $(GGC_H) ra.h gt-ra-build.h reload.h
++ra-colorize.o : ra-colorize.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
++ $(TM_P_H) function.h $(REGS_H) hard-reg-set.h $(BASIC_BLOCK_H) df.h output.h ra.h
++ra-debug.o : ra-debug.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
++ insn-config.h $(RECOG_H) function.h hard-reg-set.h $(BASIC_BLOCK_H) df.h output.h \
++ ra.h $(TM_P_H)
++ra-rewrite.o : ra-rewrite.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
++ $(TM_P_H) function.h $(REGS_H) hard-reg-set.h $(BASIC_BLOCK_H) df.h $(EXPR_H) \
++ output.h except.h ra.h reload.h insn-config.h
++reload.o : reload.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) flags.h output.h \
++ $(EXPR_H) $(OPTABS_H) reload.h $(RECOG_H) hard-reg-set.h insn-config.h \
++ $(REGS_H) function.h real.h toplev.h $(TM_P_H) $(PARAMS_H)
++reload1.o : reload1.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) real.h flags.h \
++ $(EXPR_H) $(OPTABS_H) reload.h $(REGS_H) hard-reg-set.h insn-config.h \
++ $(BASIC_BLOCK_H) $(RECOG_H) output.h function.h toplev.h $(TM_P_H) \
++ except.h $(TREE_H)
++postreload.o : postreload.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) real.h flags.h \
++ $(EXPR_H) $(OPTABS_H) reload.h $(REGS_H) hard-reg-set.h insn-config.h \
++ $(BASIC_BLOCK_H) $(RECOG_H) output.h function.h toplev.h cselib.h $(TM_P_H) \
++ except.h $(TREE_H)
++caller-save.o : caller-save.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
++ flags.h $(REGS_H) hard-reg-set.h insn-config.h $(BASIC_BLOCK_H) function.h \
++ $(RECOG_H) reload.h $(EXPR_H) toplev.h $(TM_P_H)
++bt-load.o : bt-load.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
++ $(BASIC_BLOCK_H) $(RTL_H) hard-reg-set.h $(REGS_H) $(OBSTACK_H) $(TM_P_H) \
++ $(FIBHEAP_H) output.h $(TARGET_H) $(EXPR_H) flags.h $(INSN_ATTR_H)
++reorg.o : reorg.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) conditions.h \
++ hard-reg-set.h $(BASIC_BLOCK_H) $(REGS_H) insn-config.h $(INSN_ATTR_H) except.h \
++ $(RECOG_H) function.h flags.h output.h $(EXPR_H) toplev.h $(PARAMS_H) $(TM_P_H)
++alias.o : alias.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) flags.h \
++ hard-reg-set.h $(BASIC_BLOCK_H) $(REGS_H) toplev.h output.h $(EXPR_H) \
++ $(GGC_H) function.h cselib.h $(TREE_H) $(TM_P_H) langhooks.h $(TARGET_H) \
++ gt-alias.h $(TIMEVAR_H) cgraph.h
++regmove.o : regmove.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) insn-config.h \
++ $(RECOG_H) output.h $(REGS_H) hard-reg-set.h flags.h function.h \
++ $(EXPR_H) $(BASIC_BLOCK_H) toplev.h $(TM_P_H) except.h reload.h
++haifa-sched.o : haifa-sched.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
++ sched-int.h $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h flags.h insn-config.h function.h \
++ $(INSN_ATTR_H) toplev.h $(RECOG_H) except.h $(TM_P_H) $(TARGET_H)
++sched-deps.o : sched-deps.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
++ sched-int.h $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h flags.h insn-config.h function.h \
++ $(INSN_ATTR_H) toplev.h $(RECOG_H) except.h cselib.h $(PARAMS_H) $(TM_P_H)
++sched-rgn.o : sched-rgn.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
++ sched-int.h $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h flags.h insn-config.h function.h \
++ $(INSN_ATTR_H) toplev.h $(RECOG_H) except.h $(TM_P_H) $(TARGET_H)
++sched-ebb.o : sched-ebb.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
++ sched-int.h $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h flags.h insn-config.h function.h \
++ $(INSN_ATTR_H) toplev.h $(RECOG_H) except.h $(TM_P_H) $(PARAMS_H)
++sched-vis.o : sched-vis.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
++ sched-int.h hard-reg-set.h $(BASIC_BLOCK_H) $(INSN_ATTR_H) $(REGS_H) $(TM_P_H) \
++ $(TARGET_H) real.h
++final.o : final.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
++ flags.h intl.h $(REGS_H) $(RECOG_H) conditions.h insn-config.h $(INSN_ATTR_H) \
++ function.h real.h output.h hard-reg-set.h except.h debug.h xcoffout.h \
++ toplev.h reload.h dwarf2out.h $(BASIC_BLOCK_H) $(TM_P_H) $(TARGET_H) \
++ $(EXPR_H)
++recog.o : recog.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) function.h \
++ $(BASIC_BLOCK_H) $(REGS_H) $(RECOG_H) $(EXPR_H) hard-reg-set.h flags.h insn-config.h \
++ $(INSN_ATTR_H) real.h toplev.h output.h reload.h $(TM_P_H)
++reg-stack.o : reg-stack.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
++ $(RECOG_H) $(REGS_H) hard-reg-set.h flags.h insn-config.h toplev.h reload.h \
++ varray.h function.h $(TM_P_H) $(GGC_H) gt-reg-stack.h
++sreal.o: sreal.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) sreal.h
++predict.o: predict.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
++ flags.h insn-config.h $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h output.h toplev.h \
++ $(RECOG_H) function.h except.h $(EXPR_H) $(TM_P_H) $(PREDICT_H) sreal.h \
++ $(PARAMS_H) $(TARGET_H) cfgloop.h $(COVERAGE_H)
++lists.o: lists.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) toplev.h $(RTL_H) $(GGC_H)
++bb-reorder.o : bb-reorder.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
++ $(RTL_H) $(BASIC_BLOCK_H) flags.h timevar.h output.h cfglayout.h $(FIBHEAP_H) \
++ $(TARGET_H)
++tracer.o : tracer.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) $(TREE_H) \
++ $(BASIC_BLOCK_H) hard-reg-set.h output.h cfglayout.h flags.h timevar.h \
++ $(PARAMS_H) $(COVERAGE_H)
++cfglayout.o : cfglayout.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
++ $(RTL_H) $(TREE_H) insn-config.h $(BASIC_BLOCK_H) hard-reg-set.h output.h \
++ function.h cfglayout.h cfgloop.h $(TARGET_H) gt-cfglayout.h $(GGC_H)
++timevar.o : timevar.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(TIMEVAR_H) flags.h \
++ intl.h toplev.h
++regrename.o : regrename.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
++ insn-config.h $(BASIC_BLOCK_H) $(REGS_H) hard-reg-set.h output.h $(RECOG_H) function.h \
++ resource.h $(OBSTACK_H) flags.h $(TM_P_H)
++ifcvt.o : ifcvt.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
++ $(REGS_H) toplev.h flags.h insn-config.h function.h $(RECOG_H) $(TARGET_H) \
++ $(BASIC_BLOCK_H) $(EXPR_H) output.h except.h $(TM_P_H) real.h $(OPTABS_H) \
++ cfgloop.h
++params.o : params.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(PARAMS_H) toplev.h
++hooks.o: hooks.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(HOOKS_H)
++pretty-print.o: $(CONFIG_H) $(SYSTEM_H) pretty-print.c $(PRETTY_PRINT_H)
++
++$(out_object_file): $(out_file) $(CONFIG_H) coretypes.h $(TM_H) $(TREE_H) $(GGC_H) \
++ $(RTL_H) $(REGS_H) hard-reg-set.h real.h insn-config.h conditions.h \
++ output.h $(INSN_ATTR_H) $(SYSTEM_H) toplev.h $(TARGET_H) libfuncs.h \
++ $(TARGET_DEF_H) function.h sched-int.h $(TM_P_H) $(EXPR_H) $(OPTABS_H) \
++ langhooks.h
++ $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
++ $(out_file) $(OUTPUT_OPTION)
++
++# Build auxiliary files that support ecoff format.
++mips-tfile: mips-tfile.o version.o $(LIBDEPS)
++ $(CC) $(CFLAGS) $(LDFLAGS) -o $@ mips-tfile.o version.o $(LIBS)
++
++mips-tfile.o : mips-tfile.c $(CONFIG_H) $(RTL_H) $(SYSTEM_H) coretypes.h $(TM_H) version.h
++
++mips-tdump: mips-tdump.o version.o $(LIBDEPS)
++ $(CC) $(CFLAGS) $(LDFLAGS) -o $@ mips-tdump.o version.o $(LIBS)
++
++mips-tdump.o : mips-tdump.c $(CONFIG_H) $(RTL_H) $(SYSTEM_H) coretypes.h $(TM_H) version.h
++
++# FIXME: writing proper dependencies for this is a *LOT* of work.
++libbackend.o : $(OBJS-common:.o=.c) $(out_file) \
++ insn-config.h insn-flags.h insn-codes.h insn-constants.h \
++ insn-attr.h
++ $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
++ -DTARGET_NAME=\"$(target_noncanonical)\" \
++ -DLOCALEDIR=\"$(localedir)\" \
++ -c $(filter %.c,$^) -o $@
++
++#
++# Generate header and source files from the machine description,
++# and compile them.
++
++.PRECIOUS: insn-config.h insn-flags.h insn-codes.h insn-constants.h \
++ insn-emit.c insn-recog.c insn-extract.c insn-output.c insn-peep.c \
++ insn-attr.h insn-attrtab.c
++
++# The following pair of rules has this effect:
++# genconfig is run only if the md has changed since genconfig was last run;
++# but the file insn-config.h is touched only when its contents actually change.
++
++# Each of the other insn-* files is handled by a similar pair of rules.
++
++# This causes an anomaly in the results of make -n
++# because insn-* is older than s-*
++# and thus make -n thinks that insn-* will be updated
++# and force recompilation of things that depend on it.
++# We use move-if-change precisely to avoid such recompilation.
++# But there is no way to teach make -n that it will be avoided.
++
++# Each of the insn-*.[ch] rules has a semicolon at the end,
++# for otherwise the system Make on SunOS 4.1 never tries
++# to recompile insn-*.o. To avoid problems and extra noise from
++# versions of make which don't like empty commands (nothing after the
++# trailing `;'), we call true for each.
++
++insn-config.h: s-config ; @true
++s-config : $(md_file) genconfig$(build_exeext) $(srcdir)/move-if-change
++ $(RUN_GEN) ./genconfig$(build_exeext) $(md_file) > tmp-config.h
++ $(SHELL) $(srcdir)/move-if-change tmp-config.h insn-config.h
++ $(STAMP) s-config
++
++insn-conditions.c: s-conditions ; @true
++s-conditions : $(md_file) genconditions$(build_exeext) $(srcdir)/move-if-change
++ $(RUN_GEN) ./genconditions$(build_exeext) $(md_file) > tmp-conditions.c
++ $(SHELL) $(srcdir)/move-if-change tmp-conditions.c insn-conditions.c
++ $(STAMP) s-conditions
++
++insn-conditions.o : insn-conditions.c $(CONFIG_H) $(SYSTEM_H) coretypes.h \
++ $(GTM_H) $(RTL_H) $(TM_P_H) $(REGS_H) function.h $(RECOG_H) real.h output.h \
++ flags.h hard-reg-set.h resource.h toplev.h reload.h gensupport.h \
++ insn-constants.h
++ $(CC_FOR_BUILD) -c $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(INCLUDES) insn-conditions.c
++
++dummy-conditions.o : dummy-conditions.c $(BCONFIG_H) $(SYSTEM_H) \
++ coretypes.h $(GTM_H) gensupport.h
++
++insn-flags.h: s-flags ; @true
++s-flags : $(md_file) genflags$(build_exeext) $(srcdir)/move-if-change
++ $(RUN_GEN) ./genflags$(build_exeext) $(md_file) > tmp-flags.h
++ $(SHELL) $(srcdir)/move-if-change tmp-flags.h insn-flags.h
++ $(STAMP) s-flags
++
++insn-codes.h: s-codes ; @true
++s-codes : $(md_file) gencodes$(build_exeext) $(srcdir)/move-if-change
++ $(RUN_GEN) ./gencodes$(build_exeext) $(md_file) > tmp-codes.h
++ $(SHELL) $(srcdir)/move-if-change tmp-codes.h insn-codes.h
++ $(STAMP) s-codes
++
++insn-constants.h: s-constants ; @true
++s-constants : $(md_file) genconstants$(build_exeext) $(srcdir)/move-if-change
++ $(RUN_GEN) ./genconstants$(build_exeext) $(md_file) > tmp-constants.h
++ $(SHELL) $(srcdir)/move-if-change tmp-constants.h insn-constants.h
++ $(STAMP) s-constants
++
++insn-emit.o : insn-emit.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
++ $(RTL_H) $(EXPR_H) real.h output.h insn-config.h $(OPTABS_H) reload.h \
++ $(RECOG_H) toplev.h function.h flags.h hard-reg-set.h resource.h $(TM_P_H)
++ $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-emit.c \
++ $(OUTPUT_OPTION)
++
++insn-emit.c: s-emit ; @true
++s-emit : $(md_file) genemit$(build_exeext) $(srcdir)/move-if-change
++ $(RUN_GEN) ./genemit$(build_exeext) $(md_file) > tmp-emit.c
++ $(SHELL) $(srcdir)/move-if-change tmp-emit.c insn-emit.c
++ $(STAMP) s-emit
++
++insn-recog.o : insn-recog.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
++ $(RTL_H) insn-config.h $(RECOG_H) real.h output.h flags.h function.h \
++ hard-reg-set.h resource.h $(TM_P_H) toplev.h reload.h
++ $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-recog.c \
++ $(OUTPUT_OPTION)
++
++insn-recog.c: s-recog ; @true
++s-recog : $(md_file) genrecog$(build_exeext) $(srcdir)/move-if-change
++ $(RUN_GEN) ./genrecog$(build_exeext) $(md_file) > tmp-recog.c
++ $(SHELL) $(srcdir)/move-if-change tmp-recog.c insn-recog.c
++ $(STAMP) s-recog
++
++insn-opinit.o : insn-opinit.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
++ $(RTL_H) insn-config.h flags.h $(RECOG_H) $(EXPR_H) $(OPTABS_H) reload.h
++ $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-opinit.c \
++ $(OUTPUT_OPTION)
++
++insn-opinit.c: s-opinit ; @true
++s-opinit : $(md_file) genopinit$(build_exeext) $(srcdir)/move-if-change
++ $(RUN_GEN) ./genopinit$(build_exeext) $(md_file) > tmp-opinit.c
++ $(SHELL) $(srcdir)/move-if-change tmp-opinit.c insn-opinit.c
++ $(STAMP) s-opinit
++
++insn-extract.o : insn-extract.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
++ $(RTL_H) toplev.h insn-config.h $(RECOG_H)
++ $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-extract.c \
++ $(OUTPUT_OPTION)
++
++insn-extract.c: s-extract ; @true
++s-extract : $(md_file) genextract$(build_exeext) $(srcdir)/move-if-change
++ $(RUN_GEN) ./genextract$(build_exeext) $(md_file) > tmp-extract.c
++ $(SHELL) $(srcdir)/move-if-change tmp-extract.c insn-extract.c
++ $(STAMP) s-extract
++
++insn-peep.o : insn-peep.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
++ $(RTL_H) $(REGS_H) output.h real.h insn-config.h $(RECOG_H) except.h \
++ function.h $(TM_P_H)
++ $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-peep.c \
++ $(OUTPUT_OPTION)
++
++insn-peep.c: s-peep ; @true
++s-peep : $(md_file) genpeep$(build_exeext) $(srcdir)/move-if-change
++ $(RUN_GEN) ./genpeep$(build_exeext) $(md_file) > tmp-peep.c
++ $(SHELL) $(srcdir)/move-if-change tmp-peep.c insn-peep.c
++ $(STAMP) s-peep
++
++insn-attrtab.o : insn-attrtab.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
++ $(RTL_H) $(REGS_H) real.h output.h $(INSN_ATTR_H) insn-config.h toplev.h \
++ $(RECOG_H) $(TM_P_H) flags.h
++ $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-attrtab.c \
++ $(OUTPUT_OPTION)
++
++insn-attr.h: s-attr ; @true
++s-attr : $(md_file) genattr$(build_exeext) $(srcdir)/move-if-change
++ $(RUN_GEN) ./genattr$(build_exeext) $(md_file) > tmp-attr.h
++ $(SHELL) $(srcdir)/move-if-change tmp-attr.h insn-attr.h
++ $(STAMP) s-attr
++
++insn-attrtab.c: s-attrtab ; @true
++s-attrtab : $(md_file) genattrtab$(build_exeext) $(srcdir)/move-if-change
++ $(RUN_GEN) ./genattrtab$(build_exeext) $(md_file) > tmp-attrtab.c
++ $(SHELL) $(srcdir)/move-if-change tmp-attrtab.c insn-attrtab.c
++ $(STAMP) s-attrtab
++
++insn-output.o : insn-output.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
++ $(RTL_H) $(GGC_H) $(REGS_H) real.h conditions.h hard-reg-set.h \
++ insn-config.h $(INSN_ATTR_H) $(EXPR_H) output.h $(RECOG_H) function.h \
++ toplev.h flags.h insn-codes.h $(TM_P_H) $(TARGET_H)
++ $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-output.c \
++ $(OUTPUT_OPTION)
++
++insn-output.c: s-output ; @true
++s-output : $(md_file) genoutput$(build_exeext) $(srcdir)/move-if-change
++ $(RUN_GEN) ./genoutput$(build_exeext) $(md_file) > tmp-output.c
++ $(SHELL) $(srcdir)/move-if-change tmp-output.c insn-output.c
++ $(STAMP) s-output
++
++genrtl.o : genrtl.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(RTL_H) \
++ $(GGC_H)
++genrtl.c genrtl.h : s-genrtl
++ @true # force gnu make to recheck modification times.
++
++s-genrtl: gengenrtl$(build_exeext) $(srcdir)/move-if-change
++ $(RUN_GEN) ./gengenrtl$(build_exeext) -h > tmp-genrtl.h
++ $(SHELL) $(srcdir)/move-if-change tmp-genrtl.h genrtl.h
++ $(RUN_GEN) ./gengenrtl$(build_exeext) > tmp-genrtl.c
++ $(SHELL) $(srcdir)/move-if-change tmp-genrtl.c genrtl.c
++ $(STAMP) s-genrtl
++
++insn-modes.o : insn-modes.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
++ $(MACHMODE_H) real.h
++min-insn-modes.c insn-modes.c insn-modes.h : s-modes ; @true
++
++s-modes: genmodes$(build_exeext) $(srcdir)/move-if-change
++ $(RUN_GEN) ./genmodes$(build_exeext) -h > tmp-modes.h
++ $(SHELL) $(srcdir)/move-if-change tmp-modes.h insn-modes.h
++ $(RUN_GEN) ./genmodes$(build_exeext) -m > tmp-min-modes.c
++ $(SHELL) $(srcdir)/move-if-change tmp-min-modes.c min-insn-modes.c
++ $(RUN_GEN) ./genmodes$(build_exeext) > tmp-modes.c
++ $(SHELL) $(srcdir)/move-if-change tmp-modes.c insn-modes.c
++ $(STAMP) s-modes
++
++tm-preds.h: s-preds; @true
++
++s-preds: genpreds$(build_exeext) $(srcdir)/move-if-change
++ $(RUN_GEN) ./genpreds$(build_exeext) > tmp-preds.h
++ $(SHELL) $(srcdir)/move-if-change tmp-preds.h tm-preds.h
++ $(STAMP) s-preds
++
++GTFILES = $(srcdir)/input.h $(srcdir)/coretypes.h $(srcdir)/cpplib.h \
++ $(host_xm_file_list) $(tm_file_list) $(HASHTAB_H) $(SPLAY_TREE_H) \
++ $(srcdir)/bitmap.h $(srcdir)/coverage.c $(srcdir)/function.h $(srcdir)/rtl.h \
++ $(srcdir)/optabs.h $(srcdir)/tree.h $(srcdir)/libfuncs.h $(srcdir)/hashtable.h \
++ $(srcdir)/real.h $(srcdir)/varray.h $(srcdir)/insn-addr.h \
++ $(srcdir)/cselib.h $(srcdir)/basic-block.h $(srcdir)/cgraph.h \
++ $(srcdir)/c-common.h $(srcdir)/c-tree.h \
++ $(srcdir)/alias.c $(srcdir)/bitmap.c $(srcdir)/cselib.c $(srcdir)/cgraph.c \
++ $(srcdir)/dbxout.c $(srcdir)/dwarf2out.c $(srcdir)/dwarf2asm.c \
++ $(srcdir)/dojump.c \
++ $(srcdir)/emit-rtl.c $(srcdir)/except.c $(srcdir)/explow.c $(srcdir)/expr.c \
++ $(srcdir)/fold-const.c $(srcdir)/function.c \
++ $(srcdir)/gcse.c $(srcdir)/integrate.c $(srcdir)/lists.c $(srcdir)/optabs.c \
++ $(srcdir)/profile.c $(srcdir)/ra-build.c $(srcdir)/regclass.c \
++ $(srcdir)/reg-stack.c $(srcdir)/cfglayout.c $(srcdir)/langhooks.c \
++ $(srcdir)/sdbout.c $(srcdir)/stmt.c $(srcdir)/stor-layout.c \
++ $(srcdir)/stringpool.c $(srcdir)/tree.c $(srcdir)/varasm.c \
++ $(out_file) \
++ @all_gtfiles@
++
++GTFILES_FILES_LANGS = @all_gtfiles_files_langs@
++GTFILES_FILES_FILES = @all_gtfiles_files_files@
++GTFILES_LANG_DIR_NAMES = @subdirs@
++GTFILES_SRCDIR = @srcdir@
++
++gt-cgraph.h gt-coverage.h gtype-desc.h gtype-desc.c gt-except.h \
++gt-function.h gt-integrate.h gt-stmt.h gt-tree.h gt-varasm.h \
++gt-emit-rtl.h gt-explow.h gt-stor-layout.h gt-regclass.h \
++gt-lists.h gt-alias.h gt-cselib.h gt-fold-const.h gt-gcse.h \
++gt-expr.h gt-sdbout.h gt-optabs.h gt-bitmap.h gt-dojump.h \
++gt-dwarf2out.h gt-ra-build.h gt-reg-stack.h gt-dwarf2asm.h \
++gt-dbxout.h gt-c-common.h gt-c-decl.h gt-c-parse.h \
++gt-c-pragma.h gtype-c.h gt-input.h gt-cfglayout.h \
++gt-stringpool.h gt-langhooks.h : s-gtype ; @true
++
++gtyp-gen.h: Makefile
++ echo "/* This file is machine generated. Do not edit. */" > tmp-gtyp.h
++ echo "static const char *const srcdir = " >> tmp-gtyp.h
++ echo "\"$(GTFILES_SRCDIR)\"" >> tmp-gtyp.h
++ echo ";" >> tmp-gtyp.h
++ echo "static const char *const lang_files[] = {" >> tmp-gtyp.h
++ ll="$(GTFILES_FILES_FILES)"; \
++ for f in $$ll; do \
++ echo "\"$$f\", "; done >> tmp-gtyp.h
++ echo "NULL};" >> tmp-gtyp.h
++ echo "static const char *const langs_for_lang_files[] = {" >> tmp-gtyp.h
++ ff="$(GTFILES_FILES_LANGS)"; \
++ for f in $$ff; do \
++ echo "\"$$f\", " ; done >> tmp-gtyp.h
++ echo "NULL};" >> tmp-gtyp.h
++ echo "static const char *const all_files[] = {" >> tmp-gtyp.h
++ gf="$(GTFILES)"; \
++ for f in $$gf; do \
++ echo "\"$$f\", "; done >> tmp-gtyp.h
++ echo " NULL};" >> tmp-gtyp.h
++ echo "static const char *const lang_dir_names[] = { \"c\", " >> tmp-gtyp.h
++ gf="$(GTFILES_LANG_DIR_NAMES)"; \
++ for l in $$gf; do \
++ echo "\"$$l\", "; done >> tmp-gtyp.h
++ echo "NULL};" >> tmp-gtyp.h
++ $(SHELL) $(srcdir)/move-if-change tmp-gtyp.h gtyp-gen.h
++
++s-gtype: gengtype$(build_exeext) $(GTFILES)
++ $(RUN_GEN) ./gengtype
++ $(STAMP) s-gtype
++
++#
++# Compile the programs that generate insn-* from the machine description.
++# They are compiled with $(CC_FOR_BUILD), and associated libraries,
++# since they need to run on this machine
++# even if GCC is being compiled to run on some other machine.
++
++# $(CONFIG_H) is omitted from the deps of the gen*.o
++# because these programs don't really depend on anything
++# about the target machine. They do depend on config.h itself,
++# since that describes the host machine.
++
++# The names of programs that run on the "build" machine.
++genprognames=genconfig genflags gencodes genemit genopinit genrecog \
++ genextract genpeep genattr genoutput
++
++# The names of the executable files for those programs.
++genprogs=$(genprognames:%=%$(build_exeext))
++
++# Object files used in those programs.
++genobjs=$(genprognames:%=%.o) read-rtl.o gensupport.o genattrtab.o \
++ genautomata.o gengenrtl.o genmodes.o genpreds.o gengtype.o \
++ genconstants.o gen-protos.o scan.o fix-header.o scan-decls.o \
++ gencheck.o dummy-conditions.o genconditions.o
++
++$(genprogs): %$(build_exeext): %.o $(BUILD_RTL) $(BUILD_SUPPORT) \
++ $(BUILD_PRINT) $(BUILD_ERRORS) \
++ $(BUILD_LIBDEPS)
++ $(CC_FOR_BUILD) $(BUILD_CFLAGS) $(BUILD_LDFLAGS) -o $@ \
++ $< $(BUILD_RTL) $(BUILD_SUPPORT) $(BUILD_PRINT) \
++ $(BUILD_ERRORS) $(BUILD_LIBS)
++
++$(genobjs): %.o : %.c
++ $(CC_FOR_BUILD) -c $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)
++
++read-rtl.o: read-rtl.c $(BCONFIG_H) $(SYSTEM_H) coretypes.h $(GTM_H) $(RTL_H) \
++ $(OBSTACK_H) $(HASHTAB_H)
++
++gensupport.o: gensupport.c $(BCONFIG_H) $(SYSTEM_H) coretypes.h $(GTM_H) $(RTL_H) \
++ $(OBSTACK_H) errors.h $(HASHTAB_H) gensupport.h
++
++genconfig.o : genconfig.c $(RTL_H) $(BCONFIG_H) \
++ $(SYSTEM_H) coretypes.h $(GTM_H) errors.h gensupport.h
++
++genflags.o : genflags.c $(RTL_H) $(OBSTACK_H) $(BCONFIG_H) \
++ $(SYSTEM_H) coretypes.h $(GTM_H) errors.h gensupport.h
++
++gencodes.o : gencodes.c $(RTL_H) $(BCONFIG_H) \
++ $(SYSTEM_H) coretypes.h $(GTM_H) errors.h gensupport.h
++
++genconstants$(build_exeext) : genconstants.o $(BUILD_RTL) $(BUILD_EARLY_SUPPORT) \
++ $(BUILD_ERRORS) $(BUILD_LIBDEPS)
++ $(CC_FOR_BUILD) $(BUILD_CFLAGS) $(BUILD_LDFLAGS) -o $@ \
++ genconstants.o $(BUILD_EARLY_SUPPORT) $(BUILD_RTL) \
++ $(BUILD_ERRORS) $(BUILD_LIBS)
++
++genconstants.o : genconstants.c $(RTL_H) $(BCONFIG_H) $(SYSTEM_H) coretypes.h $(GTM_H) \
++ errors.h
++
++genemit.o : genemit.c $(RTL_H) $(BCONFIG_H) $(SYSTEM_H) coretypes.h $(GTM_H) \
++ errors.h gensupport.h
++
++genopinit.o : genopinit.c $(RTL_H) $(BCONFIG_H) \
++ $(SYSTEM_H) coretypes.h $(GTM_H) errors.h gensupport.h
++
++genrecog.o : genrecog.c $(RTL_H) $(BCONFIG_H) \
++ $(SYSTEM_H) coretypes.h $(GTM_H) errors.h gensupport.h
++
++genextract.o : genextract.c $(RTL_H) $(BCONFIG_H) \
++ $(SYSTEM_H) coretypes.h $(GTM_H) insn-config.h errors.h gensupport.h
++
++genpeep.o : genpeep.c $(RTL_H) $(BCONFIG_H) $(SYSTEM_H) coretypes.h $(GTM_H) \
++ errors.h gensupport.h
++
++genattr.o : genattr.c $(RTL_H) $(BCONFIG_H) $(SYSTEM_H) coretypes.h $(GTM_H) errors.h \
++ gensupport.h
++
++genattrtab$(build_exeext) : genattrtab.o genautomata.o \
++ $(BUILD_RTL) $(BUILD_SUPPORT) $(BUILD_PRINT) $(BUILD_ERRORS) $(BUILD_VARRAY) \
++ $(BUILD_LIBDEPS)
++ $(CC_FOR_BUILD) $(BUILD_CFLAGS) $(BUILD_LDFLAGS) -o $@ \
++ genattrtab.o genautomata.o \
++ $(BUILD_RTL) $(BUILD_SUPPORT) $(BUILD_PRINT) $(BUILD_ERRORS) \
++ $(BUILD_VARRAY) $(BUILD_LIBS) -lm
++
++genattrtab.o : genattrtab.c $(RTL_H) $(OBSTACK_H) $(BCONFIG_H) \
++ $(SYSTEM_H) coretypes.h $(GTM_H) errors.h $(GGC_H) gensupport.h genattrtab.h
++
++genautomata.o : genautomata.c $(RTL_H) $(OBSTACK_H) $(BCONFIG_H) \
++ $(SYSTEM_H) coretypes.h $(GTM_H) errors.h varray.h genattrtab.h $(HASHTAB_H)
++
++genoutput.o : genoutput.c $(RTL_H) $(BCONFIG_H) \
++ $(SYSTEM_H) coretypes.h $(GTM_H) errors.h gensupport.h
++
++gengenrtl$(build_exeext) : gengenrtl.o $(BUILD_LIBDEPS)
++ $(CC_FOR_BUILD) $(BUILD_CFLAGS) $(BUILD_LDFLAGS) -o $@ \
++ gengenrtl.o $(BUILD_LIBS)
++
++gengenrtl.o : gengenrtl.c $(BCONFIG_H) $(SYSTEM_H) rtl.def
++
++genmodes$(build_exeext) : genmodes.o $(BUILD_ERRORS) $(BUILD_LIBDEPS)
++ $(CC_FOR_BUILD) $(BUILD_CFLAGS) $(BUILD_LDFLAGS) -o $@ \
++ genmodes.o $(BUILD_ERRORS) $(BUILD_LIBS)
++
++genmodes.o : genmodes.c $(BCONFIG_H) $(SYSTEM_H) errors.h $(HASHTAB_H) \
++ machmode.def $(extra_modes_file)
++
++genpreds$(build_exeext) : genpreds.o $(BUILD_LIBDEPS)
++ $(CC_FOR_BUILD) $(BUILD_CFLAGS) $(BUILD_LDFLAGS) -o $@ \
++ genpreds.o $(BUILD_LIBS)
++
++genpreds.o : genpreds.c $(RTL_BASE_H) $(BCONFIG_H) $(SYSTEM_H) coretypes.h $(GTM_H)
++
++gengtype$(build_exeext) : gengtype.o gengtype-lex.o gengtype-yacc.o \
++ $(BUILD_LIBDEPS)
++ $(CC_FOR_BUILD) $(BUILD_CFLAGS) $(BUILD_LDFLAGS) -o $@ \
++ gengtype.o gengtype-lex.o gengtype-yacc.o $(BUILD_LIBS)
++
++gengtype.o : gengtype.c gengtype.h $(BCONFIG_H) $(SYSTEM_H) coretypes.h $(GTM_H) \
++ real.h $(RTL_BASE_H) gtyp-gen.h
++
++gengtype-lex.o : gengtype-lex.c gengtype.h gengtype-yacc.h \
++ $(BCONFIG_H) coretypes.h $(GTM_H) $(SYSTEM_H)
++ $(CC_FOR_BUILD) -c $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(INCLUDES) \
++ $< $(OUTPUT_OPTION)
++
++gengtype-yacc.o : gengtype-yacc.c gengtype.h $(BCONFIG_H) $(SYSTEM_H) \
++ coretypes.h $(GTM_H)
++ $(CC_FOR_BUILD) -c $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(INCLUDES) \
++ $< $(OUTPUT_OPTION)
++
++gengtype-lex.c : gengtype-lex.l
++ -$(FLEX) $(FLEXFLAGS) -o$@ $<
++
++gengtype-yacc.c gengtype-yacc.h: gengtype-yacc.y
++ -$(BISON) $(BISONFLAGS) -d -o gengtype-yacc.c $<
++
++genconditions$(build_exeext) : genconditions.o $(BUILD_EARLY_SUPPORT) \
++ $(BUILD_RTL) $(BUILD_ERRORS) $(BUILD_LIBDEPS)
++ $(CC_FOR_BUILD) $(BUILD_CFLAGS) $(BUILD_LDFLAGS) -o $@ \
++ genconditions.o $(BUILD_EARLY_SUPPORT) $(BUILD_RTL) \
++ $(BUILD_ERRORS) $(BUILD_LIBS)
++
++genconditions.o : genconditions.c $(RTL_H) $(BCONFIG_H) $(SYSTEM_H) coretypes.h \
++ $(GTM_H) errors.h
++
++#
++# Compile the libraries to be used by gen*.
++# If we are not cross-building, gen* use the same .o's that cc1 will use,
++# and BUILD_PREFIX_1 is `loser-', just to ensure these rules don't conflict
++# with the rules for rtl.o, etc.
++$(BUILD_PREFIX_1)rtl.o: $(srcdir)/rtl.c $(BCONFIG_H) coretypes.h $(GTM_H) $(SYSTEM_H) $(RTL_H) \
++ real.h $(GGC_H) errors.h
++ rm -f $(BUILD_PREFIX)rtl.c
++ sed -e 's/config[.]h/bconfig.h/' $(srcdir)/rtl.c > $(BUILD_PREFIX)rtl.c
++ $(CC_FOR_BUILD) -c $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(INCLUDES) $(BUILD_PREFIX)rtl.c $(OUTPUT_OPTION)
++
++print-rtl1.o: $(srcdir)/print-rtl.c $(BCONFIG_H) $(SYSTEM_H) coretypes.h \
++ $(GTM_H) $(RTL_H) $(TREE_H) hard-reg-set.h $(BASIC_BLOCK_H) $(TM_P_H)
++ rm -f print-rtl1.c
++ sed -e 's/config[.]h/bconfig.h/' $(srcdir)/print-rtl.c > print-rtl1.c
++ $(CC_FOR_BUILD) -c $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(INCLUDES) print-rtl1.c $(OUTPUT_OPTION)
++
++$(BUILD_PREFIX_1)bitmap.o: $(srcdir)/bitmap.c $(BCONFIG_H) coretypes.h $(GTM_H) $(SYSTEM_H) \
++ $(RTL_H) flags.h $(BASIC_BLOCK_H) $(REGS_H) $(GGC_H)
++ rm -f $(BUILD_PREFIX)bitmap.c
++ sed -e 's/config[.]h/bconfig.h/' $(srcdir)/bitmap.c > $(BUILD_PREFIX)bitmap.c
++ $(CC_FOR_BUILD) -c $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(INCLUDES) $(BUILD_PREFIX)bitmap.c $(OUTPUT_OPTION)
++
++$(BUILD_PREFIX_1)errors.o: errors.c $(BCONFIG_H) $(SYSTEM_H) errors.h
++ rm -f $(BUILD_PREFIX)errors.c
++ sed -e 's/config[.]h/bconfig.h/' $(srcdir)/errors.c > $(BUILD_PREFIX)errors.c
++ $(CC_FOR_BUILD) -c $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(INCLUDES) $(BUILD_PREFIX)errors.c $(OUTPUT_OPTION)
++
++$(BUILD_PREFIX_1)varray.o: varray.c $(BCONFIG_H) coretypes.h $(GTM_H) $(SYSTEM_H) varray.h \
++ $(RTL_H) $(GGC_H) $(TREE_H) bitmap.h errors.h
++ rm -f $(BUILD_PREFIX)varray.c
++ sed -e 's/config[.]h/bconfig.h/' $(srcdir)/varray.c > \
++ $(BUILD_PREFIX)varray.c
++ $(CC_FOR_BUILD) -c $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(INCLUDES) \
++ $(BUILD_PREFIX)varray.c $(OUTPUT_OPTION)
++
++$(BUILD_PREFIX_1)ggc-none.o: ggc-none.c $(BCONFIG_H) coretypes.h $(GTM_H) $(SYSTEM_H) $(GGC_H)
++ rm -f $(BUILD_PREFIX)ggc-none.c
++ sed -e 's/config[.]h/bconfig.h/' $(srcdir)/ggc-none.c > $(BUILD_PREFIX)ggc-none.c
++ $(CC_FOR_BUILD) -c $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(INCLUDES) $(BUILD_PREFIX)ggc-none.c $(OUTPUT_OPTION)
++
++min-insn-modes.o: min-insn-modes.c $(BCONFIG_H) $(SYSTEM_H) $(MACHMODE_H)
++ $(CC_FOR_BUILD) -c $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(INCLUDES) \
++ min-insn-modes.c $(OUTPUT_OPTION)
++
++#
++# Remake internationalization support.
++intl.o: intl.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) intl.h Makefile
++ $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
++ -DLOCALEDIR=\"$(localedir)\" \
++ -c $(srcdir)/intl.c $(OUTPUT_OPTION)
++
++#
++# Remake cpp and protoize.
++
++PREPROCESSOR_DEFINES = \
++ -DGCC_INCLUDE_DIR=\"$(libsubdir)/include\" \
++ -DGPLUSPLUS_INCLUDE_DIR=\"$(gcc_gxx_include_dir)\" \
++ -DGPLUSPLUS_TOOL_INCLUDE_DIR=\"$(gcc_gxx_include_dir)/$(target_noncanonical)\" \
++ -DGPLUSPLUS_BACKWARD_INCLUDE_DIR=\"$(gcc_gxx_include_dir)/backward\" \
++ -DLOCAL_INCLUDE_DIR=\"$(local_includedir)\" \
++ -DCROSS_INCLUDE_DIR=\"$(CROSS_SYSTEM_HEADER_DIR)\" \
++ -DTOOL_INCLUDE_DIR=\"$(gcc_tooldir)/include\" \
++ @TARGET_SYSTEM_ROOT_DEFINE@
++
++LIBCPP_OBJS = cpplib.o cpplex.o cppmacro.o cppexp.o cppfiles.o cpptrad.o \
++ cpphash.o cpperror.o cppinit.o cppcharset.o \
++ hashtable.o line-map.o mkdeps.o cpppch.o
++
++LIBCPP_DEPS = $(CPPLIB_H) cpphash.h line-map.h hashtable.h intl.h \
++ $(OBSTACK_H) $(CONFIG_H) $(SYSTEM_H)
++
++# Most of the other archives built/used by this makefile are for
++# targets. This one is strictly for the host.
++libcpp.a: $(LIBCPP_OBJS)
++ -rm -rf libcpp.a
++ $(AR) $(AR_FLAGS) libcpp.a $(LIBCPP_OBJS)
++ -$(RANLIB) libcpp.a
++
++cppcharset.o: cppcharset.c $(LIBCPP_DEPS) cppucnid.h
++cpperror.o: cpperror.c $(LIBCPP_DEPS)
++cppexp.o: cppexp.c $(LIBCPP_DEPS)
++cpplex.o: cpplex.c $(LIBCPP_DEPS)
++cppmacro.o: cppmacro.c $(LIBCPP_DEPS)
++cpplib.o: cpplib.c $(LIBCPP_DEPS)
++cpphash.o: cpphash.c $(LIBCPP_DEPS)
++cpptrad.o: cpptrad.c $(LIBCPP_DEPS)
++cppfiles.o: cppfiles.c $(LIBCPP_DEPS) $(HASHTAB_H) mkdeps.h
++cppinit.o: cppinit.c $(LIBCPP_DEPS) mkdeps.h
++cpppch.o: cpppch.c $(LIBCPP_DEPS) mkdeps.h
++
++cppdefault.o: cppdefault.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) \
++ cppdefault.h Makefile
++ $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
++ $(PREPROCESSOR_DEFINES) \
++ -c $(srcdir)/cppdefault.c $(OUTPUT_OPTION)
++
++mkdeps.o: mkdeps.c $(CONFIG_H) $(SYSTEM_H) mkdeps.h
++hashtable.o: hashtable.c hashtable.h $(CONFIG_H) $(SYSTEM_H) $(OBSTACK_H)
++line-map.o: line-map.c line-map.h intl.h $(CONFIG_H) $(SYSTEM_H)
++
++# Note for the stamp targets, we run the program `true' instead of
++# having an empty command (nothing following the semicolon).
++
++proto: config.status protoize$(exeext) unprotoize$(exeext) SYSCALLS.c.X
++
++PROTO_OBJS = intl.o version.o cppdefault.o
++
++protoize$(exeext): protoize.o $(PROTO_OBJS) $(LIBDEPS)
++ $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ protoize.o $(PROTO_OBJS) $(LIBS)
++
++unprotoize$(exeext): unprotoize.o $(PROTO_OBJS) $(LIBDEPS)
++ $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ unprotoize.o $(PROTO_OBJS) $(LIBS)
++
++protoize.o: protoize.c $(srcdir)/../include/getopt.h $(CONFIG_H) $(SYSTEM_H) \
++ coretypes.h $(TM_H) Makefile version.h
++ (SHLIB_LINK='$(SHLIB_LINK)' \
++ SHLIB_MULTILIB='$(SHLIB_MULTILIB)'; \
++ $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
++ $(DRIVER_DEFINES) \
++ $(srcdir)/protoize.c $(OUTPUT_OPTION))
++
++unprotoize.o: protoize.c $(srcdir)/../include/getopt.h \
++ $(CONFIG_H) $(SYSTEM_H) Makefile version.h
++ (SHLIB_LINK='$(SHLIB_LINK)' \
++ SHLIB_MULTILIB='$(SHLIB_MULTILIB)'; \
++ $(CC) -c -DUNPROTOIZE $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
++ $(DRIVER_DEFINES) \
++ $(srcdir)/protoize.c $(OUTPUT_OPTION))
++
++# This info describes the target machine, so compile with GCC just built.
++SYSCALLS.c.X: $(srcdir)/sys-types.h $(srcdir)/sys-protos.h $(GCC_PASSES) \
++ stmp-int-hdrs
++ -rm -f SYSCALLS.c tmp-SYSCALLS.s
++ sed -e s/TARGET_GETGROUPS_T/$(TARGET_GETGROUPS_T)/ \
++ $(srcdir)/sys-types.h $(srcdir)/sys-protos.h > SYSCALLS.c
++ $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
++ -aux-info $@ -S -o tmp-SYSCALLS.s SYSCALLS.c
++ -rm -f SYSCALLS.c tmp-SYSCALLS.s
++
++
++test-protoize-simple: ./protoize ./unprotoize $(GCC_PASSES)
++ -rm -f tmp-proto.[cso]
++ cp $(srcdir)/protoize.c tmp-proto.c
++ chmod u+w tmp-proto.c
++ ./protoize -N -B ./ -x getopt.h -c "-B./ -Wall -Wwrite-strings \
++ $(GCC_CFLAGS) $(INCLUDES) \
++ -DGCC_INCLUDE_DIR=0 \
++ -DGPLUSPLUS_INCLUDE_DIR=0 \
++ -DCROSS_INCLUDE_DIR=0 \
++ -DTOOL_INCLUDE_DIR=0 \
++ -DSTANDARD_EXEC_PREFIX=0 \
++ -DDEFAULT_TARGET_MACHINE=0 \
++ -DDEFAULT_TARGET_VERSION=0" tmp-proto.c
++ @echo '**********' Expect 400 lines of differences.
++ -diff $(srcdir)/protoize.c tmp-proto.c > tmp-proto.diff
++ -wc -l tmp-proto.diff
++ ./unprotoize -N -x getopt.h -c "-B./ -Wall -Wwrite-strings \
++ $(GCC_CFLAGS) $(INCLUDES) \
++ -DGCC_INCLUDE_DIR=0 \
++ -DGPLUSPLUS_INCLUDE_DIR=0 \
++ -DCROSS_INCLUDE_DIR=0 \
++ -DTOOL_INCLUDE_DIR=0 \
++ -DSTANDARD_EXEC_PREFIX=0 \
++ -DDEFAULT_TARGET_MACHINE=0 \
++ -DDEFAULT_TARGET_VERSION=0" tmp-proto.c
++ @echo Expect zero differences.
++ diff $(srcdir)/protoize.c tmp-proto.c | cat
++ -rm -f tmp-proto.[cs] tmp-proto$(objext)
++
++# gcov-iov.c is run on the build machine to generate gcov-iov.h from version.c
++gcov-iov.o: gcov-iov.c version.c $(BCONFIG_H) coretypes.h $(GTM_H) $(SYSTEM_H) coretypes.h $(TM_H)
++ $(CC_FOR_BUILD) -c $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(INCLUDES) $(srcdir)/gcov-iov.c $(OUTPUT_OPTION)
++gcov-iov$(build_exeext): gcov-iov.o
++ $(CC_FOR_BUILD) $(BUILD_CFLAGS) $(BUILD_LDFLAGS) gcov-iov.o -o $@
++gcov-iov.h: s-iov
++s-iov: gcov-iov$(build_exeext) $(srcdir)/move-if-change
++ ./gcov-iov$(build_exeext) > tmp-gcov-iov.h
++ $(SHELL) $(srcdir)/move-if-change tmp-gcov-iov.h gcov-iov.h
++ $(STAMP) s-iov
++
++gcov.o: gcov.c gcov-io.h gcov-io.c gcov-iov.h intl.h $(SYSTEM_H) coretypes.h $(TM_H) $(CONFIG_H)
++gcov-dump.o: gcov-dump.c gcov-io.h gcov-io.c gcov-iov.h $(SYSTEM_H) coretypes.h $(TM_H) $(CONFIG_H)
++
++# Only one of 'gcov' or 'gcov.exe' is actually built, depending
++# upon whether $(exeext) is empty or not.
++GCOV_OBJS = gcov.o intl.o version.o
++gcov$(exeext): $(GCOV_OBJS) $(LIBDEPS)
++ $(CC) $(ALL_CFLAGS) $(LDFLAGS) $(GCOV_OBJS) $(LIBS) -o $@
++GCOV_DUMP_OBJS = gcov-dump.o version.o
++gcov-dump$(exeext): $(GCOV_DUMP_OBJS) $(LIBDEPS)
++ $(CC) $(ALL_CFLAGS) $(LDFLAGS) $(GCOV_DUMP_OBJS) $(LIBS) -o $@
++#
++# Build the include directory. The stamp files are stmp-* rather than
++# s-* so that mostlyclean does not force the include directory to
++# be rebuilt.
++
++# Build the include directory
++stmp-int-hdrs: $(STMP_FIXINC) $(USER_H) xlimits.h
++# Copy in the headers provided with gcc.
++# The sed command gets just the last file name component;
++# this is necessary because VPATH could add a dirname.
++# Using basename would be simpler, but some systems don't have it.
++# The touch command is here to workaround an AIX/Linux NFS bug.
++ -if [ -d include ] ; then true; else mkdir include; chmod a+rx include; fi
++ for file in .. $(USER_H); do \
++ if [ X$$file != X.. ]; then \
++ realfile=`echo $$file | sed -e 's|.*/\([^/]*\)$$|\1|'`; \
++ $(STAMP) include/$$realfile; \
++ rm -f include/$$realfile; \
++ cp $$file include; \
++ chmod a+r include/$$realfile; \
++ fi; \
++ done
++ rm -f include/limits.h
++ cp xlimits.h include/limits.h
++ chmod a+r include/limits.h
++# Install the README
++ rm -f include/README
++ cp $(srcdir)/README-fixinc include/README
++ chmod a+r include/README
++ $(STAMP) $@
++
++# fixinc.sh depends on this, not on specs directly.
++# The idea is to make sure specs gets built, but not rerun fixinc.sh
++# after each stage just because specs' mtime has changed.
++specs.ready: specs
++ -if [ -f specs.ready ] ; then \
++ true; \
++ else \
++ $(STAMP) specs.ready; \
++ fi
++
++# Until someone fixes this recursive make nightmare (please note where
++# BUILD_CFLAGS and WARN_CFLAGS are first expanded below versus which
++# later make invocation has the fine-grain -warn markings for fixinc):
++fixinc.sh-warn = -Wno-error
++
++FIXINCSRCDIR=$(srcdir)/fixinc
++fixinc.sh: $(FIXINCSRCDIR)/mkfixinc.sh $(FIXINCSRCDIR)/fixincl.c \
++ $(FIXINCSRCDIR)/procopen.c $(FIXINCSRCDIR)/server.c \
++ $(FIXINCSRCDIR)/server.h $(FIXINCSRCDIR)/inclhack.def specs.ready
++ (MAKE="$(MAKE)"; srcdir=`cd $(srcdir)/fixinc && ${PWD_COMMAND}` ; \
++ CC="$(CC_FOR_BUILD)"; CFLAGS="$(BUILD_CFLAGS)"; LDFLAGS="$(BUILD_LDFLAGS)"; \
++ WARN_CFLAGS="$(WARN_CFLAGS)"; LIBERTY=`${PWD_COMMAND}`/"$(BUILD_LIBIBERTY)"; \
++ export MAKE srcdir CC CFLAGS LDFLAGS WARN_CFLAGS LIBERTY; \
++ cd ./fixinc && \
++ $(SHELL) $${srcdir}/mkfixinc.sh $(build) $(target))
++
++.PHONY: install-gcc-tooldir
++install-gcc-tooldir:
++ $(SHELL) ${srcdir}/mkinstalldirs $(DESTDIR)$(gcc_tooldir)
++
++# Build fixed copies of system files.
++stmp-fixinc: fixinc.sh gsyslimits.h
++ @if test ! -d ${SYSTEM_HEADER_DIR}; then \
++ echo The directory that should contain system headers does not exist: >&2 ; \
++ echo " ${SYSTEM_HEADER_DIR}" >&2 ; \
++ if test "x${SYSTEM_HEADER_DIR}" = "x${gcc_tooldir}/sys-include"; \
++ then sleep 1; else exit 1; fi; \
++ fi
++ rm -rf include; mkdir include
++ -chmod a+rx include
++ (TARGET_MACHINE='$(target)'; srcdir=`cd $(srcdir); ${PWD_COMMAND}`; \
++ SHELL='$(SHELL)' ;\
++ export TARGET_MACHINE srcdir SHELL ; \
++ $(SHELL) ./fixinc.sh `${PWD_COMMAND}`/include $(SYSTEM_HEADER_DIR) $(OTHER_FIXINCLUDES_DIRS); \
++ rm -f include/syslimits.h; \
++ if [ -f include/limits.h ]; then \
++ mv include/limits.h include/syslimits.h; \
++ else \
++ cp $(srcdir)/gsyslimits.h include/syslimits.h; \
++ fi; \
++ chmod a+r include/syslimits.h)
++ $(STAMP) stmp-fixinc
++
++# Files related to the fixproto script.
++# gen-protos and fix-header are compiled with CC_FOR_BUILD, but they are only
++# used in native and host-x-target builds, so it's safe to link them with
++# libiberty.a.
++
++deduced.h: $(GCC_PASSES) $(srcdir)/scan-types.sh stmp-int-hdrs
++ if [ -d "$(SYSTEM_HEADER_DIR)" ]; \
++ then \
++ CC="$(GCC_FOR_TARGET) $(GCC_CFLAGS) $(ALL_CPPFLAGS) -I. -I$(srcdir) -isystem include -isystem ${SYSTEM_HEADER_DIR}"; \
++ export CC; \
++ $(SHELL) $(srcdir)/scan-types.sh "$(srcdir)" >tmp-deduced.h; \
++ mv tmp-deduced.h deduced.h; \
++ else \
++ $(STAMP) deduced.h; \
++ fi
++
++GEN_PROTOS_OBJS = gen-protos.o scan.o
++gen-protos$(build_exeext): $(GEN_PROTOS_OBJS)
++ ${CC_FOR_BUILD} $(BUILD_CFLAGS) $(BUILD_LDFLAGS) -o $@ \
++ $(GEN_PROTOS_OBJS) $(BUILD_LIBS)
++
++gen-protos.o: gen-protos.c scan.h $(BCONFIG_H) $(SYSTEM_H) coretypes.h $(GTM_H)
++
++scan.o: scan.c scan.h $(BCONFIG_H) $(SYSTEM_H) coretypes.h $(GTM_H)
++
++xsys-protos.h: $(GCC_PASSES) $(srcdir)/sys-protos.h deduced.h gen-protos$(build_exeext) Makefile
++ sed -e s/TARGET_GETGROUPS_T/$(TARGET_GETGROUPS_T)/ \
++ deduced.h $(srcdir)/sys-protos.h > tmp-fixtmp.c
++ mv tmp-fixtmp.c fixtmp.c
++ $(GCC_FOR_TARGET) fixtmp.c -w -U__SIZE_TYPE__ -U__PTRDIFF_TYPE__ -U__WCHAR_TYPE__ -E \
++ | sed -e 's/ / /g' -e 's/ *(/ (/g' -e 's/ [ ]*/ /g' -e 's/( )/()/' \
++ | $(RUN_GEN) ./gen-protos >xsys-protos.hT
++ mv xsys-protos.hT xsys-protos.h
++ rm -rf fixtmp.c
++
++# This is nominally a 'build' program, but it's run only when host==build,
++# so we can (indeed, must) use $(LIBDEPS) and $(LIBS).
++fix-header$(build_exeext): fix-header.o scan-decls.o scan.o xsys-protos.h \
++ c-incpath.o cppdefault.o prefix.o $(LIBDEPS) libcpp.a
++ $(CC_FOR_BUILD) $(BUILD_CFLAGS) $(BUILD_LDFLAGS) -o $@ fix-header.o \
++ c-incpath.o cppdefault.o scan-decls.o prefix.o scan.o libcpp.a $(LIBS)
++
++fix-header.o: fix-header.c $(OBSTACK_H) scan.h \
++ xsys-protos.h $(BCONFIG_H) $(SYSTEM_H) coretypes.h $(GTM_H) $(CPPLIB_H)
++
++scan-decls.o: scan-decls.c scan.h $(CPPLIB_H) $(BCONFIG_H) $(SYSTEM_H) coretypes.h $(GTM_H)
++
++# stmp-fixproto depends on this, not on fix-header directly.
++# The idea is to make sure fix-header gets built,
++# but not rerun fixproto after each stage
++# just because fix-header's mtime has changed.
++fixhdr.ready: fix-header$(build_exeext)
++ -if [ -f fixhdr.ready ] ; then \
++ true; \
++ else \
++ $(STAMP) fixhdr.ready; \
++ fi
++
++# stmp-int-headers is to make sure fixincludes has already finished.
++# The if statement is so that we don't run fixproto a second time
++# if it has already been run on the files in `include'.
++stmp-fixproto: fixhdr.ready fixproto stmp-int-hdrs
++ if [ -f include/fixed ] ; then true; \
++ else \
++ : This line works around a 'make' bug in BSDI 1.1.; \
++ FIXPROTO_DEFINES="$(FIXPROTO_DEFINES)"; export FIXPROTO_DEFINES; \
++ mkinstalldirs="$(SHELL) $(srcdir)/mkinstalldirs"; \
++ export mkinstalldirs; \
++ if [ -d "$(SYSTEM_HEADER_DIR)" ]; then \
++ $(SHELL) ${srcdir}/fixproto include include $(SYSTEM_HEADER_DIR); \
++ if [ $$? -eq 0 ] ; then true ; else exit 1 ; fi ; \
++ else true; fi; \
++ $(STAMP) include/fixed; \
++ fi
++ $(STAMP) stmp-fixproto
++#
++# Remake the info files.
++
++doc: $(BUILD_INFO) $(GENERATED_MANPAGES) gccbug
++
++INFOFILES = doc/cpp.info doc/gcc.info doc/gccint.info \
++ doc/gccinstall.info doc/cppinternals.info
++
++info: $(INFOFILES) lang.info @GENINSRC@ srcinfo lang.srcinfo
++
++srcinfo: $(INFOFILES)
++ -cp -p $^ $(srcdir)/doc
++
++TEXI_CPP_FILES = cpp.texi fdl.texi cppenv.texi cppopts.texi
++
++TEXI_GCC_FILES = gcc.texi gcc-common.texi frontends.texi standards.texi \
++ invoke.texi extend.texi md.texi objc.texi gcov.texi trouble.texi \
++ bugreport.texi service.texi contribute.texi compat.texi funding.texi \
++ gnu.texi gpl.texi fdl.texi contrib.texi cppenv.texi cppopts.texi
++
++TEXI_GCCINT_FILES = gccint.texi gcc-common.texi contribute.texi makefile.texi \
++ configterms.texi portability.texi interface.texi passes.texi \
++ c-tree.texi rtl.texi md.texi tm.texi hostconfig.texi fragments.texi \
++ configfiles.texi collect2.texi headerdirs.texi funding.texi gnu.texi \
++ gpl.texi fdl.texi contrib.texi languages.texi sourcebuild.texi \
++ gty.texi libgcc.texi
++
++TEXI_GCCINSTALL_FILES = install.texi install-old.texi fdl.texi
++
++TEXI_CPPINT_FILES = cppinternals.texi
++
++# The *.1, *.7, *.info, and *.dvi files are being generated from implicit
++# patterns. To use them, put each of the specific target with with their
++# specific dependencies but no build commands.
++
++doc/cpp.info: $(TEXI_CPP_FILES)
++doc/gcc.info: $(TEXI_GCC_FILES)
++doc/gccint.info: $(TEXI_GCCINT_FILES)
++doc/cppinternals.info: $(TEXI_CPPINT_FILES)
++
++doc/%.info: %.texi
++ if [ x$(BUILD_INFO) = xinfo ]; then \
++ $(MAKEINFO) $(MAKEINFOFLAGS) -I $(docdir) \
++ -I $(docdir)/include -o $@ $<; \
++ fi
++
++# Duplicate entry to handle renaming of gccinstall.info
++doc/gccinstall.info: $(TEXI_GCCINSTALL_FILES)
++ if [ x$(BUILD_INFO) = xinfo ]; then \
++ $(MAKEINFO) $(MAKEINFOFLAGS) -I $(docdir) \
++ -I $(docdir)/include -o $@ $<; \
++ fi
++
++doc/cpp.dvi: $(TEXI_CPP_FILES)
++doc/gcc.dvi: $(TEXI_GCC_FILES)
++doc/gccint.dvi: $(TEXI_GCCINT_FILES)
++doc/cppinternals.dvi: $(TEXI_CPPINT_FILES)
++
++dvi:: doc/gcc.dvi doc/gccint.dvi doc/gccinstall.dvi doc/cpp.dvi \
++ doc/cppinternals.dvi
++
++doc/%.dvi: %.texi
++ $(TEXI2DVI) -I $(abs_docdir) -I $(abs_docdir)/include -o $@ $<
++
++# Duplicate entry to handle renaming of gccinstall.dvi
++doc/gccinstall.dvi: $(TEXI_GCCINSTALL_FILES)
++ $(TEXI2DVI) -I $(abs_docdir) -I $(abs_docdir)/include -o $@ $<
++
++MANFILES = doc/gcov.1 doc/cpp.1 doc/gcc.1 doc/gfdl.7 doc/gpl.7 doc/fsf-funding.7
++
++generated-manpages: man
++
++man: $(MANFILES) lang.man @GENINSRC@ srcman lang.srcman
++
++srcman: $(MANFILES)
++ -cp -p $^ $(srcdir)/doc
++
++doc/%.1: %.pod
++ $(STAMP) $@
++ -($(POD2MAN) --section=1 $< > $(@).T$$$$ && \
++ mv -f $(@).T$$$$ $@) || \
++ (rm -f $(@).T$$$$ && exit 1)
++
++doc/%.7: %.pod
++ $(STAMP) $@
++ -($(POD2MAN) --section=7 $< > $(@).T$$$$ && \
++ mv -f $(@).T$$$$ $@) || \
++ (rm -f $(@).T$$$$ && exit 1)
++
++%.pod: %.texi
++ $(STAMP) $@
++ -$(TEXI2POD) $< > $@
++
++.INTERMEDIATE: cpp.pod gcc.pod gfdl.pod fsf-funding.pod
++cpp.pod: cpp.texi cppenv.texi cppopts.texi
++
++# These next rules exist because the output name is not the same as
++# the input name, so our implict %.pod rule will not work.
++
++gcc.pod: invoke.texi cppenv.texi cppopts.texi
++ $(STAMP) $@
++ -$(TEXI2POD) $< > $@
++gfdl.pod: fdl.texi
++ $(STAMP) $@
++ -$(TEXI2POD) $< > $@
++fsf-funding.pod: funding.texi
++ $(STAMP) $@
++ -$(TEXI2POD) $< > $@
++
++#
++# Deletion of files made during compilation.
++# There are four levels of this:
++# `mostlyclean', `clean', `distclean' and `maintainer-clean'.
++# `mostlyclean' is useful while working on a particular type of machine.
++# It deletes most, but not all, of the files made by compilation.
++# It does not delete libgcc.a or its parts, so it won't have to be recompiled.
++# `clean' deletes everything made by running `make all'.
++# `distclean' also deletes the files made by config.
++# `maintainer-clean' also deletes everything that could be regenerated
++# automatically, except for `configure'.
++# We remove as much from the language subdirectories as we can
++# (less duplicated code).
++
++mostlyclean: lang.mostlyclean
++ -rm -f $(STAGESTUFF)
++ -rm -f *$(coverageexts)
++ -rm -rf libgcc
++# Delete the temporary source copies for cross compilation.
++ -rm -f $(BUILD_PREFIX_1)rtl.c $(BUILD_PREFIX_1)print-rtl.c
++ -rm -f $(BUILD_PREFIX_1)bitmap.c $(BUILD_PREFIX_1)errors.c
++ -rm -f $(BUILD_PREFIX_1)ggc-none.c print-rtl1.c
++# Delete the temp files made in the course of building libgcc.a.
++ -rm -f xlimits.h
++# Delete other built files.
++ -rm -f xsys-protos.hT
++ -rm -f specs.h gencheck.h options.c options.h
++# Delete the stamp and temporary files.
++ -rm -f s-* tmp-* stamp-* stmp-*
++ -rm -f */stamp-* */tmp-*
++# Delete debugging dump files.
++ -rm -f *.[0-9][0-9].* */*.[0-9][0-9].*
++# Delete some files made during installation.
++ -rm -f specs $(SPECS) SYSCALLS.c.X SYSCALLS.c
++ -rm -f collect collect2 mips-tfile mips-tdump
++# Delete files generated for fixproto
++ -rm -rf fix-header$(build_exeext) xsys-protos.h deduced.h tmp-deduced.h \
++ gen-protos$(build_exeext) fixproto.list fixtmp.* fixhdr.ready
++# Delete files generated for fixincl
++ -rm -rf fixincl fixinc.sh specs.ready
++ (cd fixinc && $(MAKE) clean)
++# Delete unwanted output files from TeX.
++ -rm -f *.toc *.log *.vr *.fn *.cp *.tp *.ky *.pg
++ -rm -f */*.toc */*.log */*.vr */*.fn */*.cp */*.tp */*.ky */*.pg
++# Delete sorted indices we don't actually use.
++ -rm -f gcc.vrs gcc.kys gcc.tps gcc.pgs gcc.fns
++# Delete core dumps.
++ -rm -f core */core
++# Delete file generated for gengtype.c
++ -rm -f gtyp-gen.h
++# Delete files generated by gengtype.c
++ -rm -f gtype-*
++ -rm -f gt-*
++
++# Delete all files made by compilation
++# that don't exist in the distribution.
++clean: mostlyclean lang.clean
++ -rm -f libgcc.a libgcc_eh.a libgcov.a
++ -rm -f libgcc_s*
++ -rm -f libunwind*
++ -rm -f config.h tconfig.h bconfig.h tm_p.h tm.h
++ -rm -f cs-*
++ -rm -rf libgcc
++ -rm -f doc/*.dvi
++# Delete the include directory.
++ -rm -rf include
++# Delete files used by the "multilib" facility (including libgcc subdirs).
++ -rm -f multilib.h tmpmultilib*
++ -if [ "x$(MULTILIB_DIRNAMES)" != x ] ; then \
++ rm -rf $(MULTILIB_DIRNAMES); \
++ else if [ "x$(MULTILIB_OPTIONS)" != x ] ; then \
++ rm -rf `echo $(MULTILIB_OPTIONS) | sed -e 's/\// /g'`; \
++ fi ; fi
++ -rm -fr stage1 stage2 stage3 stage4 stageprofile stagefeedback
++# Delete stamps of bootstrap stages
++ -rm -f stage?_*
++ -rm -f clean?_*
++ -rm -f stage_last
++
++# Delete all files that users would normally create
++# while building and installing GCC.
++distclean: clean lang.distclean
++ -rm -f auto-host.h auto-build.h
++ -rm -f cstamp-h
++ -rm -f config.status config.run config.cache config.bak
++ -rm -f Make-lang Make-hooks Make-host Make-target
++ -rm -f Makefile *.oaux
++ -rm -f gthr-default.h
++ -rm -f */stage1 */stage2 */stage3 */stage4 */include */stageprofile */stagefeedback
++ -rm -f c-parse.y c-parse.c c-parse.output TAGS */TAGS
++ -rm -f *.asm
++ -rm -f site.exp site.bak testsuite/site.exp testsuite/site.bak
++ -rm -f testsuite/*.log testsuite/*.sum
++ -cd testsuite && rm -f x *.x *.x? *.exe *.rpo *.o *.s *.S *.c
++ -cd testsuite && rm -f *.out *.gcov *$(coverageexts)
++ -rm -rf ${QMTEST_DIR} stamp-qmtest
++ -rm -f cxxmain.c
++ -rm -f mklibgcc mkheaders gccbug .gdbinit configargs.h
++ -rm -f gcov.pod
++ -rm -f fixinc/Makefile
++# Delete po/*.gmo only if we are not building in the source directory.
++ -if [ ! -f po/exgettext ]; then rm -f po/*.gmo; fi
++ -rmdir ada cp f java objc fixinc intl po testsuite 2>/dev/null
++
++# Get rid of every file that's generated from some other file, except for `configure'.
++# Most of these files ARE PRESENT in the GCC distribution.
++maintainer-clean:
++ @echo 'This command is intended for maintainers to use; it'
++ @echo 'deletes files that may need special tools to rebuild.'
++ $(MAKE) lang.maintainer-clean distclean
++ -rm -f $(srcdir)/c-parse.y $(srcdir)/c-parse.c
++ -rm -f cpp.??s cpp.*aux
++ -rm -f gcc.??s gcc.*aux
++ -rm -f $(docdir)/*.info $(docdir)/*.1 $(docdir)/*.7 $(docdir)/*.dvi
++#
++# Entry points `install' and `uninstall'.
++# Also use `install-collect2' to install collect2 when the config files don't.
++
++# Copy the compiler files into directories where they will be run.
++# Install the driver last so that the window when things are
++# broken is small.
++install: install-common $(INSTALL_HEADERS) $(INSTALL_LIBGCC) \
++ install-cpp install-man install-info install-@POSUB@ \
++ lang.install-normal install-driver
++
++# Handle cpp installation.
++install-cpp: cpp$(exeext)
++ -rm -f $(DESTDIR)$(bindir)/$(CPP_INSTALL_NAME)$(exeext)
++ -$(INSTALL_PROGRAM) -m 755 cpp$(exeext) $(DESTDIR)$(bindir)/$(CPP_INSTALL_NAME)$(exeext)
++ -if [ x$(cpp_install_dir) != x ]; then \
++ rm -f $(DESTDIR)$(prefix)/$(cpp_install_dir)/$(CPP_INSTALL_NAME)$(exeext); \
++ $(INSTALL_PROGRAM) -m 755 cpp$(exeext) $(DESTDIR)$(prefix)/$(cpp_install_dir)/$(CPP_INSTALL_NAME)$(exeext); \
++ else true; fi
++
++# Create the installation directories.
++# $(libdir)/gcc/include isn't currently searched by cpp.
++installdirs:
++ $(SHELL) ${srcdir}/mkinstalldirs $(DESTDIR)$(libsubdir)
++ $(SHELL) ${srcdir}/mkinstalldirs $(DESTDIR)$(libexecsubdir)
++ $(SHELL) ${srcdir}/mkinstalldirs $(DESTDIR)$(bindir)
++ $(SHELL) ${srcdir}/mkinstalldirs $(DESTDIR)$(includedir)
++ $(SHELL) ${srcdir}/mkinstalldirs $(DESTDIR)$(infodir)
++ $(SHELL) ${srcdir}/mkinstalldirs $(DESTDIR)$(slibdir)
++ $(SHELL) ${srcdir}/mkinstalldirs $(DESTDIR)$(man1dir)
++ $(SHELL) ${srcdir}/mkinstalldirs $(DESTDIR)$(man7dir)
++
++# Install the compiler executables built during cross compilation.
++install-common: native $(EXTRA_PARTS) lang.install-common installdirs
++ for file in $(COMPILERS); do \
++ if [ -f $$file ] ; then \
++ rm -f $(DESTDIR)$(libexecsubdir)/$$file; \
++ $(INSTALL_PROGRAM) $$file $(DESTDIR)$(libexecsubdir)/$$file; \
++ else true; \
++ fi; \
++ done
++ for file in $(EXTRA_PASSES) $(EXTRA_PROGRAMS) $(USE_COLLECT2) ..; do \
++ if [ x"$$file" != x.. ]; then \
++ rm -f $(DESTDIR)$(libexecsubdir)/$$file; \
++ $(INSTALL_PROGRAM) $$file $(DESTDIR)$(libexecsubdir)/$$file; \
++ else true; fi; \
++ done
++ for file in $(EXTRA_PARTS) ..; do \
++ if [ x"$$file" != x.. ]; then \
++ rm -f $(DESTDIR)$(libsubdir)/$$file; \
++ $(INSTALL_DATA) $$file $(DESTDIR)$(libsubdir)/$$file; \
++ chmod a-x $(DESTDIR)$(libsubdir)/$$file; \
++ else true; fi; \
++ done
++# Don't mess with specs if it doesn't exist yet.
++ -if [ -f specs ] ; then \
++ rm -f $(DESTDIR)$(libsubdir)/specs; \
++ $(INSTALL_DATA) $(SPECS) $(DESTDIR)$(libsubdir)/specs; \
++ chmod a-x $(DESTDIR)$(libsubdir)/specs; \
++ fi
++# Install protoize if it was compiled.
++ -if [ -f protoize$(exeext) ]; then \
++ rm -f $(DESTDIR)$(bindir)/$(PROTOIZE_INSTALL_NAME)$(exeext); \
++ $(INSTALL_PROGRAM) protoize$(exeext) $(DESTDIR)$(bindir)/$(PROTOIZE_INSTALL_NAME)$(exeext); \
++ rm -f $(DESTDIR)$(bindir)/$(UNPROTOIZE_INSTALL_NAME)$(exeext); \
++ $(INSTALL_PROGRAM) unprotoize$(exeext) $(DESTDIR)$(bindir)/$(UNPROTOIZE_INSTALL_NAME)$(exeext); \
++ rm -f $(DESTDIR)$(libsubdir)/SYSCALLS.c.X; \
++ $(INSTALL_DATA) SYSCALLS.c.X $(DESTDIR)$(libsubdir)/SYSCALLS.c.X; \
++ chmod a-x $(DESTDIR)$(libsubdir)/SYSCALLS.c.X; \
++ fi
++# Install gcov if it was compiled.
++ -if [ -f gcov$(exeext) ]; \
++ then \
++ rm -f $(DESTDIR)$(bindir)/$(GCOV_INSTALL_NAME)$(exeext); \
++ $(INSTALL_PROGRAM) gcov$(exeext) $(DESTDIR)$(bindir)/$(GCOV_INSTALL_NAME)$(exeext); \
++ fi
++ $(INSTALL_SCRIPT) gccbug $(DESTDIR)$(bindir)/$(GCCBUG_INSTALL_NAME)
++
++# Install the driver program as $(target_noncanonical)-gcc,
++# $(target_noncanonical)-gcc-$(version)
++# and also as either gcc (if native) or $(gcc_tooldir)/bin/gcc.
++install-driver: installdirs xgcc$(exeext)
++ -rm -f $(DESTDIR)$(bindir)/$(GCC_INSTALL_NAME)$(exeext)
++ -$(INSTALL_PROGRAM) xgcc$(exeext) $(DESTDIR)$(bindir)/$(GCC_INSTALL_NAME)$(exeext)
++ -rm -f $(DESTDIR)$(bindir)/$(target_noncanonical)-gcc-$(version)
++ -( cd $(DESTDIR)$(bindir) && \
++ $(LN) $(GCC_INSTALL_NAME)$(exeext) $(target_noncanonical)-gcc-$(version) )
++ -if [ -f gcc-cross$(exeext) ] ; then \
++ if [ -d $(DESTDIR)$(gcc_tooldir)/bin/. ] ; then \
++ rm -f $(DESTDIR)$(gcc_tooldir)/bin/gcc$(exeext); \
++ $(INSTALL_PROGRAM) gcc-cross$(exeext) $(DESTDIR)$(gcc_tooldir)/bin/gcc$(exeext); \
++ else true; fi; \
++ else \
++ rm -f $(DESTDIR)$(bindir)/$(target_noncanonical)-gcc-tmp$(exeext); \
++ ( cd $(DESTDIR)$(bindir) && \
++ $(LN) $(GCC_INSTALL_NAME)$(exeext) $(target_noncanonical)-gcc-tmp$(exeext) && \
++ mv -f $(target_noncanonical)-gcc-tmp$(exeext) $(GCC_TARGET_INSTALL_NAME)$(exeext) ); \
++ fi
++
++# Install the info files.
++# $(INSTALL_DATA) might be a relative pathname, so we can't cd into srcdir
++# to do the install.
++install-info:: doc installdirs \
++ $(DESTDIR)$(infodir)/cpp.info \
++ $(DESTDIR)$(infodir)/gcc.info \
++ $(DESTDIR)$(infodir)/cppinternals.info \
++ $(DESTDIR)$(infodir)/gccinstall.info \
++ $(DESTDIR)$(infodir)/gccint.info
++
++$(DESTDIR)$(infodir)/%.info: doc/%.info installdirs
++ rm -f $@
++ if [ -f $< ]; then \
++ for f in $(<)*; do \
++ realfile=`echo $$f | sed -e 's|.*/\([^/]*\)$$|\1|'`; \
++ $(INSTALL_DATA) $$f $(DESTDIR)$(infodir)/$$realfile; \
++ chmod a-x $(DESTDIR)$(infodir)/$$realfile; \
++ done; \
++ else true; fi
++ -if $(SHELL) -c 'install-info --version' >/dev/null 2>&1; then \
++ if [ -f $@ ]; then \
++ install-info --dir-file=$(DESTDIR)$(infodir)/dir $@; \
++ else true; fi; \
++ else true; fi;
++
++# Install the man pages.
++install-man: installdirs lang.install-man \
++ $(DESTDIR)$(man1dir)/$(GCC_INSTALL_NAME)$(man1ext) \
++ $(DESTDIR)$(man1dir)/$(CPP_INSTALL_NAME)$(man1ext) \
++ $(DESTDIR)$(man1dir)/$(GCOV_INSTALL_NAME)$(man1ext) \
++ $(DESTDIR)$(man7dir)/fsf-funding$(man7ext) \
++ $(DESTDIR)$(man7dir)/gfdl$(man7ext) \
++ $(DESTDIR)$(man7dir)/gpl$(man7ext)
++
++$(DESTDIR)$(man7dir)/%$(man7ext): doc/%.7
++ -rm -f $@
++ -$(INSTALL_DATA) $< $@
++ -chmod a-x $@
++
++$(DESTDIR)$(man1dir)/$(GCC_INSTALL_NAME)$(man1ext): doc/gcc.1
++ -rm -f $@
++ -$(INSTALL_DATA) $< $@
++ -chmod a-x $@
++
++$(DESTDIR)$(man1dir)/$(CPP_INSTALL_NAME)$(man1ext): doc/cpp.1
++ -rm -f $@
++ -$(INSTALL_DATA) $< $@
++ -chmod a-x $@
++
++$(DESTDIR)$(man1dir)/$(GCOV_INSTALL_NAME)$(man1ext): doc/gcov.1
++ -rm -f $@
++ -$(INSTALL_DATA) $< $@
++ -chmod a-x $@
++
++# Install the library.
++install-libgcc: libgcc.mk libgcc.a libgcov.a installdirs
++ $(MAKE) \
++ CFLAGS="$(CFLAGS) $(WARN_CFLAGS)" \
++ CONFIG_H="$(TCONFIG_H)" \
++ MAKEOVERRIDES= \
++ -f libgcc.mk install
++
++# Install multiple versions of libgcc.a, libgcov.a.
++install-multilib: stmp-multilib installdirs
++ $(MAKE) \
++ CFLAGS="$(CFLAGS) $(WARN_CFLAGS)" \
++ CONFIG_H="$(CONFIG_H)" \
++ MAKEOVERRIDES= \
++ -f libgcc.mk install
++
++# Install all the header files built in the include subdirectory.
++install-headers: $(INSTALL_HEADERS_DIR)
++# Fix symlinks to absolute paths in the installed include directory to
++# point to the installed directory, not the build directory.
++# Don't need to use LN_S here since we really do need ln -s and no substitutes.
++ -files=`cd $(DESTDIR)$(libsubdir)/include; find . -type l -print 2>/dev/null`; \
++ if [ $$? -eq 0 ]; then \
++ dir=`cd include; ${PWD_COMMAND}`; \
++ for i in $$files; do \
++ dest=`ls -ld $(DESTDIR)$(libsubdir)/include/$$i | sed -n 's/.*-> //p'`; \
++ if expr "$$dest" : "$$dir.*" > /dev/null; then \
++ rm -f $(DESTDIR)$(libsubdir)/include/$$i; \
++ ln -s `echo $$i | sed "s|/[^/]*|/..|g" | sed 's|/..$$||'``echo "$$dest" | sed "s|$$dir||"` $(DESTDIR)$(libsubdir)/include/$$i; \
++ fi; \
++ done; \
++ fi
++
++# Create or recreate the gcc private include file directory.
++install-include-dir: installdirs
++ -rm -rf $(DESTDIR)$(libsubdir)/include
++ mkdir $(DESTDIR)$(libsubdir)/include
++ -chmod a+rx $(DESTDIR)$(libsubdir)/include
++
++# Install the include directory using tar.
++install-headers-tar: stmp-int-hdrs $(STMP_FIXPROTO) install-include-dir
++# We use `pwd`/include instead of just include to problems with CDPATH
++# Unless a full pathname is provided, some shells would print the new CWD,
++# found in CDPATH, corrupting the output. We could just redirect the
++# output of `cd', but some shells lose on redirection within `()'s
++ (cd `${PWD_COMMAND}`/include ; \
++ tar -cf - .; exit 0) | (cd $(DESTDIR)$(libsubdir)/include; tar xpf - )
++# /bin/sh on some systems returns the status of the first tar,
++# and that can lose with GNU tar which always writes a full block.
++# So use `exit 0' to ignore its exit status.
++
++# Install the include directory using cpio.
++install-headers-cpio: stmp-int-hdrs $(STMP_FIXPROTO) install-include-dir
++# See discussion about the use of `pwd` above
++ cd `${PWD_COMMAND}`/include ; \
++ find . -print | cpio -pdum $(DESTDIR)$(libsubdir)/include
++
++# Install the include directory using cp.
++install-headers-cp: stmp-int-hdrs $(STMP_FIXPROTO) install-include-dir
++ cp -p -r include $(DESTDIR)$(libsubdir)
++
++itoolsdir = $(libexecsubdir)/install-tools
++itoolsdatadir = $(libsubdir)/install-tools
++# Don't install the headers. Instead, install appropriate scripts
++# and supporting files for fixincludes to be run later.
++install-mkheaders: stmp-int-hdrs $(STMP_FIXPROTO) install-include-dir \
++ mkheaders xlimits.h
++ -rm -rf $(DESTDIR)$(itoolsdir) $(DESTDIR)$(itoolsdatadir)
++ $(SHELL) $(srcdir)/mkinstalldirs $(DESTDIR)$(itoolsdatadir)/include
++ $(SHELL) $(srcdir)/mkinstalldirs $(DESTDIR)$(itoolsdir)
++ for file in $(USER_H); do \
++ realfile=`echo $$file | sed -e 's|.*/\([^/]*\)$$|\1|'`; \
++ $(INSTALL_DATA) $$file \
++ $(DESTDIR)$(itoolsdatadir)/include/$$realfile ; \
++ done
++ $(INSTALL_DATA) xlimits.h $(DESTDIR)$(itoolsdatadir)/include/limits.h
++ if [ x$(STMP_FIXINC) != x ] ; then \
++ $(INSTALL_DATA) $(srcdir)/README-fixinc \
++ $(DESTDIR)$(itoolsdatadir)/include/README ; \
++ $(INSTALL_SCRIPT) fixinc.sh $(DESTDIR)$(itoolsdir)/fixinc.sh ; \
++ $(INSTALL_PROGRAM) fixinc/fixincl $(DESTDIR)$(itoolsdir)/fixincl ; \
++ $(INSTALL_DATA) $(srcdir)/gsyslimits.h \
++ $(DESTDIR)$(itoolsdatadir)/gsyslimits.h ; \
++ else :; fi
++ if [ x$(STMP_FIXPROTO) != x ] ; then \
++ $(INSTALL_SCRIPT) $(srcdir)/mkinstalldirs \
++ $(DESTDIR)$(itoolsdir)/mkinstalldirs ; \
++ $(INSTALL_SCRIPT) $(srcdir)/fixproto $(DESTDIR)$(itoolsdir)/fixproto ; \
++ $(INSTALL_PROGRAM) fix-header$(build_exeext) \
++ $(DESTDIR)$(itoolsdir)/fix-header$(build_exeext) ; \
++ else :; fi
++ $(INSTALL_SCRIPT) mkheaders $(DESTDIR)$(itoolsdir)/mkheaders
++ echo 'SYSTEM_HEADER_DIR="'"$(SYSTEM_HEADER_DIR)"'"' \
++ > $(DESTDIR)$(itoolsdatadir)/mkheaders.conf
++ echo 'OTHER_FIXINCLUDES_DIRS="$(OTHER_FIXINCLUDES_DIRS)"' \
++ >> $(DESTDIR)$(itoolsdatadir)/mkheaders.conf
++ echo 'FIXPROTO_DEFINES="$(FIXPROTO_DEFINES)"' \
++ >> $(DESTDIR)$(itoolsdatadir)/mkheaders.conf
++ echo 'STMP_FIXPROTO="$(STMP_FIXPROTO)"' \
++ >> $(DESTDIR)$(itoolsdatadir)/mkheaders.conf
++ echo 'STMP_FIXINC="$(STMP_FIXINC)"' \
++ >> $(DESTDIR)$(itoolsdatadir)/mkheaders.conf
++
++# Use this target to install the program `collect2' under the name `collect2'.
++install-collect2: collect2 installdirs
++ $(INSTALL_PROGRAM) collect2$(exeext) $(DESTDIR)$(libexecsubdir)/collect2$(exeext)
++# Install the driver program as $(libsubdir)/gcc for collect2.
++ $(INSTALL_PROGRAM) xgcc$(exeext) $(DESTDIR)$(libexecsubdir)/gcc$(exeext)
++
++# Cancel installation by deleting the installed files.
++uninstall: lang.uninstall
++ -rm -rf $(DESTDIR)$(libsubdir)
++ -rm -rf $(DESTDIR)$(libexecsubdir)
++ -rm -rf $(DESTDIR)$(bindir)/$(GCC_INSTALL_NAME)$(exeext)
++ -rm -f $(DESTDIR)$(bindir)/$(CPP_INSTALL_NAME)$(exeext)
++ -if [ x$(cpp_install_dir) != x ]; then \
++ rm -f $(DESTDIR)$(prefix)/$(cpp_install_dir)/$(CPP_INSTALL_NAME)$(exeext); \
++ else true; fi
++ -rm -rf $(DESTDIR)$(bindir)/$(PROTOIZE_INSTALL_NAME)$(exeext)
++ -rm -rf $(DESTDIR)$(bindir)/$(UNPROTOIZE_INSTALL_NAME)$(exeext)
++ -rm -rf $(DESTDIR)$(bindir)/$(GCOV_INSTALL_NAME)$(exeext)
++ -rm -rf $(DESTDIR)$(man1dir)/$(GCC_INSTALL_NAME)$(man1ext)
++ -rm -rf $(DESTDIR)$(man1dir)/cpp$(man1ext)
++ -rm -rf $(DESTDIR)$(man1dir)/protoize$(man1ext)
++ -rm -rf $(DESTDIR)$(man1dir)/unprotoize$(man1ext)
++ -rm -f $(DESTDIR)$(infodir)/cpp.info* $(DESTDIR)$(infodir)/gcc.info*
++ -rm -f $(DESTDIR)$(infodir)/cppinternals.info* $(DESTDIR)$(infodir)/gccint.info*
++#
++# These targets are for the dejagnu testsuites. The file site.exp
++# contains global variables that all the testsuites will use.
++
++target_subdir = @target_subdir@
++
++site.exp: ./config.status Makefile
++ @echo "Making a new config file..."
++ -@rm -f ./tmp?
++ @$(STAMP) site.exp
++ -@mv site.exp site.bak
++ @echo "## these variables are automatically generated by make ##" > ./tmp0
++ @echo "# Do not edit here. If you wish to override these values" >> ./tmp0
++ @echo "# add them to the last section" >> ./tmp0
++ @echo "set rootme \"`${PWD_COMMAND}`\"" >> ./tmp0
++ @echo "set srcdir \"`cd ${srcdir}; ${PWD_COMMAND}`\"" >> ./tmp0
++ @echo "set host_triplet $(host)" >> ./tmp0
++ @echo "set build_triplet $(build)" >> ./tmp0
++ @echo "set target_triplet $(target)" >> ./tmp0
++ @echo "set target_alias $(target_noncanonical)" >> ./tmp0
++# CFLAGS is set even though it's empty to show we reserve the right to set it.
++ @echo "set CFLAGS \"\"" >> ./tmp0
++ @echo "set CXXFLAGS \"\"" >> ./tmp0
++ @echo "set TESTING_IN_BUILD_TREE 1" >> ./tmp0
++ @echo "set HAVE_LIBSTDCXX_V3 1" >> ./tmp0
++# If newlib has been configured, we need to pass -B to gcc so it can find
++# newlib's crt0.o if it exists. This will cause a "path prefix not used"
++# message if it doesn't, but the testsuite is supposed to ignore the message -
++# it's too difficult to tell when to and when not to pass -B (not all targets
++# have crt0's). We could only add the -B if ../newlib/crt0.o exists, but that
++# seems like too selective a test.
++# ??? Another way to solve this might be to rely on linker scripts. Then
++# theoretically the -B won't be needed.
++# We also need to pass -L ../ld so that the linker can find ldscripts.
++ @if [ -d $(objdir)/../$(target_subdir)/newlib ] \
++ && [ "${host}" != "${target}" ]; then \
++ echo "set newlib_cflags \"-I$(objdir)/../$(target_subdir)/newlib/targ-include -I\$$srcdir/../newlib/libc/include\"" >> ./tmp0; \
++ echo "set newlib_ldflags \"-B$(objdir)/../$(target_subdir)/newlib/\"" >> ./tmp0; \
++ echo "append CFLAGS \" \$$newlib_cflags\"" >> ./tmp0; \
++ echo "append CXXFLAGS \" \$$newlib_cflags\"" >> ./tmp0; \
++ echo "append LDFLAGS \" \$$newlib_ldflags\"" >> ./tmp0; \
++ else true; \
++ fi
++ @if [ -d $(objdir)/../ld ] ; then \
++ echo "append LDFLAGS \" -L$(objdir)/../ld\"" >> ./tmp0; \
++ else true; \
++ fi
++ echo "set tmpdir $(objdir)/testsuite" >> ./tmp0
++ @echo "set srcdir \"\$${srcdir}/testsuite\"" >> ./tmp0
++ @if [ "X$(ALT_CC_UNDER_TEST)" != "X" ] ; then \
++ echo "set ALT_CC_UNDER_TEST \"$(ALT_CC_UNDER_TEST)\"" >> ./tmp0; \
++ else true; \
++ fi
++ @if [ "X$(ALT_CXX_UNDER_TEST)" != "X" ] ; then \
++ echo "set ALT_CXX_UNDER_TEST \"$(ALT_CXX_UNDER_TEST)\"" >> ./tmp0; \
++ else true; \
++ fi
++ @if [ "X$(COMPAT_OPTIONS)" != "X" ] ; then \
++ echo "set COMPAT_OPTIONS \"$(COMPAT_OPTIONS)\"" >> ./tmp0; \
++ else true; \
++ fi
++ @echo "## All variables above are generated by configure. Do Not Edit ##" >> ./tmp0
++ @cat ./tmp0 > site.exp
++ @cat site.bak | sed \
++ -e '1,/^## All variables above are.*##/ d' >> site.exp
++ -@rm -f ./tmp?
++
++CHECK_TARGETS = check-gcc @check_languages@
++
++check: $(CHECK_TARGETS)
++
++# The idea is to parallelize testing of multilibs, for example:
++# make -j3 check-gcc//sh-hms-sim/{-m1,-m2,-m3,-m3e,-m4}/{,-nofpu}
++# will run 3 concurrent sessions of check-gcc, eventually testing
++# all 10 combinations. GNU make is required, as is a shell that expands
++# alternations within braces.
++lang_checks_parallel = $(lang_checks:=//%)
++$(lang_checks_parallel): site.exp
++ target=`echo "$@" | sed 's,//.*,,'`; \
++ variant=`echo "$@" | sed 's,^[^/]*//,,'`; \
++ vardots=`echo "$$variant" | sed 's,/,.,g'`; \
++ $(MAKE) TESTSUITEDIR="testsuite.$$vardots" \
++ RUNTESTFLAGS="--target_board=$$variant $(RUNTESTFLAGS)" \
++ "$$target"
++
++TESTSUITEDIR = testsuite
++
++$(TESTSUITEDIR)/site.exp: site.exp
++ test -d $(TESTSUITEDIR) || mkdir $(TESTSUITEDIR)
++ -rm -f $@
++ sed '/set tmpdir/ s|testsuite|$(TESTSUITEDIR)|' < site.exp > $@
++
++$(lang_checks): check-% : $(TESTSUITEDIR)/site.exp
++ -(rootme=`${PWD_COMMAND}`; export rootme; \
++ srcdir=`cd ${srcdir}; ${PWD_COMMAND}` ; export srcdir ; \
++ cd $(TESTSUITEDIR); \
++ EXPECT=${EXPECT} ; export EXPECT ; \
++ if [ -f $${rootme}/../expect/expect ] ; then \
++ TCL_LIBRARY=`cd .. ; cd ${srcdir}/../tcl/library ; ${PWD_COMMAND}` ; \
++ export TCL_LIBRARY ; fi ; \
++ $(RUNTEST) --tool $* $(RUNTESTFLAGS))
++
++check-consistency: testsuite/site.exp
++ -rootme=`${PWD_COMMAND}`; export rootme; \
++ srcdir=`cd ${srcdir}; ${PWD_COMMAND}` ; export srcdir ; \
++ cd testsuite; \
++ EXPECT=${EXPECT} ; export EXPECT ; \
++ if [ -f $${rootme}/../expect/expect ] ; then \
++ TCL_LIBRARY=`cd .. ; cd ${srcdir}/../tcl/library ; ${PWD_COMMAND}` ; \
++ export TCL_LIBRARY ; fi ; \
++ $(RUNTEST) --tool consistency $(RUNTESTFLAGS)
++
++# QMTest targets
++
++# The path to qmtest.
++QMTEST_PATH=qmtest
++
++# The flags to pass to qmtest.
++QMTESTFLAGS=
++
++# The flags to pass to "qmtest run".
++QMTESTRUNFLAGS=-f none --result-stream dejagnu_stream.DejaGNUStream
++
++# The command to use to invoke qmtest.
++QMTEST=${QMTEST_PATH} ${QMTESTFLAGS}
++
++# The tests (or suites) to run.
++QMTEST_GPP_TESTS=g++
++
++# The subdirectory of the OBJDIR that will be used to store the QMTest
++# test database configuration and that will be used for temporary
++# scratch space during QMTest's execution.
++QMTEST_DIR=qmtestsuite
++
++# Create the QMTest database configuration.
++${QMTEST_DIR} stamp-qmtest:
++ ${QMTEST} -D ${QMTEST_DIR} create-tdb \
++ -c gcc_database.GCCDatabase \
++ -a srcdir=`cd ${srcdir}/testsuite && ${PWD_COMMAND}` && \
++ $(STAMP) stamp-qmtest
++
++# Create the QMTest context file.
++${QMTEST_DIR}/context: stamp-qmtest
++ rm -f $@
++ echo "CompilerTable.languages=c cplusplus" >> $@
++ echo "CompilerTable.c_kind=GCC" >> $@
++ echo "CompilerTable.c_path=${objdir}/xgcc" >> $@
++ echo "CompilerTable.c_options=-B${objdir}/" >> $@
++ echo "CompilerTable.cplusplus_kind=GCC" >> $@
++ echo "CompilerTable.cplusplus_path=${objdir}/g++" >> $@
++ echo "CompilerTable.cplusplus_options=-B${objdir}/" >> $@
++ echo "DejaGNUTest.target=${target_noncanonical}" >> $@
++
++# Run the G++ testsuite using QMTest.
++qmtest-g++: ${QMTEST_DIR}/context
++ cd ${QMTEST_DIR} && ${QMTEST} run ${QMTESTRUNFLAGS} -C context \
++ -o g++.qmr ${QMTEST_GPP_TESTS}
++
++# Use the QMTest GUI.
++qmtest-gui: ${QMTEST_DIR}/context
++ cd ${QMTEST_DIR} && ${QMTEST} gui -C context
++
++.PHONY: qmtest-g++
++
++# Run Paranoia on real.c.
++
++paranoia.o: $(srcdir)/../contrib/paranoia.cc $(CONFIG_H) $(SYSTEM_H) \
++ real.h $(TREE_H)
++ g++ -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $< $(OUTPUT_OPTION)
++
++paranoia: paranoia.o real.o $(LIBIBERTY)
++ g++ -o $@ paranoia.o real.o $(LIBIBERTY)
++
++# These exist for maintenance purposes.
++
++# Update the tags table.
++TAGS: lang.tags
++ (cd $(srcdir); \
++ incs= ; \
++ list='$(SUBDIRS)'; for dir in $$list; do \
++ if test -f $$dir/TAGS; then \
++ incs="$$incs --include $$dir/TAGS.sub"; \
++ fi; \
++ done; \
++ mkdir tmp-tags; \
++ mv -f c-parse.[ch] tmp-tags; \
++ etags -o TAGS.sub *.y *.h *.c; \
++ mv tmp-tags/* .; \
++ rmdir tmp-tags; \
++ etags --include TAGS.sub $$incs)
++
++# ------------------------------------------------------
++# Bootstrap-related targets (not used during 'make all')
++# ------------------------------------------------------
++
++# A list of files to be destroyed during "lean" builds.
++VOL_FILES=`echo $(BACKEND) $(OBJS) $(C_OBJS) $(LIBCPP_OBJS) *.c *.h gen*`
++
++# Flags to pass to stage2 and later recursive makes. Note that the
++# WARN_CFLAGS setting can't be to the expansion of GCC_WARN_CFLAGS in
++# the context of the stage_x rule.
++
++POSTSTAGE1_FLAGS_TO_PASS = \
++ ADAFLAGS="$(BOOT_ADAFLAGS)" \
++ CFLAGS="$(BOOT_CFLAGS)" \
++ LDFLAGS="$(BOOT_LDFLAGS)" \
++ WARN_CFLAGS="\$$(GCC_WARN_CFLAGS)" \
++ STRICT_WARN="$(STRICT2_WARN)" \
++ libdir=$(libdir) \
++ LANGUAGES="$(LANGUAGES)" \
++ MAKEINFO="$(MAKEINFO)" \
++ MAKEINFOFLAGS="$(MAKEINFOFLAGS)" \
++ MAKEOVERRIDES= \
++ OUTPUT_OPTION="-o \$$@"
++
++STAGE2_FLAGS_TO_PASS = \
++ CFLAGS="$(BOOT_CFLAGS)" \
++ WERROR="@WERROR@" \
++
++STAGEPROFILE_FLAGS_TO_PASS = \
++ CFLAGS="$(BOOT_CFLAGS) -fprofile-generate"
++
++# Files never linked into the final executable produces warnings about missing
++# profile.
++STAGEFEEDBACK_FLAGS_TO_PASS = \
++ CFLAGS="$(BOOT_CFLAGS) -fprofile-use"
++
++# Only build the C compiler for stage1, because that is the only one that
++# we can guarantee will build with the native compiler, and also it is the
++# only thing useful for building stage2. STAGE1_CFLAGS (via CFLAGS),
++# MAKEINFO and MAKEINFOFLAGS are explicitly passed here to make them
++# overrideable (for a bootstrap build stage1 also builds gcc.info).
++stage1_build:
++ $(MAKE) CC="$(CC)" libdir=$(libdir) LANGUAGES="$(BOOT_LANGUAGES)" \
++ CFLAGS="$(STAGE1_CFLAGS)" MAKEINFO="$(MAKEINFO)" \
++ MAKEINFOFLAGS="$(MAKEINFOFLAGS)" COVERAGE_FLAGS= \
++ OBJS-onestep="$(OBJS)"
++ $(STAMP) stage1_build
++ echo stage1_build > stage_last
++
++stage1_copy: stage1_build
++ $(MAKE) stage1
++ $(STAMP) stage1_copy
++ echo stage2_build > stage_last
++
++stage2_build: stage1_copy
++ $(MAKE) CC="$(STAGE_CC_WRAPPER) stage1/xgcc$(exeext) -Bstage1/ -B$(build_tooldir)/bin/" CC_FOR_BUILD="$(STAGE_CC_WRAPPER) stage1/xgcc$(exeext) -Bstage1/ -B$(build_tooldir)/bin/" \
++ STAGE_PREFIX=stage1/ \
++ $(POSTSTAGE1_FLAGS_TO_PASS) \
++ $(STAGE2_FLAGS_TO_PASS)
++ $(STAMP) stage2_build
++ echo stage2_build > stage_last
++
++stage2_copy: stage2_build
++ $(MAKE) stage2
++ $(STAMP) stage2_copy
++ echo stage3_build > stage_last
++
++stageprofile_build: stage1_copy
++ $(MAKE) CC="$(STAGE_CC_WRAPPER) stage1/xgcc$(exeext) -Bstage1/ -B$(build_tooldir)/bin/" CC_FOR_BUILD="$(STAGE_CC_WRAPPER) stage1/xgcc$(exeext) -Bstage1/ -B$(build_tooldir)/bin/" \
++ STAGE_PREFIX=stage1/ \
++ $(POSTSTAGE1_FLAGS_TO_PASS) \
++ $(STAGEPROFILE_FLAGS_TO_PASS)
++ $(STAMP) stageprofile_build
++ echo stageprofile_build > stage_last
++
++stageprofile_copy: stageprofile_build
++ $(MAKE) stageprofile
++ $(STAMP) stageprofile_copy
++ echo stagefeedback_build > stage_last
++
++stage3_build: stage2_copy
++ $(MAKE) CC="$(STAGE_CC_WRAPPER) stage2/xgcc$(exeext) -Bstage2/ -B$(build_tooldir)/bin/" CC_FOR_BUILD="$(STAGE_CC_WRAPPER) stage2/xgcc$(exeext) -Bstage2/ -B$(build_tooldir)/bin/" \
++ STAGE_PREFIX=stage2/ \
++ $(POSTSTAGE1_FLAGS_TO_PASS) \
++ $(STAGE2_FLAGS_TO_PASS)
++ $(STAMP) stage3_build
++ echo stage3_build > stage_last
++
++stagefeedback_build: stageprofile_copy stage1_copy
++ $(MAKE) CC="$(STAGE_CC_WRAPPER) stage1/xgcc$(exeext) -Bstage1/ -B$(build_tooldir)/bin/" CC_FOR_BUILD="$(STAGE_CC_WRAPPER) stage1/xgcc$(exeext) -Bstage1/ -B$(build_tooldir)/bin/" \
++ STAGE_PREFIX=stage1/ \
++ $(POSTSTAGE1_FLAGS_TO_PASS) \
++ $(STAGEFEEDBACK_FLAGS_TO_PASS)
++ $(STAMP) stagefeedback_build
++ echo stagefeedback_build > stage_last
++
++stagefeedback_copy: stagefeedback_build
++ $(MAKE) stagefeedback
++ $(STAMP) stagefeedback_copy
++ echo stagefeedback2_build > stage_last
++
++# For bootstrap4:
++stage3_copy: stage3_build
++ $(MAKE) stage3
++ $(STAMP) stage3_copy
++ echo stage4_build > stage_last
++
++stage4_build: stage3_copy
++ $(MAKE) CC="$(STAGE_CC_WRAPPER) stage3/xgcc$(exeext) -Bstage3/ -B$(build_tooldir)/bin/" CC_FOR_BUILD="$(STAGE_CC_WRAPPER) stage3/xgcc$(exeext) -Bstage3/ -B$(build_tooldir)/bin/" \
++ STAGE_PREFIX=stage3/ \
++ $(POSTSTAGE1_FLAGS_TO_PASS) \
++ $(STAGE2_FLAGS_TO_PASS)
++ $(STAMP) stage4_build
++ echo stage4_build > stage_last
++
++# Additional steps for *-lean targets:
++clean_s1: stage1_copy
++ -(cd stage1 && rm -f $(VOL_FILES))
++ $(STAMP) clean_s1
++
++clean_s2: stage2_copy
++ -rm -rf stage1
++ $(STAMP) clean_s2
++
++# The various entry points for bootstrapping.
++
++bootstrap: stage3_build
++ @echo
++ @echo Bootstrap complete - make \"quickstrap\" to redo last build,
++ @echo \"restage1\" through \"restage3\" to rebuild specific stages,
++ @echo \"restrap\" to redo the bootstrap from stage1, or
++ @echo \"cleanstrap\" to redo the bootstrap from scratch.
++
++bootstrap-lean : clean_s1 clean_s2 stage3_build
++ @echo
++ @echo Bootstrap complete - make \"quickstrap\" to redo last build,
++ @echo or \"cleanstrap\" to redo the bootstrap from scratch.
++
++bootstrap2: bootstrap
++
++bootstrap2-lean : bootstrap-lean
++
++bootstrap3 bootstrap3-lean: bootstrap
++
++bootstrap4 bootstrap4-lean: stage4_build
++
++unstage1 unstage2 unstage3 unstage4 unstageprofile unstagefeedback:
++ -set -vx; stage=`echo $@ | sed -e 's/un//'`; \
++ rm -f $$stage/as$(exeext); \
++ rm -f $$stage/ld$(exeext); \
++ rm -f $$stage/collect-ld$(exeext); \
++ if test -d $$stage; then \
++ mv $$stage/specs $(SPECS) 2>/dev/null || :; \
++ mv $$stage/* . 2>/dev/null; \
++ for i in `cd $$stage; echo *` ; do \
++ if test -d $$stage/$$i; then \
++ mv $$stage/$$i/* $$i/. 2>/dev/null; \
++ else \
++ mv $$stage/$$i .; \
++ fi; \
++ done \
++ fi ; \
++ rm -f $${stage}_build $${stage}_copy ;\
++ echo $${stage}_build > stage_last
++
++restage1: unstage1
++ $(MAKE) $(REMAKEFLAGS) stage1_build
++
++restage2: unstage2
++ $(MAKE) $(REMAKEFLAGS) stage2_build
++
++restage3: unstage3
++ $(MAKE) $(REMAKEFLAGS) stage3_build
++
++restage4: unstage4
++ $(MAKE) $(REMAKEFLAGS) stage4_build
++
++restageprofile: unstageprofile
++ $(MAKE) $(REMAKEFLAGS) stageprofile_build
++
++restagefeedback: unstagefeedback
++ $(MAKE) $(REMAKEFLAGS) stagefeedback_build
++
++# Bubble up a bugfix through all the stages. Primarily useful for fixing
++# bugs that cause the compiler to crash while building stage 2.
++bubblestrap:
++ if test -f stage_last; then \
++ LAST=`sed -e 's/_build//' < stage_last`; \
++ if test "$$LAST" != "stage1"; then \
++ $(MAKE) $(REMAKEFLAGS) $$LAST; \
++ $(STAMP) $${LAST}_copy; \
++ fi; \
++ fi
++ if test -f stage1_copy; then $(MAKE) unstage1; fi
++ $(MAKE) $(REMAKEFLAGS) stage1_copy
++ if test -f stage2_copy; then $(MAKE) unstage2; fi
++ $(MAKE) $(REMAKEFLAGS) stage2_copy
++ if test -f stage3_copy; then $(MAKE) unstage3; fi
++ $(MAKE) $(REMAKEFLAGS) stage3_build
++ if test -f stage4_copy; then \
++ $(MAKE) $(REMAKEFLAGS) stage3_copy; $(MAKE) unstage4; \
++ $(MAKE) $(REMAKEFLAGS) stage4_build || exit 1; \
++ fi
++
++quickstrap:
++ if test -f stage_last ; then \
++ LAST=`cat stage_last`; rm $$LAST; $(MAKE) $(REMAKEFLAGS) $$LAST; \
++ else \
++ $(MAKE) $(REMAKEFLAGS) stage1_build; \
++ fi
++
++cleanstrap:
++ -$(MAKE) clean
++ $(MAKE) $(REMAKEFLAGS) bootstrap
++
++unstrap:
++ -rm -rf stage[234]*
++ $(MAKE) unstage1
++ -rm -f stage_last
++
++# Differs from cleanstrap in that it starts from the earlier stage1 build,
++# not from scratch.
++restrap:
++ $(MAKE) unstrap
++ $(MAKE) $(REMAKEFLAGS) bootstrap
++
++# These targets compare the object files in the current directory with
++# those in a stage directory. We need to skip the first N bytes of
++# each object file. The "slow" mechanism assumes nothing special
++# about cmp and uses the tail command to skip. ./ avoids a bug in
++# some versions of tail. The "gnu" targets use gnu cmp (diffutils
++# v2.4 or later), to avoid running tail and the overhead of twice
++# copying each object file. Likewise, the "fast" targets use the skip
++# parameter of cmp available on some systems to accomplish the same
++# thing. An exit status of 1 is precisely the result we're looking
++# for (other values mean other problems).
++slowcompare slowcompare3 slowcompare4 slowcompare-lean slowcompare3-lean slowcompare4-lean \
++fastcompare fastcompare3 fastcompare4 fastcompare-lean fastcompare3-lean fastcompare4-lean \
++ gnucompare gnucompare3 gnucompare4 gnucompare-lean gnucompare3-lean gnucompare4-lean: force
++ -rm -f .bad_compare
++ case "$@" in *compare | *compare-lean ) stage=2 ;; * ) stage=`echo $@ | sed -e 's,^[a-z]*compare\([0-9][0-9]*\).*,\1,'` ;; esac; \
++ for dir in . $(SUBDIRS); do \
++ if [ "`echo $$dir/*$(objext)`" != "$$dir/*$(objext)" ] ; then \
++ for file in $$dir/*$(objext); do \
++ case "$@" in \
++ slowcompare* ) \
++ tail +16c ./$$file > tmp-foo1; \
++ tail +16c stage$$stage/$$file > tmp-foo2 \
++ && (cmp tmp-foo1 tmp-foo2 > /dev/null 2>&1 || echo $$file differs >> .bad_compare) || true; \
++ ;; \
++ fastcompare* ) \
++ cmp $$file stage$$stage/$$file 16 16 > /dev/null 2>&1; \
++ test $$? -eq 1 && echo $$file differs >> .bad_compare || true; \
++ ;; \
++ gnucompare* ) \
++ cmp --ignore-initial=16 $$file stage$$stage/$$file > /dev/null 2>&1; \
++ test $$? -eq 1 && echo $$file differs >> .bad_compare || true; \
++ ;; \
++ esac ; \
++ done; \
++ else true; fi; \
++ done
++ -rm -f tmp-foo*
++ case "$@" in *compare | *compare-lean ) stage=2 ;; * ) stage=`echo $@ | sed -e 's,^[a-z]*compare\([0-9][0-9]*\).*,\1,'` ;; esac; \
++ if [ -f .bad_compare ]; then \
++ echo "Bootstrap comparison failure!"; \
++ cat .bad_compare; \
++ exit 1; \
++ else \
++ case "$@" in \
++ *-lean ) rm -rf stage$$stage ;; \
++ *) ;; \
++ esac; true; \
++ fi
++
++# Forwarding wrappers to the most appropriate version.
++compare: @make_compare_target@
++compare3: @make_compare_target@3
++compare4: @make_compare_target@4
++compare-lean: @make_compare_target@-lean
++compare3-lean: @make_compare_target@3-lean
++compare4-lean: @make_compare_target@4-lean
++
++# Copy the object files from a particular stage into a subdirectory.
++stage1-start:
++ -if [ -d stage1 ] ; then true ; else mkdir stage1 ; fi
++ $(MAKE) -f libgcc.mk libgcc-stage-start stage=stage1
++ -subdirs="$(SUBDIRS)"; for dir in $$subdirs; \
++ do \
++ if [ -d stage1/$$dir ] ; then true ; else mkdir stage1/$$dir ; fi ; \
++ done
++# If SPECS is overridden, make sure it is `installed' as specs.
++ -mv $(SPECS) stage1/specs
++ -mv $(STAGESTUFF) stage1
++# Copy as/ld if they exist to stage dir, so that running xgcc from the stage
++# dir will work properly.
++ -if [ -f as$(exeext) ] ; then (cd stage1 && $(LN_S) ../as$(exeext) .) ; else true ; fi
++ -if [ -f ld$(exeext) ] ; then (cd stage1 && $(LN_S) ../ld$(exeext) .) ; else true ; fi
++ -if [ -f collect-ld$(exeext) ] ; then (cd stage1 && $(LN_S) ../collect-ld$(exeext) .) ; else true ; fi
++ -rm -f stage1/libgcc.a stage1/libgcc_eh.a stage1/libgcov.a
++ -rm -f stage1/libgcc_s*$(SHLIB_EXT)
++ -rm -f stage1/libunwind.a stage1/libunwind*$(SHLIB_EXT)
++ -cp libgcc.a stage1
++ -$(RANLIB_FOR_TARGET) stage1/libgcc.a
++ -cp libgcov.a stage1
++ -$(RANLIB_FOR_TARGET) stage1/libgcov.a
++ -if [ -f libgcc_eh.a ] ; then cp libgcc_eh.a stage1; \
++ $(RANLIB_FOR_TARGET) stage1/libgcc_eh.a; \
++ fi
++ -cp libgcc_s*$(SHLIB_EXT) stage1
++ -cp libunwind.a libunwind*$(SHLIB_EXT) stage1
++ -for f in .. $(EXTRA_MULTILIB_PARTS); do if [ x$${f} != x.. ]; then \
++ cp stage1/$${f} . ; \
++ else true; \
++ fi; done
++stage1: force stage1-start lang.stage1
++ -for dir in . $(SUBDIRS) ; \
++ do \
++ rm -f $$dir/*$(coverageexts) ; \
++ done
++
++stage2-start:
++ -if [ -d stage2 ] ; then true ; else mkdir stage2 ; fi
++ $(MAKE) -f libgcc.mk libgcc-stage-start stage=stage2
++ -subdirs="$(SUBDIRS)"; for dir in $$subdirs; \
++ do \
++ if [ -d stage2/$$dir ] ; then true ; else mkdir stage2/$$dir ; fi ; \
++ done
++# If SPECS is overridden, make sure it is `installed' as specs.
++ -mv $(SPECS) stage2/specs
++ -mv $(STAGESTUFF) stage2
++# Copy as/ld if they exist to stage dir, so that running xgcc from the stage
++# dir will work properly.
++ -if [ -f as$(exeext) ] ; then (cd stage2 && $(LN_S) ../as$(exeext) .) ; else true ; fi
++ -if [ -f ld$(exeext) ] ; then (cd stage2 && $(LN_S) ../ld$(exeext) .) ; else true ; fi
++ -if [ -f collect-ld$(exeext) ] ; then (cd stage2 && $(LN_S) ../collect-ld$(exeext) .) ; else true ; fi
++ -rm -f stage2/libgcc.a stage2/libgcov.a stage2/libgcc_eh.a
++ -rm -f stage2/libgcc_s*$(SHLIB_EXT)
++ -rm -f stage2/libunwind.a stage2/libunwind*$(SHLIB_EXT)
++ -cp libgcc.a stage2
++ -$(RANLIB_FOR_TARGET) stage2/libgcc.a
++ -cp libgcov.a stage2
++ -$(RANLIB_FOR_TARGET) stage2/libgcov.a
++ -if [ -f libgcc_eh.a ] ; then cp libgcc_eh.a stage2; \
++ $(RANLIB_FOR_TARGET) stage2/libgcc_eh.a; \
++ fi
++ -cp libgcc_s*$(SHLIB_EXT) stage2
++ -cp libunwind.a libunwind*$(SHLIB_EXT) stage2
++ -for f in .. $(EXTRA_MULTILIB_PARTS); do if [ x$${f} != x.. ]; then \
++ cp stage2/$${f} . ; \
++ else true; \
++ fi; done
++stage2: force stage2-start lang.stage2
++
++stage3-start:
++ -if [ -d stage3 ] ; then true ; else mkdir stage3 ; fi
++ $(MAKE) -f libgcc.mk libgcc-stage-start stage=stage3
++ -subdirs="$(SUBDIRS)"; for dir in $$subdirs; \
++ do \
++ if [ -d stage3/$$dir ] ; then true ; else mkdir stage3/$$dir ; fi ; \
++ done
++# If SPECS is overridden, make sure it is `installed' as specs.
++ -mv $(SPECS) stage3/specs
++ -mv $(STAGESTUFF) stage3
++# Copy as/ld if they exist to stage dir, so that running xgcc from the stage
++# dir will work properly.
++ -if [ -f as$(exeext) ] ; then (cd stage3 && $(LN_S) ../as$(exeext) .) ; else true ; fi
++ -if [ -f ld$(exeext) ] ; then (cd stage3 && $(LN_S) ../ld$(exeext) .) ; else true ; fi
++ -if [ -f collect-ld$(exeext) ] ; then (cd stage3 && $(LN_S) ../collect-ld$(exeext) .) ; else true ; fi
++ -rm -f stage3/libgcc.a stage3/libgcov.a stage3/libgcc_eh.a
++ -rm -f stage3/libgcc_s*$(SHLIB_EXT)
++ -rm -f stage3/libunwind.a stage3/libunwind*$(SHLIB_EXT)
++ -cp libgcc.a stage3
++ -$(RANLIB_FOR_TARGET) stage3/libgcc.a
++ -cp libgcov.a stage3
++ -$(RANLIB_FOR_TARGET) stage3/libgcov.a
++ -if [ -f libgcc_eh.a ] ; then cp libgcc_eh.a stage3; \
++ $(RANLIB_FOR_TARGET) stage3/libgcc_eh.a; \
++ fi
++ -cp libgcc_s*$(SHLIB_EXT) stage3
++ -cp libunwind.a libunwind*$(SHLIB_EXT) stage3
++ -for f in .. $(EXTRA_MULTILIB_PARTS); do if [ x$${f} != x.. ]; then \
++ cp stage3/$${f} . ; \
++ else true; \
++ fi; done
++stage3: force stage3-start lang.stage3
++
++stage4-start:
++ -if [ -d stage4 ] ; then true ; else mkdir stage4 ; fi
++ $(MAKE) -f libgcc.mk libgcc-stage-start stage=stage4
++ -subdirs="$(SUBDIRS)"; for dir in $$subdirs; \
++ do \
++ if [ -d stage4/$$dir ] ; then true ; else mkdir stage4/$$dir ; fi ; \
++ done
++# If SPECS is overridden, make sure it is `installed' as specs.
++ -mv $(SPECS) stage4/specs
++ -mv $(STAGESTUFF) stage4
++# Copy as/ld if they exist to stage dir, so that running xgcc from the stage
++# dir will work properly.
++ -if [ -f as$(exeext) ] ; then (cd stage4 && $(LN_S) ../as$(exeext) .) ; else true ; fi
++ -if [ -f ld$(exeext) ] ; then (cd stage4 && $(LN_S) ../ld$(exeext) .) ; else true ; fi
++ -if [ -f collect-ld$(exeext) ] ; then (cd stage4 && $(LN_S) ../collect-ld$(exeext) .) ; else true ; fi
++ -rm -f stage4/libgcc.a stage4/libgcov.a stage4/libgcc_eh.a
++ -rm -f stage4/libgcc_s*$(SHLIB_EXT)
++ -rm -f stage4/libunwind.a stage4/libunwind*$(SHLIB_EXT)
++ -cp libgcc.a stage4
++ -$(RANLIB_FOR_TARGET) stage4/libgcc.a
++ -cp libgcov.a stage4
++ -$(RANLIB_FOR_TARGET) stage4/libgcov.a
++ -if [ -f libgcc_eh.a ] ; then cp libgcc_eh.a stage4; \
++ $(RANLIB_FOR_TARGET) stage4/libgcc_eh.a; \
++ fi
++ -cp libgcc_s*$(SHLIB_EXT) stage4
++ -cp libunwind.a libunwind*$(SHLIB_EXT) stage4
++ -for f in .. $(EXTRA_MULTILIB_PARTS); do if [ x$${f} != x.. ]; then \
++ cp stage4/$${f} . ; \
++ else true; \
++ fi; done
++stage4: force stage4-start lang.stage4
++
++stageprofile-start:
++ -if [ -d stageprofile ] ; then true ; else mkdir stageprofile ; fi
++ $(MAKE) -f libgcc.mk libgcc-stage-start stage=stageprofile
++ -subdirs="$(SUBDIRS)"; for dir in $$subdirs; \
++ do \
++ if [ -d stageprofile/$$dir ] ; then true ; else mkdir stageprofile/$$dir ; fi ; \
++ done
++ -mv $(STAGESTUFF) stageprofile
++# Copy as/ld if they exist to stage dir, so that running xgcc from the stage
++# dir will work properly.
++ -if [ -f as$(exeext) ] ; then (cd stageprofile && $(LN_S) ../as$(exeext) .) ; else true ; fi
++ -if [ -f ld$(exeext) ] ; then (cd stageprofile && $(LN_S) ../ld$(exeext) .) ; else true ; fi
++ -if [ -f collect-ld$(exeext) ] ; then (cd stageprofile && $(LN_S) ../collect-ld$(exeext) .) ; else true ; fi
++ -rm -f stageprofile/libgcc.a stageprofile/libgcov.a stageprofile/libgcc_eh.a
++ -rm -f stageprofile/libgcc_s*$(SHLIB_EXT)
++ -rm -f stageprofile/libunwind.a stageprofile/libunwind*$(SHLIB_EXT)
++ -cp libgcc.a stageprofile
++ -$(RANLIB_FOR_TARGET) stageprofile/libgcc.a
++ -cp libgcov.a stageprofile
++ -$(RANLIB_FOR_TARGET) stageprofile/libgcov.a
++ -if [ -f libgcc_eh.a ] ; then cp libgcc_eh.a stageprofile; \
++ $(RANLIB_FOR_TARGET) stageprofile/libgcc_eh.a; \
++ fi
++ -cp libgcc_s*$(SHLIB_EXT) stageprofile
++ -cp libunwind.a libunwind*$(SHLIB_EXT) stageprofile
++ -for f in .. $(EXTRA_MULTILIB_PARTS); do if [ x$${f} != x.. ]; then \
++ cp stageprofile/$${f} . ; \
++ else true; \
++ fi; done
++stageprofile: force stageprofile-start lang.stageprofile
++
++stagefeedback-start:
++ -if [ -d stagefeedback ] ; then true ; else mkdir stagefeedback ; fi
++ $(MAKE) -f libgcc.mk libgcc-stage-start stage=stagefeedback
++ -subdirs="$(SUBDIRS)"; for dir in $$subdirs; \
++ do \
++ if [ -d stagefeedback/$$dir ] ; then true ; else mkdir stagefeedback/$$dir ; fi ; \
++ done
++ -mv $(STAGESTUFF) stagefeedback
++# Copy as/ld if they exist to stage dir, so that running xgcc from the stage
++# dir will work properly.
++ -if [ -f as$(exeext) ] ; then (cd stagefeedback && $(LN_S) ../as$(exeext) .) ; else true ; fi
++ -if [ -f ld$(exeext) ] ; then (cd stagefeedback && $(LN_S) ../ld$(exeext) .) ; else true ; fi
++ -if [ -f collect-ld$(exeext) ] ; then (cd stagefeedback && $(LN_S) ../collect-ld$(exeext) .) ; else true ; fi
++ -rm -f stagefeedback/libgcc.a stagefeedback/libgcov.a stagefeedback/libgcc_eh.a
++ -rm -f stagefeedback/libgcc_s*$(SHLIB_EXT)
++ -rm -f stagefeedback/libunwind.a stagefeedback/libunwind*$(SHLIB_EXT)
++ -rm -f *.da
++ -for dir in fixinc po testsuite $(SUBDIRS); \
++ do \
++ rm -f $$dir/*.da ; \
++ done
++ -cp libgcc.a stagefeedback
++ -$(RANLIB_FOR_TARGET) stagefeedback/libgcc.a
++ -cp libgcov.a stagefeedback
++ -$(RANLIB_FOR_TARGET) stagefeedback/libgcov.a
++ -if [ -f libgcc_eh.a ] ; then cp libgcc_eh.a stagefeedback; \
++ $(RANLIB_FOR_TARGET) stagefeedback/libgcc_eh.a; \
++ fi
++ -cp libgcc_s*$(SHLIB_EXT) stagefeedback
++ -cp libunwind.a libunwind*$(SHLIB_EXT) stagefeedback
++ -for f in .. $(EXTRA_MULTILIB_PARTS); do if [ x$${f} != x.. ]; then \
++ cp stagefeedback/$${f} . ; \
++ else true; \
++ fi; done
++stagefeedback: force stagefeedback-start lang.stagefeedback
++
++# Copy just the executable files from a particular stage into a subdirectory,
++# and delete the object files. Use this if you're just verifying a version
++# that is pretty sure to work, and you are short of disk space.
++risky-stage1: stage1
++ -$(MAKE) clean
++
++risky-stage2: stage2
++ -$(MAKE) clean
++
++risky-stage3: stage3
++ -$(MAKE) clean
++
++risky-stage4: stage4
++ -$(MAKE) clean
++
++#In GNU Make, ignore whether `stage*' exists.
++.PHONY: stage1 stage2 stage3 stage4 clean maintainer-clean TAGS bootstrap
++.PHONY: risky-stage1 risky-stage2 risky-stage3 risky-stage4
++.PHONY: stagefeedback stageprofile
++
++# -----------------------------------------------------
++# Rules for generating translated message descriptions.
++# Disabled by autoconf if the tools are not available.
++# -----------------------------------------------------
++
++XGETTEXT = @XGETTEXT@
++GMSGFMT = @GMSGFMT@
++MSGMERGE = msgmerge
++
++PACKAGE = @PACKAGE@
++CATALOGS = @CATALOGS@
++
++.PHONY: build- install- build-po install-po update-po
++
++# Dummy rules to deal with dependencies produced by use of
++# "build-@POSUB@" and "install-@POSUB@" above, when NLS is disabled.
++build-: ; @true
++install-: ; @true
++
++build-po: $(CATALOGS)
++
++# This notation should be acceptable to all Make implementations used
++# by people who are interested in updating .po files.
++update-po: $(CATALOGS:.gmo=.pox)
++
++# N.B. We do not attempt to copy these into $(srcdir). The snapshot
++# script does that.
++.po.gmo:
++ -test -d po || mkdir po
++ $(GMSGFMT) --statistics -o $@ $<
++
++# The new .po has to be gone over by hand, so we deposit it into
++# build/po with a different extension.
++# If build/po/$(PACKAGE).pot exists, use it (it was just created),
++# else use the one in srcdir.
++.po.pox:
++ -test -d po || mkdir po
++ $(MSGMERGE) $< `if test -f po/$(PACKAGE).pot; \
++ then echo po/$(PACKAGE).pot; \
++ else echo $(srcdir)/po/$(PACKAGE).pot; fi` -o $@
++
++# This rule has to look for .gmo modules in both srcdir and
++# the cwd, and has to check that we actually have a catalog
++# for each language, in case they weren't built or included
++# with the distribution.
++install-po:
++ $(SHELL) $(srcdir)/mkinstalldirs $(DESTDIR)$(datadir)
++ cats="$(CATALOGS)"; for cat in $$cats; do \
++ lang=`basename $$cat | sed 's/\.gmo$$//'`; \
++ if [ -f $$cat ]; then :; \
++ elif [ -f $(srcdir)/$$cat ]; then cat=$(srcdir)/$$cat; \
++ else continue; \
++ fi; \
++ dir=$(localedir)/$$lang/LC_MESSAGES; \
++ echo $(SHELL) $(srcdir)/mkinstalldirs $(DESTDIR)$$dir; \
++ $(SHELL) $(srcdir)/mkinstalldirs $(DESTDIR)$$dir || exit 1; \
++ echo $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \
++ $(INSTALL_DATA) $$cat $(DESTDIR)$$dir/$(PACKAGE).mo; \
++ done
++
++# Rule for regenerating the message template (gcc.pot).
++# Instead of forcing everyone to edit POTFILES.in, which proved impractical,
++# this rule has no dependencies and always regenerates gcc.pot. This is
++# relatively harmless since the .po files do not directly depend on it.
++# Note that exgettext has an awk script embedded in it which requires a
++# fairly modern (POSIX-compliant) awk.
++# The .pot file is left in the build directory.
++$(PACKAGE).pot: po/$(PACKAGE).pot
++po/$(PACKAGE).pot: force options.c
++ -test -d po || mkdir po
++ $(MAKE) srcextra
++ AWK=$(AWK) $(SHELL) $(srcdir)/po/exgettext \
++ $(XGETTEXT) $(PACKAGE) $(srcdir)