diff options
44 files changed, 2874 insertions, 0 deletions
diff --git a/lang/gcc27/Makefile b/lang/gcc27/Makefile new file mode 100644 index 00000000000..7764db4133d --- /dev/null +++ b/lang/gcc27/Makefile @@ -0,0 +1,76 @@ +# ex:ts=8 +# Ports collection makefile for: gcc +# Version required: 2.8.1 +# Date created: 17 Jan 1998 +# Whom: David O'Brien <obrien@NUXI.com> +# +# $FreeBSD$ +# + +DISTNAME= gcc-2.7.2.3 +CATEGORIES= lang +MASTER_SITES= ${MASTER_SITE_GNU} \ + ftp://ftp.gnu.org/gnu/libg++/ \ + ftp://ftp.duke.edu/pub/gnu/libg++/ \ + ftp://ftp.net.ohio-state.edu/disk/c/gnu/gnu-0.2/src/ +MASTER_SITE_SUBDIR= gcc +DISTFILES= ${DISTNAME}${EXTRACT_SUFX} libg++-2.7.2${EXTRACT_SUFX} + +MAINTAINER= obrien@FreeBSD.org + +NO_CDROM= 'old version, not worth the cost in real estate' + +.include <bsd.port.pre.mk> + +GCC_VER= 2.7.2.3 +CONFIGURE_TARGET= ${ARCH}-portbld-freebsd${OSREL} +PLIST_SUB= GNUHOST=${CONFIGURE_TARGET} GCC_VER=${GCC_VER} +CONFIGURE_ARGS= --with-gnu-as --with-gnu-ld --with-stabs \ + --with-gxx-include-dir=${PREFIX}/lib/gcc-lib/${CONFIGURE_TARGET}/${GCC_VER}/include/g++ +GNU_CONFIGURE= yes +USE_GMAKE= yes +ALL_TARGET= bootstrap +MAN1= cccp27.1 g++27.1 gcc27.1 + +pre-fetch: + @${ECHO} "GCC ${DISTNAME:S/^gcc-//} for ${OPSYS} ${OSREL} ${PORTOBJFORMAT}" + +pre-patch: + @${MV} ${WRKSRC}/config/i386/freebsd.h ${WRKSRC}/config/i386/freebsd-aout.h + +pre-configure: + @(MAJ=`sysctl -n kern.osreldate | ${SED} -e '/.....$$/s///'` ; \ + ${SED} -e "s:__FreeBSD__[0-9=]*:__FreeBSD__=$${MAJ}:" ${FILESDIR}/freebsd.h.${ARCH} \ + >${WRKSRC}/config/${ARCH}/freebsd.h ) + +XGCC= "${WRKSRC}/stage2/xgcc -B${WRKSRC}/stage2/" +post-build: + cd ${WRKDIR}/libg++-2.7.2 ; env CC=${XGCC} CXX=${XGCC} ./configure ${CONFIGURE_ARGS} + cd ${WRKDIR}/libg++-2.7.2 ; ${SETENV} ${MAKE_ENV} ${GMAKE} CC=${XGCC} CXX=${XGCC} + +post-install: + cd ${WRKDIR}/libg++-2.7.2 ; ${SETENV} ${MAKE_ENV} ${GMAKE} CC=${XGCC} CXX=${XGCC} install + @${RM} -f ${PREFIX}/bin/c++ \ + ${PREFIX}/bin/genclass ${PREFIX}/bin/gperf \ + ${PREFIX}/bin/protoize ${PREFIX}/bin/unprotoize \ + ${PREFIX}/man/man1/gperf.1 ${PREFIX}/man/man1/configure.1 + @${RM} -rf ${PREFIX}/bin/c++ ${PREFIX}/${CONFIGURE_TARGET} + @(for prog in ${PREFIX}/bin/gcc ${PREFIX}/bin/g++ \ + ${PREFIX}/bin/${CONFIGURE_TARGET}-gcc \ + ${PREFIX}/lib/gcc-lib/${CONFIGURE_TARGET}/${GCC_VER}/cc1 \ + ${PREFIX}/lib/gcc-lib/${CONFIGURE_TARGET}/${GCC_VER}/cc1obj \ + ${PREFIX}/lib/gcc-lib/${CONFIGURE_TARGET}/${GCC_VER}/cc1plus \ + ${PREFIX}/lib/gcc-lib/${CONFIGURE_TARGET}/${GCC_VER}/cpp ; \ + do strip $$prog ; \ + done) + @${MV} -f ${PREFIX}/bin/gcc ${PREFIX}/bin/gcc27 + @${MV} -f ${PREFIX}/bin/g++ ${PREFIX}/bin/g++27 + @${MV} ${PREFIX}/man/man1/cccp.1 ${PREFIX}/man/man1/cccp27.1 + @${MV} ${PREFIX}/man/man1/g++.1 ${PREFIX}/man/man1/g++27.1 + @${MV} ${PREFIX}/man/man1/gcc.1 ${PREFIX}/man/man1/gcc27.1 + @${RM} -rf ${PREFIX}/lib/gcc-lib/${CONFIGURE_TARGET}/${GCC_VER}/g++-include + @${MV} ${PREFIX}/lib/libg++.a ${PREFIX}/lib/libiberty.a \ + ${PREFIX}/lib/libstdc++.a ${PREFIX}/lib/g++-include \ + ${PREFIX}/lib/gcc-lib/${CONFIGURE_TARGET}/${GCC_VER} + +.include <bsd.port.post.mk> diff --git a/lang/gcc27/distinfo b/lang/gcc27/distinfo new file mode 100644 index 00000000000..75711eca382 --- /dev/null +++ b/lang/gcc27/distinfo @@ -0,0 +1,2 @@ +MD5 (gcc-2.7.2.3.tar.gz) = 9f75fc7a5f13b691aabe8c1b775a4604 +MD5 (libg++-2.7.2.tar.gz) = cfc85fb62113b72aa4f9688e08b385c4 diff --git a/lang/gcc27/files/freebsd.h.i386 b/lang/gcc27/files/freebsd.h.i386 new file mode 100644 index 00000000000..acd5b27529d --- /dev/null +++ b/lang/gcc27/files/freebsd.h.i386 @@ -0,0 +1,575 @@ +/* Definitions for Intel 386 running FreeBSD with either a.out or ELF format + Copyright (C) 1994, 1995 Free Software Foundation, Inc. + Contributed by Eric Youngdale. + Modified for stabs-in-ELF by H.J. Lu. + Adapted from Linux version by John Polstra. + Added support for generating "old a.out gas" on the fly by Peter Wemm. + +This file is part of GNU CC. + +GNU CC is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU CC is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GNU CC; see the file COPYING. If not, write to +the Free Software Foundation, 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +/* $FreeBSD$ */ + +/* A lie, I guess, but the general idea behind FreeBSD/ELF is that we are + supposed to be outputting something that will assemble under SVr4. + This gets us pretty close. */ +#include <i386/i386.h> /* Base i386 target machine definitions */ +#include <i386/att.h> /* Use the i386 AT&T assembler syntax */ +#include <linux.h> /* some common stuff */ + +/* Don't assume anything about the header files. */ +#define NO_IMPLICIT_EXTERN_C + +/* This defines which switch letters take arguments. On svr4, most of + the normal cases (defined in gcc.c) apply, and we also have -h* and + -z* options (for the linker). We have a slightly different mix. We + have -R (alias --rpath), no -z, --soname (-h), --assert etc. */ + +#undef SWITCH_TAKES_ARG +#define SWITCH_TAKES_ARG(CHAR) \ + ( (CHAR) == 'D' \ + || (CHAR) == 'U' \ + || (CHAR) == 'o' \ + || (CHAR) == 'e' \ + || (CHAR) == 'T' \ + || (CHAR) == 'u' \ + || (CHAR) == 'I' \ + || (CHAR) == 'm' \ + || (CHAR) == 'L' \ + || (CHAR) == 'A' \ + || (CHAR) == 'h' \ + || (CHAR) == 'z' /* ignored by ld */ \ + || (CHAR) == 'R') + +#undef WORD_SWITCH_TAKES_ARG +#define WORD_SWITCH_TAKES_ARG(STR) \ + (DEFAULT_WORD_SWITCH_TAKES_ARG (STR) \ + || !strcmp (STR, "rpath") || !strcmp (STR, "rpath-link") \ + || !strcmp (STR, "soname") || !strcmp (STR, "defsym") \ + || !strcmp (STR, "assert") || !strcmp (STR, "dynamic-linker")) + +#undef TARGET_VERSION +#define TARGET_VERSION fprintf (stderr, " (i386 FreeBSD)"); + +#define MASK_PROFILER_EPILOGUE 010000000000 +#define MASK_AOUT 004000000000 /* a.out not elf */ +#define MASK_UNDERSCORES 002000000000 /* use leading _ */ + +#define TARGET_PROFILER_EPILOGUE (target_flags & MASK_PROFILER_EPILOGUE) +#define TARGET_AOUT (target_flags & MASK_AOUT) +#define TARGET_ELF ((target_flags & MASK_AOUT) == 0) +#define TARGET_UNDERSCORES ((target_flags & MASK_UNDERSCORES) != 0) + +#undef SUBTARGET_SWITCHES +#define SUBTARGET_SWITCHES \ + { "profiler-epilogue", MASK_PROFILER_EPILOGUE}, \ + { "no-profiler-epilogue", -MASK_PROFILER_EPILOGUE}, \ + { "aout", MASK_AOUT}, \ + { "no-aout", -MASK_AOUT}, \ + { "underscores", MASK_UNDERSCORES}, \ + { "no-underscores", -MASK_UNDERSCORES}, + +/* The svr4 ABI for the i386 says that records and unions are returned + in memory. */ +/* On FreeBSD, we do not. */ +#undef DEFAULT_PCC_STRUCT_RETURN +#define DEFAULT_PCC_STRUCT_RETURN 0 + +/* Prefix for internally generated assembler labels. If we aren't using + underscores, we are using prefix `.'s to identify labels that should + be ignored, as in `i386/gas.h' --karl@cs.umb.edu */ +#undef LPREFIX +#define LPREFIX ((TARGET_UNDERSCORES) ? "L" : ".L") + +/* Override the default comment-starter of "/". */ +#undef ASM_COMMENT_START +#define ASM_COMMENT_START "#" + +#undef COMMENT_BEGIN +#define COMMENT_BEGIN "#" + +#undef ASM_APP_ON +#define ASM_APP_ON "#APP\n" + +#undef ASM_APP_OFF +#define ASM_APP_OFF "#NO_APP\n" + +/* Output at beginning of assembler file. */ +/* The .file command should always begin the output. */ + +#undef ASM_FILE_START +#define ASM_FILE_START(FILE) \ + do { \ + output_file_directive (FILE, main_input_filename); \ + if (TARGET_ELF) \ + fprintf (FILE, "\t.version\t\"01.01\"\n"); \ + } while (0) + +/* Identify the front-end which produced this file. To keep symbol + space down, and not confuse kdb, only do this if the language is + not C. (svr4.h defines ASM_IDENTIFY_GCC but neglects this) */ +#undef ASM_IDENTIFY_LANGUAGE +#define ASM_IDENTIFY_LANGUAGE(STREAM) \ +{ \ + if (strcmp (lang_identify (), "c") != 0) \ + output_lang_identify (STREAM); \ +} + +/* This is how to store into the string BUF + the symbol_ref name of an internal numbered label where + PREFIX is the class of label and NUM is the number within the class. + This is suitable for output with `assemble_name'. */ +#undef ASM_GENERATE_INTERNAL_LABEL +#define ASM_GENERATE_INTERNAL_LABEL(BUF,PREFIX,NUMBER) \ + sprintf ((BUF), "*%s%s%d", (TARGET_UNDERSCORES) ? "" : ".", \ + (PREFIX), (NUMBER)) + +/* This is how to output an internal numbered label where + PREFIX is the class of label and NUM is the number within the class. */ +#undef ASM_OUTPUT_INTERNAL_LABEL +#define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) \ + fprintf (FILE, "%s%s%d:\n", (TARGET_UNDERSCORES) ? "" : ".", \ + PREFIX, NUM) + +/* This is how to output a reference to a user-level label named NAME. */ +#undef ASM_OUTPUT_LABELREF +#define ASM_OUTPUT_LABELREF(FILE,NAME) \ + fprintf (FILE, "%s%s", (TARGET_UNDERSCORES) ? "_" : "", NAME) + + +/* This is how to output an element of a case-vector that is relative. + This is only used for PIC code. See comments by the `casesi' insn in + i386.md for an explanation of the expression this outputs. */ +#undef ASM_OUTPUT_ADDR_DIFF_ELT +#define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, VALUE, REL) \ + fprintf (FILE, "\t.long _GLOBAL_OFFSET_TABLE_+[.-%s%d]\n", LPREFIX, VALUE) + +#undef ASM_OUTPUT_ALIGN +#define ASM_OUTPUT_ALIGN(FILE,LOG) \ + if ((LOG)!=0) fprintf ((FILE), "\t.p2align %d\n", (LOG)) + +/* Align labels, etc. at 4-byte boundaries. + For the 486, align to 16-byte boundary for sake of cache. */ +#undef ASM_OUTPUT_ALIGN_CODE +#define ASM_OUTPUT_ALIGN_CODE(FILE) \ + fprintf ((FILE), "\t.p2align %d,0x90\n", i386_align_jumps) + +/* Align start of loop at 4-byte boundary. */ +#undef ASM_OUTPUT_LOOP_ALIGN +#define ASM_OUTPUT_LOOP_ALIGN(FILE) \ + fprintf ((FILE), "\t.p2align %d,0x90\n", i386_align_loops) + + +/* conditionalize the use of ".section rodata" on elf mode - otherwise .text */ +#undef USE_CONST_SECTION +#define USE_CONST_SECTION TARGET_ELF + +/* A C statement (sans semicolon) to output an element in the table of + global constructors. */ +#undef ASM_OUTPUT_CONSTRUCTOR +#define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \ + do { \ + if (TARGET_ELF) { \ + ctors_section (); \ + fprintf (FILE, "\t%s\t ", INT_ASM_OP); \ + assemble_name (FILE, NAME); \ + fprintf (FILE, "\n"); \ + } else { \ + fprintf (asm_out_file, "%s \"%s__CTOR_LIST__\",22,0,0,", ASM_STABS_OP, \ + (TARGET_UNDERSCORES) ? "_" : ""); \ + assemble_name (asm_out_file, name); \ + fputc ('\n', asm_out_file); \ + } \ + } while (0) + +/* A C statement (sans semicolon) to output an element in the table of + global destructors. */ +#undef ASM_OUTPUT_DESTRUCTOR +#define ASM_OUTPUT_DESTRUCTOR(FILE,NAME) \ + do { \ + if (TARGET_ELF) { \ + dtors_section (); \ + fprintf (FILE, "\t%s\t ", INT_ASM_OP); \ + assemble_name (FILE, NAME); \ + fprintf (FILE, "\n"); \ + } else { \ + fprintf (asm_out_file, "%s \"%s__DTOR_LIST__\",22,0,0,", ASM_STABS_OP, \ + (TARGET_UNDERSCORES) ? "_" : ""); \ + assemble_name (asm_out_file, name); \ + fputc ('\n', asm_out_file); \ + } \ + } while (0) + +/* This says how to output assembler code to declare an + uninitialized internal linkage data object. Under SVR4, + the linker seems to want the alignment of data objects + to depend on their types. We do exactly that here. */ + +#undef ASM_OUTPUT_ALIGNED_LOCAL +#define ASM_OUTPUT_ALIGNED_LOCAL(FILE, NAME, SIZE, ALIGN) \ +do { \ + if (TARGET_ELF) { \ + fprintf ((FILE), "\t%s\t", LOCAL_ASM_OP); \ + assemble_name ((FILE), (NAME)); \ + fprintf ((FILE), "\n"); \ + ASM_OUTPUT_ALIGNED_COMMON (FILE, NAME, SIZE, ALIGN); \ + } else { \ + int rounded = (SIZE); \ + if (rounded == 0) rounded = 1; \ + rounded += (BIGGEST_ALIGNMENT / BITS_PER_UNIT) - 1; \ + rounded = (rounded / (BIGGEST_ALIGNMENT / BITS_PER_UNIT) \ + * (BIGGEST_ALIGNMENT / BITS_PER_UNIT)); \ + fputs (".lcomm ", (FILE)); \ + assemble_name ((FILE), (NAME)); \ + fprintf ((FILE), ",%u\n", (rounded)); \ + } \ +} while (0) + +#undef ASM_OUTPUT_ALIGNED_COMMON +#define ASM_OUTPUT_ALIGNED_COMMON(FILE, NAME, SIZE, ALIGN) \ +do { \ + if (TARGET_ELF) { \ + fprintf ((FILE), "\t%s\t", COMMON_ASM_OP); \ + assemble_name ((FILE), (NAME)); \ + fprintf ((FILE), ",%u,%u\n", (SIZE), (ALIGN) / BITS_PER_UNIT); \ + } else { \ + int rounded = (SIZE); \ + if (rounded == 0) rounded = 1; \ + rounded += (BIGGEST_ALIGNMENT / BITS_PER_UNIT) - 1; \ + rounded = (rounded / (BIGGEST_ALIGNMENT / BITS_PER_UNIT) \ + * (BIGGEST_ALIGNMENT / BITS_PER_UNIT)); \ + fputs (".comm ", (FILE)); \ + assemble_name ((FILE), (NAME)); \ + fprintf ((FILE), ",%u\n", (rounded)); \ + } \ +} while (0) + +/* Turn off svr4.h version, it chokes the old gas. The old layout + works fine under new gas anyway. */ +#undef ASM_OUTPUT_ASCII + +/* How to output some space */ +#undef ASM_OUTPUT_SKIP +#define ASM_OUTPUT_SKIP(FILE,SIZE) \ +do { \ + if (TARGET_ELF) { \ + fprintf (FILE, "\t%s\t%u\n", SKIP_ASM_OP, (SIZE)); \ + } else { \ + fprintf (FILE, "\t.space %u\n", (SIZE)); \ + } \ +} while (0) + +#undef ASM_OUTPUT_SOURCE_LINE +#define ASM_OUTPUT_SOURCE_LINE(file, line) \ +do { \ + static int sym_lineno = 1; \ + if (TARGET_ELF) { \ + fprintf (file, ".stabn 68,0,%d,.LM%d-", line, sym_lineno); \ + assemble_name (file, XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0));\ + fprintf (file, "\n.LM%d:\n", sym_lineno); \ + sym_lineno += 1; \ + } else { \ + fprintf (file, "\t%s %d,0,%d\n", ASM_STABD_OP, N_SLINE, lineno); \ + } \ +} while (0) + +/* in elf, the function stabs come first, before the relative offsets */ +#undef DBX_FUNCTION_FIRST +#define DBX_CHECK_FUNCTION_FIRST TARGET_ELF + +/* tag end of file in elf mode */ +#undef DBX_OUTPUT_MAIN_SOURCE_FILE_END +#define DBX_OUTPUT_MAIN_SOURCE_FILE_END(FILE, FILENAME) \ +do { \ + if (TARGET_ELF) { \ + fprintf (FILE, "\t.text\n\t.stabs \"\",%d,0,0,.Letext\n.Letext:\n", N_SO); \ + } \ +} while (0) + +/* stabs-in-elf has offsets relative to function beginning */ +#undef DBX_OUTPUT_LBRAC +#define DBX_OUTPUT_LBRAC(file,name) \ +do { \ + fprintf (asmfile, "%s %d,0,0,", ASM_STABN_OP, N_LBRAC); \ + assemble_name (asmfile, buf); \ + if (TARGET_ELF) { \ + fputc ('-', asmfile); \ + assemble_name (asmfile, XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0)); \ + } \ + fprintf (asmfile, "\n"); \ +} while (0) + +#undef DBX_OUTPUT_RBRAC +#define DBX_OUTPUT_RBRAC(file,name) \ +do { \ + fprintf (asmfile, "%s %d,0,0,", ASM_STABN_OP, N_RBRAC); \ + assemble_name (asmfile, buf); \ + if (TARGET_ELF) { \ + fputc ('-', asmfile); \ + assemble_name (asmfile, XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0)); \ + } \ + fprintf (asmfile, "\n"); \ +} while (0) + + +/* Define macro used to output shift-double opcodes when the shift + count is in %cl. Some assemblers require %cl as an argument; + some don't. + + *OLD* GAS requires the %cl argument, so override i386/unix.h. */ + +#undef AS3_SHIFT_DOUBLE +#define AS3_SHIFT_DOUBLE(a,b,c,d) AS3 (a,b,c,d) + +/* Indicate that jump tables go in the text section. This is + necessary when compiling PIC code. */ +#define JUMP_TABLES_IN_TEXT_SECTION + +/* override the exception table positioning */ +#define EXCEPTION_SECTION_FUNCTION \ +do { \ + if (TARGET_ELF) { \ + named_section (NULL_TREE, ".gcc_except_table"); \ + } else { \ + if (flag_pic) \ + data_section (); \ + else \ + readonly_data_section (); \ + } \ +} while (0); + +/* supply our own hook for calling __main() from main() */ +#define GEN_CALL__MAIN \ + do { \ + if (!(TARGET_ELF)) \ + emit_library_call (gen_rtx (SYMBOL_REF, Pmode, NAME__MAIN), 0, \ + VOIDmode, 0); \ + } while (0) + +/* Use dollar signs in special g++ assembler names. */ +#undef NO_DOLLAR_IN_LABEL + +/* Map i386 registers to the numbers dwarf expects. Of course this is different + from what stabs expects. */ + +#undef DWARF_DBX_REGISTER_NUMBER +#define DWARF_DBX_REGISTER_NUMBER(n) \ +((n) == 0 ? 0 \ + : (n) == 1 ? 2 \ + : (n) == 2 ? 1 \ + : (n) == 3 ? 3 \ + : (n) == 4 ? 6 \ + : (n) == 5 ? 7 \ + : (n) == 6 ? 5 \ + : (n) == 7 ? 4 \ + : ((n) >= FIRST_STACK_REG && (n) <= LAST_STACK_REG) ? (n)+3 \ + : (-1)) + +/* Now what stabs expects in the register. */ +#define STABS_DBX_REGISTER_NUMBER(n) \ +((n) == 0 ? 0 : \ + (n) == 1 ? 2 : \ + (n) == 2 ? 1 : \ + (n) == 3 ? 3 : \ + (n) == 4 ? 6 : \ + (n) == 5 ? 7 : \ + (n) == 6 ? 4 : \ + (n) == 7 ? 5 : \ + (n) + 4) + +#undef DBX_REGISTER_NUMBER +#define DBX_REGISTER_NUMBER(n) ((write_symbols == DWARF_DEBUG) \ + ? DWARF_DBX_REGISTER_NUMBER(n) \ + : STABS_DBX_REGISTER_NUMBER(n)) + +/* Tell final.c that we don't need a label passed to mcount. */ +#define NO_PROFILE_DATA + +/* Output assembler code to FILE to increment profiler label # LABELNO + for profiling a function entry. */ +/* Redefine this to not pass an unused label in %edx. */ + +#undef FUNCTION_PROFILER +#define FUNCTION_PROFILER(FILE, LABELNO) \ +{ \ + if (flag_pic) \ + fprintf (FILE, "\tcall *%s@GOT(%%ebx)\n", \ + TARGET_AOUT ? "mcount" : ".mcount"); \ + else \ + fprintf (FILE, "\tcall %s\n", TARGET_AOUT ? "mcount" : ".mcount"); \ +} + +#define FUNCTION_PROFILER_EPILOGUE(FILE) \ +{ \ + if (TARGET_PROFILER_EPILOGUE) \ + { \ + if (flag_pic) \ + fprintf (FILE, "\tcall *%s@GOT(%%ebx)\n", \ + TARGET_AOUT ? "mexitcount" : ".mexitcount"); \ + else \ + fprintf (FILE, "\tcall %s\n", \ + TARGET_AOUT ? "mexitcount" : ".mexitcount"); \ + } \ +} + +#undef SIZE_TYPE +#define SIZE_TYPE "unsigned int" + +#undef PTRDIFF_TYPE +#define PTRDIFF_TYPE "int" + +#undef WCHAR_TYPE +#define WCHAR_TYPE "int" + +#define WCHAR_UNSIGNED 0 + +#undef WCHAR_TYPE_SIZE +#define WCHAR_TYPE_SIZE BITS_PER_WORD + +/* FREEBSD_NATIVE is defined when gcc is integrated into the FreeBSD + source tree so it can be configured appropriately without using + the GNU configure/build mechanism. */ + +#ifdef FREEBSD_NATIVE + +/* Look for the include files in the system-defined places. */ + +#define GPLUSPLUS_INCLUDE_DIR "/usr/include/g++" + +#define GCC_INCLUDE_DIR "/usr/include" + +/* FreeBSD has GCC_INCLUDE_DIR first. */ +#define INCLUDE_DEFAULTS \ + { \ + { GCC_INCLUDE_DIR, 0, 0 }, \ + { GPLUSPLUS_INCLUDE_DIR, 1, 1 }, \ + { 0, 0, 0 } \ + } + +/* Under FreeBSD, the normal location of the compiler back ends is the + /usr/libexec directory. */ + +#define STANDARD_EXEC_PREFIX "/usr/libexec/" + +/* Under FreeBSD, the normal location of the various *crt*.o files is the + /usr/lib directory. */ + +#define STANDARD_STARTFILE_PREFIX "/usr/lib/" + +/* On FreeBSD, gcc is called 'cc' */ +#define GCC_NAME "cc" + +/* FreeBSD is 4.4BSD derived */ +#define bsd4_4 + +#endif /* FREEBSD_NATIVE */ + +#undef CPP_PREDEFINES +#define CPP_PREDEFINES "-Dunix -Di386 -D__FreeBSD__ -Asystem(unix) -Asystem(FreeBSD) -Acpu(i386) -Amachine(i386)" + +#undef CPP_SPEC +#if TARGET_CPU_DEFAULT == 2 +#define CPP_SPEC "\ +%{!maout: -D__ELF__} \ +%{munderscores: -D__UNDERSCORES__} \ +%{maout: %{!mno-underscores: -D__UNDERSCORES__}} \ +%{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} %{!m386:-D__i486__}" +#else +#define CPP_SPEC "\ +%{!maout: -D__ELF__} \ +%{munderscores: -D__UNDERSCORES__} \ +%{maout: %{!mno-underscores: -D__UNDERSCORES__}} \ +%{fPIC:-D__PIC__ -D__pic__} %{fpic:-D__PIC__ -D__pic__} %{m486:-D__i486__}" +#endif + +#undef CC1_SPEC +#define CC1_SPEC "\ +%{gline:%{!g:%{!g0:%{!g1:%{!g2: -g1}}}}} \ +%{maout: %{!mno-underscores: %{!munderscores: -munderscores }}}" + +#undef ASM_SPEC +#define ASM_SPEC "%{v*: -v} %{maout: %{fpic:-k} %{fPIC:-k}}" + +/* Like the default, except no -lg, and no -p. */ +#undef LIB_SPEC +#define LIB_SPEC "%{!shared:%{!pg:%{!pthread:%{!kthread:-lc}%{kthread:-lpthread -lc}}%{pthread:-lc_r}}%{pg:%{!pthread:%{!kthread:-lc_p}%{kthread:-lpthread_p -lc_p}}%{pthread:-lc_r_p}}}" + +/* Let gcc locate this for us according to the -m rules */ +#undef LIBGCC_SPEC +#define LIBGCC_SPEC "%{!shared:libgcc.a%s}" + +/* Provide a LINK_SPEC appropriate for FreeBSD. Here we provide support + for the special GCC options -static and -shared, which allow us to + link things in one of these three modes by applying the appropriate + combinations of options at link-time. We like to support here for + as many of the other GNU linker options as possible. But I don't + have the time to search for those flags. I am sure how to add + support for -soname shared_object_name. H.J. + + When the -shared link option is used a final link is not being + done. */ + +#undef LINK_SPEC +#define LINK_SPEC "\ + %{p:%e`-p' not supported; use `-pg' and gprof(1)} \ + %{maout: %{shared:-Bshareable} \ + %{!shared:%{!nostdlib:%{!r:%{!e*:-e start}}} -dc -dp %{static:-Bstatic} \ + %{pg:-Bstatic} %{Z}} \ + %{assert*} %{R*}} \ + %{!maout: \ + -m elf_i386 \ + %{Wl,*:%*} \ + %{assert*} %{R*} %{rpath*} %{defsym*} \ + %{shared:-Bshareable %{h*} %{soname*}} \ + %{symbolic:-Bsymbolic} \ + %{!shared: \ + %{!static: \ + %{rdynamic: -export-dynamic} \ + %{!dynamic-linker: -dynamic-linker /usr/libexec/ld-elf.so.1}} \ + %{static:-Bstatic}}}" + +/* Get perform_* macros to build libgcc.a. */ +#include "i386/perform.h" + +#undef STARTFILE_SPEC +#define STARTFILE_SPEC "\ + %{maout: %{shared:c++rt0.o%s} \ + %{!shared:%{pg:gcrt0.o%s}%{!pg:%{static:scrt0.o%s}%{!static:crt0.o%s}}}} \ + %{!maout: %{!shared: \ + %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} %{!p:crt1.o%s}}} \ + crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}}" + +#undef ENDFILE_SPEC +#define ENDFILE_SPEC \ + "%{!maout: %{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s}" + +/* This goes away when the math emulator is fixed. */ +#undef TARGET_DEFAULT +#define TARGET_DEFAULT (MASK_NO_FANCY_MATH_387 | 0301) + +#define HAVE_ATEXIT +#define HAVE_PUTENV + +/* to assist building libgcc2.c */ +#ifndef __ELF__ +#undef OBJECT_FORMAT_ELF +#endif + +/* Defined to the name of the compiler; if using a cross compiler, the + Makefile should compile this file with the proper name + (e.g., "i386-aout-gcc"). */ +#define GCC_NAME "gcc27" diff --git a/lang/gcc27/files/patch-Makefile.in b/lang/gcc27/files/patch-Makefile.in new file mode 100644 index 00000000000..2b2a1260148 --- /dev/null +++ b/lang/gcc27/files/patch-Makefile.in @@ -0,0 +1,70 @@ +--- Makefile.in.orig Fri Aug 8 08:58:17 1997 ++++ Makefile.in Wed Mar 22 10:36:29 2000 +@@ -196,6 +196,10 @@ + # Directory in which the compiler finds executables, libraries, etc. + libsubdir = $(libdir)/gcc-lib/$(target)/$(version) + # Directory in which the compiler finds g++ includes. ++# ++# XXX: Note that the below is blown away by ``configure''. ++# Great GNU idiots, just great documentaton. ++# + gxx_include_dir= $(libdir)/g++-include + # Directory to search for site-specific includes. + includedir = $(local_prefix)/include +@@ -245,7 +249,7 @@ + # -g1 causes output of debug info only for file-scope entities. + # we use this here because that should be enough, and also + # so that -g1 will be tested. +-LIBGCC2_CFLAGS = -O2 $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) $(TARGET_LIBGCC2_CFLAGS) -g1 ++LIBGCC2_CFLAGS = -O2 $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) $(TARGET_LIBGCC2_CFLAGS) -g1 -g0 + + # Additional options to use when compiling libgcc2.a. + # Some targets override this to -Iinclude +@@ -746,6 +750,7 @@ + libgcc1.null: $(GCC_PASSES) + echo "__foo () {}" > dummy.c + $(GCC_FOR_TARGET) $(GCC_CFLAGS) -c dummy.c ++ ld -r -x dummy$(objext); mv a.out dummy$(objext) + $(OLDAR) $(OLDAR_FLAGS) libgcc1.null dummy$(objext) + rm -f dummy$(objext) dummy.c + +@@ -777,6 +782,7 @@ + $(OLDCC) $(CCLIBFLAGS) $(INCLUDES) -c -DL$${name} $(srcdir)/libgcc1.c; \ + if [ $$? -eq 0 ] ; then true; else exit 1; fi; \ + mv libgcc1$(objext) $${name}$(objext); \ ++ ld -r -x $${name}$(objext); mv a.out $${name}$(objext); \ + $(OLDAR) $(OLDAR_FLAGS) tmplibgcc1.a $${name}$(objext); \ + rm -f $${name}$(objext); \ + done +@@ -796,6 +802,7 @@ + else true; fi; \ + $(OLDCC) $(CCLIBFLAGS) $(INCLUDES) -c $${file}; \ + if [ $$? -eq 0 ] ; then true; else exit 1; fi; \ ++ ld -r -x $${name}$(objext); mv a.out $${name}$(objext); \ + $(OLDAR) $(OLDAR_FLAGS) tmplibgcc1.a $${name}$(objext); \ + if [ $$? -eq 0 ] ; then true; else exit 1; fi; \ + rm -f $${name}.s $${name}$(objext); \ +@@ -825,6 +832,7 @@ + $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(INCLUDES) -c -DL$${name} libgcc1.S; \ + if [ $$? -eq 0 ] ; then true; else exit 1; fi; \ + mv libgcc1$(objext) $${name}$(objext); \ ++ ld -r -x $${name}$(objext); mv a.out $${name}$(objext); \ + $(AR) $(AR_FLAGS) tmplibgcc1.a $${name}$(objext); \ + rm -f $${name}$(objext); \ + done +@@ -875,6 +883,7 @@ + $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(INCLUDES) -c -DL$${name} \ + $(srcdir)/libgcc2.c -o $${name}$(objext); \ + if [ $$? -eq 0 ] ; then true; else exit 1; fi; \ ++ ld -r -x $${name}$(objext); mv a.out $${name}$(objext); \ + $(AR) $(AR_FLAGS) tmplibgcc2.a $${name}$(objext); \ + rm -f $${name}$(objext); \ + done +@@ -895,6 +904,7 @@ + else true; fi; \ + $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(INCLUDES) -c $${file}; \ + if [ $$? -eq 0 ] ; then true; else exit 1; fi; \ ++ ld -r -x $${oname}$(objext); mv a.out $${oname}$(objext); \ + $(AR) $(AR_FLAGS) tmplibgcc2.a $${oname}$(objext); \ + rm -f $${name}.s $${oname}$(objext); \ + else true; \ diff --git a/lang/gcc27/files/patch-c-common.c b/lang/gcc27/files/patch-c-common.c new file mode 100644 index 00000000000..056160b10e3 --- /dev/null +++ b/lang/gcc27/files/patch-c-common.c @@ -0,0 +1,226 @@ +--- c-common.c.orig Thu Oct 19 16:18:29 1995 ++++ c-common.c Mon Mar 20 13:29:10 2000 +@@ -536,6 +536,7 @@ + int format_num; + int first_arg_num; + int is_scan; ++ int null_format_ok; + tree argument; + int arg_num; + +@@ -550,15 +551,30 @@ + && (!strcmp (IDENTIFIER_POINTER (format_type), "printf") + || !strcmp (IDENTIFIER_POINTER (format_type), + "__printf__"))) +- is_scan = 0; ++ { ++ is_scan = 0; ++ null_format_ok = 0; ++ } ++ else if (TREE_CODE (format_type) == IDENTIFIER_NODE ++ && (!strcmp (IDENTIFIER_POINTER (format_type), "printf0") ++ || !strcmp (IDENTIFIER_POINTER (format_type), ++ "__printf0__"))) ++ { ++ is_scan = 0; ++ null_format_ok = 1; ++ } + else if (TREE_CODE (format_type) == IDENTIFIER_NODE + && (!strcmp (IDENTIFIER_POINTER (format_type), "scanf") + || !strcmp (IDENTIFIER_POINTER (format_type), + "__scanf__"))) +- is_scan = 1; ++ { ++ is_scan = 1; ++ null_format_ok = 0; ++ } + else + { +- error ("unrecognized format specifier for `%s'"); ++ error_with_decl (decl, ++ "unrecognized format specifier for `%s'"); + continue; + } + +@@ -625,7 +641,8 @@ + + record_function_format (DECL_NAME (decl), + DECL_ASSEMBLER_NAME (decl), +- is_scan, format_num, first_arg_num); ++ is_scan, null_format_ok, format_num, ++ first_arg_num); + break; + } + +@@ -696,6 +713,11 @@ + } format_char_info; + + static format_char_info print_char_table[] = { ++/* FreeBSD kernel extensions. */ ++ { "D", 1, T_C, NULL, NULL, NULL, NULL, "-wp" }, ++ { "b", 1, T_C, NULL, NULL, NULL, NULL, "-wp" }, ++ { "rz", 0, T_I, T_I, T_L, NULL, NULL, "-wp0 +#" }, ++#define unextended_print_char_table (print_char_table + 3) + { "di", 0, T_I, T_I, T_L, T_LL, T_LL, "-wp0 +" }, + { "oxX", 0, T_UI, T_UI, T_UL, T_ULL, T_ULL, "-wp0#" }, + { "u", 0, T_UI, T_UI, T_UL, T_ULL, T_ULL, "-wp0" }, +@@ -730,6 +752,7 @@ + tree name; /* identifier such as "printf" */ + tree assembler_name; /* optional mangled identifier (for C++) */ + int is_scan; /* TRUE if *scanf */ ++ int null_format_ok; /* TRUE if the format string may be NULL */ + int format_num; /* number of format argument */ + int first_arg_num; /* number of first arg (zero for varargs) */ + } function_format_info; +@@ -748,15 +771,15 @@ + void + init_function_format_info () + { +- record_function_format (get_identifier ("printf"), NULL_TREE, 0, 1, 2); +- record_function_format (get_identifier ("fprintf"), NULL_TREE, 0, 2, 3); +- record_function_format (get_identifier ("sprintf"), NULL_TREE, 0, 2, 3); +- record_function_format (get_identifier ("scanf"), NULL_TREE, 1, 1, 2); +- record_function_format (get_identifier ("fscanf"), NULL_TREE, 1, 2, 3); +- record_function_format (get_identifier ("sscanf"), NULL_TREE, 1, 2, 3); +- record_function_format (get_identifier ("vprintf"), NULL_TREE, 0, 1, 0); +- record_function_format (get_identifier ("vfprintf"), NULL_TREE, 0, 2, 0); +- record_function_format (get_identifier ("vsprintf"), NULL_TREE, 0, 2, 0); ++ record_function_format (get_identifier ("printf"), NULL_TREE, 0, 0, 1, 2); ++ record_function_format (get_identifier ("fprintf"), NULL_TREE, 0, 0, 2, 3); ++ record_function_format (get_identifier ("sprintf"), NULL_TREE, 0, 0, 2, 3); ++ record_function_format (get_identifier ("scanf"), NULL_TREE, 1, 0, 1, 2); ++ record_function_format (get_identifier ("fscanf"), NULL_TREE, 1, 0, 2, 3); ++ record_function_format (get_identifier ("sscanf"), NULL_TREE, 1, 0, 2, 3); ++ record_function_format (get_identifier ("vprintf"), NULL_TREE, 0, 0, 1, 0); ++ record_function_format (get_identifier ("vfprintf"), NULL_TREE, 0, 0, 2, 0); ++ record_function_format (get_identifier ("vsprintf"), NULL_TREE, 0, 0, 2, 0); + } + + /* Record information for argument format checking. FUNCTION_IDENT is +@@ -769,11 +792,12 @@ + (e.g. for varargs such as vfprintf). */ + + void +-record_function_format (name, assembler_name, is_scan, ++record_function_format (name, assembler_name, is_scan, null_format_ok, + format_num, first_arg_num) + tree name; + tree assembler_name; + int is_scan; ++ int null_format_ok; + int format_num; + int first_arg_num; + { +@@ -797,6 +821,7 @@ + } + + info->is_scan = is_scan; ++ info->null_format_ok = null_format_ok; + info->format_num = format_num; + info->first_arg_num = first_arg_num; + } +@@ -876,7 +901,8 @@ + format_tree = TREE_OPERAND (format_tree, 0); /* strip coercion */ + if (integer_zerop (format_tree)) + { +- warning ("null format string"); ++ if (!info->null_format_ok) ++ warning ("null format string"); + return; + } + if (TREE_CODE (format_tree) != ADDR_EXPR) +@@ -1050,11 +1076,12 @@ + cur_param = TREE_VALUE (params); + params = TREE_CHAIN (params); + ++arg_num; ++ /* XXX should we allow unsigned ints here? */ + if (TYPE_MAIN_VARIANT (TREE_TYPE (cur_param)) + != integer_type_node) + { + sprintf (message, +- "field width is not type int (arg %d)", ++ "precision is not type int (arg %d)", + arg_num); + warning (message); + } +@@ -1067,6 +1094,56 @@ + } + } + } ++ if (*format_chars == 'b') ++ { ++ /* There should be an int arg to control the string arg. */ ++ if (params == 0) ++ { ++ warning (tfaff); ++ return; ++ } ++ if (info->first_arg_num != 0) ++ { ++ cur_param = TREE_VALUE (params); ++ params = TREE_CHAIN (params); ++ ++arg_num; ++ if ((TYPE_MAIN_VARIANT (TREE_TYPE (cur_param)) ++ != integer_type_node) ++ && ++ (TYPE_MAIN_VARIANT (TREE_TYPE (cur_param)) ++ != unsigned_type_node)) ++ { ++ sprintf (message, "bitmap is not type int (arg %d)", ++ arg_num); ++ warning (message); ++ } ++ } ++ } ++ if (*format_chars == 'D') ++ { ++ /* There should be an unsigned char * arg before the string arg. */ ++ if (params == 0) ++ { ++ warning (tfaff); ++ return; ++ } ++ if (info->first_arg_num != 0) ++ { ++ cur_param = TREE_VALUE (params); ++ params = TREE_CHAIN (params); ++ ++arg_num; ++ cur_type = TREE_TYPE (cur_param); ++ if (TREE_CODE (cur_type) != POINTER_TYPE ++ || TYPE_MAIN_VARIANT (TREE_TYPE (cur_type)) ++ != unsigned_char_type_node) ++ { ++ sprintf (message, ++ "ethernet address is not type unsigned char * (arg %d)", ++ arg_num); ++ warning (message); ++ } ++ } ++ } + if (*format_chars == 'h' || *format_chars == 'l' || *format_chars == 'q' || + *format_chars == 'L') + length_char = *format_chars++; +@@ -1094,7 +1171,9 @@ + continue; + } + format_chars++; +- fci = info->is_scan ? scan_char_table : print_char_table; ++ fci = info->is_scan ? scan_char_table ++ : flag_format_extensions ? print_char_table ++ : unextended_print_char_table; + while (fci->format_chars != 0 + && index (fci->format_chars, format_char) == 0) + ++fci; +@@ -2048,6 +2127,12 @@ + return real_zerop (expr) ? boolean_false_node : boolean_true_node; + + case ADDR_EXPR: ++ /* If we are taking the address of a external decl, it might be zero ++ if it is weak, so we cannot optimize. */ ++ if (TREE_CODE_CLASS (TREE_CODE (TREE_OPERAND (expr, 0))) == 'd' ++ && DECL_EXTERNAL (TREE_OPERAND (expr, 0))) ++ break; ++ + if (TREE_SIDE_EFFECTS (TREE_OPERAND (expr, 0))) + return build (COMPOUND_EXPR, boolean_type_node, + TREE_OPERAND (expr, 0), boolean_true_node); diff --git a/lang/gcc27/files/patch-c-tree.h b/lang/gcc27/files/patch-c-tree.h new file mode 100644 index 00000000000..b4ef9b12956 --- /dev/null +++ b/lang/gcc27/files/patch-c-tree.h @@ -0,0 +1,11 @@ +--- c-tree.h.orig Thu Jun 15 04:13:40 1995 ++++ c-tree.h Mon Mar 20 13:29:10 2000 +@@ -159,7 +159,7 @@ + extern void declare_function_name PROTO((void)); + extern void decl_attributes PROTO((tree, tree, tree)); + extern void init_function_format_info PROTO((void)); +-extern void record_function_format PROTO((tree, tree, int, int, int)); ++extern void record_function_format PROTO((tree, tree, int, int, int, int)); + extern void check_function_format PROTO((tree, tree, tree)); + /* Print an error message for invalid operands to arith operation CODE. + NOP_EXPR is used as a special case (see truthvalue_conversion). */ diff --git a/lang/gcc27/files/patch-cccp.1 b/lang/gcc27/files/patch-cccp.1 new file mode 100644 index 00000000000..e11d1e2da9f --- /dev/null +++ b/lang/gcc27/files/patch-cccp.1 @@ -0,0 +1,33 @@ +--- cccp.1.orig Thu Mar 30 04:22:44 1995 ++++ cccp.1 Mon Mar 20 13:29:10 2000 +@@ -1,13 +1,13 @@ + .\" Copyright (c) 1991, 1992, 1993 Free Software Foundation \-*-Text-*- + .\" See section COPYING for conditions for redistribution +-.TH cpp 1 "30apr1993" "GNU Tools" "GNU Tools" ++.TH cpp 1 "April 30, 1993" "FreeBSD" "GNU Tools" + .SH NAME +-cccp, cpp \- The GNU C-Compatible Compiler Preprocessor. ++cpp \- The GNU C-Compatible Compiler Preprocessor. + .SH SYNOPSIS + .hy 0 + .na + .TP +-.B cccp ++.B cpp + .RB "[\|" \-$ "\|]" + .RB "[\|" \-A \c + .I predicate\c +@@ -142,13 +142,6 @@ + Most often when you use the C preprocessor you will not have to invoke it + explicitly: the C compiler will do so automatically. However, the + preprocessor is sometimes useful individually. +- +-When you call the preprocessor individually, either name +-(\c +-.B cpp\c +-\& or \c +-.B cccp\c +-\&) will do\(em\&they are completely synonymous. + + The C preprocessor expects two file names as arguments, \c + .I infile\c diff --git a/lang/gcc27/files/patch-cccp.c b/lang/gcc27/files/patch-cccp.c new file mode 100644 index 00000000000..1265960ce5c --- /dev/null +++ b/lang/gcc27/files/patch-cccp.c @@ -0,0 +1,30 @@ +--- cccp.c.orig Thu Oct 26 15:07:26 1995 ++++ cccp.c Mon Mar 20 13:29:10 2000 +@@ -4923,6 +4923,7 @@ + register char *from; + char *p, *dir; + ++#ifndef FREEBSD_NATIVE + if (searchptr && ! searchptr->got_name_map) + { + searchptr->name_map = read_name_map (searchptr->fname +@@ -4945,6 +4946,7 @@ + } + } + } ++#endif + + /* Try to find a mapping file for the particular directory we are + looking in. Thus #include <sys/types.h> will look up sys/types.h +@@ -4981,9 +4983,11 @@ + dir[p - filename] = '\0'; + from = p + 1; + } ++#ifndef FREEBSD_NATIVE + for (map = read_name_map (dir); map; map = map->map_next) + if (! strcmp (map->map_from, from)) + return open (map->map_to, O_RDONLY, 0666); ++#endif + + return open (filename, O_RDONLY, 0666); + } diff --git a/lang/gcc27/files/patch-combine.c b/lang/gcc27/files/patch-combine.c new file mode 100644 index 00000000000..769a4a385f6 --- /dev/null +++ b/lang/gcc27/files/patch-combine.c @@ -0,0 +1,154 @@ +--- combine.c.orig Sun Nov 26 11:32:07 1995 ++++ combine.c Mon Mar 20 13:29:10 2000 +@@ -440,7 +440,7 @@ + static int use_crosses_set_p PROTO((rtx, int)); + static void reg_dead_at_p_1 PROTO((rtx, rtx)); + static int reg_dead_at_p PROTO((rtx, rtx)); +-static void move_deaths PROTO((rtx, int, rtx, rtx *)); ++static void move_deaths PROTO((rtx, rtx, int, rtx, rtx *)); + static int reg_bitfield_target_p PROTO((rtx, rtx)); + static void distribute_notes PROTO((rtx, rtx, rtx, rtx, rtx, rtx)); + static void distribute_links PROTO((rtx)); +@@ -2077,8 +2077,38 @@ + undobuf.other_insn, NULL_RTX, NULL_RTX, NULL_RTX); + } + +- /* We now know that we can do this combination. Merge the insns and +- update the status of registers and LOG_LINKS. */ ++ /* We now know that we can do this combination. */ ++ ++ /* Earlier we did all the checks required to determine if we could ++ logically combine three insns into one. Then we determined that ++ the machine description would not let us do it in one, but would ++ let us do it in two. Thus when generating two insns, they must, ++ in general, be adjacent -- one logical instruction if you will. ++ ++ We could be complicated and figure out some rules that would allow ++ us to not move the insn, but it seems likely that the scheduler will ++ do as good with no muss. */ ++ ++ if (newi2pat && NEXT_INSN (i2) != i3) ++ { ++ rtx n = NEXT_INSN(i2); ++ int c = INSN_CUID(i2); ++ ++ /* Move the instruction */ ++ reorder_insns(i2, i2, PREV_INSN (i3)); ++ ++ /* Update the CUID map */ ++ while (1) ++ { ++ uid_cuid[INSN_UID (n)] = c; ++ if (n == i2) ++ break; ++ n = NEXT_INSN(n); ++ ++c; ++ } ++ } ++ ++ /* Merge the insns and update the status of registers and LOG_LINKS. */ + + { + rtx i3notes, i2notes, i1notes = 0; +@@ -2186,11 +2216,18 @@ + } + + /* Get death notes for everything that is now used in either I3 or +- I2 and used to die in a previous insn. */ ++ I2 and used to die in a previous insn. If we built two new ++ patterns, move from i1 to i2 then i2 to i3 so that we get the ++ proper movement on registers that i2 modifies. */ + +- move_deaths (newpat, i1 ? INSN_CUID (i1) : INSN_CUID (i2), i3, &midnotes); + if (newi2pat) +- move_deaths (newi2pat, INSN_CUID (i1), i2, &midnotes); ++ { ++ move_deaths (newi2pat, NULL_RTX, INSN_CUID (i1), i2, &midnotes); ++ move_deaths (newpat, newi2pat, INSN_CUID (i1), i3, &midnotes); ++ } ++ else ++ move_deaths (newpat, NULL_RTX, i1 ? INSN_CUID (i1) : INSN_CUID (i2), ++ i3, &midnotes); + + /* Distribute all the LOG_LINKS and REG_NOTES from I1, I2, and I3. */ + if (i3notes) +@@ -10372,12 +10409,15 @@ + TO_INSN (exclusive), put a REG_DEAD note for that register in the + list headed by PNOTES. + ++ That said, don't move registers killed by maybe_kill_insn. ++ + This is done when X is being merged by combination into TO_INSN. These + notes will then be distributed as needed. */ + + static void +-move_deaths (x, from_cuid, to_insn, pnotes) ++move_deaths (x, maybe_kill_insn, from_cuid, to_insn, pnotes) + rtx x; ++ rtx maybe_kill_insn; + int from_cuid; + rtx to_insn; + rtx *pnotes; +@@ -10392,6 +10432,11 @@ + register rtx where_dead = reg_last_death[regno]; + register rtx before_dead, after_dead; + ++ /* Don't move the register if it gets killed in between from and to */ ++ if (maybe_kill_insn && reg_set_p (x, maybe_kill_insn) ++ && !reg_referenced_p (x, maybe_kill_insn)) ++ return; ++ + /* WHERE_DEAD could be a USE insn made by combine, so first we + make sure that we have insns with valid INSN_CUID values. */ + before_dead = where_dead; +@@ -10449,7 +10494,7 @@ + + for (i = regno + 1; i < ourend; i++) + move_deaths (gen_rtx (REG, reg_raw_mode[i], i), +- from_cuid, to_insn, &oldnotes); ++ maybe_kill_insn, from_cuid, to_insn, &oldnotes); + } + + if (note != 0 && GET_MODE (XEXP (note, 0)) == GET_MODE (x)) +@@ -10470,7 +10515,7 @@ + { + rtx dest = SET_DEST (x); + +- move_deaths (SET_SRC (x), from_cuid, to_insn, pnotes); ++ move_deaths (SET_SRC (x), maybe_kill_insn, from_cuid, to_insn, pnotes); + + /* In the case of a ZERO_EXTRACT, a STRICT_LOW_PART, or a SUBREG + that accesses one word of a multi-word item, some +@@ -10485,7 +10530,7 @@ + == ((GET_MODE_SIZE (GET_MODE (SUBREG_REG (dest))) + + UNITS_PER_WORD - 1) / UNITS_PER_WORD)))) + { +- move_deaths (dest, from_cuid, to_insn, pnotes); ++ move_deaths (dest, maybe_kill_insn, from_cuid, to_insn, pnotes); + return; + } + +@@ -10499,7 +10544,8 @@ + being replaced so the old value is not used in this insn. */ + + if (GET_CODE (dest) == MEM) +- move_deaths (XEXP (dest, 0), from_cuid, to_insn, pnotes); ++ move_deaths (XEXP (dest, 0), maybe_kill_insn, from_cuid, ++ to_insn, pnotes); + return; + } + +@@ -10515,10 +10561,11 @@ + { + register int j; + for (j = XVECLEN (x, i) - 1; j >= 0; j--) +- move_deaths (XVECEXP (x, i, j), from_cuid, to_insn, pnotes); ++ move_deaths (XVECEXP (x, i, j), maybe_kill_insn, from_cuid, ++ to_insn, pnotes); + } + else if (fmt[i] == 'e') +- move_deaths (XEXP (x, i), from_cuid, to_insn, pnotes); ++ move_deaths (XEXP (x, i), maybe_kill_insn, from_cuid, to_insn, pnotes); + } + } + diff --git a/lang/gcc27/files/patch-configure b/lang/gcc27/files/patch-configure new file mode 100644 index 00000000000..e4e626e7c23 --- /dev/null +++ b/lang/gcc27/files/patch-configure @@ -0,0 +1,44 @@ +--- configure.orig Wed Aug 13 10:23:24 1997 ++++ configure Wed Mar 22 10:37:04 2000 +@@ -80,7 +80,7 @@ + exec_prefix='$(prefix)' + # + # The default g++ include directory is $(libdir)/g++-include. +-gxx_include_dir='$(libdir)/g++-include' ++gxx_include_dir='$(libsubdir)/g++-include' + + # Default --program-transform-name to nothing. + program_transform_name= +@@ -931,9 +931,31 @@ + # Next line turned off because both 386BSD and BSD/386 use GNU ld. + # use_collect2=yes + ;; +- i[3456]86-*-freebsd*) ++ alpha-*-freebsd*) ++ cpu_type=alpha ++ tm_file=alpha/freebsd-elf.h ++ xm_file=alpha/xm-freebsd.h ++ # On FreeBSD, the headers are already ok. ++ fixincludes=Makefile.in ++ xmake_file=alpha/x-freebsd ++ gas=yes ++ gnu_ld=yes ++ stabs=yes ++ ;; ++ i[345]86-*-freebsd*) + cpu_type=i386 + tm_file=i386/freebsd.h ++ xm_file=i386/xm-freebsd.h ++ # On FreeBSD, the headers are already ok. ++ fixincludes=Makefile.in ++ xmake_file=i386/x-freebsd ++ gas=yes ++ gnu_ld=yes ++ stabs=yes ++ ;; ++ i[3456]86-*-freebsdaout*) ++ cpu_type=i386 ++ tm_file=i386/freebsd-aout.h + xm_file=i386/xm-freebsd.h + # On FreeBSD, the headers are already ok. + fixincludes=Makefile.in diff --git a/lang/gcc27/files/patch-cse.c b/lang/gcc27/files/patch-cse.c new file mode 100644 index 00000000000..6999c620c32 --- /dev/null +++ b/lang/gcc27/files/patch-cse.c @@ -0,0 +1,20 @@ +--- cse.c.orig Fri Aug 8 08:30:25 1997 ++++ cse.c Mon Mar 20 13:29:11 2000 +@@ -7567,10 +7567,15 @@ + and that's just as good as a structure element + in implying that we need not invalidate scalar variables. + However, we must allow QImode aliasing of scalars, because the +- ANSI C standard allows character pointers to alias anything. */ ++ ANSI C standard allows character pointers to alias anything. ++ We must also allow AND addresses, because they may generate ++ accesses outside the object being referenced. This is used to ++ generate aligned addresses from unaligned adresses, e.g., the ++ Alpha storeqi_unaligned pattern. */ + if (! ((MEM_IN_STRUCT_P (written) + || GET_CODE (XEXP (written, 0)) == PLUS) +- && GET_MODE (written) != QImode)) ++ && GET_MODE (written) != QImode ++ && GET_CODE (XEXP (written, 0)) != AND)) + writes_ptr->all = 1; + writes_ptr->nonscalar = 1; + } diff --git a/lang/gcc27/files/patch-dbxout.c b/lang/gcc27/files/patch-dbxout.c new file mode 100644 index 00000000000..f953388faf1 --- /dev/null +++ b/lang/gcc27/files/patch-dbxout.c @@ -0,0 +1,26 @@ +--- dbxout.c.orig Thu Jun 15 04:27:10 1995 ++++ dbxout.c Mon Mar 20 13:29:11 2000 +@@ -2494,6 +2494,11 @@ + { + #ifdef DBX_FUNCTION_FIRST + dbxout_really_begin_function (decl); ++#else ++#ifdef DBX_CHECK_FUNCTION_FIRST ++ if (DBX_CHECK_FUNCTION_FIRST) ++ dbxout_really_begin_function (decl); ++#endif + #endif + } + +@@ -2509,6 +2514,11 @@ + { + #ifndef DBX_FUNCTION_FIRST + dbxout_really_begin_function (decl); ++#else ++#ifdef DBX_CHECK_FUNCTION_FIRST ++ if (!(DBX_CHECK_FUNCTION_FIRST)) ++ dbxout_really_begin_function (decl); ++#endif + #endif + dbxout_block (DECL_INITIAL (decl), 0, DECL_ARGUMENTS (decl)); + #ifdef DBX_OUTPUT_FUNCTION_END diff --git a/lang/gcc27/files/patch-decl.c b/lang/gcc27/files/patch-decl.c new file mode 100644 index 00000000000..371a50eefc1 --- /dev/null +++ b/lang/gcc27/files/patch-decl.c @@ -0,0 +1,35 @@ +--- cp/decl.c.orig Mon Oct 23 15:25:44 1995 ++++ cp/decl.c Mon Mar 20 13:29:12 2000 +@@ -1486,7 +1486,7 @@ + tree t; + int i = 0, len; + fprintf (stderr, " blocks="); +- fprintf (stderr, HOST_PTR_PRINTF, lvl->blocks); ++ fprintf (stderr, HOST_PTR_PRINTF, (void *) lvl->blocks); + fprintf (stderr, " n_incomplete=%d parm_flag=%d keep=%d", + list_length (lvl->incomplete), lvl->parm_flag, lvl->keep); + if (lvl->tag_transparent) +@@ -1609,7 +1609,7 @@ + for (level = stack; level != global_binding_level; level = level->level_chain) + { + fprintf (stderr, "binding level "); +- fprintf (stderr, HOST_PTR_PRINTF, level); ++ fprintf (stderr, HOST_PTR_PRINTF, (void *) level); + fprintf (stderr, "\n"); + print_binding_level (level); + } +@@ -1620,11 +1620,11 @@ + { + struct binding_level *b; + fprintf (stderr, "current_binding_level="); +- fprintf (stderr, HOST_PTR_PRINTF, current_binding_level); ++ fprintf (stderr, HOST_PTR_PRINTF, (void *) current_binding_level); + fprintf (stderr, "\nclass_binding_level="); +- fprintf (stderr, HOST_PTR_PRINTF, class_binding_level); ++ fprintf (stderr, HOST_PTR_PRINTF, (void *) class_binding_level); + fprintf (stderr, "\nglobal_binding_level="); +- fprintf (stderr, HOST_PTR_PRINTF, global_binding_level); ++ fprintf (stderr, HOST_PTR_PRINTF, (void *) global_binding_level); + fprintf (stderr, "\n"); + if (class_binding_level) + { diff --git a/lang/gcc27/files/patch-dwarfout.c b/lang/gcc27/files/patch-dwarfout.c new file mode 100644 index 00000000000..e34ad028983 --- /dev/null +++ b/lang/gcc27/files/patch-dwarfout.c @@ -0,0 +1,20 @@ +--- dwarfout.c.orig Thu Oct 26 18:40:07 1995 ++++ dwarfout.c Mon Mar 20 13:29:11 2000 +@@ -1095,7 +1095,7 @@ + byte |= 0x80; + fprintf (asm_out_file, "\t%s\t0x%x", ASM_BYTE_OP, (unsigned) byte); + if (flag_verbose_asm && value == 0) +- fprintf (asm_out_file, "\t%s ULEB128 number - value = %u", ++ fprintf (asm_out_file, "\t%s ULEB128 number - value = %lu", + ASM_COMMENT_START, orig_value); + fputc ('\n', asm_out_file); + } +@@ -1127,7 +1127,7 @@ + } + fprintf (asm_out_file, "\t%s\t0x%x", ASM_BYTE_OP, (unsigned) byte); + if (flag_verbose_asm && more == 0) +- fprintf (asm_out_file, "\t%s SLEB128 number - value = %d", ++ fprintf (asm_out_file, "\t%s SLEB128 number - value = %ld", + ASM_COMMENT_START, orig_value); + fputc ('\n', asm_out_file); + } diff --git a/lang/gcc27/files/patch-emit-rtl.c b/lang/gcc27/files/patch-emit-rtl.c new file mode 100644 index 00000000000..47fc792c8c7 --- /dev/null +++ b/lang/gcc27/files/patch-emit-rtl.c @@ -0,0 +1,37 @@ +--- emit-rtl.c.orig Thu Sep 14 13:09:30 1995 ++++ emit-rtl.c Mon Mar 20 13:29:11 2000 +@@ -159,6 +159,10 @@ + rtx static_chain_incoming_rtx; /* (REG:Pmode STATIC_CHAIN_INCOMING_REGNUM) */ + rtx pic_offset_table_rtx; /* (REG:Pmode PIC_OFFSET_TABLE_REGNUM) */ + ++/* This is used to implement __builtin_return_address for some machines. ++ See for instance the MIPS port. */ ++rtx return_address_pointer_rtx; /* (REG:Pmode RETURN_ADDRESS_POINTER_REGNUM) */ ++ + rtx virtual_incoming_args_rtx; /* (REG:Pmode VIRTUAL_INCOMING_ARGS_REGNUM) */ + rtx virtual_stack_vars_rtx; /* (REG:Pmode VIRTUAL_STACK_VARS_REGNUM) */ + rtx virtual_stack_dynamic_rtx; /* (REG:Pmode VIRTUAL_STACK_DYNAMIC_REGNUM) */ +@@ -345,6 +349,11 @@ + && ! reload_in_progress) + return arg_pointer_rtx; + #endif ++#ifdef RETURN_ADDRESS_POINTER_REGNUM ++ if (return_address_pointer_rtx && regno == RETURN_ADDRESS_POINTER_REGNUM ++ && mode == Pmode && ! reload_in_progress) ++ return return_address_pointer_rtx; ++#endif + if (stack_pointer_rtx && regno == STACK_POINTER_REGNUM && mode == Pmode + && ! reload_in_progress) + return stack_pointer_rtx; +@@ -3391,6 +3400,11 @@ + arg_pointer_rtx = stack_pointer_rtx; + else + arg_pointer_rtx = gen_rtx (REG, Pmode, ARG_POINTER_REGNUM); ++ ++#ifdef RETURN_ADDRESS_POINTER_REGNUM ++ return_address_pointer_rtx = gen_rtx (REG, Pmode, ++ RETURN_ADDRESS_POINTER_REGNUM); ++#endif + + /* Create the virtual registers. Do so here since the following objects + might reference them. */ diff --git a/lang/gcc27/files/patch-except.c b/lang/gcc27/files/patch-except.c new file mode 100644 index 00000000000..be774facd77 --- /dev/null +++ b/lang/gcc27/files/patch-except.c @@ -0,0 +1,37 @@ +--- cp/except.c.orig Wed Oct 11 19:29:08 1995 ++++ cp/except.c Mon Mar 20 13:29:12 2000 +@@ -148,6 +148,9 @@ + void + exception_section () + { ++#ifdef EXCEPTION_SECTION_FUNCTION ++ EXCEPTION_SECTION_FUNCTION; ++#else + #ifdef ASM_OUTPUT_SECTION_NAME + named_section (NULL_TREE, ".gcc_except_table"); + #else +@@ -160,6 +163,7 @@ + readonly_data_section (); + #endif + #endif ++#endif + } + + +@@ -1614,9 +1618,15 @@ + void + register_exception_table () + { ++ rtx addr = gen_rtx (SYMBOL_REF, Pmode, "__EXCEPTION_TABLE__"); ++ ++#ifdef MARK_LOCAL_ADDRESS ++ MARK_LOCAL_ADDRESS(addr); ++#endif ++ + emit_library_call (gen_rtx (SYMBOL_REF, Pmode, "__register_exceptions"), 0, + VOIDmode, 1, +- gen_rtx (SYMBOL_REF, Pmode, "__EXCEPTION_TABLE__"), ++ addr, + Pmode); + } + diff --git a/lang/gcc27/files/patch-extend.texi b/lang/gcc27/files/patch-extend.texi new file mode 100644 index 00000000000..5a6c1963e6b --- /dev/null +++ b/lang/gcc27/files/patch-extend.texi @@ -0,0 +1,25 @@ +--- extend.texi.orig Fri Sep 1 22:46:47 1995 ++++ extend.texi Mon Mar 20 13:29:11 2000 +@@ -1394,13 +1394,15 @@ + @code{my_format}. + + The parameter @var{archetype} determines how the format string is +-interpreted, and should be either @code{printf} or @code{scanf}. The +-parameter @var{string-index} specifies which argument is the format +-string argument (starting from 1), while @var{first-to-check} is the +-number of the first argument to check against the format string. For +-functions where the arguments are not available to be checked (such as +-@code{vprintf}), specify the third parameter as zero. In this case the +-compiler only checks the format string for consistency. ++interpreted, and should be @code{printf}, @code{printf0}, or ++@code{scanf}. @code{printf0} allows the format string to be a null ++pointer, while @code{printf} does not. The parameter @var{string-index} ++specifies which argument is the format string argument (starting ++from 1), while @var{first-to-check} is the number of the first ++argument to check against the format string. For functions where ++the arguments are not available to be checked (such as @code{vprintf}), ++specify the third parameter as zero. In this case the compiler ++only checks the format string for consistency. + + In the example above, the format string (@code{my_format}) is the second + argument of the function @code{my_print}, and the arguments to check diff --git a/lang/gcc27/files/patch-final.c b/lang/gcc27/files/patch-final.c new file mode 100644 index 00000000000..d930738eac1 --- /dev/null +++ b/lang/gcc27/files/patch-final.c @@ -0,0 +1,60 @@ +--- final.c.orig Sun Nov 26 10:50:00 1995 ++++ final.c Mon Mar 20 13:29:11 2000 +@@ -345,6 +345,8 @@ + /* zero word */ + assemble_integer (const0_rtx, UNITS_PER_WORD, 1); + ++ fprintf(asm_out_file,".stabs \"bbset\", 25, 0, 0, LPBX0\n"); ++ + /* address of filename */ + ASM_GENERATE_INTERNAL_LABEL (name, "LPBX", 1); + assemble_integer (gen_rtx (SYMBOL_REF, Pmode, name), UNITS_PER_WORD, 1); +@@ -914,6 +916,9 @@ + leaf_renumber_regs (first); + #endif + ++ if (profile_block_flag) ++ add_bb (file); ++ + /* The Sun386i and perhaps other machines don't work right + if the profiling code comes after the prologue. */ + #ifdef PROFILE_BEFORE_PROLOGUE +@@ -971,14 +976,18 @@ + profile_function (file) + FILE *file; + { ++#ifndef NO_PROFILE_DATA + int align = MIN (BIGGEST_ALIGNMENT, POINTER_SIZE); ++#endif /* not NO_PROFILE_DATA */ + int sval = current_function_returns_struct; + int cxt = current_function_needs_context; + ++#ifndef NO_PROFILE_DATA + data_section (); + ASM_OUTPUT_ALIGN (file, floor_log2 (align / BITS_PER_UNIT)); + ASM_OUTPUT_INTERNAL_LABEL (file, "LP", profile_label_no); + assemble_integer (const0_rtx, POINTER_SIZE / BITS_PER_UNIT, 1); ++#endif /* not NO_PROFILE_DATA */ + + text_section (); + +@@ -1066,6 +1075,9 @@ + FUNCTION_EPILOGUE (file, get_frame_size ()); + #endif + ++ if (profile_block_flag) ++ add_bb (file); ++ + #ifdef SDB_DEBUGGING_INFO + if (write_symbols == SDB_DEBUG) + sdbout_end_epilogue (); +@@ -1487,6 +1499,9 @@ + if (prescan > 0) + break; + new_block = 1; ++#ifdef FINAL_PRESCAN_INSN ++ FINAL_PRESCAN_INSN (insn, NULL_RTX, 0); ++#endif + #ifdef SDB_DEBUGGING_INFO + if (write_symbols == SDB_DEBUG && LABEL_NAME (insn)) + sdbout_label (insn); diff --git a/lang/gcc27/files/patch-flags.h b/lang/gcc27/files/patch-flags.h new file mode 100644 index 00000000000..83598ef23ed --- /dev/null +++ b/lang/gcc27/files/patch-flags.h @@ -0,0 +1,13 @@ +--- flags.h.orig Thu Jun 15 04:34:11 1995 ++++ flags.h Mon Mar 20 13:29:11 2000 +@@ -338,6 +338,10 @@ + + /* Tag all structures with __attribute__(packed) */ + extern int flag_pack_struct; ++ ++/* Nonzero means that -Wformat accepts certain non-ANSI formats. */ ++ ++extern int flag_format_extensions; + + /* Other basic status info about current function. */ + diff --git a/lang/gcc27/files/patch-function.c b/lang/gcc27/files/patch-function.c new file mode 100644 index 00000000000..300b54d9e14 --- /dev/null +++ b/lang/gcc27/files/patch-function.c @@ -0,0 +1,34 @@ +--- function.c.orig Wed Aug 13 10:23:26 1997 ++++ function.c Mon Mar 20 13:29:11 2000 +@@ -4887,18 +4887,23 @@ + #define HAS_INIT_SECTION + #endif + ++#ifndef GEN_CALL__MAIN ++#ifndef HAS_INIT_SECTION ++#define GEN_CALL__MAIN \ ++ do { \ ++ emit_library_call (gen_rtx (SYMBOL_REF, Pmode, NAME__MAIN), 0, \ ++ VOIDmode, 0); \ ++ } while (0) ++#endif ++#endif ++ + void + expand_main_function () + { ++#ifdef GEN_CALL__MAIN + if (!output_bytecode) +- { +- /* The zero below avoids a possible parse error */ +- 0; +-#if !defined (HAS_INIT_SECTION) +- emit_library_call (gen_rtx (SYMBOL_REF, Pmode, NAME__MAIN), 0, +- VOIDmode, 0); +-#endif /* not HAS_INIT_SECTION */ +- } ++ GEN_CALL__MAIN; ++#endif + } + + extern struct obstack permanent_obstack; diff --git a/lang/gcc27/files/patch-g++.c b/lang/gcc27/files/patch-g++.c new file mode 100644 index 00000000000..d6e2672d4b6 --- /dev/null +++ b/lang/gcc27/files/patch-g++.c @@ -0,0 +1,11 @@ +--- cp/g++.c.orig Mon Nov 20 14:08:53 1995 ++++ cp/g++.c Mon Mar 20 13:29:12 2000 +@@ -415,7 +415,7 @@ + programname = p; + + if (argc == 1) +- fatal ("No input files specified.\n"); ++ fatal ("No input files specified"); + + #ifndef __MSDOS__ + /* We do a little magic to find out where the main gcc executable diff --git a/lang/gcc27/files/patch-gcc.1 b/lang/gcc27/files/patch-gcc.1 new file mode 100644 index 00000000000..1b52da4886b --- /dev/null +++ b/lang/gcc27/files/patch-gcc.1 @@ -0,0 +1,137 @@ +--- gcc.1.orig Sun Nov 26 11:11:33 1995 ++++ gcc.1 Mon Mar 20 13:29:11 2000 +@@ -438,7 +438,17 @@ + \-m486 + \-mno\-486 + \-msoft\-float ++\-mrtd ++\-mregparm ++\-msvr3\-shlib ++\-mno\-ieee\-fp + \-mno\-fp\-ret\-in\-387 ++\-mfancy\-math\-387 ++\-mno\-wide\-multiply ++\-mdebug\-addr ++\-mno\-move ++\-mprofiler\-epilogue ++\-reg\-alloc=LIST + .Sp + .I HPPA Options + .br +@@ -511,6 +521,16 @@ + \-fverbose\-asm + .ad b + .hy 1 ++.SH FreeBSD SPECIFIC OPTIONS ++.TP ++.BI "\-pthread" ++Link a user-threaded process against libc_r instead of libc. Objects linked ++into user-threaded processes should be compiled with -D_THREAD_SAFE. ++.TP ++.BI "\-kthread" ++Link a kernel-threaded process against libpthread in addition to libc. ++Objects linked into kernel-threaded processes should be compiled with ++-D_THREAD_SAFE. + .SH OVERALL OPTIONS + .TP + .BI "\-x " "language" +@@ -1179,13 +1199,17 @@ + .B \-M\c + \&\|' but the output mentions only the user header files + included with `\|\c +-.B #include "\c ++.B ++#include "\c + .I file\c ++.B + \&"\c + \&\|'. System header files + included with `\|\c +-.B #include <\c ++.B ++#include <\c + .I file\c ++.B + \&>\c + \&\|' are omitted. + .TP +@@ -1462,8 +1486,10 @@ + \&"\c + \&\|'; + they are not searched for `\|\c +-.B #include <\c ++.B ++#include <\c + .I file\c ++.B + \&>\c + \&\|'. + .Sp +@@ -1961,7 +1987,7 @@ + .B \-Wnested-externs + Warn if an \c + .B extern\c +-\& declaration is encountered within an function. ++\& declaration is encountered within a function. + .TP + .B \-Wenum\-clash + Warn about conversion between different enumeration types (C++ only). +@@ -2909,17 +2935,17 @@ + .B \-mcypress + .TP + .B \-msupersparc +-These two options select the processor for which the code is optimised. ++These two options select the processor for which the code is optimized. + .Sp + With + .B \-mcypress +-(the default), the compiler optimises code for the Cypress CY7C602 chip, as ++(the default), the compiler optimizes code for the Cypress CY7C602 chip, as + used in the SparcStation/SparcServer 3xx series. This is also appropriate for + the older SparcStation 1, 2, IPX etc. + .Sp + With + .B \-msupersparc +-the compiler optimises code for the SuperSparc cpu, as used in the SparcStation ++the compiler optimizes code for the SuperSparc cpu, as used in the SparcStation + 10, 1000 and 2000 series. This flag also enables use of the full SPARC v8 + instruction set. + .PP +@@ -3490,7 +3516,7 @@ + value. + .TP + .B \-nocpp +-Tell the MIPS assembler to not run it's preprocessor over user ++Tell the MIPS assembler to not run its preprocessor over user + assembler files (with a `\|\c + .B .s\c + \&\|' suffix) when assembling them. +@@ -3498,6 +3524,7 @@ + These `\|\c + .B \-m\c + \&\|' options are defined for the Intel 80386 family of computers: ++.TP + .B \-m486 + .TP + .B \-mno\-486 +@@ -3534,6 +3561,11 @@ + .B \-mno-fp-ret-in-387\c + \&\|' causes such values to be returned + in ordinary CPU registers instead. ++.TP ++.B \-mprofiler-epilogue ++.TP ++.B \-mno-profiler-epilogue ++Generate extra code to write profile information for function exits. + .PP + These `\|\c + .B \-m\c +@@ -4069,7 +4101,7 @@ + .B /tmp\c + \&). + .SH "SEE ALSO" +-cpp(1), as(1), ld(1), gdb(1), adb(1), dbx(1), sdb(1). ++cpp(1), as(1), ld(1), gdb(1). + .br + .RB "`\|" gcc "\|', `\|" cpp \|', + .RB "`\|" as "\|', `\|" ld \|', diff --git a/lang/gcc27/files/patch-gcc.c b/lang/gcc27/files/patch-gcc.c new file mode 100644 index 00000000000..bd00b5c711d --- /dev/null +++ b/lang/gcc27/files/patch-gcc.c @@ -0,0 +1,229 @@ +--- gcc.c.orig Tue Jun 24 11:42:50 1997 ++++ gcc.c Mon Mar 20 13:29:11 2000 +@@ -32,6 +32,7 @@ + compilation is specified by a string called a "spec". */ + + #include <sys/types.h> ++#include <sys/wait.h> + #include <ctype.h> + #include <signal.h> + #include <sys/stat.h> +@@ -53,6 +54,9 @@ + #include <varargs.h> + #endif + #include <stdio.h> ++#include <stdlib.h> ++#include <unistd.h> ++#include <string.h> + + /* Include multi-lib information. */ + #include "multilib.h" +@@ -1620,7 +1624,6 @@ + char **envp; + int num_envs = 0; + int name_len = 1; +- int str_len = strlen (str); + char *p = str; + int ch; + +@@ -2095,7 +2098,7 @@ + /* Exec the program. */ + (*func) (program, argv); + perror_exec (program); +- exit (-1); ++ _exit (1); + /* NOTREACHED */ + return 0; + +@@ -2324,6 +2327,10 @@ + char *language; + }; + ++#if defined(FREEBSD_NATIVE) && defined(__i386__) ++static int objformat_aout = 0; ++#endif ++ + /* Also a vector of input files specified. */ + + static struct infile *infiles; +@@ -2469,6 +2476,39 @@ + } + } + ++#if defined(FREEBSD_NATIVE) && defined(__i386__) ++ { ++ /* first hint is /etc/objformat */ ++ FILE *fp = fopen("/etc/objformat", "r"); ++ if (fp) { ++ char buf[1024]; ++ buf[1023] = '\0'; ++ while (fgets(buf, sizeof(buf) - 1, fp) != NULL) { ++ i = strlen(buf); ++ if (buf[i - 1] == '\n') ++ buf[i - 1] = '\0'; ++ if (strcmp(buf, "OBJFORMAT=aout") == 0) ++ objformat_aout = 1; ++ else if (strcmp(buf, "OBJFORMAT=elf") == 0) ++ objformat_aout = 0; ++ else ++ fprintf(stderr, "Unrecognized line in /etc/objformat: %s\n", buf); ++ } ++ fclose(fp); ++ } ++ /* but the user $OBJFORMAT overrides system default */ ++ temp = getenv("OBJFORMAT"); ++ if (temp) { ++ if (strcmp(temp, "aout") == 0) ++ objformat_aout = 1; ++ else if (strcmp(temp, "elf") == 0) ++ objformat_aout = 0; ++ else ++ fprintf(stderr, "Unrecognized value of $OBJFORMAT: %s\n", temp); ++ } ++ } ++#endif ++ + /* Convert new-style -- options to old-style. */ + translate_options (&argc, &argv); + +@@ -2478,6 +2518,19 @@ + + for (i = 1; i < argc; i++) + { ++#if defined(FREEBSD_NATIVE) && defined(__i386__) ++ /* .. and command line args override all */ ++ if (strcmp (argv[i], "-aout") == 0) ++ { ++ objformat_aout = 1; ++ continue; ++ } ++ else if (strcmp (argv[i], "-elf") == 0) ++ { ++ objformat_aout = 0; ++ continue; ++ } ++#endif + if (! strcmp (argv[i], "-dumpspecs")) + { + printf ("*asm:\n%s\n\n", asm_spec); +@@ -2703,6 +2756,18 @@ + (such as cpp) rather than those of the host system. */ + /* Use 2 as fourth arg meaning try just the machine as a suffix, + as well as trying the machine and the version. */ ++#ifdef FREEBSD_NATIVE ++#if defined(__i386__) ++ if (objformat_aout) { ++ n_switches++; /* add implied -maout */ ++ add_prefix (&exec_prefixes, "/usr/libexec/aout/", 0, 0, NULL_PTR); ++ } else ++ add_prefix (&exec_prefixes, "/usr/libexec/elf/", 0, 0, NULL_PTR); ++#endif ++ add_prefix (&exec_prefixes, "/usr/libexec/", 0, 0, NULL_PTR); ++ add_prefix (&exec_prefixes, "/usr/bin/", 0, 0, NULL_PTR); ++ add_prefix (&startfile_prefixes, "/usr/libdata/gcc/", 0, 0, NULL_PTR); ++#else /* not FREEBSD_NATIVE */ + #ifndef OS2 + add_prefix (&exec_prefixes, standard_exec_prefix, 0, 2, NULL_PTR); + add_prefix (&exec_prefixes, standard_exec_prefix_1, 0, 2, NULL_PTR); +@@ -2710,6 +2775,7 @@ + + add_prefix (&startfile_prefixes, standard_exec_prefix, 0, 1, NULL_PTR); + add_prefix (&startfile_prefixes, standard_exec_prefix_1, 0, 1, NULL_PTR); ++#endif /* FREEBSD_NATIVE */ + + tooldir_prefix = concat3 (tooldir_base_prefix, spec_machine, + dir_separator_str); +@@ -2744,12 +2810,14 @@ + dir_separator_str, tooldir_prefix); + } + ++#ifndef FREEBSD_NATIVE + add_prefix (&exec_prefixes, + concat3 (tooldir_prefix, "bin", dir_separator_str), + 0, 0, NULL_PTR); + add_prefix (&startfile_prefixes, + concat3 (tooldir_prefix, "lib", dir_separator_str), + 0, 0, NULL_PTR); ++#endif /* FREEBSD_NATIVE */ + + /* More prefixes are enabled in main, after we read the specs file + and determine whether this is cross-compilation or not. */ +@@ -2768,6 +2836,19 @@ + to the copy in the vector of switches. + Store all the infiles in their vector. */ + ++#if defined(FREEBSD_NATIVE) && defined(__i386__) ++ if (objformat_aout == 1) { ++ switches[n_switches].part1 = "maout"; ++ switches[n_switches].args = 0; ++ switches[n_switches].live_cond = 0; ++ switches[n_switches].valid = 0; ++ n_switches++; ++ putenv("OBJFORMAT=aout"); ++ } else { ++ putenv("OBJFORMAT=elf"); ++ } ++#endif ++ + for (i = 1; i < argc; i++) + { + /* Just skip the switches that were handled by the preceding loop. */ +@@ -2787,6 +2868,12 @@ + ; + else if (! strcmp (argv[i], "-print-multi-directory")) + ; ++#if defined(FREEBSD_NATIVE) && defined(__i386__) ++ else if (! strcmp (argv[i], "-aout")) ++ ; ++ else if (! strcmp (argv[i], "-elf")) ++ ; ++#endif + else if (argv[i][0] == '+' && argv[i][1] == 'e') + { + /* Compensate for the +e options to the C++ front-end; +@@ -3770,7 +3857,7 @@ + { + int c1 = *p++; /* Select first or second version number. */ + char *v = compiler_version; +- char *q, *copy; ++ char *q; + /* If desired, advance to second version number. */ + if (c1 == '2') + { +@@ -4266,8 +4353,10 @@ + + /* Read specs from a file if there is one. */ + ++#ifndef FREEBSD_NATIVE + machine_suffix = concat4 (spec_machine, dir_separator_str, + spec_version, dir_separator_str); ++#endif + just_machine_suffix = concat (spec_machine, dir_separator_str); + + specs_file = find_a_file (&startfile_prefixes, "specs", R_OK); +@@ -4326,6 +4415,7 @@ + 0, 0, NULL_PTR); + } + ++#ifndef FREEBSD_NATIVE + add_prefix (&startfile_prefixes, standard_startfile_prefix_1, 0, 0, + NULL_PTR); + add_prefix (&startfile_prefixes, standard_startfile_prefix_2, 0, 0, +@@ -4333,6 +4423,8 @@ + #if 0 /* Can cause surprises, and one can use -B./ instead. */ + add_prefix (&startfile_prefixes, "./", 0, 1, NULL_PTR); + #endif ++#endif /* FREEBSD_NATIVE */ ++ + } + else + { +@@ -4423,7 +4515,7 @@ + } + + if (n_infiles == 0) +- fatal ("No input files"); ++ fatal ("No input files specified"); + + /* Make a place to record the compiler output file names + that correspond to the input files. */ diff --git a/lang/gcc27/files/patch-glimits.h b/lang/gcc27/files/patch-glimits.h new file mode 100644 index 00000000000..4c1f7dd5462 --- /dev/null +++ b/lang/gcc27/files/patch-glimits.h @@ -0,0 +1,15 @@ +--- glimits.h.orig Wed Sep 29 14:30:54 1993 ++++ glimits.h Mon Mar 20 13:29:11 2000 +@@ -63,7 +63,11 @@ + /* Minimum and maximum values a `signed long int' can hold. + (Same as `int'). */ + #ifndef __LONG_MAX__ +-#define __LONG_MAX__ 2147483647L ++# ifndef __alpha__ ++# define __LONG_MAX__ 2147483647L ++# else ++# define __LONG_MAX__ 9223372036854775807L ++# endif /* __alpha__ */ + #endif + #undef LONG_MIN + #define LONG_MIN (-LONG_MAX-1) diff --git a/lang/gcc27/files/patch-gxxint.texi b/lang/gcc27/files/patch-gxxint.texi new file mode 100644 index 00000000000..fd53d384d3b --- /dev/null +++ b/lang/gcc27/files/patch-gxxint.texi @@ -0,0 +1,73 @@ +--- cp/gxxint.texi.orig Wed Oct 11 19:29:39 1995 ++++ cp/gxxint.texi Mon Mar 20 13:29:12 2000 +@@ -1285,13 +1285,13 @@ + copy value onto heap + jump throw (Ln, id, address of copy of value on heap) + +- try { ++ try @{ + +Lstart: the start of the main EH region + |... ... + +Lend: the end of the main EH region +- } catch (T o) { ++ @} catch (T o) @{ + ...1 +- } ++ @} + Lresume: + nop used to make sure there is something before + the next region ends, if there is one +@@ -1312,7 +1312,7 @@ + [ + [ + call throw_type_match +- if (eq) { ++ if (eq) @{ + ] these lines disappear when there is no catch condition + +Lsregion2: + | ...1 +@@ -1320,7 +1320,7 @@ + |Lhandler: handler for the region Lsregion2-Leregion2 + | rethrow (Lresume, same id, same obj); + +Leregion2 +- } ++ @} + ] there are zero or more of these sections, depending upon how many + catch clauses there are + ----------------------------- expand_end_all_catch -------------------------- +@@ -1336,7 +1336,7 @@ + + start_all_catch emits labels: Lresume, + +-#end example ++@end example + + The __unwind_function takes a pointer to the throw handler, and is + expected to pop the stack frame that was built to call it, as well as +@@ -1346,7 +1346,7 @@ + into. The way I normally start is to compile: + + void *g; +- foo(void* a) { g = a; } ++ foo(void* a) @{ g = a; @} + + with -S, and change the thing that alters the PC (return, or ret + usually) to not alter the PC, making sure to leave all other semantics +@@ -1453,7 +1453,7 @@ + should also be removed, although not doing this is harmless in terms of + semantics. + +-#end itemize ++@end itemize + + The above is not meant to be exhaustive, but does include all things I + have thought of so far. I am sure other limitations exist. +@@ -1515,7 +1515,7 @@ + + The eh archive (~mrs/eh) might be good reading for understanding the Ada + perspective, and some of kenners mindset, and a detailed explanation +-(Message-Id: <9308301130.AA10543@vlsi1.ultra.nyu.edu>) of the concepts ++(Message-Id: <9308301130.AA10543@@vlsi1.ultra.nyu.edu>) of the concepts + involved. + + Here is a guide to existing backend type code. It is all in diff --git a/lang/gcc27/files/patch-i386.c b/lang/gcc27/files/patch-i386.c new file mode 100644 index 00000000000..46a5c61a4ae --- /dev/null +++ b/lang/gcc27/files/patch-i386.c @@ -0,0 +1,62 @@ +--- config/i386/i386.c.orig Sun Oct 22 04:13:21 1995 ++++ config/i386/i386.c Mon Mar 20 13:29:12 2000 +@@ -1460,7 +1460,8 @@ + int limit; + rtx xops[4]; + int pic_reg_used = flag_pic && (current_function_uses_pic_offset_table +- || current_function_uses_const_pool); ++ || current_function_uses_const_pool ++ || profile_flag || profile_block_flag); + + xops[0] = stack_pointer_rtx; + xops[1] = frame_pointer_rtx; +@@ -1521,8 +1522,16 @@ + int nregs = 0; + int reglimit = (frame_pointer_needed + ? FRAME_POINTER_REGNUM : STACK_POINTER_REGNUM); +- int pic_reg_used = flag_pic && (current_function_uses_pic_offset_table +- || current_function_uses_const_pool); ++ ++#ifdef FUNCTION_PROFILER_EPILOGUE ++ if (profile_flag) ++ return 0; ++#endif ++ ++ if (flag_pic && (current_function_uses_pic_offset_table ++ || current_function_uses_const_pool ++ || profile_flag || profile_block_flag)) ++ return 0; + + #ifdef NON_SAVING_SETJMP + if (NON_SAVING_SETJMP && current_function_calls_setjmp) +@@ -1533,8 +1542,7 @@ + return 0; + + for (regno = reglimit - 1; regno >= 0; regno--) +- if ((regs_ever_live[regno] && ! call_used_regs[regno]) +- || (regno == PIC_OFFSET_TABLE_REGNUM && pic_reg_used)) ++ if (regs_ever_live[regno] && ! call_used_regs[regno]) + nregs++; + + return nregs == 0 || ! frame_pointer_needed; +@@ -1557,6 +1565,11 @@ + int pic_reg_used = flag_pic && (current_function_uses_pic_offset_table + || current_function_uses_const_pool); + ++#ifdef FUNCTION_PROFILER_EPILOGUE ++ if (profile_flag) ++ FUNCTION_PROFILER_EPILOGUE (file); ++#endif ++ + /* Compute the number of registers to pop */ + + limit = (frame_pointer_needed +@@ -2438,7 +2451,7 @@ + REAL_VALUE_FROM_CONST_DOUBLE (r, x); + REAL_VALUE_TO_TARGET_SINGLE (r, l); + PRINT_IMMED_PREFIX (file); +- fprintf (file, "0x%x", l); ++ fprintf (file, "0x%lx", l); + } + /* These float cases don't actually occur as immediate operands. */ + else if (GET_CODE (x) == CONST_DOUBLE && GET_MODE (x) == DFmode) diff --git a/lang/gcc27/files/patch-i386.h b/lang/gcc27/files/patch-i386.h new file mode 100644 index 00000000000..258b948c2d4 --- /dev/null +++ b/lang/gcc27/files/patch-i386.h @@ -0,0 +1,53 @@ +--- config/i386/i386.h.orig Fri Sep 22 15:42:57 1995 ++++ config/i386/i386.h Mon Mar 20 13:29:12 2000 +@@ -1286,6 +1286,22 @@ + } \ + while (0) + ++/* Define this macro if a SYMBOL_REF representing a non-global ++ address must be marked specially. This is called for ++ compiler-generated local symbols, such as "__EXCEPTION_TABLE__". ++ ++ On i386, if using PIC, we use this to set the rtx's ++ SYMBOL_REF_FLAG, so that we may access it directly as ++ an offset from the GOT register. */ ++ ++#define MARK_LOCAL_ADDRESS(X) \ ++do \ ++ { \ ++ if (flag_pic && GET_CODE (X) == SYMBOL_REF) \ ++ SYMBOL_REF_FLAG (X) = 1; \ ++ } \ ++while (0) ++ + /* Initialize data used by insn expanders. This is called from + init_emit, once for each function, before code is generated. + For 386, clear stack slot assignments remembered from previous +@@ -1621,7 +1637,7 @@ + do { long l[2]; \ + REAL_VALUE_TO_TARGET_DOUBLE (VALUE, l); \ + if (sizeof (int) == sizeof (long)) \ +- fprintf (FILE, "%s 0x%x,0x%x\n", ASM_LONG, l[0], l[1]); \ ++ fprintf (FILE, "%s 0x%x,0x%x\n", ASM_LONG, (int) l[0], (int) l[1]); \ + else \ + fprintf (FILE, "%s 0x%lx,0x%lx\n", ASM_LONG, l[0], l[1]); \ + } while (0) +@@ -1633,7 +1649,8 @@ + do { long l[3]; \ + REAL_VALUE_TO_TARGET_LONG_DOUBLE (VALUE, l); \ + if (sizeof (int) == sizeof (long)) \ +- fprintf (FILE, "%s 0x%x,0x%x,0x%x\n", ASM_LONG, l[0], l[1], l[2]); \ ++ fprintf (FILE, "%s 0x%x,0x%x,0x%x\n", ASM_LONG, \ ++ (int) l[0], (int) l[1], (int) l[2]); \ + else \ + fprintf (FILE, "%s 0x%lx,0x%lx,0x%lx\n", ASM_LONG, l[0], l[1], l[2]); \ + } while (0) +@@ -1644,7 +1661,7 @@ + do { long l; \ + REAL_VALUE_TO_TARGET_SINGLE (VALUE, l); \ + if (sizeof (int) == sizeof (long)) \ +- fprintf ((FILE), "%s 0x%x\n", ASM_LONG, l); \ ++ fprintf ((FILE), "%s 0x%x\n", ASM_LONG, (int) l); \ + else \ + fprintf ((FILE), "%s 0x%lx\n", ASM_LONG, l); \ + } while (0) diff --git a/lang/gcc27/files/patch-i386.md b/lang/gcc27/files/patch-i386.md new file mode 100644 index 00000000000..459e2dfc44e --- /dev/null +++ b/lang/gcc27/files/patch-i386.md @@ -0,0 +1,20 @@ +--- config/i386/i386.md.orig Mon Aug 21 10:27:58 1995 ++++ config/i386/i386.md Mon Mar 20 13:29:12 2000 +@@ -5312,10 +5312,17 @@ + coprocessor registers as containing a possible return value, + simply pretend the untyped call returns a complex long double + value. */ ++#if 1 ++ /* this may be part of (set (reg: ..) (call_insn ...)), and we can't ++ directly set a fp register from the call. so we revert to the ++ old behavior - jlemon@netcom.com (Jonathan Lemon) */ ++ emit_call_insn (gen_call (operands[0], const0_rtx, NULL, const0_rtx)); ++#else + emit_call_insn (TARGET_80387 + ? gen_call_value (gen_rtx (REG, XCmode, FIRST_FLOAT_REG), + operands[0], const0_rtx) + : gen_call (operands[0], const0_rtx)); ++#endif + + for (i = 0; i < XVECLEN (operands[2], 0); i++) + { diff --git a/lang/gcc27/files/patch-invoke.texi b/lang/gcc27/files/patch-invoke.texi new file mode 100644 index 00000000000..176bee9f8c6 --- /dev/null +++ b/lang/gcc27/files/patch-invoke.texi @@ -0,0 +1,40 @@ +--- invoke.texi.orig Tue Oct 3 08:40:43 1995 ++++ invoke.texi Mon Mar 20 13:29:11 2000 +@@ -281,9 +281,10 @@ + -mstats -EL -EB -G @var{num} -nocpp + + @emph{i386 Options} +--m486 -m386 -mieee-fp -mno-fancy-math-387 +--mno-fp-ret-in-387 -msoft-float -msvr3-shlib +--mno-wide-multiply -mrtd -malign-double ++-m386 -m486 -mno-fancy-math-387 ++-mno-fp-ret-in-387 -mno-ieee-fp -mno-wide-multiply ++-mprofiler-epilogue -mrtd -msoft-float ++-msvr3-shlib -malign-double + -mreg-alloc=@var{list} -mregparm=@var{num} + -malign-jumps=@var{num} -malign-loops=@var{num} + -malign-functions=@var{num} +@@ -3669,8 +3670,8 @@ + Control whether or not code is optimized for a 486 instead of an + 386. Code generated for an 486 will run on a 386 and vice versa. + +-@item -mieee-fp +-@itemx -mno-ieee-fp ++@item -mno-ieee-fp ++@itemx -mieee-fp + Control whether or not the compiler uses IEEE floating point + comparisons. These handle correctly the case where the result of a + comparison is unordered. +@@ -3728,6 +3729,12 @@ + Control whether GNU CC uses the @code{mul} and @code{imul} that produce + 64 bit results in @code{eax:edx} from 32 bit operands to do @code{long + long} multiplies and 32-bit division by constants. ++ ++@item -mprofiler-epilogue ++@itemx -mno-profiler-epilogue ++Generate extra code to write profile information for function exits. ++This option has no effect except in combination with @samp{-g} or ++@samp{-pg}. + + @item -mrtd + Use a different function-calling convention, in which functions that diff --git a/lang/gcc27/files/patch-libgcc2.c b/lang/gcc27/files/patch-libgcc2.c new file mode 100644 index 00000000000..3445284f34d --- /dev/null +++ b/lang/gcc27/files/patch-libgcc2.c @@ -0,0 +1,31 @@ +--- libgcc2.c.orig Sun Nov 26 11:39:21 1995 ++++ libgcc2.c Mon Mar 20 13:29:11 2000 +@@ -2106,9 +2106,7 @@ + (*p++) (); + #endif + } +-#endif + +-#ifndef INIT_SECTION_ASM_OP + /* Run all the global constructors on entry to the program. */ + + #ifndef ON_EXIT +@@ -2128,9 +2126,7 @@ + DO_GLOBAL_CTORS_BODY; + ON_EXIT (__do_global_dtors, 0); + } +-#endif /* no INIT_SECTION_ASM_OP */ + +-#if !defined (INIT_SECTION_ASM_OP) || defined (INVOKE__main) + /* Subroutine called automatically by `main'. + Compiling a global function named `main' + produces an automatic call to this function at the beginning. +@@ -2165,7 +2161,7 @@ + + /* We declare the lists here with two elements each, + so that they are valid empty lists if no other definition is loaded. */ +-#if !defined(INIT_SECTION_ASM_OP) && !defined(CTOR_LISTS_DEFINED_EXTERNALLY) ++#if (!defined(INIT_SECTION_ASM_OP) || !defined(OBJECT_FORMAT_ELF)) && !defined(CTOR_LISTS_DEFINED_EXTERNALLY) + #if defined(__NeXT__) || defined(_AIX) + /* After 2.3, try this definition on all systems. */ + func_ptr __CTOR_LIST__[2] = {0, 0}; diff --git a/lang/gcc27/files/patch-print-tree.c b/lang/gcc27/files/patch-print-tree.c new file mode 100644 index 00000000000..c5e25b6fc8e --- /dev/null +++ b/lang/gcc27/files/patch-print-tree.c @@ -0,0 +1,29 @@ +--- print-tree.c.orig Thu Jun 15 04:56:40 1995 ++++ print-tree.c Mon Mar 20 13:29:11 2000 +@@ -82,7 +82,7 @@ + if (indent > 0) + fprintf (file, " "); + fprintf (file, "%s <%s ", prefix, tree_code_name[(int) TREE_CODE (node)]); +- fprintf (file, HOST_PTR_PRINTF, (HOST_WIDE_INT) node); ++ fprintf (file, HOST_PTR_PRINTF, (void *) node); + + if (class == 'd') + { +@@ -259,7 +259,7 @@ + + /* Print the slot this node is in, and its code, and address. */ + fprintf (file, "%s <%s ", prefix, tree_code_name[(int) TREE_CODE (node)]); +- fprintf (file, HOST_PTR_PRINTF, (HOST_WIDE_INT) node); ++ fprintf (file, HOST_PTR_PRINTF, (void *) node); + + /* Print the name, if any. */ + if (class == 'd') +@@ -456,7 +456,7 @@ + { + fprintf (file, "saved-insns "); + fprintf (file, HOST_PTR_PRINTF, +- (HOST_WIDE_INT) DECL_SAVED_INSNS (node)); ++ (void *) DECL_SAVED_INSNS (node)); + } + } + diff --git a/lang/gcc27/files/patch-ptree.c b/lang/gcc27/files/patch-ptree.c new file mode 100644 index 00000000000..61733517bfe --- /dev/null +++ b/lang/gcc27/files/patch-ptree.c @@ -0,0 +1,23 @@ +--- cp/ptree.c.orig Wed Jun 28 13:38:11 1995 ++++ cp/ptree.c Mon Mar 20 13:29:12 2000 +@@ -46,17 +46,17 @@ + if (DECL_MAIN_VARIANT (node)) + { + fprintf (file, " decl-main-variant "); +- fprintf (file, HOST_PTR_PRINTF, DECL_MAIN_VARIANT (node)); ++ fprintf (file, HOST_PTR_PRINTF, (void *) DECL_MAIN_VARIANT (node)); + } + if (DECL_PENDING_INLINE_INFO (node)) + { + fprintf (file, " pending-inline-info "); +- fprintf (file, HOST_PTR_PRINTF, DECL_PENDING_INLINE_INFO (node)); ++ fprintf (file, HOST_PTR_PRINTF, (void *) DECL_PENDING_INLINE_INFO (node)); + } + if (DECL_TEMPLATE_INFO (node)) + { + fprintf (file, " template-info "); +- fprintf (file, HOST_PTR_PRINTF, DECL_TEMPLATE_INFO (node)); ++ fprintf (file, HOST_PTR_PRINTF, (void *) DECL_TEMPLATE_INFO (node)); + } + } + diff --git a/lang/gcc27/files/patch-reload.c b/lang/gcc27/files/patch-reload.c new file mode 100644 index 00000000000..e3dbd9961a1 --- /dev/null +++ b/lang/gcc27/files/patch-reload.c @@ -0,0 +1,11 @@ +--- reload.c.orig Sat Nov 11 05:23:54 1995 ++++ reload.c Mon Mar 20 13:29:11 2000 +@@ -5899,7 +5899,7 @@ + fprintf (stderr, ", inc by %d\n", reload_inc[r]); + + if (reload_nocombine[r]) +- fprintf (stderr, ", can combine", reload_nocombine[r]); ++ fprintf (stderr, ", can combine"); + + if (reload_secondary_p[r]) + fprintf (stderr, ", secondary_reload_p"); diff --git a/lang/gcc27/files/patch-reno.texi b/lang/gcc27/files/patch-reno.texi new file mode 100644 index 00000000000..e49f4392a47 --- /dev/null +++ b/lang/gcc27/files/patch-reno.texi @@ -0,0 +1,11 @@ +--- cp/reno.texi.orig Thu Apr 14 19:00:39 1994 ++++ cp/reno.texi Mon Mar 20 13:29:12 2000 +@@ -4,7 +4,7 @@ + @ifinfo + @format + START-INFO-DIR-ENTRY +-* Reno 1: (reno-1). The GNU C++ Renovation Project, Phase 1. ++* Reno 1: (reno). The GNU C++ Renovation Project, Phase 1. + END-INFO-DIR-ENTRY + @end format + @end ifinfo diff --git a/lang/gcc27/files/patch-sched.c b/lang/gcc27/files/patch-sched.c new file mode 100644 index 00000000000..a2a69d6ecd2 --- /dev/null +++ b/lang/gcc27/files/patch-sched.c @@ -0,0 +1,55 @@ +--- sched.c.orig Thu Jun 15 05:06:39 1995 ++++ sched.c Mon Mar 20 13:29:12 2000 +@@ -794,11 +794,14 @@ + changed. A volatile and non-volatile reference can be interchanged + though. + +- A MEM_IN_STRUCT reference at a non-QImode varying address can never ++ A MEM_IN_STRUCT reference at a non-QImode non-AND varying address can never + conflict with a non-MEM_IN_STRUCT reference at a fixed address. We must + allow QImode aliasing because the ANSI C standard allows character + pointers to alias anything. We are assuming that characters are +- always QImode here. */ ++ always QImode here. We also must allow AND addresses, because they may ++ generate accesses outside the object being referenced. This is used to ++ generate aligned addresses from unaligned addresses, for instance, the ++ alpha storeqi_unaligned pattern. */ + + /* Read dependence: X is read after read in MEM takes place. There can + only be a dependence here if both reads are volatile. */ +@@ -833,9 +836,11 @@ + SIZE_FOR_MODE (x), XEXP (x, 0), 0) + && ! (MEM_IN_STRUCT_P (mem) && rtx_addr_varies_p (mem) + && GET_MODE (mem) != QImode ++ && GET_CODE (XEXP (mem, 0)) != AND + && ! MEM_IN_STRUCT_P (x) && ! rtx_addr_varies_p (x)) + && ! (MEM_IN_STRUCT_P (x) && rtx_addr_varies_p (x) + && GET_MODE (x) != QImode ++ && GET_CODE (XEXP (mem, 0)) != AND + && ! MEM_IN_STRUCT_P (mem) && ! rtx_addr_varies_p (mem)))); + } + +@@ -857,9 +862,11 @@ + SIZE_FOR_MODE (x), XEXP (x, 0), 0) + && ! (MEM_IN_STRUCT_P (mem) && rtx_addr_varies_p (mem) + && GET_MODE (mem) != QImode ++ && GET_CODE (XEXP (mem, 0)) != AND + && ! MEM_IN_STRUCT_P (x) && ! rtx_addr_varies_p (x)) + && ! (MEM_IN_STRUCT_P (x) && rtx_addr_varies_p (x) + && GET_MODE (x) != QImode ++ && GET_CODE (XEXP (mem, 0)) != AND + && ! MEM_IN_STRUCT_P (mem) && ! rtx_addr_varies_p (mem)))); + } + +@@ -875,9 +882,11 @@ + SIZE_FOR_MODE (x), XEXP (x, 0), 0) + && ! (MEM_IN_STRUCT_P (mem) && rtx_addr_varies_p (mem) + && GET_MODE (mem) != QImode ++ && GET_CODE (XEXP (mem, 0)) != AND + && ! MEM_IN_STRUCT_P (x) && ! rtx_addr_varies_p (x)) + && ! (MEM_IN_STRUCT_P (x) && rtx_addr_varies_p (x) + && GET_MODE (x) != QImode ++ && GET_CODE (XEXP (mem, 0)) != AND + && ! MEM_IN_STRUCT_P (mem) && ! rtx_addr_varies_p (mem)))); + } + diff --git a/lang/gcc27/files/patch-sendmsg.c b/lang/gcc27/files/patch-sendmsg.c new file mode 100644 index 00000000000..e46f36c35ee --- /dev/null +++ b/lang/gcc27/files/patch-sendmsg.c @@ -0,0 +1,21 @@ +--- objc/sendmsg.c.orig Thu Jun 15 05:45:10 1995 ++++ objc/sendmsg.c Mon Mar 20 13:29:13 2000 +@@ -542,12 +542,15 @@ + #endif + ); + +- printf("arrays: %d = %ld bytes\n", narrays, (int)narrays*sizeof(struct sarray)); ++ printf("arrays: %d = %lu bytes\n", ++ narrays, (unsigned long)narrays*sizeof(struct sarray)); + total += narrays*sizeof(struct sarray); +- printf("buckets: %d = %ld bytes\n", nbuckets, (int)nbuckets*sizeof(struct sbucket)); ++ printf("buckets: %d = %lu bytes\n", ++ nbuckets, (unsigned long)nbuckets*sizeof(struct sbucket)); + total += nbuckets*sizeof(struct sbucket); + +- printf("idxtables: %d = %ld bytes\n", idxsize, (int)idxsize*sizeof(void*)); ++ printf("idxtables: %d = %lu bytes\n", ++ idxsize, (unsigned long)idxsize*sizeof(void*)); + total += idxsize*sizeof(void*); + printf("-----------------------------------\n"); + printf("total: %d bytes\n", total); diff --git a/lang/gcc27/files/patch-stdarg.h b/lang/gcc27/files/patch-stdarg.h new file mode 100644 index 00000000000..d29ba5ab887 --- /dev/null +++ b/lang/gcc27/files/patch-stdarg.h @@ -0,0 +1,40 @@ +--- ginclude/stdarg.h.orig Tue Sep 12 09:50:36 1995 ++++ ginclude/stdarg.h Mon Mar 20 13:29:13 2000 +@@ -43,6 +43,15 @@ + #else + + /* Define __gnuc_va_list. */ ++#if defined (__FreeBSD__) ++/* This is the correct way to handle all BSD NET2 and BSD 4.4 systems. */ ++#include <machine/ansi.h> ++#ifdef _BSD_VA_LIST_ ++typedef _BSD_VA_LIST_ __gnuc_va_list; ++#else ++typedef _VA_LIST_ __gnuc_va_list; ++#endif ++#else + + #ifndef __GNUC_VA_LIST + #define __GNUC_VA_LIST +@@ -52,6 +61,7 @@ + typedef void *__gnuc_va_list; + #endif + #endif ++#endif + + /* Define the standard macros for the user, + if this invocation was from the user program. */ +@@ -116,8 +126,13 @@ + #undef _VA_LIST + #endif + ++#if 0 ++/* BSD 4.4 actually spells the name _BSD_VA_LIST_ and requires it to be ++ * defined and usable in place of va_list when the latter name is not ++ * allowed (e.g., in stdio.h - see above). */ + #ifdef _BSD_VA_LIST + #undef _BSD_VA_LIST ++#endif + #endif + + #ifdef __svr4__ diff --git a/lang/gcc27/files/patch-stddef.h b/lang/gcc27/files/patch-stddef.h new file mode 100644 index 00000000000..36068d02636 --- /dev/null +++ b/lang/gcc27/files/patch-stddef.h @@ -0,0 +1,20 @@ +--- ginclude/stddef.h.orig Sat Aug 19 13:39:22 1995 ++++ ginclude/stddef.h Mon Mar 20 13:29:13 2000 +@@ -257,7 +257,7 @@ + + /* In 4.3bsd-net2, leave these undefined to indicate that size_t, etc. + are already defined. */ +-#ifdef _ANSI_H_ ++#if defined(_ANSI_H_) || defined(_MACHINE_ANSI_H_) + /* The references to _GCC_PTRDIFF_T_, _GCC_SIZE_T_, and _GCC_WCHAR_T_ + are probably typos and should be removed before 2.8 is released. */ + #ifdef _GCC_PTRDIFF_T_ +@@ -285,7 +285,7 @@ + #undef _WCHAR_T_ + #undef _BSD_WCHAR_T_ + #endif +-#endif /* _ANSI_H_ */ ++#endif /* defined(_ANSI_H_) || defined(_MACHINE_ANSI_H_) */ + + #endif /* __sys_stdtypes_h */ + diff --git a/lang/gcc27/files/patch-toplev.c b/lang/gcc27/files/patch-toplev.c new file mode 100644 index 00000000000..66f6449fd5b --- /dev/null +++ b/lang/gcc27/files/patch-toplev.c @@ -0,0 +1,21 @@ +--- toplev.c.orig Fri Oct 20 14:56:35 1995 ++++ toplev.c Mon Mar 20 13:29:12 2000 +@@ -521,6 +521,10 @@ + /* Tag all structures with __attribute__(packed) */ + int flag_pack_struct = 0; + ++/* Nonzero means that -Wformat accepts certain system-dependent formats. */ ++ ++int flag_format_extensions = 0; ++ + /* Table of language-independent -f options. + STRING is the option name. VARIABLE is the address of the variable. + ON_VALUE is the value to store in VARIABLE +@@ -567,6 +571,7 @@ + {"verbose-asm", &flag_verbose_asm, 1}, + {"gnu-linker", &flag_gnu_linker, 1}, + {"pack-struct", &flag_pack_struct, 1}, ++ {"format-extensions", &flag_format_extensions, 1}, + {"bytecode", &output_bytecode, 1} + }; + diff --git a/lang/gcc27/files/patch-varargs.h b/lang/gcc27/files/patch-varargs.h new file mode 100644 index 00000000000..d97cb883f1d --- /dev/null +++ b/lang/gcc27/files/patch-varargs.h @@ -0,0 +1,37 @@ +--- ginclude/varargs.h.orig Sun Aug 13 15:18:55 1995 ++++ ginclude/varargs.h Mon Mar 20 13:29:13 2000 +@@ -78,12 +78,22 @@ + + #ifndef __GNUC_VA_LIST + #define __GNUC_VA_LIST ++#if defined (__FreeBSD__) ++/* This is the correct way to handle all BSD NET2 and BSD 4.4 systems. */ ++#include <machine/ansi.h> ++#ifdef _BSD_VA_LIST_ ++typedef _BSD_VA_LIST_ __gnuc_va_list; ++#else ++typedef _VA_LIST_ __gnuc_va_list; ++#endif ++#else + #if defined(__svr4__) || defined(_AIX) || defined(_M_UNIX) + typedef char *__gnuc_va_list; + #else + typedef void *__gnuc_va_list; + #endif + #endif ++#endif + + #define va_start(AP) AP=(char *) &__builtin_va_alist + +@@ -185,6 +195,11 @@ + + /* The next BSD release (if there is one) wants this symbol to be + undefined instead of _VA_LIST_. */ ++#if 0 ++/* BSD 4.4 actually spells the name _BSD_VA_LIST_ and requires it to be ++ * defined and usable in place of va_list when the latter name is not ++ * allowed (e.g., in stdio.h - see ginclude/stdarg.h). */ + #ifdef _BSD_VA_LIST + #undef _BSD_VA_LIST ++#endif + #endif diff --git a/lang/gcc27/files/patch-x-freebsd b/lang/gcc27/files/patch-x-freebsd new file mode 100644 index 00000000000..d1472f31ce8 --- /dev/null +++ b/lang/gcc27/files/patch-x-freebsd @@ -0,0 +1,8 @@ +--- config/i386/x-freebsd.orig Mon Oct 31 04:52:41 1994 ++++ config/i386/x-freebsd Mon Mar 20 13:19:55 2000 +@@ -1,3 +1,4 @@ + # Don't run fixproto + STMP_FIXPROTO = +-CLIB=-lgnumalloc ++# Use only native include files ++USER_H = diff --git a/lang/gcc27/pkg-comment b/lang/gcc27/pkg-comment new file mode 100644 index 00000000000..f7345586e15 --- /dev/null +++ b/lang/gcc27/pkg-comment @@ -0,0 +1 @@ +Base C/C++ compiler from FreeBSD 2.2.x & 3.x (for your old code) diff --git a/lang/gcc27/pkg-descr b/lang/gcc27/pkg-descr new file mode 100644 index 00000000000..d698d6f9472 --- /dev/null +++ b/lang/gcc27/pkg-descr @@ -0,0 +1,8 @@ +GCC 2.7.2.3 was the base compiler in FreeBSD 2.2.x thru 3.x. The new +EGCS/GCC Project compiler is used in FreeBSD 4.0 and later. Because of +the large number of changes to the new C++ compiler (mostly for ISO-C++ +compliance), this ancient version of the GNU's C/C++ compiler is offered +to allow you to build legacy systems on the latest and greatest FreeBSD +offering. + +-- David O'Brien <obrien@NUXI.com> diff --git a/lang/gcc27/pkg-plist b/lang/gcc27/pkg-plist new file mode 100644 index 00000000000..3317c61714d --- /dev/null +++ b/lang/gcc27/pkg-plist @@ -0,0 +1,390 @@ +@comment $FreeBSD$ +bin/g++27 +bin/gcc27 +bin/%%GNUHOST%%-gcc +@comment @unexec install-info --delete %D/info/cpp.info %D/info/dir +@comment @unexec install-info --delete %D/info/gcc.info %D/info/dir +info/cpp.info +info/cpp.info-1 +info/cpp.info-2 +info/cpp.info-3 +info/gcc.info +info/gcc.info-1 +info/gcc.info-10 +info/gcc.info-11 +info/gcc.info-12 +info/gcc.info-13 +info/gcc.info-14 +info/gcc.info-15 +info/gcc.info-16 +info/gcc.info-17 +info/gcc.info-18 +info/gcc.info-19 +info/gcc.info-2 +info/gcc.info-20 +info/gcc.info-21 +info/gcc.info-22 +info/gcc.info-23 +info/gcc.info-24 +info/gcc.info-25 +info/gcc.info-3 +info/gcc.info-4 +info/gcc.info-5 +info/gcc.info-6 +info/gcc.info-7 +info/gcc.info-8 +info/gcc.info-9 +@exec install-info +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/SYSCALLS.c.X +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/cc1 +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/cc1obj +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/cc1plus +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/cpp +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/ACG.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/AllocRing.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/Binomial.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/BitSet.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/BitString.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/Complex.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/CursesW.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/DLList.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/DiscUnif.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/Erlang.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/Fix.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/Fix16.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/Fix24.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/Geom.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/GetOpt.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/HypGeom.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/Incremental.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/Integer.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/LogNorm.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/MLCG.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/NegExp.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/Normal.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/Obstack.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/Pix.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/PlotFile.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/Poisson.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/RNG.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/Random.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/Rational.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/Regex.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/RndInt.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/SFile.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/SLList.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/SmplHist.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/SmplStat.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/String.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/Uniform.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/Weibull.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/_G_config.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/algo.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/algobase.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/algorithm +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/bitdo1.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/bitdo2.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/bitprims.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/bool.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/builtin.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/builtinbuf.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/bvector.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/cassert +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/cctype +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/cerrno +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/cfloat +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/ciso646 +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/climits +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/clocale +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/cmath +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/compare.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/complex +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/complex.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/csetjmp +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/csignal +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/cstdarg +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/cstddef +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/cstdio +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/cstdlib +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/cstring +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/ctime +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/cwchar +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/cwctype +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/defalloc.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/deque +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/deque.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/editbuf.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/exception +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/faralloc.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/fdeque.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/flist.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/floatio.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/fmap.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/fmultmap.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/fmultset.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/fset.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/fstream.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/function.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/functional +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/AVLMap.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/AVLMap.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/AVLSet.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/AVLSet.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/AVec.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/AVec.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/BSTSet.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/BSTSet.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/Bag.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/Bag.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/CHBag.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/CHBag.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/CHMap.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/CHMap.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/CHNode.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/CHNode.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/CHSet.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/CHSet.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/DLDeque.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/DLDeque.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/DLList.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/DLList.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/Deque.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/Deque.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/FPQueue.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/FPQueue.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/FPStack.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/FPStack.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/FPlex.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/FPlex.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/List.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/List.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/MPlex.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/MPlex.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/Map.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/Map.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/OSLBag.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/OSLBag.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/OSLSet.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/OSLSet.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/OXPBag.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/OXPBag.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/OXPSet.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/OXPSet.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/PHPQ.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/PHPQ.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/PQ.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/PQ.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/PSList.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/PVec.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/Plex.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/Plex.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/Queue.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/Queue.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/RAVLMap.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/RAVLMap.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/RPlex.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/RPlex.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/SLBag.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/SLBag.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/SLList.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/SLList.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/SLQueue.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/SLQueue.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/SLSet.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/SLSet.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/SLStack.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/SLStack.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/Set.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/Set.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/SkipBag.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/SkipBag.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/SkipMap.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/SkipMap.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/SkipSet.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/SkipSet.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/SplayBag.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/SplayBag.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/SplayMap.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/SplayMap.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/SplayNode.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/SplayNode.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/SplayPQ.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/SplayPQ.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/SplaySet.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/SplaySet.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/Stack.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/Stack.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/VHBag.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/VHBag.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/VHMap.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/VHMap.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/VHSet.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/VHSet.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/VOHSet.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/VOHSet.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/VQueue.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/VQueue.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/VStack.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/VStack.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/Vec.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/Vec.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/XPBag.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/XPBag.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/XPDeque.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/XPDeque.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/XPPQ.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/XPPQ.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/XPQueue.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/XPQueue.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/XPSet.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/XPSet.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/XPStack.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/XPStack.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/XPlex.ccP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/XPlex.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/defs.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/intSList.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen/intVec.hP +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/generic.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/getpagesize.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/hdeque.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/heap.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/hlist.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/hmap.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/hmultmap.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/hmultset.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/hset.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/hugalloc.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/hvector.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/indstream.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/iolibio.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/iomanip.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/iostdio.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/iostream.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/iostreamP.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/istream.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/iterator +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/iterator.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/lbvector.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/ldeque.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/libc.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/libio.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/libioP.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/list +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/list.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/llist.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/lmap.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/lmultmap.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/lmultset.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/lngalloc.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/lset.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/map +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/map.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/memory +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/minmax.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/multimap.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/multiset.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/neralloc.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/new +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/new.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/nmap.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/nmultmap.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/nmultset.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/nset.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/numeric +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/osfcn.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/ostream.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/pair.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/parsestream.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/pfstream.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/procbuf.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/projectn.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/queue +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/rx.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/set +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/set.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/stack +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/stack.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/std.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/std/bastring.cc +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/std/bastring.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/std/cassert.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/std/cctype.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/std/cerrno.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/std/cfloat.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/std/cinst.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/std/ciso646.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/std/climits.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/std/clocale.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/std/cmath.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/std/complex.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/std/complext.cc +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/std/complext.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/std/csetjmp.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/std/csignal.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/std/cstdarg.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/std/cstddef.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/std/cstdio.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/std/cstdlib.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/std/cstring.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/std/ctime.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/std/cwchar.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/std/cwctype.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/std/dcomplex.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/std/exception.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/std/fcomplex.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/std/ldcomplex.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/std/new.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/std/sinst.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/std/stddef.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/std/stdexcept.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/std/straits.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/std/string.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/std/typeinfo.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/stddef +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/stdexcept +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/stdiostream.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/stl.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/strclass.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/stream.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/streambuf.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/strfile.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/string +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/strstream.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/swap.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/sysent.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/tempbuf.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/tree.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/typeinfo +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/typemacros.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/utility +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/vector +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/vector.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/include/README +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/include/float.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/include/limits.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/include/objc/NXConstStr.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/include/objc/Object.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/include/objc/Protocol.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/include/objc/encoding.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/include/objc/hash.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/include/objc/list.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/include/objc/objc-api.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/include/objc/objc.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/include/objc/sarray.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/include/objc/typedstream.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/include/syslimits.h +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/libg++.a +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/libgcc.a +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/libiberty.a +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/libobjc.a +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/libstdc++.a +lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/specs +@dirrm lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/gen +@dirrm lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/std +@dirrm lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/g++-include/ +@dirrm lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/include/objc/ +@dirrm lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%%/include/ +@dirrm lib/gcc-lib/%%GNUHOST%%/%%GCC_VER%% +@dirrm lib/gcc-lib/%%GNUHOST%% +@dirrm lib/gcc-lib |