diff -2rcN dh5:gcc-2.1.orig/Makefile gcc-2.1/Makefile *** dh5:gcc-2.1.orig/Makefile --- gcc-2.1/Makefile Sun Apr 19 22:39:32 1992 *************** *** 0 **** --- 1,1594 ---- + # Makefile for GNU C compiler. + # Copyright (C) 1987, 1988, 1990, 1991 Free Software Foundation, Inc. + + #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, 675 Mass Ave, Cambridge, MA 02139, USA. + + # The targets for external use include: + # all, doc, proto, install, install-cross, install-cross-rest, + # uninstall, TAGS, mostlyclean, clean, distclean, realclean, + # stage1, stage2, stage3, stage4. + + # Suppress smart makes who think they know how to automake Yacc files + .y.c: + + .NOEXPORT: # This tells GNU Make version 3 + # not to put all the variables in the environment. + + # Variables that exist for you to override. + # See below for how to change them for certain systems. + + # Selection of languages to be made. + LANGUAGES = c c++ objective-c proto + + ALLOCA = + ALLOCA_FLAGS = -S -Demacs + ALLOCA_FINISH = as -o alloca.o alloca.s + + # Various ways of specifying flags for compilations: + # CFLAGS is for the user to override to, e.g., do a bootstrap with -O2. + # BOOT_CFLAGS is the value of CFLAGS to pass + # to the stage2 and stage3 compilations + # XCFLAGS is used for most compilations but not when using the GCC just built. + XCFLAGS = + CFLAGS = -O2 -fomit-frame-pointer -resident # -DFORK_GCC + BOOT_CFLAGS = -O $(CFLAGS) + # These exists to be overridden by the x-* and t-* files, respectively. + X_CFLAGS = + T_CFLAGS = + + X_CPPFLAGS = + T_CPPFLAGS = + + CC = gcc2 + #CC = stage2/gcc -Bstage2/ + BISON = bison + BISONFLAGS = + AR = ar + OLDAR_FLAGS = qc + AR_FLAGS = rc + #SHELL = /bin/sh + # on sysV, define this as cp. + INSTALL = install -c + # These permit overriding just for certain files. + INSTALL_PROGRAM = $(INSTALL) + INSTALL_DATA = $(INSTALL) + SYMLINK = ln -s + + # Define this as & to perform parallel make on a Sequent. + # Note that this has some bugs, and it seems currently necessary + # to compile all the gen* files first by hand to avoid erroneous results. + P = + + # How to invoke ranlib. + RANLIB = ranlib + # Test to use to see whether ranlib exists on the system. + RANLIB_TEST = true + + # Compiler to use for compiling libgcc1.a. + # OLDCC should not be the GNU C compiler, + # since that would compile typical libgcc1.a functions such as mulsi3 + # into infinite recursions. + OLDCC = cc + + # CFLAGS for use with OLDCC, for compiling libgcc1.a. + # NOTE: -O does not work on some Unix systems! + CCLIBFLAGS = -O + + # Version of ar to use when compiling libgcc1.a. + OLDAR = ar + + # The GCC to use for compiling libgcc2.a. Usually the one we just built. + # Don't use this as a dependency--use $(GCC_PASSES) or $(GCC_PARTS). + GCC_FOR_TARGET = ./gcc + + # This is used instead of ALL_CFLAGS when compiling with GCC_FOR_TARGET. + # It omits XCFLAGS, and specifies -B./. + GCC_CFLAGS=$(INTERNAL_CFLAGS) $(X_CFLAGS) $(T_CFLAGS) $(CFLAGS) -B./ + + # Special flags for compiling enquire. + # We disable optimization to make floating point more reliable. + ENQUIRE_CFLAGS = -DNO_SC -DNO_MEM -DNO_STDDEF -O0 + ENQUIRE_LDFLAGS = $(LDFLAGS) + + # Tools to use when building a cross-compiler. + # These are used because `configure' appends `cross-make' + # to the makefile when making a cross-compiler. + + TARGET_TOOLPREFIX = $(tooldir)/bin/ + AR_FOR_TARGET = $(TARGET_TOOLPREFIX)ar + AR_FOR_TARGET_FLAGS = rc + RANLIB_FOR_TARGET = $(TARGET_TOOLPREFIX)ranlib + RANLIB_TEST_FOR_TARGET = [ -f $(TARGET_TOOLPREFIX)ranlib ] + CROSS_TOOLS = + + target= amiga + xmake_file= + tmake_file= + version= 2.1 + + # Directory where sources are, from where we are. + srcdir = . + # Common prefix for installation directories. + # NOTE: This directory must exist when you start installation. + prefix = gcc20: + # Directory in which to put host dependent programs and libraries + exec_prefix = $(prefix) + # Directory in which to put the executable for the command `gcc' + bindir = $(exec_prefix)bin + # Directory in which to put the directories used by the compiler. + libdir = $(exec_prefix)lib + # Directory in which the compiler finds executables, libraries, etc. + libsubdir = $(libdir)/gcc-lib/$(target)/$(version) + # Extension (if any) to put in installed man-page filename. + manext = .1 + # Directory in which to put man pages. + mandir = $(prefix)man/man1 + # Directory in which to find other cross-compilation tools and headers. + # Used in install-cross. + tooldir = $(prefix)$(target) + + # Additional system libraries to link with. + #CLIB= eeak_a_bug.o -ldglue -ldebug -lsmall + + # Change this to a null string if obstacks are installed in the + # system library. + OBSTACK=obstack.o + + # Specify the rule for actually making libgcc1.a. + # The value may be empty; that means to do absolutely nothing + # with or for libgcc1.a. + LIBGCC1 = libgcc1.a + + # Specify the rule for actually making libgcc2.a. + LIBGCC2 = libgcc2.a + + # Options to use when compiling libgcc2.a. + # -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 $(GCC_CFLAGS) -g1 + + # List of extra executables that should be compiled for this target machine + # that are used for compiling from source code to object code. + # The rules for compiling them should be in the t-* file for the machine. + EXTRA_PASSES = + + # Like EXTRA_PASSES, but these are used when linking. + EXTRA_PROGRAMS = + + # List of extra object files that should be compiled for this target machine. + # The rules for compiling them should be in the t-* file for the machine. + EXTRA_PARTS = + + # List of extra object files that should be compiled and linked with + # compiler proper (cc1, cc1obj, cc1plus). + EXTRA_OBJS = + + # List of extra C and assembler files to add to libgcc1.a. + # Assembler files should have names ending in `.asm'. + LIB1FUNCS_EXTRA = + + # List of extra C and assembler files to add to libgcc2.a. + # Assembler files should have names ending in `.asm'. + LIB2FUNCS_EXTRA = + + # Program to convert libraries. + LIBCONVERT = + + # Control whether header files are installed. + # We will change this to install-fixincludes eventually. + # It would be useful for people to try this now. + INSTALL_HEADERS=install-headers + + # Select which version of fixincludes to use (I.E. regular versus SVR4) + FIXINCLUDES=fixincludes + + # List of things which should already be built whenever we try to use gcc + # to compile anything (without linking). + GCC_PASSES=gcc cc1 cpp $(EXTRA_PASSES) + + # List of things which should already be built whenever we try to use gcc + # to link anything. + GCC_PARTS=$(GCC_PASSES) libgcc.a $(EXTRA_PROGRAMS) $(EXTRA_PARTS) + + # Change this to empty to prevent installing limits.h. + # Actually, this currently has no effect, + # and if that causes no problems, it can be deleted. + # Otherwise, it must be replaced so as to control + # the actions of install-limits-h. + LIMITS_H = limits.h + + # Directory to link to, when using the target `maketest'. + DIR = ../gcc + + # Flags to use when cross-building GCC. + # Prefix to apply to names of object files when using them + # to run on the machine we are compiling on. + HOST_PREFIX= + # Prefix to apply to names of object files when compiling them + # to run on the machine we are compiling on. + # The default for this variable is chosen to keep these rules + # out of the way of the other rules for compiling the same source files. + HOST_PREFIX_1=loser- + HOST_CC=$(CC) + HOST_CFLAGS=$(ALL_CFLAGS) + HOST_CLIB=$(CLIB) + HOST_LDFLAGS=$(LDFLAGS) + HOST_CPPFLAGS=$(ALL_CPPFLAGS) + HOST_ALLOCA=$(ALLOCA) + HOST_MALLOC=$(MALLOC) + HOST_OBSTACK=$(OBSTACK) + + # Choose the real default target. + ALL=all.internal + + # Choose the real install target. + INSTALL_TARGET=install-native + + # End of variables for you to override. + + # Definition of `all' is here so that new rules inserted by sed + # do not specify the default target. + # The real definition is under `all.internal' (for native compilers) + # or `all.cross' (for cross compilers). + all: all.indirect + + # sed inserts variable overrides after the following line. + #### + + # Now figure out from those variables how to compile and link. + + all.indirect: $(ALL) + + INTERNAL_CFLAGS = $(CROSS) + + # This is the variable actually used when we compile. + ALL_CFLAGS = $(INTERNAL_CFLAGS) $(X_CFLAGS) $(T_CFLAGS) $(CFLAGS) $(XCFLAGS) + + # Likewise. + ALL_CPPFLAGS = $(CPPFLAGS) $(X_CPPFLAGS) $(T_CPPFLAGS) + + # Even if ALLOCA is set, don't use it if compiling with GCC. + USE_ALLOCA= + USE_HOST_ALLOCA= + USE_HOST_MALLOC= + USE_HOST_OBSTACK= $(OBSTACK) + + # Dependency on obstack, alloca, malloc or whatever library facilities + # are not installed in the system libraries. + # We don't use USE_ALLOCA because backquote expansion doesn't work in deps. + LIBDEPS= $(OBSTACK) $(ALLOCA) $(MALLOC) + + # Likewise, for use in the tools that must run on this machine + # even if we are cross-building GCC. + # We don't use USE_ALLOCA because backquote expansion doesn't work in deps. + HOST_LIBDEPS= $(HOST_PREFIX)$(HOST_OBSTACK) $(HOST_PREFIX)$(HOST_ALLOCA) $(HOST_PREFIX)$(HOST_MALLOC) + + # How to link with both our special library facilities + # and the system's installed libraries. + LIBS = $(OBSTACK) $(USE_ALLOCA) $(MALLOC) $(CLIB) + + # Likewise, for use in the tools that must run on this machine + # even if we are cross-building GCC. + HOST_LIBS = $(USE_HOST_OBSTACK) $(USE_HOST_ALLOCA) $(USE_HOST_MALLOC) \ + $(HOST_CLIB) + + HOST_RTL = $(HOST_PREFIX)rtl.o + HOST_RTLANAL = $(HOST_PREFIX)rtlanal.o + + # Specify the directories to be searched for header files. + # Both . and srcdir are used, in that order, + # so that tm.h and config.h will be found in the compilation + # subdirectory rather than in the source directory. + INCLUDES = -I. -I$(srcdir) -I$(srcdir)/config + SUBDIR_INCLUDES = -I.. -I../$(srcdir) -I../$(srcdir)/config + + # Always use -I$(srcdir)/config when compiling. + .c.o: + $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $< + + # This tells GNU make version 3 not to export all the variables + # defined in this file into the environment. + .NOEXPORT: + + # Lists of files for various purposes. + + # A list of all the language-specific executables. + COMPILERS = cc1 cc1plus cc1obj + + # Language-specific object files for C. + C_OBJS = c-parse.o c-lang.o \ + c-lex.o c-decl.o c-typeck.o c-convert.o c-aux-info.o c-common.o + + # Language-specific object files for Objectionable C. + OBJC_OBJS = objc-parse.o objc-actions.o \ + c-lex.o c-decl.o c-typeck.o c-convert.o c-aux-info.o c-common.o + + # Language-specific object files for C++. + CPLUS_OBJS = cp-parse.o cp-decl.o cp-decl2.o \ + cp-typeck.o cp-type2.o cp-tree.o cp-ptree.o \ + cp-cvt.o cp-search.o cp-lex.o cp-gc.o cp-call.o \ + cp-class.o cp-init.o cp-method.o cp-except.o \ + cp-expr.o cp-pt.o cp-edsel.o cp-xref.o \ + $(CPLUS_INPUT) cp-spew.o c-common.o + + # Language-independent object files. + OBJS = toplev.o version.o tree.o print-tree.o stor-layout.o fold-const.o \ + function.o stmt.o expr.o calls.o expmed.o explow.o optabs.o varasm.o \ + rtl.o print-rtl.o rtlanal.o emit-rtl.o \ + dbxout.o sdbout.o dwarfout.o xcoffout.o \ + integrate.o jump.o cse.o loop.o unroll.o flow.o stupid.o combine.o \ + regclass.o local-alloc.o global-alloc.o reload.o reload1.o caller-save.o \ + insn-peep.o reorg.o sched.o final.o recog.o reg-stack.o \ + insn-recog.o insn-extract.o insn-output.o insn-emit.o \ + insn-attrtab.o aux-output.o getpwd.o $(EXTRA_OBJS) + + # GEN files are listed separately, so they can be built before doing parallel + # makes for cc1 or cc1plus. Otherwise sequent parallel make attempts to load + # them before rtl.o is compiled. + GEN= genemit genoutput genrecog genextract genflags gencodes genconfig genpeep + + # Files to be copied away after each stage in building. + STAGESTUFF = *.o insn-flags.h insn-config.h insn-codes.h \ + insn-output.c insn-recog.c insn-emit.c insn-extract.c insn-peep.c \ + insn-attr.h insn-attrtab.c \ + stamp-flags stamp-config stamp-codes \ + stamp-output stamp-recog stamp-emit stamp-extract stamp-peep \ + stamp-attr stamp-attrtab \ + genemit genoutput genrecog genextract genflags gencodes genconfig genpeep \ + genattrtab genattr \ + $(GCC_PASSES) $(EXTRA_PARTS) gcc-cross cccp cc1plus cc1obj enquire \ + protoize unprotoize specs collect2 + + # Members of libgcc1.a. + LIB1FUNCS = _mulsi3 _udivsi3 _divsi3 _umodsi3 _modsi3 \ + _lshrsi3 _lshlsi3 _ashrsi3 _ashlsi3 \ + _divdf3 _muldf3 _negdf2 _adddf3 _subdf3 \ + _fixdfsi _fixsfsi _floatsidf _floatsisf _truncdfsf2 _extendsfdf2 \ + _addsf3 _negsf2 _subsf3 _mulsf3 _divsf3 \ + _eqdf2 _nedf2 _gtdf2 _gedf2 _ltdf2 _ledf2 \ + _eqsf2 _nesf2 _gtsf2 _gesf2 _ltsf2 _lesf2 + + # Library members defined in libgcc2.c. + LIB2FUNCS = _muldi3 _divdi3 _moddi3 _udivdi3 _umoddi3 _negdi2 \ + _lshrdi3 _lshldi3 _ashldi3 _ashrdi3 \ + _udivmoddi4 _cmpdi2 _ucmpdi2 _floatdidf _floatdisf \ + _fixunsdfsi _fixunssfsi _fixunsdfdi _fixdfdi _fixunssfdi _fixsfdi \ + _varargs _eprintf _builtin_new _builtin_New _builtin_del \ + _bb _shtab _clear_cache _trampoline __main _exit + + # Header files that are made available under the same name + # to programs compiled with gcc. + USER_H = assert.h va-hp800.h va-i860.h va-mips.h va-pyr.h va-sparc.h \ + va-spur.h va-m88k.h proto.h + + # All the header files that are installed for users from GCC itself. + INSTALLED_H = float.h stddef.h stdarg.h varargs.h $(USER_H) limits.h + + # The files that "belong" in CONFIG_H are deliberately omitted + # because having them there would not be useful in actual practice. + # All they would do is cause complete recompilation every time + # one of the machine description files is edited. + # That may or may not be what one wants to do. + # If it is, rm *.o is an easy way to do it. + # CONFIG_H = config.h tm.h + CONFIG_H = + RTL_H = rtl.h rtl.def machmode.h machmode.def + TREE_H = tree.h real.h tree.def machmode.h machmode.def + CPLUS_TREE_H = $(TREE_H) cp-tree.h cp-tree.def + + # Avoid a lot of time thinking about remaking Makefile.in and *.def. + .SUFFIXES: .in .def + + Makefile: $(srcdir)/Makefile.in $(srcdir)/configure \ + $(srcdir)/config/$(xmake_file) $(srcdir)/config/$(tmake_file) + sh config.status + + all.internal: start.encap rest.encap + # This is what to compile if making a cross-compiler. + all.cross: native gcc-cross + # This is what must be made before installing GCC and converting libraries. + start.encap: native gcc $(LIBGCC1_TARGET) + # Use this to make a GCC that will be used only to recompile GCC. + for-bootstrap: start.encap libgcc.a + # These can't be made, with COFF encapsulation, until after GCC can run. + rest.encap: libgcc.a float.h $(EXTRA_PARTS) + # This is what is made with the host's compiler + # whether making a cross compiler or not. + native: config.status cpp $(LANGUAGES) $(EXTRA_PASSES) $(EXTRA_PROGRAMS) + + # Define the names for selecting languages in LANGUAGES. + C c: cc1 + C++ c++: cc1plus + OBJC objc: cc1obj + OBJECTIVE-C objective-c: cc1obj + PROTO: proto + + # Really, really stupid make features, such as SUN's KEEP_STATE, may force + # a target to build even if it is up-to-date. So we must verify that + # config.status does not exist before failing. + config.status: + @if [ ! -f config.status ] ; then \ + echo You must configure gcc. Look at the INSTALL file for details.; \ + false; \ + else \ + true; \ + fi + + compilations: ${OBJS} + + gcc: gcc.o version.o $(LIBDEPS) + $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o gccnew gcc.o version.o $(LIBS) + # Go via `gccnew' to avoid `file busy' if $(CC) is `gcc'. + mv -f gccnew gcc + # Dump a specs file to make -B./ read these specs over installed ones + ./gcc -dumpspecs > specs + + # We do want to create an executable named `gcc', so we can use it to + # compile libgcc2.a. + # Also create gcc-cross, so that install-common will install properly. + gcc-cross: gcc + cp gcc gcc-cross + + cc1: $(P) $(C_OBJS) $(OBJS) $(LIBDEPS) + $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o cc1 $(C_OBJS) $(OBJS) $(LIBS) + + cc1plus:$(P) $(CPLUS_OBJS) $(OBJS) $(LIBDEPS) + $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o cc1plus $(CPLUS_OBJS) $(OBJS) $(LIBS) + + cc1obj:$(P) $(OBJC_OBJS) $(OBJS) $(LIBDEPS) + $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o cc1obj $(OBJC_OBJS) $(OBJS) $(LIBS) + + float.h: enquire + -./enquire -f > tmp-float.h + mv tmp-float.h float.h + + # Used to compile enquire with standard cc, but have forgotten why. + # Let's try with GCC. + enquire: enquire.o $(GCC_PARTS) + $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(ENQUIRE_LDFLAGS) enquire.o -o $@ + enquire.o: $(srcdir)/enquire.c $(GCC_PASSES) + -cp $(srcdir)/enquire.c . > /dev/null 2>&1 + # Breaking this line caused a problem with one version of GNU make. + $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(ALL_CPPFLAGS) $(ENQUIRE_CFLAGS) -I. -c enquire.c + + # Build libgcc.a. + # This is done in two parts because some functions, in libgcc1.c, + # must be compiled with something other than gcc, + # while the rest, in libgcc2.c, must be compiled with gcc. + # That means we can't do libgcc2.c until after gcc, cc1, etc. + + # Use this as value of LIBGCC1 to cause conversion to GNU library format. + # LIBCONVERT should put its output in libgcc1.conv. + libgcc1.conv: libgcc1.a + $(LIBCONVERT) libgcc1.a libgcc1.conv + + # Use this as value of LIBGCC1 to inhibit use of libgcc1.c entirely. + # Make an empty file instead. + libgcc1.null: $(CROSS_TOOLS) $(GCC_PASSES) + echo "__foo () {}" > dummy.c + $(GCC_FOR_TARGET) $(GCC_CFLAGS) -c dummy.c + $(OLDAR) $(OLDAR_FLAGS) libgcc1.null dummy.o + rm -f dummy.o dummy.c + + # Compile the library of arithmetic subroutines with the native compiler. + # Don't compile it with gcc! + # (That would cause most arithmetic functions to call themselves.) + libgcc1.a: libgcc1.c $(CONFIG_H) $(LIB1FUNCS_EXTRA) config.status + -rm -f tmplibgcc1.a + # Actually build it in tmplibgcc1.a, then rename at end, + # so that libgcc1.a itself remains nonexistent if compilation is aborted. + # -e causes any failing command to make this rule fail. + # -e doesn't work in certain shells, so we test $$? as well. + set -e; \ + for name in $(LIB1FUNCS); \ + do \ + echo $${name}; \ + rm -f $${name}.o; \ + $(OLDCC) $(CCLIBFLAGS) $(INCLUDES) -c -DL$${name} $(srcdir)/libgcc1.c; \ + if [ $$? -eq 0 ] ; then true; else exit 1; fi; \ + mv libgcc1.o $${name}.o; \ + $(OLDAR) $(OLDAR_FLAGS) tmplibgcc1.a $${name}.o; \ + rm -f $${name}.o; \ + done + # Some shells crash when a loop has no items. + # So make sure there is always at least one--`..'. + # Then ignore it. + # We don't use -e here because there are if statements + # that should not make the command give up when the if condition is false. + # Instead, we test for failure after each command where it matters. + -for file in .. $(LIB1FUNCS_EXTRA); \ + do \ + if [ x$${file} != x.. ]; then \ + name=`echo $${file} | sed -e 's/[.]c$$//' -e 's/[.]asm$$//'`; \ + echo $${name}; \ + if [ $${name}.asm = $${file} ]; then \ + cp $${file} $${name}.s; file=$${name}.s; \ + if [ $$? -eq 0 ] ; then true; else exit 1; fi; \ + else true; fi; \ + $(OLDCC) $(CCLIBFLAGS) $(INCLUDES) -c $${file}; \ + if [ $$? -eq 0 ] ; then true; else exit 1; fi; \ + $(OLDAR) $(OLDAR_FLAGS) tmplibgcc1.a $${name}.o; \ + if [ $$? -eq 0 ] ; then true; else exit 1; fi; \ + rm -f $${name}.[so]; \ + else true; \ + fi; \ + done + mv tmplibgcc1.a libgcc1.a + + # Compiling libgcc2.a requires making sure that cc1, etc. have been compiled. + # But recompiling cc1 should not force recompilation of libgcc2.a. + # If you want to force recompilation, delete libgcc2.a. + # Depend on install-cross-tools to make sure we set up properly + # to run the assembler before we try compiling anything. + # install-cross-tools does nothing if not cross compiling. + libgcc2.ready: $(GCC_PASSES) $(CROSS_TOOLS) + -if [ -f libgcc2.ready ] ; then \ + true; \ + else \ + touch libgcc2.ready; \ + fi + + libgcc2.a: libgcc2.c libgcc2.ready $(CONFIG_H) $(LIB2FUNCS_EXTRA) \ + longlong.h gbl-ctors.h config.status + # Actually build it in tmplibgcc2.a, then rename at end, + # so that libgcc2.a itself remains nonexistent if compilation is aborted. + -rm -f tmplibgcc2.a + # -e causes any failing command to make this rule fail. + # -e doesn't work in certain shells, so we test $$? as well. + set -e; \ + for name in $(LIB2FUNCS); \ + do \ + echo $${name}; \ + $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(INCLUDES) -c -DL$${name} \ + $(srcdir)/libgcc2.c -o $${name}.o; \ + if [ $$? -eq 0 ] ; then true; else exit 1; fi; \ + $(AR) $(AR_FLAGS) tmplibgcc2.a $${name}.o; \ + rm -f $${name}.o; \ + done + # Some shells crash when a loop has no items. + # So make sure there is always at least one--`..'. + # Then ignore it. + # We don't use -e here because there are if statements + # that should not make the command give up when the if condition is false. + # Instead, we test for failure after each command where it matters. + -for file in .. $(LIB2FUNCS_EXTRA); \ + do \ + if [ x$${file} != x.. ]; then \ + name=`echo $${file} | sed -e 's/[.]c$$//' -e 's/[.]asm$$//'`; \ + echo $${name}; \ + if [ $${name}.asm = $${file} ]; then \ + cp $${file} $${name}.s; file=$${name}.s; \ + if [ $$? -eq 0 ] ; then true; else exit 1; fi; \ + else true; fi; \ + $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(INCLUDES) -c $${file}; \ + if [ $$? -eq 0 ] ; then true; else exit 1; fi; \ + $(AR) $(AR_FLAGS) tmplibgcc2.a $${name}.o; \ + rm -f $${name}.[so]; \ + else true; \ + fi; \ + done + mv tmplibgcc2.a libgcc2.a + # These lines were deleted from above the mv command + # because ranlibing libgcc.a itself should suffice. + # -if [ x${HPUX_GAS} = x ] ; then \ + # if $(RANLIB_TEST) ; then $(RANLIB) tmplibgcc2.a; else true; fi \ + # else true; fi + + # Combine the various libraries into a single library, libgcc.a. + libgcc.a: $(LIBGCC1) $(LIBGCC2) + -rm -rf tmplibgcc.a libgcc.a tmpcopy + mkdir tmpcopy + -if [ x$(LIBGCC1) != x ]; \ + then (cd tmpcopy; $(AR) x ../$(LIBGCC1)); \ + else true; \ + fi + (cd tmpcopy; $(AR) x ../$(LIBGCC2)) + (cd tmpcopy; $(AR) $(AR_FLAGS) ../tmplibgcc.a *.o) + rm -rf tmpcopy + -if $(RANLIB_TEST) ; then $(RANLIB) tmplibgcc.a; else true; fi + # Actually build it in tmplibgcc.a, then rename at end, + # so that libgcc.a itself remains nonexistent if compilation is aborted. + mv tmplibgcc.a libgcc.a + + + # Compile two additional files that are linked with every program + # linked using GCC on system V, for the sake of C++ constructors. + crtbegin.o: crtstuff.c $(GCC_PASSES) $(CONFIG_H) gbl-ctors.h + $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) -DCRT_BEGIN \ + -finhibit-size-directive -g0 -c $(srcdir)/crtstuff.c -o crtbegin.o + + crtend.o: crtstuff.c $(GCC_PASSES) $(CONFIG_H) gbl-ctors.h + $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) -DCRT_END \ + -finhibit-size-directive -g0 -c $(srcdir)/crtstuff.c -o crtend.o + + # Compiling object files from source files. + + # Note that dependencies on obstack.h are not written + # because that file is not part of GCC. + # Dependencies on gvarargs.h are not written + # because all that file does, when not compiling with GCC, + # is include the system varargs.h. + + # C language specific files. + + c-parse.o : $(srcdir)/c-parse.c $(CONFIG_H) $(TREE_H) c-lex.h c-tree.h input.h flags.h + $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c $(srcdir)/c-parse.c + $(srcdir)/c-parse.c $(srcdir)/c-parse.h: $(srcdir)/c-parse.y + $(BISON) $(BISONFLAGS) -d c-parse.y -o c-parse.c + + c-decl.o : c-decl.c $(CONFIG_H) $(TREE_H) c-tree.h c-lex.h flags.h + c-typeck.o : c-typeck.c $(CONFIG_H) $(TREE_H) c-tree.h flags.h + c-lang.o : c-lang.c $(CONFIG_H) $(TREE_H) + c-lex.o : c-lex.c $(CONFIG_H) $(TREE_H) c-lex.h c-tree.h c-parse.h \ + input.h flags.h + c-aux-info.o : c-aux-info.c $(CONFIG_H) $(TREE_H) c-tree.h flags.h + c-convert.o : c-convert.c $(CONFIG_H) $(TREE_H) flags.h + + # C++ language specific files. + + cp-parse.o : $(srcdir)/cp-parse.c $(CONFIG_H) $(CPLUS_TREE_H) flags.h + $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) cp-parse.c + + $(srcdir)/cp-parse.c $(srcdir)/cp-parse.h : $(srcdir)/cp-parse.y + @echo expect 30 shift/reduce conflicts and 14 reduce/reduce conflicts + $(BISON) $(BISONFLAGS) -d -o cp-parse.c cp-parse.y + + cp-spew.o : cp-spew.c $(CONFIG_H) $(CPLUS_TREE_H) \ + $(srcdir)/cp-parse.h flags.h + cp-lex.o : cp-lex.c $(CONFIG_H) $(CPLUS_TREE_H) \ + $(srcdir)/cp-parse.h $(srcdir)/cp-input.c flags.h + cp-decl.o : cp-decl.c $(CONFIG_H) $(CPLUS_TREE_H) flags.h \ + cp-lex.h cp-decl.h stack.h + cp-decl2.o : cp-decl2.c $(CONFIG_H) $(CPLUS_TREE_H) flags.h \ + cp-lex.h cp-decl.h + cp-type2.o : cp-type2.c $(CONFIG_H) $(CPLUS_TREE_H) flags.h + cp-typeck.o : cp-typeck.c $(CONFIG_H) $(CPLUS_TREE_H) flags.h + cp-class.o : cp-class.c $(CONFIG_H) $(CPLUS_TREE_H) stack.h \ + cp-class.h flags.h + cp-call.o : cp-call.c $(CONFIG_H) $(CPLUS_TREE_H) stack.h cp-class.h \ + flags.h + cp-init.o : cp-init.c $(CONFIG_H) $(CPLUS_TREE_H) flags.h + cp-method.o : cp-method.c $(CONFIG_H) $(CPLUS_TREE_H) + cp-cvt.o : cp-cvt.c $(CONFIG_H) $(CPLUS_TREE_H) + cp-search.o : cp-search.c $(CONFIG_H) $(CPLUS_TREE_H) stack.h flags.h + cp-tree.o : cp-tree.c $(CONFIG_H) $(CPLUS_TREE_H) flags.h + cp-ptree.o : cp-ptree.c $(CONFIG_H) $(CPLUS_TREE_H) + cp-gc.o : cp-gc.c $(CONFIG_H) $(CPLUS_TREE_H) flags.h + cp-except.o : cp-except.c $(CONFIG_H) $(CPLUS_TREE_H) flags.h + cp-expr.o : cp-expr.c $(CONFIG_H) $(CPLUS_TREE_H) $(RTL_H) flags.h \ + expr.h insn-codes.h + cp-edsel.o : cp-edsel.c $(CONFIG_H) $(CPLUS_TREE_H) stack.h flags.h + cp-xref.o : cp-xref.c $(CONFIG_H) $(CPLUS_TREE_H) + cp-pt.o : cp-pt.c $(CONFIG_H) $(CPLUS_TREE_H) cp-decl.h cp-parse.h + + collect2 : collect2.o version.o $(LIBDEPS) + $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o collect2 collect2.o version.o $(LIBS) + + collect2.o : collect2.c $(CONFIG_H) gstab.h + $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ + -DSTANDARD_STARTFILE_PREFIX="$(libdir)/" \ + -DSTANDARD_BIN_PREFIX="$(bindir)/" \ + -DSTANDARD_EXEC_PREFIX="$(libdir)/gcc-lib/" \ + -DDEFAULT_TARGET_MACHINE="$(target)" -c collect2.c + + # Objectionable C language specific files. + + objc-parse.o : $(srcdir)/objc-parse.c $(CONFIG_H) $(TREE_H) c-lex.h \ + c-tree.h input.h flags.h objc-actions.h + $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c $(srcdir)/objc-parse.c + $(srcdir)/objc-parse.c : $(srcdir)/objc-parse.y + $(BISON) $(BISONFLAGS) objc-parse.y -o objc-parse.c + + objc-actions.o : objc-actions.c $(CONFIG_H) $(TREE_H) c-tree.h c-lex.h \ + flags.h objc-actions.h + + # A file used by all variants of C. + + c-common.o : c-common.c $(CONFIG_H) $(TREE_H) c-tree.h c-lex.h flags.h + + # Language-independent files. + + gcc.o: gcc.c $(CONFIG_H) gvarargs.h obstack.h + $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ + -DSTANDARD_STARTFILE_PREFIX="$(libdir)/" \ + -DSTANDARD_EXEC_PREFIX="$(libdir)/gcc-lib/" \ + -DDEFAULT_TARGET_MACHINE="$(target)" -c gcc.c + + dumpvers: dumpvers.c + + version.o: version.c + obstack.o: obstack.c + + tree.o : tree.c $(CONFIG_H) $(TREE_H) gvarargs.h flags.h function.h + print-tree.o : print-tree.c $(CONFIG_H) $(TREE_H) + stor-layout.o : stor-layout.c $(CONFIG_H) $(TREE_H) function.h + fold-const.o : fold-const.c $(CONFIG_H) $(TREE_H) flags.h + toplev.o : toplev.c $(CONFIG_H) $(TREE_H) $(RTL_H) flags.h input.h \ + insn-attr.h xcoffout.h + + rtl.o : rtl.c $(CONFIG_H) $(RTL_H) + + print-rtl.o : print-rtl.c $(CONFIG_H) $(RTL_H) + rtlanal.o : rtlanal.c $(CONFIG_H) $(RTL_H) + + varasm.o : varasm.c $(CONFIG_H) $(TREE_H) $(RTL_H) flags.h \ + insn-codes.h expr.h hard-reg-set.h regs.h xcoffout.h + function.o : function.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h function.h \ + insn-flags.h insn-codes.h expr.h regs.h hard-reg-set.h insn-config.h \ + recog.h output.h + stmt.o : stmt.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h function.h \ + insn-flags.h insn-config.h insn-codes.h hard-reg-set.h expr.h loop.h recog.h + expr.o : expr.c $(CONFIG_H) $(RTL_H) $(TREE_H) gvarargs.h flags.h function.h \ + insn-flags.h insn-codes.h expr.h insn-config.h recog.h output.h typeclass.h + calls.o : calls.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h expr.h insn-codes.h \ + insn-flags.h + expmed.o : expmed.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h \ + insn-flags.h insn-config.h insn-codes.h expr.h recog.h real.h + explow.o : explow.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h hard-reg-set.h \ + insn-config.h expr.h recog.h insn-flags.h insn-codes.h + optabs.o : optabs.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h \ + insn-flags.h insn-config.h insn-codes.h expr.h recog.h + dbxout.o : dbxout.c $(CONFIG_H) $(TREE_H) $(RTL_H) flags.h regs.h \ + insn-config.h reload.h gstab.h xcoffout.h + sdbout.o : sdbout.c $(CONFIG_H) $(TREE_H) $(RTL_H) gsyms.h flags.h \ + insn-config.h reload.h + dwarfout.o : dwarfout.c $(CONFIG_H) $(TREE_H) $(RTL_H) dwarf.h flags.h \ + insn-config.h reload.h output.h + xcoffout.o : xcoffout.c $(CONFIG_H) $(TREE_H) $(RTL_H) xcoffout.h flags.h + emit-rtl.o : emit-rtl.c $(CONFIG_H) $(RTL_H) flags.h gvarargs.h function.h \ + regs.h insn-config.h insn-codes.h real.h expr.h + getpwd.o : getpwd.c $(CONFIG_H) + + integrate.o : integrate.c $(CONFIG_H) $(RTL_H) $(TREE_H) flags.h integrate.h \ + insn-flags.h insn-config.h insn-codes.h expr.h real.h function.h + + jump.o : jump.c $(CONFIG_H) $(RTL_H) flags.h hard-reg-set.h regs.h \ + insn-config.h insn-flags.h insn-codes.h expr.h real.h + stupid.o : stupid.c $(CONFIG_H) $(RTL_H) regs.h hard-reg-set.h flags.h + + cse.o : cse.c $(CONFIG_H) $(RTL_H) regs.h hard-reg-set.h flags.h real.h \ + insn-config.h recog.h + loop.o : loop.c $(CONFIG_H) $(RTL_H) flags.h loop.h insn-config.h \ + insn-flags.h insn-codes.h regs.h hard-reg-set.h recog.h expr.h real.h + unroll.o : unroll.c $(CONFIG_H) $(RTL_H) insn-config.h insn-codes.h \ + integrate.h regs.h flags.h expr.h loop.h + flow.o : flow.c $(CONFIG_H) $(RTL_H) flags.h insn-config.h \ + basic-block.h regs.h hard-reg-set.h output.h + combine.o : combine.c $(CONFIG_H) $(RTL_H) gvarargs.h flags.h \ + insn-config.h insn-flags.h insn-codes.h insn-attr.h regs.h expr.h \ + basic-block.h recog.h real.h + regclass.o : regclass.c $(CONFIG_H) $(RTL_H) hard-reg-set.h flags.h \ + basic-block.h regs.h insn-config.h recog.h + local-alloc.o : local-alloc.c $(CONFIG_H) $(RTL_H) flags.h basic-block.h \ + regs.h hard-reg-set.h insn-config.h recog.h output.h + global-alloc.o : global-alloc.c $(CONFIG_H) $(RTL_H) flags.h \ + basic-block.h regs.h hard-reg-set.h insn-config.h output.h + + reload.o : reload.c $(CONFIG_H) $(RTL_H) flags.h \ + reload.h recog.h hard-reg-set.h insn-config.h insn-codes.h regs.h real.h + reload1.o : reload1.c $(CONFIG_H) $(RTL_H) flags.h expr.h \ + reload.h regs.h hard-reg-set.h insn-config.h insn-flags.h insn-codes.h \ + basic-block.h recog.h output.h + caller-save.o : caller-save.c $(CONFIG_H) $(RTL_H) flags.h \ + regs.h hard-reg-set.h insn-config.h basic-block.h recog.h reload.h expr.h + reorg.o : reorg.c $(CONFIG_H) $(RTL_H) conditions.h hard-reg-set.h \ + basic-block.h regs.h insn-config.h insn-attr.h insn-flags.h recog.h \ + flags.h output.h + sched.o : sched.c $(CONFIG_H) $(RTL_H) basic-block.h regs.h hard-reg-set.h \ + flags.h insn-config.h insn-attr.h + final.o : final.c $(CONFIG_H) $(RTL_H) gvarargs.h flags.h regs.h \ + recog.h conditions.h insn-config.h insn-attr.h real.h output.h \ + hard-reg-set.h insn-codes.h gstab.h xcoffout.h + recog.o : recog.c $(CONFIG_H) $(RTL_H) \ + regs.h recog.h hard-reg-set.h flags.h insn-config.h insn-attr.h \ + insn-flags.h insn-codes.h real.h + reg-stack.o : reg-stack.c $(CONFIG_H) $(RTL_H) $(TREE_H) \ + regs.h hard-reg-set.h flags.h insn-config.h + + aux-output.o : aux-output.c $(CONFIG_H) \ + $(RTL_H) regs.h hard-reg-set.h real.h insn-config.h conditions.h \ + insn-flags.h output.h insn-attr.h insn-codes.h + + # Normally this target is not used; but it is used if you + # define ALLOCA=alloca.o. In that case, you must get a suitable alloca.c + # from the GNU Emacs distribution. + # Note some machines won't allow $(CC) without -S on this source file. + alloca.o: alloca.c + # sed is used to strip the comments from the assembler output. + $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(ALLOCA_FLAGS) \ + `echo $(srcdir)/alloca.c | sed 's,^\./,,'` + $(ALLOCA_FINISH) + -rm alloca.s + + # Generate header and source files from the machine description, + # and compile them. + + .PRECIOUS: insn-config.h insn-flags.h insn-codes.h \ + insn-emit.c insn-recog.c insn-extract.c insn-output.c insn-peep.c \ + insn-attr.h insn-attrtab.c + + # The following pair of rules has this effect: + # genconfig is run only if the md has changed since genconfig was last run; + # but the file insn-config.h is touched only when its contents actually change. + + # Each of the other insn-* files is handled by a similar pair of rules. + + # Each of the insn-*.[ch] rules has a semicolon at the end, + # for otherwise the system Make on SunOS 4.1 never tries + # to recompile insn-*.o. + + insn-config.h: stamp-config ; + stamp-config : md genconfig $(srcdir)/move-if-change + ./genconfig md > tmp-config.h + $(srcdir)/move-if-change tmp-config.h insn-config.h + touch stamp-config + + insn-flags.h: stamp-flags ; + stamp-flags : md genflags $(srcdir)/move-if-change + ./genflags md > tmp-flags.h + $(srcdir)/move-if-change tmp-flags.h insn-flags.h + touch stamp-flags + + insn-codes.h: stamp-codes ; + stamp-codes : md gencodes $(srcdir)/move-if-change + ./gencodes md > tmp-codes.h + $(srcdir)/move-if-change tmp-codes.h insn-codes.h + touch stamp-codes + + insn-emit.o : insn-emit.c $(CONFIG_H) $(RTL_H) expr.h real.h output.h \ + insn-config.h insn-flags.h insn-codes.h + $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-emit.c + + insn-emit.c: stamp-emit ; + stamp-emit : md genemit $(srcdir)/move-if-change + ./genemit md > tmp-emit.c + $(srcdir)/move-if-change tmp-emit.c insn-emit.c + touch stamp-emit + + insn-recog.o : insn-recog.c $(CONFIG_H) $(RTL_H) insn-config.h recog.h \ + real.h output.h flags.h + $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-recog.c + + insn-recog.c: stamp-recog ; + stamp-recog : md genrecog $(srcdir)/move-if-change + ./genrecog md > tmp-recog.c + $(srcdir)/move-if-change tmp-recog.c insn-recog.c + touch stamp-recog + + insn-extract.o : insn-extract.c $(CONFIG_H) $(RTL_H) + $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-extract.c + + insn-extract.c: stamp-extract ; + stamp-extract : md genextract $(srcdir)/move-if-change + ./genextract md > tmp-extract.c + $(srcdir)/move-if-change tmp-extract.c insn-extract.c + touch stamp-extract + + insn-peep.o : insn-peep.c $(CONFIG_H) $(RTL_H) regs.h output.h real.h + $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-peep.c + + insn-peep.c: stamp-peep ; + stamp-peep : md genpeep $(srcdir)/move-if-change + ./genpeep md > tmp-peep.c + $(srcdir)/move-if-change tmp-peep.c insn-peep.c + touch stamp-peep + + insn-attrtab.o : insn-attrtab.c $(CONFIG_H) $(RTL_H) regs.h real.h output.h \ + insn-attr.h insn-config.h + $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-attrtab.c + + insn-attr.h: stamp-attr ; + stamp-attr : md genattr $(srcdir)/move-if-change + ./genattr md > tmp-attr.h + $(srcdir)/move-if-change tmp-attr.h insn-attr.h + touch stamp-attr + + insn-attrtab.c: stamp-attrtab ; + stamp-attrtab : md genattrtab $(srcdir)/move-if-change + ./genattrtab md > tmp-attrtab.c + $(srcdir)/move-if-change tmp-attrtab.c insn-attrtab.c + touch stamp-attrtab + + insn-output.o : insn-output.c $(CONFIG_H) $(RTL_H) regs.h real.h conditions.h \ + hard-reg-set.h insn-config.h insn-flags.h insn-attr.h output.h recog.h \ + insn-codes.h + $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-output.c + + insn-output.c: stamp-output ; + stamp-output : md genoutput $(srcdir)/move-if-change + ./genoutput md > tmp-output.c + $(srcdir)/move-if-change tmp-output.c insn-output.c + touch stamp-output + + # Compile the programs that generate insn-* from the machine description. + # They are compiled with $(HOST_CC), and associated libraries, + # since they need to run on this machine + # even if GCC is being compiled to run on some other machine. + + # $(CONFIG_H) is omitted from the deps of the gen*.o + # because these programs don't really depend on anything + # about the target machine. They do depend on config.h itself, + # since that describes the host machine. + + genconfig : genconfig.o $(HOST_RTL) $(HOST_LIBDEPS) + $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o genconfig \ + genconfig.o $(HOST_RTL) $(HOST_LIBS) + + genconfig.o : genconfig.c $(RTL_H) config.h + $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genconfig.c + + genflags : genflags.o $(HOST_RTL) $(HOST_LIBDEPS) + $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o genflags \ + genflags.o $(HOST_RTL) $(HOST_LIBS) + + genflags.o : genflags.c $(RTL_H) config.h + $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genflags.c + + gencodes : gencodes.o $(HOST_RTL) $(HOST_LIBDEPS) + $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o gencodes \ + gencodes.o $(HOST_RTL) $(HOST_LIBS) + + gencodes.o : gencodes.c $(RTL_H) config.h + $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/gencodes.c + + genemit : genemit.o $(HOST_RTL) $(HOST_LIBDEPS) + $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o genemit \ + genemit.o $(HOST_RTL) $(HOST_LIBS) + + genemit.o : genemit.c $(RTL_H) config.h + $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genemit.c + + genrecog : genrecog.o $(HOST_RTL) $(HOST_LIBDEPS) + $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o genrecog \ + genrecog.o $(HOST_RTL) $(HOST_LIBS) + + genrecog.o : genrecog.c $(RTL_H) config.h + $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genrecog.c + + genextract : genextract.o $(HOST_RTL) $(HOST_LIBDEPS) + $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o genextract \ + genextract.o $(HOST_RTL) $(HOST_LIBS) + + genextract.o : genextract.c $(RTL_H) config.h + $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genextract.c + + genpeep : genpeep.o $(HOST_RTL) $(HOST_LIBDEPS) + $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o genpeep \ + genpeep.o $(HOST_RTL) $(HOST_LIBS) + + genpeep.o : genpeep.c $(RTL_H) config.h + $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genpeep.c + + genattr : genattr.o $(HOST_RTL) $(HOST_LIBDEPS) + $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o genattr \ + genattr.o $(HOST_RTL) $(HOST_LIBS) + + genattr.o : genattr.c $(RTL_H) config.h + $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genattr.c + + genattrtab : genattrtab.o $(HOST_RTL) $(HOST_RTLANAL) $(HOST_LIBDEPS) + $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o genattrtab \ + genattrtab.o $(HOST_RTL) $(HOST_RTLANAL) $(HOST_LIBS) + + genattrtab.o : genattrtab.c $(RTL_H) config.h insn-config.h + $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genattrtab.c + + genoutput : genoutput.o $(HOST_RTL) $(HOST_LIBDEPS) + $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o genoutput \ + genoutput.o $(HOST_RTL) $(HOST_LIBS) + + genoutput.o : genoutput.c $(RTL_H) config.h + $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(srcdir)/genoutput.c + + # Compile the libraries to be used by gen*. + # If we are not cross-building, gen* use the same .o's that cc1 will use, + # and HOST_PREFIX_1 is `foobar', just to ensure these rules don't conflict + # with the rules for rtl.o, alloca.o, etc. + $(HOST_PREFIX_1)rtl.o: $(srcdir)/rtl.c $(CONFIG_H) $(RTL_H) + rm -f $(HOST_PREFIX)rtl.c + cp $(srcdir)/rtl.c $(HOST_PREFIX)rtl.c + $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(HOST_PREFIX)rtl.c + + $(HOST_PREFIX_1)rtlanal.o: $(srcdir)/rtlanal.c $(CONFIG_H) $(RTL_H) + rm -f $(HOST_PREFIX)rtlanal.c + cp $(srcdir)/rtlanal.c $(HOST_PREFIX)rtlanal.c + $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(HOST_PREFIX)rtlanal.c + + $(HOST_PREFIX_1)alloca.o: alloca.c + rm -f $(HOST_PREFIX)alloca.c + cp $(srcdir)/alloca.c $(HOST_PREFIX)alloca.c + $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(HOST_PREFIX)alloca.c + + $(HOST_PREFIX_1)obstack.o: obstack.c + rm -f $(HOST_PREFIX)obstack.c + cp $(srcdir)/obstack.c $(HOST_PREFIX)obstack.c + $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(HOST_PREFIX)obstack.c + + $(HOST_PREFIX_1)malloc.o: malloc.c + rm -f $(HOST_PREFIX)malloc.c + cp $(srcdir)/malloc.c $(HOST_PREFIX)malloc.c + $(HOST_CC) -c $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) $(HOST_PREFIX)malloc.c + + # This satisfies the dependency that we get if you cross-compile a compiler + # that does not need to compile alloca, malloc or whatever. + $(HOST_PREFIX_1): + touch $(HOST_PREFIX_1) + + # Remake cpp and protoize. + + # Making the preprocessor + cpp: cccp + -rm -f cpp + ln cccp cpp + cccp: cccp.o cexp.o version.o $(LIBDEPS) + $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o cccp cccp.o cexp.o version.o $(LIBS) + cexp.o: $(srcdir)/cexp.c $(CONFIG_H) + $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c $(srcdir)/cexp.c + $(srcdir)/cexp.c: $(srcdir)/cexp.y + $(BISON) -o cexp.c cexp.y + cccp.o: cccp.c $(CONFIG_H) pcp.h version.c + # The reason we use $(libdir)/g++-include rather than using libsubdir + # is for compatibility with the current version of libg++. + $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ + -DGCC_INCLUDE_DIR="$(libsubdir)/include" \ + -DGPLUSPLUS_INCLUDE_DIR="$(libdir)/g++-include" \ + -DLOCAL_INCLUDE_DIR="$(prefix)include" \ + -DCROSS_INCLUDE_DIR="$(libsubdir)/sys-include" -c cccp.c + + proto: config.status protoize unprotoize SYSCALLS.c.X protoize.1 unprotoize.1 + + protoize: protoize.o getopt.o getopt1.o getpwd.o version.o $(LIBDEPS) + $(CC) $(ALL_CFLAGS) $(LDFLAGS) \ + protoize.o getopt.o getopt1.o getpwd.o version.o $(LIBS) -o $@ + protoize.o: $(srcdir)/protoize.c getopt.h $(CONFIG_H) + $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ + -DGCC_INCLUDE_DIR="$(libsubdir)/include" \ + -DGPLUSPLUS_INCLUDE_DIR="$(libdir)/g++-include" \ + -DCROSS_INCLUDE_DIR="$(libsubdir)/sys-include" \ + -DLOCAL_INCLUDE_DIR="$(prefix)include" \ + -DSTD_PROTO_DIR="$(libsubdir)" \ + $(srcdir)/protoize.c + + unprotoize: unprotoize.o getopt.o getopt1.o getpwd.o version.o $(LIBDEPS) + $(CC) $(ALL_CFLAGS) $(LDFLAGS) \ + unprotoize.o getopt.o getopt1.o getpwd.o version.o $(LIBS) -o $@ + unprotoize.o: $(srcdir)/protoize.c getopt.h $(CONFIG_H) + cp $(srcdir)/protoize.c unprotoize.c + $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ + -DGCC_INCLUDE_DIR="$(libsubdir)/include" \ + -DGPLUSPLUS_INCLUDE_DIR="$(libdir)/g++-include" \ + -DCROSS_INCLUDE_DIR="$(libsubdir)/sys-include" \ + -DLOCAL_INCLUDE_DIR="$(prefix)include" \ + -DSTD_PROTO_DIR="$(libsubdir)" \ + -DUNPROTOIZE unprotoize.c + rm -f unprotoize.c + + getopt.o: $(srcdir)/getopt.c getopt.h + $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(srcdir)/getopt.c + getopt1.o: $(srcdir)/getopt1.c getopt.h + $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(srcdir)/getopt1.c + + protoize.1: $(srcdir)/proto-man ./cpp + ./cpp -traditional $(srcdir)/proto-man \ + | grep -v '^#' \ + | awk 'NF > 0 {print}' > tmp-proto.1 + mv tmp-proto.1 protoize.1 + + unprotoize.1: $(srcdir)/proto-man ./cpp + ./cpp -traditional -DUNPRO $(srcdir)/proto-man \ + | grep -v '^#' \ + | awk 'NF > 0 {print}' > tmp-unproto.1 + mv tmp-unproto.1 unprotoize.1 + + SYSCALLS.c : $(srcdir)/sys-types.h $(srcdir)/sys-protos.h + cat $(srcdir)/sys-types.h $(srcdir)/sys-protos.h >$@ + + # This info describes the target machine, so compile with GCC just built. + SYSCALLS.c.X: SYSCALLS.c $(GCC_PASSES) + $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ + -aux-info $@ -S -o /dev/null SYSCALLS.c + + # Remake the info files. + + doc: $(srcdir)/cpp.info $(srcdir)/gcc.info + + $(srcdir)/cpp.info: $(srcdir)/cpp.texi + makeinfo `echo $(srcdir)/cpp.texi | sed 's,^\./,,'` + + #$(srcdir)/gplus.info: $(srcdir)/gplus.texi + # makeinfo `echo $(srcdir)/gplus.texi | sed 's,^\./,,'` + + $(srcdir)/gcc.info: $(srcdir)/gcc.texi + makeinfo `echo $(srcdir)/gcc.texi | sed 's,^\./,,'` + + # Deletion of files made during compilation. + # There are four levels of this: + # `mostlyclean', `clean', `cleanconfig' and `realclean'. + # `mostlyclean' is useful while working on a particular type of machine. + # It deletes most, but not all, of the files made by compilation. + # It does not delete libgcc.a or its parts, so it won't have to be recompiled. + # `clean' deletes everything made by running `make all'. + # `cleanconfig' also deletes the files made by config. + # `realclean' also deletes everything that could be regenerated automatically. + + mostlyclean: + -rm -f $(STAGESTUFF) + # Delete the temporary source copies for cross compilation. + -rm -f $(HOST_PREFIX_1)rtl.c $(HOST_PREFIX_1)rtlanal.c + -rm -f $(HOST_PREFIX_1)alloca.c $(HOST_PREFIX_1)malloc.c + -rm -f $(HOST_PREFIX_1)obstack.c + # Delete the temp files made in the course of building libgcc.a. + -rm -f tmplibgcc* tmpcopy + for name in $(LIB1FUNCS); do rm -f $${name}.c; done + # Delete other temporary files. + -rm -f tmp-float.h tmp-*proto.1 tmp-gcc.xtar.Z tmp-limits.h gccnew + # Delete the stamp files. + -rm -f stamp-* tmp-* + # Delete debugging dump files. + -rm -f *.greg *.lreg *.combine *.flow *.cse *.jump *.rtl *.tree *.loop + -rm -f *.dbr *.jump2 *.sched *.cse2 *.sched2 *.stack + # Delete some files made during installation. + -rm -f specs float.h enquire SYSCALLS.c SYSCALLS.c.X + -rm -f collect collect2 ld mips-tfile mips-tdump alloca.s + # Delete unwanted output files from TeX. + -rm -f *.toc *.log *.vr *.fn *.cp *.tp *.ky *.pg + # Delete sorted indices we don't actually use. + -rm -f gcc.vrs gcc.kys gcc.tps gcc.pgs gcc.fns + # Delete core dumps. + -rm -f core + + # delete all files made by compilation. + clean: mostlyclean + -rm -f libgcc.a libgcc1.a libgcc2.a libgcc2.ready + -rm -fr stage1 stage2 stage3 stage4 + + # This is used to get rid of everything found in the source dir + # that shouldn't be in the distribution. + distclean: clean + -rm -f tm.h aux-output.c config.h md config.status tconfig.h + -rm -f Makefile *.dvi *.oaux + + # Delete anything likely to be found in the source directory + # that shouldn't be in the distribution. + extraclean: distclean + -rm -rf =* #* *~* config/=* config/#* config/*~* + -rm -f *.dvi *.oaux patch* *.orig *.rej *.d *.Z *.tar + -rm -f *.s *.s[0-9] *.i + + # Get rid of every file that's generated from some other file. + # Most of these files ARE PRESENT in the GCC distribution. + realclean: distclean + -rm -f cp-parse.c cp-parse.h cp-parse.output + -rm -f objc-parse.c objc-parse.output + -rm -f protoize.1 unprotoize.1 + -rm -f c-parse.c c-parse.h c-parse.output + -rm -f cexp.c cexp.output TAGS + -rm -f cpp.info* cpp.??s cpp.*aux + -rm -f gcc.info* gcc.??s gcc.*aux + -rm -f gplus.info* gplus.??s gplus.*aux + + # Entry points `install' and `uninstall'. + # Also temporarily `install-fixincludes' could replace `install-headers'. + # Also use `install-collect2' to install collect2 when the config files don't. + + install: $(INSTALL_TARGET) + + # Copy the files of native compiler into directories where they will be run. + install-native: install-common install-libgcc $(INSTALL_HEADERS) \ + install-man + + # Copy the files of cross compiler into directories where they will be run. + install-cross: install-common install-common-headers \ + install-man install-cross-tools install-libgcc + + # Install the tools, libraries and header files for the target machine + # where cross-compilation will look for them. + # Use tooldir to find them. + install-cross-tools: install-dir + # The first if makes this a no-op except for a cross compiler. + # The /. after the dirname causes test to follow symlinks. + # Before making a link or an indirection script, + # we verify the desired file does not already exist. + # If a symlink does exist, then making a symlink would certainly fail, + # leading us to overwrite the real file through the symlink. + -if [ -f gcc-cross ] ; \ + then \ + if [ -d $(tooldir)/. ] ; \ + then \ + for file in as ld ar ranlib; do \ + if [ -f $(libsubdir)/$$file ] ; \ + then true; \ + else \ + $(SYMLINK) $(tooldir)/bin/$$file $(libsubdir)/$$file \ + || (echo "#!/bin/sh"; echo $(tooldir)/bin/$$file "$$@") > $(libsubdir)/$$file; \ + fi; \ + done; \ + for file in $(tooldir)/lib/*; do \ + if [ -f $$file ] ; \ + then \ + if [ -f $(libsubdir)/`basename $$file` ] ; \ + then true; \ + else \ + $(SYMLINK) $$file $(libsubdir)/`basename $$file` \ + || $(INSTALL_DATA) $$file $(libsubdir)/`basename $$file`; \ + fi; \ + else true; \ + fi; \ + done; \ + if [ -d $(tooldir)/include/. ] ; then \ + $(SYMLINK) $(tooldir)/include $(libsubdir)/sys-include \ + || (if [ -d $(libsubdir)/sys-include ] ; then true ; else mkdir $(libsubdir)/sys-include ; fi; \ + cd $(tooldir)/include; tar cf - . | (cd $(libsubdir)/sys-include; tar xpf -)); \ + else true; fi; \ + else true; \ + fi; \ + else true; \ + fi; + + # Run this on the target machine + # to finish installation of cross compiler. + install-cross-rest: install-float-h-cross + + # Install float.h for cross compiler. + # Run this on the target machine! + install-float-h-cross: + if [ -f enquire ] ; then true; else false; done + -./enquire -f > float.h + -rm -f $(libsubdir)/include/float.h + $(INSTALL_DATA) float.h $(libsubdir)/include/float.h + chmod a-x $(libsubdir)/include/float.h + + # Create the installation directory. + install-dir: + if [ -d $(libdir) ] ; then true ; else mkdir $(libdir) ; fi + if [ -d $(libdir)/gcc-lib ] ; then true ; else mkdir $(libdir)/gcc-lib ; fi + if [ -d $(libdir)/gcc-lib/$(target) ] ; then true ; else mkdir $(libdir)/gcc-lib/$(target) ; fi + if [ -d $(libdir)/gcc-lib/$(target)/$(version) ] ; then true ; else mkdir $(libdir)/gcc-lib/$(target)/$(version) ; fi + if [ -d $(bindir) ] ; then true ; else mkdir $(bindir) ; fi + # We don't use mkdir -p to create the parents of mandir, + # because some systems don't support it. + # Instead, we use this technique to create the immediate parent of mandir. + parent=`echo $(mandir)|sed -e 's@/[^/]*$$@@'`; \ + if [ -d $$parent ] ; then true ; else mkdir $$parent ; fi + -if [ -d $(mandir) ] ; then true ; else mkdir $(mandir) ; fi + + # Install the compiler executables built during cross compilation. + install-common: native install-dir + for file in $(COMPILERS); do \ + if [ -f $$file ] ; then \ + rm -f $(libsubdir)/$$file; \ + $(INSTALL_PROGRAM) $$file $(libsubdir)/$$file; \ + else true; \ + fi; \ + done + for file in $(EXTRA_PASSES) $(EXTRA_PARTS) $(EXTRA_PROGRAMS) ..; do \ + if [ x"$$file" != x.. ]; then \ + rm -f $(libsubdir)/$$file; \ + $(INSTALL_PROGRAM) $$file $(libsubdir)/$$file; \ + else true; fi; \ + done + -rm -f $(libsubdir)/specs + $(INSTALL_DATA) specs $(libsubdir)/specs + # Install the driver program as gcc-$(target) + # and also as either gcc (if native) or $(tooldir)/bin/gcc. + -if [ -f gcc-cross ] ; then \ + $(INSTALL_PROGRAM) gcc-cross $(bindir)/gcc-$(target); \ + if [ -d $(tooldir)/bin/. ] ; then \ + rm -f $(tooldir)/bin/gcc; \ + $(INSTALL_PROGRAM) gcc-cross $(tooldir)/bin/gcc; \ + else true; fi; \ + else \ + rm -f $(bindir)/gcc; \ + $(INSTALL_PROGRAM) gcc $(bindir)/gcc; \ + rm -f $(bindir)/gcc-$(target)-1; \ + ln $(bindir)/gcc $(bindir)/gcc-$(target)-1; \ + mv $(bindir)/gcc-$(target)-1 $(bindir)/gcc-$(target); \ + fi + $(INSTALL_PROGRAM) $(srcdir)/c++ $(bindir)/c++ + $(INSTALL_PROGRAM) $(srcdir)/g++ $(bindir)/g++ + -rm -f $(libsubdir)/cpp + $(INSTALL_PROGRAM) cpp $(libsubdir)/cpp + + # Install protoize. + install-proto: proto install-dir + -rm -f $(bindir)/protoize + $(INSTALL_PROGRAM) protoize $(bindir)/protoize + -rm -f $(bindir)/unprotoize + $(INSTALL_PROGRAM) unprotoize $(bindir)/unprotoize + -rm -f $(libsubdir)/SYSCALLS.c.X + $(INSTALL_DATA) SYSCALLS.c.X $(libsubdir)/SYSCALLS.c.X + chmod a-x $(libsubdir)/SYSCALLS.c.X + + # Install the man pages. + install-man: install-dir $(srcdir)/gcc.1 $(srcdir)/cccp.1 \ + protoize.1 unprotoize.1 $(srcdir)/g++.1 + -rm -f $(mandir)/gcc$(manext) + $(INSTALL_DATA) $(srcdir)/gcc.1 $(mandir)/gcc$(manext) + chmod a-x $(mandir)/gcc$(manext) + -rm -f $(mandir)/cccp$(manext) + $(INSTALL_DATA) $(srcdir)/cccp.1 $(mandir)/cccp$(manext) + chmod a-x $(mandir)/cccp$(manext) + -rm -f $(mandir)/protoize$(manext) + $(INSTALL_DATA) protoize.1 $(mandir)/protoize$(manext) + chmod a-x $(mandir)/protoize$(manext) + -rm -f $(mandir)/unprotoize$(manext) + $(INSTALL_DATA) unprotoize.1 $(mandir)/unprotoize$(manext) + chmod a-x $(mandir)/unprotoize$(manext) + -rm -f $(mandir)/g++$(manext) + $(INSTALL_DATA) $(srcdir)/g++.1 $(mandir)/g++$(manext) + chmod a-x $(mandir)/g++$(manext) + + # Install the library. + install-libgcc: libgcc.a + -if [ -f libgcc.a ] ; then \ + rm -f $(libsubdir)/libgcc.a; \ + $(INSTALL_DATA) libgcc.a $(libsubdir)/libgcc.a; \ + if $(RANLIB_TEST) ; then \ + (cd $(libsubdir); $(RANLIB) libgcc.a); else true; fi; \ + chmod a-x $(libsubdir)/libgcc.a; \ + else true; fi + + # Install all the header files for native compiler. + install-headers: install-common-headers install-float-h install-limits-h + + # Install float.h for native compiler. + install-float-h: float.h + -rm -f $(libsubdir)/include/float.h + $(INSTALL_DATA) float.h $(libsubdir)/include/float.h + chmod a-x $(libsubdir)/include/float.h + + # Install limits.h, optionally inheriting from the standard system version. + install-limits-h: limits.h limitx.h + -rm -f $(libsubdir)/include/limits.h tmp-limits.h + if [ -f /usr/include/limits.h ] ; then \ + cat $(srcdir)/limitx.h $(srcdir)/limits.h > tmp-limits.h; \ + else \ + cat $(srcdir)/limits.h > tmp-limits.h; \ + fi + $(INSTALL_DATA) tmp-limits.h $(libsubdir)/include/limits.h + chmod a-x $(libsubdir)/include/limits.h + rm tmp-limits.h + + # Install the fixed headers that are the same for all machines. + install-common-headers: install-dir $(USER_H) gvarargs.h gstdarg.h gstddef.h + if [ -d $(libsubdir)/include ] ; then true ; else mkdir $(libsubdir)/include ; fi + -chmod ugo+rx $(libsubdir)/include + # Must compute $(libsubdir) before the cd; the awk script won't work after. + shelllibsubdir=$(libsubdir); \ + cd $(srcdir); \ + for file in $(USER_H); do \ + rm -f $$shelllibsubdir/include/`basename $$file`; \ + $(INSTALL_DATA) `basename $$file` $$shelllibsubdir/include/`basename $$file`; \ + chmod a-x $$shelllibsubdir/include/`basename $$file`; \ + done + -rm -f $(libsubdir)/include/varargs.h + $(INSTALL_DATA) $(srcdir)/gvarargs.h $(libsubdir)/include/varargs.h + chmod a-x $(libsubdir)/include/varargs.h + -rm -f $(libsubdir)/include/stdarg.h + $(INSTALL_DATA) $(srcdir)/gstdarg.h $(libsubdir)/include/stdarg.h + chmod a-x $(libsubdir)/include/stdarg.h + -rm -f $(libsubdir)/include/stddef.h + $(INSTALL_DATA) $(srcdir)/gstddef.h $(libsubdir)/include/stddef.h + chmod a-x $(libsubdir)/include/stddef.h + # Copy byteorder.h into the object file directory + # so that fixinc.svr4 can get at it if necessary. + # If the dirs are the same, this won't do anything. + -cp $(srcdir)/byteorder.h . + + # $(libsubdir)/include: + # if [ -d $(libsubdir)/include ] ; then true ; else mkdir $(libsubdir)/include ; fi + # -chmod ugo+rx $(libsubdir)/include + + # This appears not to work. It isn't clear how to fix it. + # $(libsubdir)/include/README: $(libsubdir)/include $(srcdir)/$(FIXINCLUDES) + # LIB=$(libsubdir)/include $(srcdir)/$(FIXINCLUDES) + # $(INSTALL_DATA) $(srcdir)/fixincludes-README $@ + # chmod a-x $@ + + # Run fixincludes in the proper directory. + install-fixincludes: install-headers + rm -rf $(libsubdir)/tmp + mkdir $(libsubdir)/tmp + # Move aside the headers that come from GCC; delete all else. + # The sed command gets just the last file name component; + # this is necessary because VPATH could add a dirname. + # Using basename would be simpler, but some systems don't have it. + cd $(libsubdir)/include; \ + for file in $(INSTALLED_H); do \ + realfile=`echo $$file | sed -e 's|.*/\([^/]*\)$$|\1|'`; \ + mv $$realfile ../tmp; \ + done; \ + rm -rf * + # Install fixed copies of system files. + $(srcdir)/$(FIXINCLUDES) $(libsubdir)/include + # Bring back gcc's header files. + cd $(libsubdir)/include; mv ../tmp/* .; rmdir ../tmp + # Install the README + $(INSTALL_DATA) $(srcdir)/README-fixinc $(libsubdir)/include/README + chmod a-x $(libsubdir)/include/README + + # Use this target to install the program `collect2' under the name `ld'. + install-collect2: collect2 + $(INSTALL_PROGRAM) collect2 $(libsubdir)/ld + # Install the driver program as $(libsubdir)/gcc for collect2. + -if [ -f gcc-cross ] ; then \ + $(INSTALL_PROGRAM) gcc-cross $(libsubdir)/gcc; \ + else \ + $(INSTALL_PROGRAM) gcc $(libsubdir)/gcc; \ + fi + + # Cancel installation by deleting the installed files. + uninstall: + -rm -rf $(libsubdir) + -rm -rf $(bindir)/gcc + -rm -rf $(bindir)/protoize + -rm -rf $(bindir)/unprotoize + -rm -rf $(mandir)/gcc$(manext) + -rm -rf $(mandir)/cccp$(manext) + -rm -rf $(mandir)/protoize$(manext) + -rm -rf $(mandir)/unprotoize$(manext) + + # These exist for maintenance purposes. + + # Update the tags table. + TAGS: force + cd $(srcdir); \ + mkdir temp; \ + mv -f c-parse.c c-parse.h cp-parse.c cp-parse.h objc-parse.c cexp.c temp; \ + etags *.y *.h *.c; \ + mv temp/* .; \ + rmdir temp + + # Create the distribution tar file. + #dist: gcc-$(version).tar.Z + dist: gcc.xtar.Z + + gcc.xtar.Z: gcc.xtar + compress < gcc.xtar > tmp-gcc.xtar.Z + mv tmp-gcc.xtar.Z gcc.xtar.Z + + #gcc-$(version).tar.Z: gcc-$(version).tar + # compress < gcc-$(version).tar > gcc-$(version).tar.Z + + #gcc-$(version).tar: + gcc.xtar: + -rm -rf gcc-$(version) tmp + # Put all the files in a temporary subdirectory + # which has the name that we want to have in the tar file. + mkdir tmp + mkdir tmp/config + for file in *[0-9a-zA-Z+]; do \ + ln $$file tmp || cp $$file tmp; \ + done + cd config; \ + for file in *[0-9a-zA-Z+]; do \ + ln $$file ../tmp/config || cp $$file ../tmp/config; \ + done + ln .gdbinit tmp + mv tmp gcc-$(version) + # Get rid of everything we don't want in the distribution. + cd gcc-$(version); make -f Makefile.in extraclean + # Make the distribution. + tar chf gcc.xtar gcc-$(version) + # Get rid of the temporary directory. + rm -rf gcc-$(version) + + # do make -f ../gcc/Makefile maketest DIR=../gcc + # in the intended test directory to make it a suitable test directory. + # THIS IS OBSOLETE; use the -srcdir operand in configure instead. + maketest: + ln -s $(DIR)/*.[chy] . + ln -s $(DIR)/configure . + ln -s $(DIR)/*.def . + -rm -f =* + ln -s $(DIR)/.gdbinit . + ln -s $(DIR)/$(FIXINCLUDES) . + -ln -s $(DIR)/bison.simple . + ln -s $(DIR)/config . + ln -s $(DIR)/move-if-change . + # The then and else were swapped to avoid a problem on Ultrix. + if [ ! -f Makefile ] ; then ln -s $(DIR)/Makefile .; else false; fi + -rm tm.h aux-output.c config.h md + make clean + # You must then run config to set up for compilation. + + bootstrap: all force + $(MAKE) stage1 + # This used to define ALLOCA as empty, but that would lead to bad results + # for a subsequent `make install' since that would not have ALLOCA empty. + # To prevent `make install' from compiling alloca.o and then relinking cc1 + # because alloca.o is newer, we permit these recursive makes to compile + # alloca.o. Then cc1 is newer, so it won't have to be relinked. + $(MAKE) CC="stage1/gcc -Bstage1/" CFLAGS="$(BOOT_CFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)" + $(MAKE) stage2 + $(MAKE) CC="stage2/gcc -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)" + + bootstrap2: force + $(MAKE) CC="stage1/gcc -Bstage1/" CFLAGS="$(BOOT_CFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)" + $(MAKE) stage2 + $(MAKE) CC="stage2/gcc -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)" + + bootstrap3: force + $(MAKE) CC="stage2/gcc -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)" + + # Copy the object files from a particular stage into a subdirectory. + stage1: force + # -if [ -d stage1 ] ; then true ; else mkdir stage1 ; fi + -mv $(STAGESTUFF) stage1 + -rm -f stage1/libgcc.a + -cp libgcc.a stage1 + $(RANLIB) stage1/libgcc.a + + stage2: force + # -if [ -d stage2 ] ; then true ; else mkdir stage2 ; fi + -mv $(STAGESTUFF) stage2 + -rm -f stage2/libgcc.a + -cp libgcc.a stage2 + $(RANLIB) stage2/libgcc.a + + stage3: force + # if [ -d stage3 ] ; then true ; else mkdir stage3 ; fi + -mv $(STAGESTUFF) stage3 + -rm -f stage3/libgcc.a + -cp libgcc.a stage3 + $(RANLIB) stage3/libgcc.a + + stage4: force + if [ -d stage4 ] ; then true ; else mkdir stage4 ; fi + -mv $(STAGESTUFF) stage4 + -rm -f stage4/libgcc.a + -cp libgcc.a stage4 + -if $(RANLIB_TEST) ; then $(RANLIB) stage4/libgcc.a; else true; fi + + # Copy just the executable files from a particular stage into a subdirectory, + # and delete the object files. Use this if you're just verifying a version + # that is pretty sure to work, and you are short of disk space. + risky-stage1: force + if [ -d stage1 ] ; then true ; else mkdir stage1 ; fi + -mv cc1 cpp cccp gcc stage1 + -rm -f stage1/libgcc.a + -cp libgcc.a stage1 && $(RANLIB) stage1/libgcc.a + -make clean + + risky-stage2: force + if [ -d stage2 ] ; then true ; else mkdir stage2 ; fi + -mv cc1 cpp cccp gcc stage2 + -rm -f stage2/libgcc.a + -cp libgcc.a stage2 && $(RANLIB) stage2/libgcc.a + -make clean + + risky-stage3: force + if [ -d stage3 ] ; then true ; else mkdir stage3 ; fi + -mv cc1 cpp cccp gcc stage3 + -rm -f stage3/libgcc.a + -cp libgcc.a stage3 && $(RANLIB) stage3/libgcc.a + -make clean + + risky-stage4: force + if [ -d stage4 ] ; then true ; else mkdir stage4 ; fi + -mv cc1 cpp cccp gcc stage4 + -rm -f stage4/libgcc.a + -cp libgcc.a stage4 && $(RANLIB) stage4/libgcc.a + -make clean + + #In GNU Make, ignore whether `stage*' exists. + .PHONY: stage1 stage2 stage3 stage4 clean realclean TAGS bootstrap + .PHONY: risky-stage1 risky-stage2 risky-stage3 risky-stage4 + + force: + echo foo diff -2rcN dh5:gcc-2.1.orig/bcmpgnulib.amiga gcc-2.1/bcmpgnulib.amiga *** dh5:gcc-2.1.orig/bcmpgnulib.amiga --- gcc-2.1/bcmpgnulib.amiga Thu Apr 16 20:49:16 1992 *************** *** 0 **** --- 1,35 ---- + gcc2 -c -O2 -fbaserel -fomit-frame-pointer -I. -I./config libgcc2.c -DL_ashldi3 -o _ashldi3.bo + gcc2 -c -O2 -fbaserel -fomit-frame-pointer -I. -I./config libgcc2.c -DL_ashrdi3 -o _ashrdi3.bo + gcc2 -c -O2 -fbaserel -fomit-frame-pointer -I. -I./config libgcc2.c -DL_bb -o _bb.bo + gcc2 -c -O2 -fbaserel -fomit-frame-pointer -I. -I./config libgcc2.c -DL_builtin_del -o _builtin_del.bo + gcc2 -c -O2 -fbaserel -fomit-frame-pointer -I. -I./config libgcc2.c -DL_builtin_new -o _builtin_new.bo + gcc2 -c -O2 -fbaserel -fomit-frame-pointer -I. -I./config libgcc2.c -DL_builtin_New -o _builtin_NNew.bo + gcc2 -c -O2 -fbaserel -fomit-frame-pointer -I. -I./config libgcc2.c -DL_clear_cache -o _clear_cache.bo + gcc2 -c -O2 -fbaserel -fomit-frame-pointer -I. -I./config libgcc2.c -DL_cmpdi2 -o _cmpdi2.bo + gcc2 -c -O2 -fbaserel -fomit-frame-pointer -I. -I./config libgcc2.c -DL_ctor_list -o _ctor_list.bo + gcc2 -c -O2 -fbaserel -fomit-frame-pointer -I. -I./config libgcc2.c -DL_divdi3 -o _divdi3.bo + gcc2 -c -O2 -fbaserel -fomit-frame-pointer -I. -I./config libgcc2.c -DL_dtor_list -o _dtor_list.bo + gcc2 -c -O2 -fbaserel -fomit-frame-pointer -I. -I./config libgcc2.c -DL_eprintf -o _eprintf.bo + gcc2 -c -O2 -fbaserel -fomit-frame-pointer -I. -I./config libgcc2.c -DL_fixdfdi -o _fixdfdi.bo + gcc2 -c -O2 -fbaserel -fomit-frame-pointer -I. -I./config libgcc2.c -DL_fixsfdi -o _fixsfdi.bo + gcc2 -c -O2 -fbaserel -fomit-frame-pointer -I. -I./config libgcc2.c -DL_fixunsdfdi -o _fixunsdfdi.bo + gcc2 -c -O2 -fbaserel -fomit-frame-pointer -I. -I./config libgcc2.c -DL_fixunsdfsi -o _fixunsdfsi.bo + gcc2 -c -O2 -fbaserel -fomit-frame-pointer -I. -I./config libgcc2.c -DL_fixunssfdi -o _fixunssfdi.bo + gcc2 -c -O2 -fbaserel -fomit-frame-pointer -I. -I./config libgcc2.c -DL_fixunssfsi -o _fixunssfsi.bo + gcc2 -c -O2 -fbaserel -fomit-frame-pointer -I. -I./config libgcc2.c -DL_floatdidf -o _floatdidf.bo + gcc2 -c -O2 -fbaserel -fomit-frame-pointer -I. -I./config libgcc2.c -DL_floatdisf -o _floatdisf.bo + gcc2 -c -O2 -fbaserel -fomit-frame-pointer -I. -I./config libgcc2.c -DL_lshldi3 -o _lshldi3.bo + gcc2 -c -O2 -fbaserel -fomit-frame-pointer -I. -I./config libgcc2.c -DL_lshrdi3 -o _lshrdi3.bo + gcc2 -c -O2 -fbaserel -fomit-frame-pointer -I. -I./config libgcc2.c -DL_moddi3 -o _moddi3.bo + gcc2 -c -O2 -fbaserel -fomit-frame-pointer -I. -I./config libgcc2.c -DL_muldi3 -o _muldi3.bo + gcc2 -c -O2 -fbaserel -fomit-frame-pointer -I. -I./config libgcc2.c -DL_shtab -o _shtab.bo + gcc2 -c -O2 -fbaserel -fomit-frame-pointer -I. -I./config libgcc2.c -DL_trampoline -o _trampoline.bo + gcc2 -c -O2 -fbaserel -fomit-frame-pointer -I. -I./config libgcc2.c -DL_ucmpdi2 -o _ucmpdi2.bo + gcc2 -c -O2 -fbaserel -fomit-frame-pointer -I. -I./config libgcc2.c -DL_udivdi3 -o _udivdi3.bo + gcc2 -c -O2 -fbaserel -fomit-frame-pointer -I. -I./config libgcc2.c -DL_udivmoddi4 -o _udivmoddi4.bo + gcc2 -c -O2 -fbaserel -fomit-frame-pointer -I. -I./config libgcc2.c -DL_umoddi3 -o _umoddi3.bo + gcc2 -c -O2 -fbaserel -fomit-frame-pointer -I. -I./config libgcc2.c -DL_varargs -o _varargs.bo + gcc2 -c -O2 -fbaserel -fomit-frame-pointer -I. -I./config libgcc2.c -DL__main -o _main.bo + gcc2 -c -O2 -fbaserel -fomit-frame-pointer -I. -I./config libgcc2.c -DL_exit -o _exit.bo + + diff -2rcN dh5:gcc-2.1.orig/c-common.c gcc-2.1/c-common.c *** dh5:gcc-2.1.orig/c-common.c Tue Feb 4 19:51:11 1992 --- gcc-2.1/c-common.c Tue Apr 14 21:01:02 1992 *************** *** 216,219 **** --- 216,223 ---- first_arg_num); } + #ifdef HANDLE_EXTRA_ATTRIBUTES + else + HANDLE_EXTRA_ATTRIBUTES (a) + #endif } diff -2rcN dh5:gcc-2.1.orig/c-parse.y gcc-2.1/c-parse.y *** dh5:gcc-2.1.orig/c-parse.y Mon Apr 20 02:33:51 1992 --- gcc-2.1/c-parse.y Tue Apr 14 21:01:04 1992 *************** *** 775,779 **** attrib : IDENTIFIER ! { if (strcmp (IDENTIFIER_POINTER ($1), "packed")) warning ("`%s' attribute directive ignored", IDENTIFIER_POINTER ($1)); --- 775,786 ---- attrib : IDENTIFIER ! { ! #ifdef HANDLE_ATTRIBUTE0 ! /* give the function a chance to validate further attributes */ ! if (HANDLE_ATTRIBUTE0 (IDENTIFIER_POINTER ($1)) || ! strcmp (IDENTIFIER_POINTER ($1), "packed")) ! #else ! if (strcmp (IDENTIFIER_POINTER ($1), "packed")) ! #endif warning ("`%s' attribute directive ignored", IDENTIFIER_POINTER ($1)); diff -2rcN dh5:gcc-2.1.orig/cccp.c gcc-2.1/cccp.c *** dh5:gcc-2.1.orig/cccp.c Mon Apr 20 02:34:10 1992 --- gcc-2.1/cccp.c Fri Apr 17 23:25:08 1992 *************** *** 40,43 **** --- 40,50 ---- #endif /* not EMACS */ + #ifdef amigados + /* since cpp uses alloca to store all its read files, this is quite deadly + * on a system with non-automatic stackgrowth like the amiga, so we better + * turn it off now.. */ + #undef alloca + #endif + #ifndef STANDARD_INCLUDE_DIR #define STANDARD_INCLUDE_DIR "/usr/include" *************** *** 133,137 **** --- 140,148 ---- extern struct tm *localtime (); extern int sys_nerr; + + #ifndef __STDC__ extern char *sys_errlist[]; + #define strerror(err) sys_errlist[err] + #endif #ifndef errno *************** *** 1653,1656 **** --- 1664,1671 ---- if (*p1 == '/') p = p1 + 1; + #ifdef amigados + if (*p1 == ':') + p = p1 + 1; + #endif p1++; } *************** *** 1833,1838 **** --- 1848,1857 ---- while (*q != 0 && (*q != ':' || (q - p == 1 && isalpha (*p)))) q++; #else + #ifdef amigados + while (*q != 0 && *q != ',') q++; + #else while (*q != 0 && *q != ':') q++; #endif + #endif if (p == q) { /* An empty name in the path stands for the current directory. */ *************** *** 3659,3662 **** --- 3678,3688 ---- #ifndef VMS ep = rindex (nam, '/'); + #ifdef amigados + if (!ep) + { + ep = index (nam, ':'); + if (ep) ep++; + } + #endif #else /* VMS */ ep = rindex (nam, ']'); *************** *** 3734,3738 **** /* If specified file name is absolute, just open it. */ ! if (*fbeg == '/') { strncpy (fname, fbeg, flen); fname[flen] = 0; --- 3760,3768 ---- /* If specified file name is absolute, just open it. */ ! if (*fbeg == '/' ! #ifdef amigados ! || nindex (fbeg, ':', flen) ! #endif ! ) { strncpy (fname, fbeg, flen); fname[flen] = 0; *************** *** 3757,3760 **** --- 3787,3794 ---- continue; strcpy (fname, searchptr->fname); + + #ifdef amigados + if (fname[strlen (fname) - 1] != ':') + #endif strcat (fname, "/"); fname[strlen (fname) + flen] = 0; *************** *** 7441,7445 **** if (errno < sys_nerr) ! fprintf (stderr, "%s: %s\n", name, sys_errlist[errno]); else fprintf (stderr, "%s: undocumented I/O error\n", name); --- 7475,7479 ---- if (errno < sys_nerr) ! fprintf (stderr, "%s: %s\n", name, strerror (errno)); else fprintf (stderr, "%s: undocumented I/O error\n", name); *************** *** 8342,8348 **** char *name; { fprintf (stderr, "%s: ", progname); ! if (errno < sys_nerr) ! fprintf (stderr, "%s: %s\n", name, sys_errlist[errno]); else fprintf (stderr, "%s: undocumented I/O error\n", name); --- 8376,8384 ---- char *name; { + int error = errno; + fprintf (stderr, "%s: ", progname); ! if (error < sys_nerr) ! fprintf (stderr, "%s: %s\n", name, strerror (error)); else fprintf (stderr, "%s: undocumented I/O error\n", name); *************** *** 8701,8702 **** --- 8737,8749 ---- #endif /* VMS */ + + #ifdef amigados + nindex (str, ch, len) + char *str; + char ch; + int len; + { + while (*str && *str != ch && len) str++, len--; + return *str == ch ? str : 0; + } + #endif diff -2rcN dh5:gcc-2.1.orig/cmpgnulib2.amiga gcc-2.1/cmpgnulib2.amiga *** dh5:gcc-2.1.orig/cmpgnulib2.amiga --- gcc-2.1/cmpgnulib2.amiga Wed Apr 15 15:27:53 1992 *************** *** 0 **** --- 1,36 ---- + + gcc -B./ -c -O2 -fomit-frame-pointer -I. -I./config libgcc2.c -DL_ashldi3 -o _ashldi3.o + gcc -B./ -c -O2 -fomit-frame-pointer -I. -I./config libgcc2.c -DL_ashrdi3 -o _ashrdi3.o + gcc -B./ -c -O2 -fomit-frame-pointer -I. -I./config libgcc2.c -DL_bb -o _bb.o + gcc -B./ -c -O2 -fomit-frame-pointer -I. -I./config libgcc2.c -DL_builtin_del -o _builtin_del.o + gcc -B./ -c -O2 -fomit-frame-pointer -I. -I./config libgcc2.c -DL_builtin_new -o _builtin_new.o + gcc -B./ -c -O2 -fomit-frame-pointer -I. -I./config libgcc2.c -DL_builtin_New -o _builtin_NNew.o + gcc -B./ -c -O2 -fomit-frame-pointer -I. -I./config libgcc2.c -DL_clear_cache -o _clear_cache.o + gcc -B./ -c -O2 -fomit-frame-pointer -I. -I./config libgcc2.c -DL_cmpdi2 -o _cmpdi2.o + gcc -B./ -c -O2 -fomit-frame-pointer -I. -I./config libgcc2.c -DL_ctor_list -o _ctor_list.o + gcc -B./ -c -O2 -fomit-frame-pointer -I. -I./config libgcc2.c -DL_divdi3 -o _divdi3.o + gcc -B./ -c -O2 -fomit-frame-pointer -I. -I./config libgcc2.c -DL_dtor_list -o _dtor_list.o + gcc -B./ -c -O2 -fomit-frame-pointer -I. -I./config libgcc2.c -DL_eprintf -o _eprintf.o + gcc -B./ -c -O2 -fomit-frame-pointer -I. -I./config libgcc2.c -DL_fixdfdi -o _fixdfdi.o + gcc -B./ -c -O2 -fomit-frame-pointer -I. -I./config libgcc2.c -DL_fixsfdi -o _fixsfdi.o + gcc -B./ -c -O2 -fomit-frame-pointer -I. -I./config libgcc2.c -DL_fixunsdfdi -o _fixunsdfdi.o + gcc -B./ -c -O2 -fomit-frame-pointer -I. -I./config libgcc2.c -DL_fixunsdfsi -o _fixunsdfsi.o + gcc -B./ -c -O2 -fomit-frame-pointer -I. -I./config libgcc2.c -DL_fixunssfdi -o _fixunssfdi.o + gcc -B./ -c -O2 -fomit-frame-pointer -I. -I./config libgcc2.c -DL_fixunssfsi -o _fixunssfsi.o + gcc -B./ -c -O2 -fomit-frame-pointer -I. -I./config libgcc2.c -DL_floatdidf -o _floatdidf.o + gcc -B./ -c -O2 -fomit-frame-pointer -I. -I./config libgcc2.c -DL_floatdisf -o _floatdisf.o + gcc -B./ -c -O2 -fomit-frame-pointer -I. -I./config libgcc2.c -DL_lshldi3 -o _lshldi3.o + gcc -B./ -c -O2 -fomit-frame-pointer -I. -I./config libgcc2.c -DL_lshrdi3 -o _lshrdi3.o + gcc -B./ -c -O2 -fomit-frame-pointer -I. -I./config libgcc2.c -DL_moddi3 -o _moddi3.o + gcc -B./ -c -O2 -fomit-frame-pointer -I. -I./config libgcc2.c -DL_muldi3 -o _muldi3.o + gcc -B./ -c -O2 -fomit-frame-pointer -I. -I./config libgcc2.c -DL_shtab -o _shtab.o + gcc -B./ -c -O2 -fomit-frame-pointer -I. -I./config libgcc2.c -DL_trampoline -o _trampoline.o + gcc -B./ -c -O2 -fomit-frame-pointer -I. -I./config libgcc2.c -DL_ucmpdi2 -o _ucmpdi2.o + gcc -B./ -c -O2 -fomit-frame-pointer -I. -I./config libgcc2.c -DL_udivdi3 -o _udivdi3.o + gcc -B./ -c -O2 -fomit-frame-pointer -I. -I./config libgcc2.c -DL_udivmoddi4 -o _udivmoddi4.o + gcc -B./ -c -O2 -fomit-frame-pointer -I. -I./config libgcc2.c -DL_umoddi3 -o _umoddi3.o + gcc -B./ -c -O2 -fomit-frame-pointer -I. -I./config libgcc2.c -DL_varargs -o _varargs.o + gcc -B./ -c -O2 -fomit-frame-pointer -I. -I./config libgcc2.c -DL__main -o _main.o + gcc -B./ -c -O2 -fomit-frame-pointer -I. -I./config libgcc2.c -DL_exit -o _exit.o + + diff -2rcN dh5:gcc-2.1.orig/config/amiga.c gcc-2.1/config/amiga.c *** dh5:gcc-2.1.orig/config/amiga.c --- gcc-2.1/config/amiga.c Sat Apr 18 22:37:16 1992 *************** *** 0 **** --- 1,125 ---- + /* amiga.c: Functions for Amiga as target machine for GNU C compiler */ + + #include "m68k.c" + #include "tree.h" + + struct attribute { + tree ident; + int saveds : 1, + interrupt : 1; + }; + + + static struct attribute *a_tab = 0; + static int a_index, a_size; + + void + add_attr_entry (attr) + struct attribute *attr; + { + if (! a_tab) + { + a_size = 10; + a_index = 0; + a_tab = (struct attribute *) xmalloc (a_size * sizeof (struct attribute)); + } + + if (a_index == a_size) + { + a_size <<= 1; + a_tab = (struct attribute *) xrealloc (a_tab, a_size * sizeof (struct attribute)); + } + + a_tab[a_index++] = *attr; + } + + + void + attr_do_saveds (function_ident) + tree function_ident; + { + struct attribute attr, *a; + int i; + + for (i = 0, a = a_tab; i < a_index; i++, a++) + if (a->ident == function_ident) + { + a->saveds = 1; + return; + } + + /* create a new entry for this function */ + attr.ident = function_ident; + attr.saveds = 1; + attr.interrupt = 0; + add_attr_entry (&attr); + } + + void + attr_do_interrupt (function_ident) + tree function_ident; + { + struct attribute attr, *a; + int i; + + for (i = 0, a = a_tab; i < a_index; i++, a++) + if (a->ident == function_ident) + { + /* __interrupt implies __saveds */ + a->saveds = 1; + a->interrupt = 1; + return; + } + + /* create a new entry for this function */ + attr.ident = function_ident; + attr.saveds = 1; + attr.interrupt = 1; + add_attr_entry (&attr); + } + + int + attr_does_saveds (function_name) + char *function_name; + { + tree ident = get_identifier (function_name); + struct attribute *attr; + int i; + + for (i = 0, attr = a_tab; i < a_index; i++, attr++) + if (attr->ident == ident) + return attr->saveds; + + return 0; + } + + int + attr_does_interrupt (function_name) + char *function_name; + { + tree ident = get_identifier (function_name); + struct attribute *attr; + int i; + + for (i = 0, attr = a_tab; i < a_index; i++, attr++) + if (attr->ident == ident) + return attr->interrupt; + + return 0; + } + + + + /* Does operand (which is a symbolic_operand) live in text space? If + so SYMBOL_REF_FLAG, which is set by ENCODE_SECTION_INFO, will be true.*/ + + int + read_only_operand (operand) + rtx operand; + { + if (GET_CODE (operand) == CONST) + operand = XEXP (XEXP (operand, 0), 0); + if (GET_CODE (operand) == SYMBOL_REF) + return SYMBOL_REF_FLAG (operand) || CONSTANT_POOL_ADDRESS_P (operand); + return 1; + } diff -2rcN dh5:gcc-2.1.orig/config/amiga.h gcc-2.1/config/amiga.h *** dh5:gcc-2.1.orig/config/amiga.h --- gcc-2.1/config/amiga.h Sat Apr 18 23:16:53 1992 *************** *** 0 **** --- 1,398 ---- + /* Definitions of target machine for GNU compiler. amiga 68000/68020 version. + Copyright (C) 1987, 1988 Free Software Foundation, Inc. + + 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, 675 Mass Ave, Cambridge, MA 02139, USA. */ + + /* This comment is here to see if it will keep amiga's cpp from dying. */ + + #include "m68k.h" + + /* See tm-m68k.h. 7 means 68020 with 68881. */ + + #ifndef TARGET_DEFAULT + #define TARGET_DEFAULT 0 + #endif + + /* Define __HAVE_FPA__ or __HAVE_68881__ in preprocessor, + according to the -m flags. + This will control the use of inline 68881 insns in certain macros. + Also inform the program which CPU this is for. */ + + #if TARGET_DEFAULT & 02 + + /* -m68881 is the default */ + #define CPP_SPEC \ + "%{!msoft-float:%{mfpa:-D__HAVE_FPA__ }%{!mfpa:-D__HAVE_68881__ }}\ + %{!ansi:%{m68000:-Dmc68010}%{mc68000:-Dmc68010}%{!mc68000:%{!m68000:-Dmc68020}}}" + + #else + + /* -msoft-float is the default, assume -mc68000 as well */ + #define CPP_SPEC \ + "%{m68881:-D__HAVE_68881__ }\ + %{!ansi:%{m68020:-Dmc68020}%{mc68020:-Dmc68020}%{!mc68020:%{!m68020:-Dmc68010}}}" + + #endif + + /* These compiler options take an argument. We ignore -target for now. */ + + /* #define WORD_SWITCH_TAKES_ARG(STR) (!strcmp (STR, "target")) */ + + /* -m68000 requires special flags to the assembler. */ + + #if TARGET_DEFAULT & 01 + + #define ASM_SPEC \ + "%{m68000:-mc68010}%{mc68000:-mc68010}%{!mc68000:%{!m68000:-mc68020}} %{msmall-code:-l} " + + #else + + #define ASM_SPEC \ + "%{m68020:-mc68020}%{mc68020:-mc68020}%{!mc68020:%{!m68020:-mc68010}} %{msmall-code:-l} " + + #endif + + /* amiga/amigados are the new "standard" defines for the Amiga, MCH_AMIGA + * was used before and is included for compatibility reasons */ + + #define CPP_PREDEFINES "-Dmc68000 -Damiga -Damigados -DMCH_AMIGA -DAMIGA" + + /* STARTFILE_SPEC to include amiga floating point initialization + This is necessary (tr: amiga does it) for both the m68881 and the fpa + routines. + Note that includes knowledge of the default specs for gcc, ie. no + args translates to the same effect as -m68881 + I'm not sure what would happen below if people gave contradictory + arguments (eg. -msoft-float -mfpa) */ + + /* for now, we only have a single set of crt0.o, this could change in + the future. */ + #define STARTFILE_SPEC \ + "%{resident:rcrt0.o%s}%{!resident:%{!fbaserel:%{pg:gcrt0.o%s}%{!pg:%{p:mcrt0.o%s}%{!p:crt0.o%s}}}%{fbaserel:%{pg:bgcrt0.o%s}%{!pg:%{p:bmcrt0.o%s}%{!p:bcrt0.o%s}}}}" + + + /* Specify library to handle `-a' basic block profiling. + Control choice of libm.a (if user says -lm) + based on fp arith default and options. */ + + /* for now, no different math libraries exist, there probably *will* + * be some in the future. */ + #define LIB_SPEC "%{g:-lg} %{resident:-lbc}%{!resident:%{fbaserel:%{!p:%{!pg:-lbc}}%{p:-lbc_p}%{pg:-lbc_p}}%{!fbaserel:%{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p}}}" + + /* if debugging, tell the linker to output amiga-hunk symbols *and* + * a BSD compatible debug hunk */ + + #define LINK_SPEC "%{g:-amiga-debug-hunk} %{fbaserel:-databss-together} %{resident:-databss-together} " + + #define CC1_SPEC "%{resident:-fbaserel} " + + #define CC1PLUS_SPEC "%{resident:-fbaserel} " + + /* Omit frame pointer at high optimization levels. */ + + #define OPTIMIZATION_OPTIONS(OPTIMIZE) \ + { \ + if (OPTIMIZE >= 2) \ + flag_omit_frame_pointer = 1; \ + } + + /* provide a dummy entry for the small-code switch. This is currently only + needed by the assembler (explanations: m68k.h) */ + + #undef TARGET_SWITCHES + #define TARGET_SWITCHES \ + { { "68020", 5}, \ + { "c68020", 5}, \ + { "68881", 2}, \ + { "bitfield", 4}, \ + { "68000", -5}, \ + { "c68000", -5}, \ + { "soft-float", -0102}, \ + { "nobitfield", -4}, \ + { "rtd", 8}, \ + { "nortd", -8}, \ + { "short", 040}, \ + { "noshort", -040}, \ + { "fpa", 0100}, \ + { "nofpa", -0100}, \ + { "sky", 0200}, \ + { "nosky", -0200}, \ + { "68040", 0407}, \ + { "68030", -01400}, \ + { "68030", 7}, \ + { "68040-only", 01000}, \ + { "small-code", 0 }, \ + { "", TARGET_DEFAULT}} + + /* Every structure or union's size must be a multiple of 2 bytes. */ + + #define STRUCTURE_SIZE_BOUNDARY 16 + + /* This is BSD, so it wants DBX format. */ + + #define DBX_DEBUGGING_INFO + + /* Allow folding division by zero. */ + #define REAL_INFINITY + + /* This is how to output an assembler line defining a `double' constant. */ + + #undef ASM_OUTPUT_DOUBLE + #define ASM_OUTPUT_DOUBLE(FILE,VALUE) \ + { \ + if (REAL_VALUE_ISINF (VALUE)) \ + fprintf (FILE, "\t.double 0r%s99e999\n", (VALUE) > 0 ? "" : "-"); \ + else if (isnan (VALUE)) \ + { \ + union { double d; long l[2];} t; \ + t.d = (VALUE); \ + fprintf (FILE, "\t.long 0x%lx\n\t.long 0x%lx\n", t.l[0], t.l[1]); \ + } \ + else \ + fprintf (FILE, "\t.double 0r%.17g\n", VALUE); \ + } + + /* This is how to output an assembler line defining a `float' constant. */ + + #undef ASM_OUTPUT_FLOAT + #define ASM_OUTPUT_FLOAT(FILE,VALUE) \ + { \ + if (REAL_VALUE_ISINF (VALUE)) \ + fprintf (FILE, "\t.single 0r%s99e999\n", (VALUE) > 0 ? "" : "-"); \ + else if (isnan (VALUE)) \ + { \ + union { float f; long l;} t; \ + t.f = (VALUE); \ + fprintf (FILE, "\t.long 0x%lx\n", t.l); \ + } \ + else \ + fprintf (FILE, "\t.single 0r%.9g\n", VALUE); \ + } + + /* This is how to output an assembler lines defining floating operands. + There's no way to output a NaN's fraction, so we lose it. */ + + #undef ASM_OUTPUT_FLOAT_OPERAND + #define ASM_OUTPUT_FLOAT_OPERAND(FILE,VALUE) \ + (REAL_VALUE_ISINF ((VALUE)) \ + ? asm_fprintf (FILE, "%I0r%s99e999", ((VALUE) > 0 ? "" : "-")) \ + : (VALUE) == -0.0 \ + ? asm_fprintf (FILE, "%I0r-0.0") \ + : asm_fprintf (FILE, "%I0r%.9g", (VALUE))) + + #undef ASM_OUTPUT_DOUBLE_OPERAND + #define ASM_OUTPUT_DOUBLE_OPERAND(FILE,VALUE) \ + (REAL_VALUE_ISINF ((VALUE)) \ + ? asm_fprintf (FILE, "%I0r%s99e999", ((VALUE) > 0 ? "" : "-")) \ + : (VALUE) == -0.0 \ + ? asm_fprintf (FILE, "%I0r-0.0") \ + : asm_fprintf (FILE, "%I0r%.17g", (VALUE))) + + /* use A5 as framepointer instead of A6, this makes A6 available as a + * general purpose register, and can thus be used without problems in + * direct library calls. */ + #undef FRAME_POINTER_REGNUM + #define FRAME_POINTER_REGNUM 13 + #undef ARG_POINTER_REGNUM + #define ARG_POINTER_REGNUM 13 + + /* we use A4 for this, not A5, which is the framepointer */ + #undef PIC_OFFSET_TABLE_REGNUM + #define PIC_OFFSET_TABLE_REGNUM 12 + + #define STANDARD_INCLUDE_DIR "gcc:include" + #define MD_STARTFILE_PREFIX "gcc:lib/" + + /* we do have an ansi-complient c-library ;-) */ + #define HAVE_ATEXIT + #define HAVE_VPRINTF + #define HAVE_VFPRINTF + #define HAVE_PUTENV + #define HAVE_STRERROR + + #define ENVIRON_SEPARATOR ',' + + /* setup a default shell return value for those (gazillion..) programs that + (inspite of ANSI-C) declare main() to be void (or even VOID...) */ + + #define DEFAULT_MAIN_RETURN c_expand_return (integer_zero_node) + + /* given that symbolic_operand(X), return TRUE if no special + base relative relocation is necessary */ + + #define LEGITIMATE_BASEREL_OPERAND_P(X) \ + (flag_pic == 3 && read_only_operand (X)) + + #undef LEGITIMATE_PIC_OPERAND_P + #define LEGITIMATE_PIC_OPERAND_P(X) \ + (! symbolic_operand (X, VOIDmode) || LEGITIMATE_BASEREL_OPERAND_P (X)) + + + /* Define this macro if references to a symbol must be treated + differently depending on something about the variable or + function named by the symbol (such as what section it is in). + + The macro definition, if any, is executed immediately after the + rtl for DECL or other node is created. + The value of the rtl will be a `mem' whose address is a + `symbol_ref'. + + The usual thing for this macro to do is to a flag in the + `symbol_ref' (such as `SYMBOL_REF_FLAG') or to store a modified + name string in the `symbol_ref' (if one bit is not enough + information). + + On the Amiga we use this to indicate if a symbol is in text or + data space. */ + + #define ENCODE_SECTION_INFO(DECL)\ + do \ + { \ + if (TREE_CODE (DECL) == FUNCTION_DECL) \ + SYMBOL_REF_FLAG (XEXP (DECL_RTL (DECL), 0)) = 1; \ + else \ + { \ + rtx rtl = (TREE_CODE_CLASS (TREE_CODE (DECL)) != 'd' \ + ? TREE_CST_RTL (DECL) : DECL_RTL (DECL)); \ + if (RTX_UNCHANGING_P (rtl) && !MEM_VOLATILE_P (rtl)) \ + SYMBOL_REF_FLAG (XEXP (rtl, 0)) = 1; \ + } \ + } \ + while (0) + + #if 0 + #undef SELECT_RTX_SECTION + #define SELECT_RTX_SECTION(MODE, X) \ + { \ + if (!flag_pic || LEGITIMATE_BASEREL_OPERAND_P (X)) \ + readonly_data_section(); \ + else if (LEGITIMATE_PIC_OPERAND_P (X)) \ + readonly_data_section(); \ + else \ + data_section(); \ + } + #else + #undef SELECT_RTX_SECTION + #define SELECT_RTX_SECTION(MODE, X) readonly_data_section (); + #endif + + /* according to varasm.c, RELOC referrs *only* to whether constants (!) + are addressed by address. This doesn't matter in baserelative code, + so we allow (inspite of flag_pic) readonly_data_section() in that + case */ + + #undef SELECT_SECTION + #define SELECT_SECTION(DECL, RELOC) \ + { \ + if (TREE_CODE (DECL) == STRING_CST) \ + { \ + if (! flag_writable_strings) \ + readonly_data_section (); \ + else \ + data_section (); \ + } \ + else if (TREE_CODE (DECL) == VAR_DECL) \ + { \ + if ((flag_pic && flag_pic != 3 && RELOC) \ + || !TREE_READONLY (DECL) || TREE_SIDE_EFFECTS (DECL)) \ + data_section (); \ + else \ + readonly_data_section (); \ + } \ + else \ + readonly_data_section (); \ + } + + + + /* starting support for amiga specific keywords + * -------------------------------------------- + */ + + /* validate attributes that don't take a parameter. Currently we support + * __attribute__ (saveds) and __attribute__ (interrupt) + */ + #define HANDLE_ATTRIBUTE0(attr) \ + (strcmp(attr, "saveds") != 0 && strcmp(attr, "interrupt") != 0) + + /* (c-common.c) + * install additional attributes + */ + #define HANDLE_EXTRA_ATTRIBUTES(a) \ + if (TREE_VALUE (a) != 0 \ + && TREE_CODE (TREE_VALUE (a)) == IDENTIFIER_NODE \ + && TREE_VALUE (a) == get_identifier ("saveds")) \ + { \ + if (TREE_CODE (decl) != FUNCTION_DECL) \ + { \ + warning_with_decl (decl, \ + "saveds attribute specified for non-function `%s'"); \ + return; \ + } \ + \ + attr_do_saveds (DECL_NAME (decl)); \ + } \ + else if (TREE_VALUE (a) != 0 \ + && TREE_CODE (TREE_VALUE (a)) == IDENTIFIER_NODE \ + && TREE_VALUE (a) == get_identifier ("interrupt")) \ + { \ + if (TREE_CODE (decl) != FUNCTION_DECL) \ + { \ + warning_with_decl (decl, \ + "saveds attribute specified for non-function `%s'"); \ + return; \ + } \ + \ + attr_do_interrupt (DECL_NAME (decl)); \ + } \ + + + #define PROLOGUE_EXTRA_SAVE(mask) \ + { extern char *current_function_name; \ + /* saveds makes the function preserve d1/a0/a1 as well */ \ + if (attr_does_saveds (current_function_name)) \ + mask |= 0x40c0; } \ + + + #define EPILOGUE_EXTRA_RESTORE(mask, nregs) \ + { extern char *current_function_name; \ + /* restore those extra registers */ \ + if (attr_does_saveds (current_function_name)) \ + { \ + mask |= 0x0302; \ + nregs += 3; \ + } } \ + + + #define EPILOGUE_EXTRA_BARRIER_KLUDGE(stream) \ + { extern char *current_function_name; \ + /* PLEASE Help! how is this done cleaner?? */ \ + if (attr_does_saveds (current_function_name)) \ + { \ + fprintf (stderr, \ + "warning: couldn't cleanup `saveds'-stack in `%s'.\n"); \ + fprintf (stderr, \ + " this is only ok, if the function never returns!\n"); \ + } } \ + + + #define EPILOGUE_EXTRA_TEST(stream) \ + { extern char *current_function_name; \ + /* with the interrupt-attribute, we have to set the cc before rts */ \ + if (attr_does_interrupt (current_function_name)) \ + asm_fprintf (stream, "\ttstl %s\n", reg_names[0]); } \ + diff -2rcN dh5:gcc-2.1.orig/config/m68k.c gcc-2.1/config/m68k.c *** dh5:gcc-2.1.orig/config/m68k.c Mon Apr 20 02:35:38 1992 --- gcc-2.1/config/m68k.c Sat Apr 18 21:58:21 1992 *************** *** 57,61 **** finalize_pic () { ! if (flag_pic && current_function_uses_pic_offset_table) emit_insn (gen_rtx (USE, VOIDmode, pic_offset_table_rtx)); } --- 57,61 ---- finalize_pic () { ! if (flag_pic && (flag_pic != 3) && current_function_uses_pic_offset_table) emit_insn (gen_rtx (USE, VOIDmode, pic_offset_table_rtx)); } *************** *** 177,180 **** --- 177,183 ---- num_saved_regs--; } + #ifdef PROLOGUE_EXTRA_SAVE + PROLOGUE_EXTRA_SAVE (mask); + #endif if (num_saved_regs <= 2) { *************** *** 205,209 **** #endif } ! if (flag_pic && current_function_uses_pic_offset_table) { #ifdef MOTOROLA --- 208,212 ---- #endif } ! if (flag_pic && (flag_pic < 3) && current_function_uses_pic_offset_table) { #ifdef MOTOROLA *************** *** 273,276 **** --- 276,282 ---- about which function the pc is in at this address. */ asm_fprintf (stream, "\tnop\n"); + #ifdef EPILOGUE_EXTRA_BARRIER_KLUDGE + EPILOGUE_EXTRA_BARRIER_KLUDGE(stream); + #endif return; } *************** *** 303,306 **** --- 309,315 ---- mask |= 1 << regno; } + #ifdef EPILOGUE_EXTRA_RESTORE + EPILOGUE_EXTRA_RESTORE(mask, nregs); + #endif offset = foffset + nregs * 4; if (offset + fsize >= 0x8000 *************** *** 505,508 **** --- 514,520 ---- } } + #ifdef EPILOGUE_EXTRA_TEST + EPILOGUE_EXTRA_TEST(stream); + #endif if (current_function_pops_args) asm_fprintf (stream, "\trtd %0I%d\n", current_function_pops_args); *************** *** 795,804 **** if (GET_CODE (orig) == SYMBOL_REF || GET_CODE (orig) == LABEL_REF) { if (reg == 0) abort (); ! pic_ref = gen_rtx (MEM, Pmode, ! gen_rtx (PLUS, Pmode, ! pic_offset_table_rtx, orig)); current_function_uses_pic_offset_table = 1; RTX_UNCHANGING_P (pic_ref) = 1; --- 807,824 ---- if (GET_CODE (orig) == SYMBOL_REF || GET_CODE (orig) == LABEL_REF) { + #ifdef LEGITIMATE_BASEREL_OPERAND_P + if (LEGITIMATE_BASEREL_OPERAND_P (orig)) + return orig; + #endif + if (reg == 0) abort (); ! if (flag_pic == 3) ! pic_ref = gen_rtx (PLUS, Pmode, pic_offset_table_rtx, orig); ! else ! pic_ref = gen_rtx (MEM, Pmode, ! gen_rtx (PLUS, Pmode, ! pic_offset_table_rtx, orig)); current_function_uses_pic_offset_table = 1; RTX_UNCHANGING_P (pic_ref) = 1; *************** *** 832,835 **** --- 852,856 ---- /* Likewise, should we set special REG_NOTEs here? */ } + return pic_ref; } *************** *** 1884,1887 **** --- 1905,1910 ---- if ((flag_pic == 2) && (breg == pic_offset_table_rtx)) fprintf (file, ":l"); + if ((flag_pic == 3) && (breg == pic_offset_table_rtx)) + fprintf (file, ":W"); } fprintf (file, "(%s", reg_names[REGNO (breg)]); *************** *** 1899,1902 **** --- 1922,1927 ---- if ((flag_pic == 2) && (breg == pic_offset_table_rtx)) fprintf (file, ":l"); + if ((flag_pic == 3) && (breg == pic_offset_table_rtx)) + fprintf (file, ":W"); } if (addr != 0 && ireg != 0) diff -2rcN dh5:gcc-2.1.orig/config/m68k.h gcc-2.1/config/m68k.h *** dh5:gcc-2.1.orig/config/m68k.h Mon Apr 20 02:35:41 1992 --- gcc-2.1/config/m68k.h Thu Apr 16 20:16:07 1992 *************** *** 327,333 **** #define CONDITIONAL_REGISTER_USAGE \ ! { \ ! if (flag_pic) \ ! fixed_regs[PIC_OFFSET_TABLE_REGNUM] = 1; \ } --- 327,336 ---- #define CONDITIONAL_REGISTER_USAGE \ ! { \ ! if (flag_pic) \ ! fixed_regs[PIC_OFFSET_TABLE_REGNUM] = 1; \ ! /* prevent saving/restoring of the base reg */ \ ! if (flag_pic == 3) \ ! call_used_regs[PIC_OFFSET_TABLE_REGNUM] = 1; \ } diff -2rcN dh5:gcc-2.1.orig/config/m68k.md gcc-2.1/config/m68k.md *** dh5:gcc-2.1.orig/config/m68k.md Mon Apr 20 02:35:51 1992 --- gcc-2.1/config/m68k.md Thu Apr 16 18:05:26 1992 *************** *** 705,715 **** if (flag_pic && symbolic_operand (operands[1], SImode)) { ! /* The source is an address which requires PIC relocation. ! Call legitimize_pic_address with the source, mode, and a relocation ! register (a new pseudo, or the final destination if reload_in_progress ! is set). Then fall through normally */ ! extern rtx legitimize_pic_address(); ! rtx temp = reload_in_progress ? operands[0] : gen_reg_rtx (Pmode); ! operands[1] = legitimize_pic_address (operands[1], SImode, temp); } }") --- 705,720 ---- if (flag_pic && symbolic_operand (operands[1], SImode)) { ! #ifdef LEGITIMATE_BASEREL_OPERAND_P ! if (flag_pic != 3 || !LEGITIMATE_BASEREL_OPERAND_P (operands[1])) ! #endif ! { ! /* The source is an address which requires PIC relocation. ! Call legitimize_pic_address with the source, mode, and a relocation ! register (a new pseudo, or the final destination if reload_in_progress ! is set). Then fall through normally */ ! extern rtx legitimize_pic_address(); ! rtx temp = reload_in_progress ? operands[0] : gen_reg_rtx (Pmode); ! operands[1] = legitimize_pic_address (operands[1], SImode, temp); ! } } }") *************** *** 4588,4592 **** " { ! if (flag_pic && GET_CODE (XEXP (operands[0], 0)) == SYMBOL_REF) operands[0] = gen_rtx (MEM, GET_MODE (operands[0]), force_reg (Pmode, XEXP (operands[0], 0))); --- 4593,4597 ---- " { ! if (flag_pic && flag_pic < 3 && GET_CODE (XEXP (operands[0], 0)) == SYMBOL_REF) operands[0] = gen_rtx (MEM, GET_MODE (operands[0]), force_reg (Pmode, XEXP (operands[0], 0))); *************** *** 4599,4603 **** ;; Operand 1 not really used on the m68000. ! "! flag_pic" "* #ifdef MOTOROLA --- 4604,4608 ---- ;; Operand 1 not really used on the m68000. ! "(! flag_pic || flag_pic == 3)" "* #ifdef MOTOROLA *************** *** 4614,4618 **** ;; Operand 1 not really used on the m68000. ! "flag_pic" "* return \"jsr %0\"; --- 4619,4623 ---- ;; Operand 1 not really used on the m68000. ! "(flag_pic && flag_pic < 3)" "* return \"jsr %0\"; *************** *** 4630,4634 **** " { ! if (flag_pic && GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF) operands[1] = gen_rtx (MEM, GET_MODE (operands[1]), force_reg (Pmode, XEXP (operands[1], 0))); --- 4635,4639 ---- " { ! if (flag_pic && flag_pic < 3 && GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF) operands[1] = gen_rtx (MEM, GET_MODE (operands[1]), force_reg (Pmode, XEXP (operands[1], 0))); *************** *** 4641,4645 **** (match_operand:SI 2 "general_operand" "g")))] ;; Operand 2 not really used on the m68000. ! "! flag_pic" "* #ifdef MOTOROLA --- 4646,4650 ---- (match_operand:SI 2 "general_operand" "g")))] ;; Operand 2 not really used on the m68000. ! "(! flag_pic || flag_pic == 3)" "* #ifdef MOTOROLA *************** *** 4656,4660 **** (match_operand:SI 2 "general_operand" "g")))] ;; Operand 2 not really used on the m68000. ! "flag_pic" "* return \"jsr %1\"; --- 4661,4665 ---- (match_operand:SI 2 "general_operand" "g")))] ;; Operand 2 not really used on the m68000. ! "(flag_pic && flag_pic < 3)" "* return \"jsr %1\"; diff -2rcN dh5:gcc-2.1.orig/expr.c gcc-2.1/expr.c *** dh5:gcc-2.1.orig/expr.c Mon Apr 20 02:40:47 1992 --- gcc-2.1/expr.c Thu Apr 16 21:14:25 1992 *************** *** 1699,1702 **** --- 1699,1708 ---- argvec = (struct arg *) alloca (nargs * sizeof (struct arg)); + /* how would you do this RIGHT ?? fake a DECL node? dunno... */ + #ifdef ENCODE_SECTION_INFO + /* mark it as a function (to be in the text section that is) */ + SYMBOL_REF_FLAG (fun) = 1; + #endif + INIT_CUMULATIVE_ARGS (args_so_far, (tree)0, fun); diff -2rcN dh5:gcc-2.1.orig/gcc.c gcc-2.1/gcc.c *** dh5:gcc-2.1.orig/gcc.c Mon Apr 20 02:41:26 1992 --- gcc-2.1/gcc.c Thu Apr 16 20:58:59 1992 *************** *** 86,90 **** --- 86,93 ---- extern int errno, sys_nerr; + #ifndef __STDC__ extern char *sys_errlist[]; + #define sterror(err) sys_errlist[err] + #endif extern int execv (), execvp (); *************** *** 1042,1045 **** --- 1045,1051 ---- if (base == (char *)0) { + #ifdef amigados + base = "ram:"; + #else if (access ("/usr/tmp", R_OK | W_OK) == 0) base = "/usr/tmp/"; *************** *** 1046,1049 **** --- 1052,1056 ---- else base = "/tmp/"; + #endif } } *************** *** 1052,1056 **** temp_filename = xmalloc (len + sizeof("/ccXXXXXX")); strcpy (temp_filename, base); ! if (len > 0 && temp_filename[len-1] != '/') temp_filename[len++] = '/'; strcpy (temp_filename + len, "ccXXXXXX"); --- 1059,1067 ---- temp_filename = xmalloc (len + sizeof("/ccXXXXXX")); strcpy (temp_filename, base); ! if (len > 0 && temp_filename[len-1] != '/' ! #ifdef amigados ! && temp_filename[len-1] != ':' ! #endif ! ) temp_filename[len++] = '/'; strcpy (temp_filename + len, "ccXXXXXX"); *************** *** 1179,1183 **** /* Determine the filename to execute (special case for absolute paths). */ ! if (*name == '/') { if (access (name, mode)) --- 1190,1198 ---- /* Determine the filename to execute (special case for absolute paths). */ ! if (*name == '/' ! #ifdef amigados ! || index (name, ':') ! #endif ! ) { if (access (name, mode)) *************** *** 1355,1358 **** --- 1370,1409 ---- (i.e. its output should be piped to the next one.) */ + #if defined(amigados) && !defined(FORK_GCC) + + static int + pexecute (func, program, argv, not_last) + char *program; + int (*func)(); + char *argv[]; + int not_last; + { + int pid; + int pdes[2]; + int input_desc = last_pipe_input; + int output_desc = STDOUT_FILE_NO; + + char *argline; + int arglinelength, i; + + for (i = 1, arglinelength=0; argv[i]; ++i) + arglinelength += strlen(argv[i]) + 1; + + arglinelength += strlen(program) + 1; + + if (!(argline = (char *)alloca(arglinelength))) + pfatal_with_name ("alloca"); + + strcpy(argline, program); + for (i = 1; argv[i]; ++i) + { + strcat(argline, " "); + strcat(argline, argv[i]); + } + + return ssystem(argline); + } + #else /* not amigados */ + #ifdef __MSDOS__ *************** *** 1478,1481 **** --- 1529,1533 ---- #endif /* not __MSDOS__ */ + #endif /* not amigados */ /* Execute the command specified by the arguments on the current line of spec. *************** *** 1572,1578 **** --- 1624,1636 ---- char *string = commands[i].argv[0]; + #if defined(amigados) && !defined(FORK_GCC) + commands[i].pid = pexecute (NULL, + string, commands[i].argv, + i + 1 < n_commands); + #else commands[i].pid = pexecute ((string != commands[i].prog ? execv : execvp), string, commands[i].argv, i + 1 < n_commands); + #endif if (string != commands[i].prog) *************** *** 1595,1599 **** char *prog; ! #ifdef __MSDOS__ status = pid = commands[i].pid; #else --- 1653,1657 ---- char *prog; ! #if defined(__MSDOS__) || (defined(amigados) && !defined(FORK_GCC)) status = pid = commands[i].pid; #else *************** *** 1657,1660 **** --- 1715,1724 ---- static char **outfiles; + /* the character used in environment strings to separate components */ + #ifndef ENVIRON_SEPARATOR + #define ENVIRON_SEPARATOR ':' + #endif + + /* Create the vector `switches' and its contents. Store its length in `n_switches'. */ *************** *** 1684,1688 **** /* COMPILER_PATH and LIBRARY_PATH have values ! that are lists of directory names with colons. */ temp = getenv ("COMPILER_PATH"); --- 1748,1752 ---- /* COMPILER_PATH and LIBRARY_PATH have values ! that are lists of directory names with ENVIRON_SEPARATOR. */ temp = getenv ("COMPILER_PATH"); *************** *** 1695,1701 **** while (1) { ! if ((*endp == ':') || (*endp == 0)) { strncpy (nstore, startp, endp-startp); if (endp == startp) { --- 1759,1766 ---- while (1) { ! if ((*endp == ENVIRON_SEPARATOR) || (*endp == 0)) { strncpy (nstore, startp, endp-startp); + #ifndef amigados if (endp == startp) { *************** *** 1709,1712 **** --- 1774,1786 ---- else nstore[endp-startp] = 0; + #else + if (endp[-1] != '/' && endp[-1] != ':') + { + nstore[endp-startp] = '/'; + nstore[endp-startp+1] = 0; + } + else + nstore[endp-startp] = 0; + #endif add_prefix (&exec_prefix, nstore, 0, 0, 0); if (*endp == 0) *************** *** 1728,1734 **** while (1) { ! if ((*endp == ':') || (*endp == 0)) { strncpy (nstore, startp, endp-startp); if (endp == startp) { --- 1802,1809 ---- while (1) { ! if ((*endp == ENVIRON_SEPARATOR) || (*endp == 0)) { strncpy (nstore, startp, endp-startp); + #ifndef amigados if (endp == startp) { *************** *** 1742,1745 **** --- 1817,1829 ---- else nstore[endp-startp] = 0; + #else + if (endp[-1] != '/' && endp[-1] != ':') + { + nstore[endp-startp] = '/'; + nstore[endp-startp+1] = 0; + } + else + nstore[endp-startp] = 0; + #endif add_prefix (&startfile_prefix, nstore, 0, 0, 0); /* Make separate list of dirs that came from LIBRARY_PATH. */ *************** *** 1764,1770 **** while (1) { ! if ((*endp == ':') || (*endp == 0)) { strncpy (nstore, startp, endp-startp); if (endp == startp) { --- 1848,1855 ---- while (1) { ! if ((*endp == ENVIRON_SEPARATOR) || (*endp == 0)) { strncpy (nstore, startp, endp-startp); + #ifndef amigados if (endp == startp) { *************** *** 1778,1781 **** --- 1863,1875 ---- else nstore[endp-startp] = 0; + #else + if (endp[-1] != '/' && endp[-1] != ':') + { + nstore[endp-startp] = '/'; + nstore[endp-startp+1] = 0; + } + else + nstore[endp-startp] = 0; + #endif add_prefix (&startfile_prefix, nstore, 0, 0, 0); /* Make separate list of dirs that came from LIBRARY_PATH. */ *************** *** 3063,3066 **** --- 3157,3164 ---- if (*p == '/') input_basename = p + 1; + #ifdef amigados + else if (index (p, ':')) + input_basename = index (p, ':') + 1; + #endif /* Find a suffix starting with the last period, *************** *** 3284,3288 **** if (errno < sys_nerr) ! s = concat ("%s: ", sys_errlist[errno], ""); else s = "cannot open %s"; --- 3382,3386 ---- if (errno < sys_nerr) ! s = concat ("%s: ", strerror (errno), ""); else s = "cannot open %s"; *************** *** 3297,3301 **** if (errno < sys_nerr) ! s = concat ("%s: ", sys_errlist[errno], ""); else s = "cannot open %s"; --- 3395,3399 ---- if (errno < sys_nerr) ! s = concat ("%s: ", strerror (errno), ""); else s = "cannot open %s"; *************** *** 3311,3315 **** if (errno < sys_nerr) s = concat ("installation problem, cannot exec %s: ", ! sys_errlist[errno], ""); else s = "installation problem, cannot exec %s"; --- 3409,3413 ---- if (errno < sys_nerr) s = concat ("installation problem, cannot exec %s: ", ! strerror (errno), ""); else s = "installation problem, cannot exec %s"; *************** *** 3521,3522 **** --- 3619,3634 ---- } } + + + #ifdef amigados + + /* don't export paths.. we don't need collect, and such exported environment + variables would stay around after the death of this process, irritating + next callers.. */ + + void + putenv (str) + char *str; + { + } + #endif diff -2rcN dh5:gcc-2.1.orig/genconfig.c gcc-2.1/genconfig.c *** dh5:gcc-2.1.orig/genconfig.c Fri Jan 17 23:02:14 1992 --- gcc-2.1/genconfig.c Tue Apr 14 21:01:21 1992 *************** *** 278,283 **** --- 278,288 ---- from the machine description file `md'. */\n\n"); + #ifdef amigados + /* Allow at least 14 operands for the sake of asm constructs. */ + max_recog_operands = 14; + #else /* Allow at least 10 operands for the sake of asm constructs. */ max_recog_operands = 10; + #endif max_dup_operands = 1; diff -2rcN dh5:gcc-2.1.orig/machmode.h gcc-2.1/machmode.h *** dh5:gcc-2.1.orig/machmode.h Mon Apr 20 02:42:31 1992 --- gcc-2.1/machmode.h Sun Apr 19 01:37:32 1992 *************** *** 56,60 **** /* Get the name of mode MODE as a string. */ ! extern char *mode_name[]; #define GET_MODE_NAME(MODE) (mode_name[(int)(MODE)]) --- 56,60 ---- /* Get the name of mode MODE as a string. */ ! extern char * const mode_name[]; #define GET_MODE_NAME(MODE) (mode_name[(int)(MODE)]) *************** *** 65,69 **** (integer, floating, complex, etc.) */ ! extern enum mode_class mode_class[]; #define GET_MODE_CLASS(MODE) (mode_class[(int)(MODE)]) --- 65,69 ---- (integer, floating, complex, etc.) */ ! extern const enum mode_class mode_class[]; #define GET_MODE_CLASS(MODE) (mode_class[(int)(MODE)]) *************** *** 70,74 **** /* Get the size in bytes of an object of mode MODE. */ ! extern int mode_size[]; #define GET_MODE_SIZE(MODE) (mode_size[(int)(MODE)]) --- 70,74 ---- /* Get the size in bytes of an object of mode MODE. */ ! extern const int mode_size[]; #define GET_MODE_SIZE(MODE) (mode_size[(int)(MODE)]) *************** *** 75,79 **** /* Get the size in bytes of the basic parts of an object of mode MODE. */ ! extern int mode_unit_size[]; #define GET_MODE_UNIT_SIZE(MODE) (mode_unit_size[(int)(MODE)]) --- 75,79 ---- /* Get the size in bytes of the basic parts of an object of mode MODE. */ ! extern const int mode_unit_size[]; #define GET_MODE_UNIT_SIZE(MODE) (mode_unit_size[(int)(MODE)]) *************** *** 96,100 **** /* Get the next wider natural mode (eg, QI -> HI -> SI -> DI -> TI). */ ! extern enum machine_mode mode_wider_mode[]; #define GET_MODE_WIDER_MODE(MODE) (mode_wider_mode[(int)(MODE)]) --- 96,100 ---- /* Get the next wider natural mode (eg, QI -> HI -> SI -> DI -> TI). */ ! extern const enum machine_mode mode_wider_mode[]; #define GET_MODE_WIDER_MODE(MODE) (mode_wider_mode[(int)(MODE)]) diff -2rcN dh5:gcc-2.1.orig/move-if-change gcc-2.1/move-if-change *** dh5:gcc-2.1.orig/move-if-change Sun Jul 28 20:41:51 1991 --- gcc-2.1/move-if-change Wed Apr 15 12:38:12 1992 *************** *** 1,15 **** ! #!/bin/sh ! if ! test -r $2 ! then ! if ! cmp $1 $2 > /dev/null ! then echo $2 is unchanged ! rm -f $1 else ! mv -f $1 $2 fi else ! mv -f $1 $2 fi --- 1,10 ---- ! if [ -r $2 ]; then ! if cmp $1 $2 > nil:; then echo $2 is unchanged ! c:rm -f $1 else ! c:mv -f $1 $2 fi else ! c:mv -f $1 $2 fi diff -2rcN dh5:gcc-2.1.orig/print-tree.c gcc-2.1/print-tree.c *** dh5:gcc-2.1.orig/print-tree.c Fri Jan 17 23:18:48 1992 --- gcc-2.1/print-tree.c Sun Apr 19 00:09:47 1992 *************** *** 25,29 **** extern char **tree_code_name; ! extern char *mode_name[]; void print_node (); --- 25,29 ---- extern char **tree_code_name; ! extern char *const mode_name[]; void print_node (); diff -2rcN dh5:gcc-2.1.orig/rtl.c gcc-2.1/rtl.c *** dh5:gcc-2.1.orig/rtl.c Wed Jan 15 21:57:29 1992 --- gcc-2.1/rtl.c Wed Jan 29 03:42:48 1992 *************** *** 50,54 **** #define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS) NAME , ! char *rtx_name[] = { #include "rtl.def" /* rtl expressions are documented here */ }; --- 50,54 ---- #define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS) NAME , ! char * const rtx_name[] = { #include "rtl.def" /* rtl expressions are documented here */ }; *************** *** 61,65 **** #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER) NAME, ! char *mode_name[(int) MAX_MACHINE_MODE] = { #include "machmode.def" --- 61,65 ---- #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER) NAME, ! char * const mode_name[(int) MAX_MACHINE_MODE] = { #include "machmode.def" *************** *** 77,81 **** #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER) CLASS, ! enum mode_class mode_class[(int) MAX_MACHINE_MODE] = { #include "machmode.def" }; --- 77,81 ---- #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER) CLASS, ! const enum mode_class mode_class[(int) MAX_MACHINE_MODE] = { #include "machmode.def" }; *************** *** 88,92 **** #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER) SIZE, ! int mode_size[(int) MAX_MACHINE_MODE] = { #include "machmode.def" }; --- 88,92 ---- #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER) SIZE, ! const int mode_size[(int) MAX_MACHINE_MODE] = { #include "machmode.def" }; *************** *** 99,103 **** #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER) UNIT, ! int mode_unit_size[(int) MAX_MACHINE_MODE] = { #include "machmode.def" /* machine modes are documented here */ }; --- 99,103 ---- #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER) UNIT, ! const int mode_unit_size[(int) MAX_MACHINE_MODE] = { #include "machmode.def" /* machine modes are documented here */ }; *************** *** 112,116 **** (enum machine_mode) WIDER, ! enum machine_mode mode_wider_mode[(int) MAX_MACHINE_MODE] = { #include "machmode.def" /* machine modes are documented here */ }; --- 112,116 ---- (enum machine_mode) WIDER, ! const enum machine_mode mode_wider_mode[(int) MAX_MACHINE_MODE] = { #include "machmode.def" /* machine modes are documented here */ }; *************** *** 131,135 **** each charcter describes one operand. */ ! char *rtx_format[] = { /* "*" undefined. can cause a warning message --- 131,135 ---- each charcter describes one operand. */ ! char *const rtx_format[] = { /* "*" undefined. can cause a warning message *************** *** 160,164 **** that rtx code. See rtl.def for documentation on the defined classes. */ ! char rtx_class[] = { #define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS) CLASS, #include "rtl.def" /* rtl expressions are defined here */ --- 160,164 ---- that rtx code. See rtl.def for documentation on the defined classes. */ ! const char rtx_class[] = { #define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS) CLASS, #include "rtl.def" /* rtl expressions are defined here */ *************** *** 168,172 **** /* Names for kinds of NOTEs and REG_NOTEs. */ ! char *note_insn_name[] = { "NOTE_INSN_FUNCTION_BEG", "NOTE_INSN_DELETED", "NOTE_INSN_BLOCK_BEG", "NOTE_INSN_BLOCK_END", "NOTE_INSN_LOOP_BEG", "NOTE_INSN_LOOP_END", --- 168,173 ---- /* Names for kinds of NOTEs and REG_NOTEs. */ ! char * const note_insn_name[] = ! { "NOTE_INSN_FUNCTION_BEG", "NOTE_INSN_DELETED", "NOTE_INSN_BLOCK_BEG", "NOTE_INSN_BLOCK_END", "NOTE_INSN_LOOP_BEG", "NOTE_INSN_LOOP_END", *************** *** 174,178 **** "NOTE_INSN_LOOP_CONT", "NOTE_INSN_LOOP_VTOP" }; ! char *reg_note_name[] = { "", "REG_DEAD", "REG_INC", "REG_EQUIV", "REG_WAS_0", "REG_EQUAL", "REG_RETVAL", "REG_LIBCALL", "REG_NONNEG", "REG_NO_CONFLICT", "REG_UNUSED", --- 175,180 ---- "NOTE_INSN_LOOP_CONT", "NOTE_INSN_LOOP_VTOP" }; ! char * const reg_note_name[] = ! { "", "REG_DEAD", "REG_INC", "REG_EQUIV", "REG_WAS_0", "REG_EQUAL", "REG_RETVAL", "REG_LIBCALL", "REG_NONNEG", "REG_NO_CONFLICT", "REG_UNUSED", diff -2rcN dh5:gcc-2.1.orig/rtl.h gcc-2.1/rtl.h *** dh5:gcc-2.1.orig/rtl.h Mon Apr 20 02:43:42 1992 --- gcc-2.1/rtl.h Wed Jan 29 03:42:48 1992 *************** *** 43,53 **** #define GET_RTX_LENGTH(CODE) (rtx_length[(int)(CODE)]) ! extern char *rtx_name[]; #define GET_RTX_NAME(CODE) (rtx_name[(int)(CODE)]) ! extern char *rtx_format[]; #define GET_RTX_FORMAT(CODE) (rtx_format[(int)(CODE)]) ! extern char rtx_class[]; #define GET_RTX_CLASS(CODE) (rtx_class[(int)(CODE)]) --- 43,53 ---- #define GET_RTX_LENGTH(CODE) (rtx_length[(int)(CODE)]) ! extern char * const rtx_name[]; #define GET_RTX_NAME(CODE) (rtx_name[(int)(CODE)]) ! extern char * const rtx_format[]; #define GET_RTX_FORMAT(CODE) (rtx_format[(int)(CODE)]) ! extern const char rtx_class[]; #define GET_RTX_CLASS(CODE) (rtx_class[(int)(CODE)]) *************** *** 292,296 **** /* Names for REG_NOTE's in EXPR_LIST insn's. */ ! extern char *reg_note_name[]; #define GET_REG_NOTE_NAME(MODE) (reg_note_name[(int)(MODE)]) --- 292,296 ---- /* Names for REG_NOTE's in EXPR_LIST insn's. */ ! extern char *const reg_note_name[]; #define GET_REG_NOTE_NAME(MODE) (reg_note_name[(int)(MODE)]) *************** *** 347,351 **** /* Names for NOTE insn's other than line numbers. */ ! extern char *note_insn_name[]; #define GET_NOTE_INSN_NAME(NOTE_CODE) (note_insn_name[-(NOTE_CODE)]) --- 347,351 ---- /* Names for NOTE insn's other than line numbers. */ ! extern char *const note_insn_name[]; #define GET_NOTE_INSN_NAME(NOTE_CODE) (note_insn_name[-(NOTE_CODE)]) diff -2rcN dh5:gcc-2.1.orig/toplev.c gcc-2.1/toplev.c *** dh5:gcc-2.1.orig/toplev.c Mon Apr 20 02:44:21 1992 --- gcc-2.1/toplev.c Thu Apr 16 21:34:22 1992 *************** *** 464,467 **** --- 464,468 ---- {"pic", &flag_pic, 1}, {"PIC", &flag_pic, 2}, + {"baserel", &flag_pic, 3}, {"common", &flag_no_common, 0}, {"inhibit-size-directive", &flag_inhibit_size_directive, 1}, *************** *** 667,671 **** --- 668,675 ---- char *name; { + extern int errno; + int error = errno; fprintf (stderr, "%s: ", progname); + errno = error; perror (name); exit (35); *************** *** 1272,1275 **** --- 1276,1283 ---- if (na[-1] == '/') break; + #ifdef amigados + if (na[-1] == ':') + break; + #endif na--; } *************** *** 3013,3016 **** --- 3021,3025 ---- #ifndef VMS + #ifndef amigados if (flag_print_mem) { *************** *** 3027,3030 **** --- 3036,3040 ---- #endif /* not USG */ } + #endif /* not amigados */ #endif /* not VMS */ diff -2rcN dh5:gcc-2.1.orig/tree.c gcc-2.1/tree.c *** dh5:gcc-2.1.orig/tree.c Mon Apr 20 02:44:24 1992 --- gcc-2.1/tree.c Sat Apr 18 23:57:16 1992 *************** *** 218,222 **** static int do_identifier_warnings; ! extern char *mode_name[]; void gcc_obstack_init (); --- 218,222 ---- static int do_identifier_warnings; ! extern char *const mode_name[]; void gcc_obstack_init ();