Port of the GCC 2.7.2.3 that was the base compiler in FreeBSD 2.2.x thru 3.x.

This commit is contained in:
David E. O'Brien 2000-03-22 19:10:42 +00:00
parent 2f7249c38e
commit 910033a076
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=26961
44 changed files with 2874 additions and 0 deletions

76
lang/gcc27/Makefile Normal file
View file

@ -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>

2
lang/gcc27/distinfo Normal file
View file

@ -0,0 +1,2 @@
MD5 (gcc-2.7.2.3.tar.gz) = 9f75fc7a5f13b691aabe8c1b775a4604
MD5 (libg++-2.7.2.tar.gz) = cfc85fb62113b72aa4f9688e08b385c4

View file

@ -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"

View file

@ -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; \

View file

@ -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);

View file

@ -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). */

View file

@ -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

View file

@ -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);
}

View file

@ -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);
}
}

View file

@ -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

View file

@ -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;
}

View file

@ -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

View file

@ -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)
{

View file

@ -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);
}

View file

@ -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. */

View file

@ -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);
}

View file

@ -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

View file

@ -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);

View file

@ -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. */

View file

@ -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;

View file

@ -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

View file

@ -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 \|',

View file

@ -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. */

View file

@ -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)

View file

@ -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

View file

@ -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)

View file

@ -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)

View file

@ -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++)
{

View file

@ -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

View file

@ -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};

View file

@ -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));
}
}

View file

@ -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));
}
}

View file

@ -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");

View file

@ -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

View file

@ -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))));
}

View file

@ -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);

View file

@ -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__

View file

@ -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 */

View file

@ -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}
};

View file

@ -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

View file

@ -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 =

1
lang/gcc27/pkg-comment Normal file
View file

@ -0,0 +1 @@
Base C/C++ compiler from FreeBSD 2.2.x & 3.x (for your old code)

8
lang/gcc27/pkg-descr Normal file
View file

@ -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>

390
lang/gcc27/pkg-plist Normal file
View file

@ -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