diff -2rcN /usr/goinfre/gcc-2.7.0/Makefile.in gcc-2.7.0-amiga/Makefile.in
*** /usr/goinfre/gcc-2.7.0/Makefile.in	Thu Jun 15 12:01:43 1995
--- gcc-2.7.0-amiga/Makefile.in	Fri Jun 23 11:52:13 1995
***************
*** 67,74 ****
  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)
  MAKEINFO = makeinfo
  TEXI2DVI = texi2dvi
--- 67,78 ----
  SHELL = /bin/sh
  # on sysV, define this as cp.
! INSTALL = cp
  # These permit overriding just for certain files.
  INSTALL_PROGRAM = $(INSTALL)
  INSTALL_DATA = $(INSTALL)
+ SYMLINK = cp
+ # Some systems don't support hardlinks.  For this case, a simple copy
+ # will achieve the same results for our purposes.
+ HARDLINK = cp
  MAKEINFO = makeinfo
  TEXI2DVI = texi2dvi
***************
*** 100,104 ****
  
  # Target to use when installing include directory.  Either
! # install-headers-tar or install-headers-cpio.
  INSTALL_HEADERS_DIR = install-headers-tar
  
--- 104,108 ----
  
  # Target to use when installing include directory.  Either
! # install-headers-tar or install-headers-cpio or install-headers-cp
  INSTALL_HEADERS_DIR = install-headers-tar
  
***************
*** 106,110 ****
  # Usually the one we just built.
  # Don't use this as a dependency--use $(GCC_PASSES) or $(GCC_PARTS).
! GCC_FOR_TARGET = ./xgcc -B./
  
  # This is used instead of ALL_CFLAGS when compiling with GCC_FOR_TARGET.
--- 110,115 ----
  # Usually the one we just built.
  # Don't use this as a dependency--use $(GCC_PASSES) or $(GCC_PARTS).
! XGCC = xgcc
! GCC_FOR_TARGET = ./$(XGCC) -B./
  
  # This is used instead of ALL_CFLAGS when compiling with GCC_FOR_TARGET.
***************
*** 166,175 ****
  # Common prefix for installation directories.
  # NOTE: This directory must exist when you start installation.
! prefix = /usr/local
  # Directory in which to put localized header files. On the systems with
  # gcc as the native cc, `local_prefix' may not be `prefix' which is
  # `/usr'.
  # NOTE: local_prefix *should not* default from prefix.
! local_prefix = /usr/local
  # Directory in which to put host dependent programs and libraries
  exec_prefix = $(prefix)
--- 171,183 ----
  # Common prefix for installation directories.
  # NOTE: This directory must exist when you start installation.
! prefix = /gnu
  # Directory in which to put localized header files. On the systems with
  # gcc as the native cc, `local_prefix' may not be `prefix' which is
  # `/usr'.
+ # Similar considerations apply for toolkits located on non-writable storage,
+ # such as CD-ROM, where we need a completely separate place to put local
+ # include files.
  # NOTE: local_prefix *should not* default from prefix.
! local_prefix = /gnu
  # Directory in which to put host dependent programs and libraries
  exec_prefix = $(prefix)
***************
*** 672,676 ****
  
  # Dump a specs file to make -B./ read these specs over installed ones.
! specs: xgcc$(exeext)
  	$(GCC_FOR_TARGET) -dumpspecs > tmp-specs
  	mv tmp-specs specs
--- 680,684 ----
  
  # Dump a specs file to make -B./ read these specs over installed ones.
! specs: xgcc$(exeext) xgccv$(exeext)
  	$(GCC_FOR_TARGET) -dumpspecs > tmp-specs
  	mv tmp-specs specs
***************
*** 909,914 ****
  # message from ar, we make sure all files are writable.
  	-(cd tmpcopy; chmod +w * > /dev/null 2>&1)
! 	(cd tmpcopy; $(AR) x ../$(LIBGCC2))
! 	(cd tmpcopy; $(AR) $(AR_FLAGS) ../tmplibgcc.a *$(objext))
  	rm -rf tmpcopy
  	-if $(RANLIB_TEST) ; then $(RANLIB) tmplibgcc.a; else true; fi
--- 917,923 ----
  # message from ar, we make sure all files are writable.
  	-(cd tmpcopy; chmod +w * > /dev/null 2>&1)
! # The "cd..; wait" makes sure that the lock on tmpcopy has time to disappear.
! 	(cd tmpcopy; $(AR) x ../$(LIBGCC2); cd ..; /c/wait 2)
! 	(cd tmpcopy; $(AR) $(AR_FLAGS) ../tmplibgcc.a *$(objext); cd ..; /c/wait 2)
  	rm -rf tmpcopy
  	-if $(RANLIB_TEST) ; then $(RANLIB) tmplibgcc.a; else true; fi
***************
*** 983,990 ****
  	$(MAKE) -f $${srcdir1}/objc/Makefile libobjc.a \
  	  srcdir=$${srcdir1} tooldir=$(tooldir) AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" \
! 	  GCC_FOR_TARGET="$${thisdir1}/xgcc -B$${thisdir1}/" \
  	  GCC_CFLAGS="$(GCC_CFLAGS)"
  	-rm -f libobjc.a
! 	ln objc/libobjc.a . >/dev/null 2>&1 || cp objc/libobjc.a .
  	-if $(RANLIB_TEST) ; then $(RANLIB) libobjc.a; else true; fi
  
--- 992,999 ----
  	$(MAKE) -f $${srcdir1}/objc/Makefile libobjc.a \
  	  srcdir=$${srcdir1} tooldir=$(tooldir) AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" \
! 	  GCC_FOR_TARGET="$${thisdir1}/$(XGCC) -B$${thisdir1}/" \
  	  GCC_CFLAGS="$(GCC_CFLAGS)"
  	-rm -f libobjc.a
! 	$(HARDLINK) objc/libobjc.a . >/dev/null 2>&1 || cp objc/libobjc.a .
  	-if $(RANLIB_TEST) ; then $(RANLIB) libobjc.a; else true; fi
  
***************
*** 996,1000 ****
  	$(MAKE) -f $$srcdir1/objc/Makefile libobjc.a \
  	  srcdir=$$srcdir1 tooldir=$(tooldir) AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" \
! 	  GCC_FOR_TARGET="$$thisdir1/xgcc -B$$thisdir1/" \
  	  GCC_CFLAGS="$(GCC_CFLAGS)"
  
--- 1005,1009 ----
  	$(MAKE) -f $$srcdir1/objc/Makefile libobjc.a \
  	  srcdir=$$srcdir1 tooldir=$(tooldir) AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" \
! 	  GCC_FOR_TARGET="$$thisdir1/$(XGCC) -B$$thisdir1/" \
  	  GCC_CFLAGS="$(GCC_CFLAGS)"
  
***************
*** 1050,1054 ****
  ld: collect2
  	rm -f ld$(exeext)
! 	ln collect2$(exeext) ld$(exeext) > /dev/null 2>&1 \
  	   || cp collect2$(exeext) ld$(exeext)
  
--- 1059,1063 ----
  ld: collect2
  	rm -f ld$(exeext)
! 	$(HARDLINK) collect2$(exeext) ld$(exeext) > /dev/null 2>&1 \
  	   || cp collect2$(exeext) ld$(exeext)
  
***************
*** 1573,1577 ****
  cpp: $(CCCP)
  	-rm -f cpp$(exeext)
! 	ln $(CCCP)$(exeext) cpp$(exeext) > /dev/null 2>&1 \
  	 || cp $(CCCP)$(exeext) cpp$(exeext)
  cccp: cccp.o cexp.o version.o $(LIBDEPS)
--- 1582,1586 ----
  cpp: $(CCCP)
  	-rm -f cpp$(exeext)
! 	$(HARDLINK) $(CCCP)$(exeext) cpp$(exeext) > /dev/null 2>&1 \
  	 || cp $(CCCP)$(exeext) cpp$(exeext)
  cccp: cccp.o cexp.o version.o $(LIBDEPS)
***************
*** 1756,1760 ****
  	$(MAKE) -f $${srcdir1}/objc/Makefile copy-headers \
  	srcdir=$${srcdir1} tooldir=$(tooldir) AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" \
! 	GCC_FOR_TARGET="$${thisdir1}/xgcc -B$${thisdir1}/" \
  	GCC_CFLAGS="$(GCC_CFLAGS)" incinstalldir=$${thisdir1}/include
  	touch objc-headers
--- 1765,1769 ----
  	$(MAKE) -f $${srcdir1}/objc/Makefile copy-headers \
  	srcdir=$${srcdir1} tooldir=$(tooldir) AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" \
! 	GCC_FOR_TARGET="$${thisdir1}/$(XGCC) -B$${thisdir1}/" \
  	GCC_CFLAGS="$(GCC_CFLAGS)" incinstalldir=$${thisdir1}/include
  	touch objc-headers
***************
*** 1942,1945 ****
--- 1951,1955 ----
  	-rm -fr stage1 stage2 stage3 stage4
  	-rm -f */stage1 */stage2 */stage3 */stage4 */include
+ 	-rm -f cp-parse.output
  	-rm -f objc-parse.output
  	-rm -f c-parse.output
***************
*** 2083,2087 ****
  	  $(INSTALL_PROGRAM) xgcc$(exeext) $(bindir)/$(GCC_INSTALL_NAME)$(exeext); \
  	  rm -f $(bindir)/$(target)-gcc-1$(exeext); \
! 	  ln $(bindir)/$(GCC_INSTALL_NAME)$(exeext) $(bindir)/$(target)-gcc-1$(exeext) \
  	    > /dev/null 2>&1 \
  	    || cp $(bindir)/$(GCC_INSTALL_NAME)$(exeext) $(bindir)/$(target)-gcc-1$(exeext); \
--- 2093,2097 ----
  	  $(INSTALL_PROGRAM) xgcc$(exeext) $(bindir)/$(GCC_INSTALL_NAME)$(exeext); \
  	  rm -f $(bindir)/$(target)-gcc-1$(exeext); \
! 	  $(HARDLINK) $(bindir)/$(GCC_INSTALL_NAME)$(exeext) $(bindir)/$(target)-gcc-1$(exeext) \
  	    > /dev/null 2>&1 \
  	    || cp $(bindir)/$(GCC_INSTALL_NAME)$(exeext) $(bindir)/$(target)-gcc-1$(exeext); \
***************
*** 2154,2158 ****
  	    if expr "$$dest" : "$$dir.*" > /dev/null; then \
  	      rm -f $(libsubdir)/include/$$i; \
! 	      ln -s `echo $$i | sed "s|/[^/]*|/..|g" | sed 's|/..$$||'``echo "$$dest" | sed "s|$$dir||"` $(libsubdir)/include/$$i; \
  	    fi; \
  	  done; \
--- 2164,2168 ----
  	    if expr "$$dest" : "$$dir.*" > /dev/null; then \
  	      rm -f $(libsubdir)/include/$$i; \
! 	      $(SYMLINK) `echo $$i | sed "s|/[^/]*|/..|g" | sed 's|/..$$||'``echo "$$dest" | sed "s|$$dir||"` $(libsubdir)/include/$$i; \
  	    fi; \
  	  done; \
***************
*** 2177,2180 ****
--- 2187,2194 ----
  	(cd include; find . -print) | (cd include; cpio -pdum $(libsubdir)/include)
  
+ # Install the include directory using simple recursive copy.
+ install-headers-cp: stmp-headers install-include-dir
+ 	cd include; cp -r . $(libsubdir)/include
+ 
  # Put assert.h where it won't override GNU libc's assert.h.
  # It goes in a dir that is searched after GNU libc's headers;
***************
*** 2269,2273 ****
  	mkdir tmp/objc
  	for file in *[0-9a-zA-Z+]; do \
! 	  ln $$file tmp > /dev/null 2>&1 || cp $$file tmp; \
  	done
  	cd config; \
--- 2283,2287 ----
  	mkdir tmp/objc
  	for file in *[0-9a-zA-Z+]; do \
! 	  $(HARDLINK) $$file tmp > /dev/null 2>&1 || cp $$file tmp; \
  	done
  	cd config; \
***************
*** 2277,2286 ****
  	    cd $$file; \
  	    for subfile in *[0-9a-zA-Z+]; do \
! 	      ln $$subfile ../../tmp/config/$$file >/dev/null 2>&1 \
  	      || cp $$subfile ../../tmp/config/$$file; \
  	    done; \
  	    cd ..; \
  	  else \
! 	    ln $$file ../tmp/config >/dev/null 2>&1 \
  	    || cp $$file ../tmp/config; \
  	  fi; \
--- 2291,2300 ----
  	    cd $$file; \
  	    for subfile in *[0-9a-zA-Z+]; do \
! 	      $(HARDLINK) $$subfile ../../tmp/config/$$file >/dev/null 2>&1 \
  	      || cp $$subfile ../../tmp/config/$$file; \
  	    done; \
  	    cd ..; \
  	  else \
! 	    $(HARDLINK) $$file ../tmp/config >/dev/null 2>&1 \
  	    || cp $$file ../tmp/config; \
  	  fi; \
***************
*** 2288,2299 ****
  	cd ginclude; \
  	for file in *[0-9a-zA-Z+]; do \
! 	  ln $$file ../tmp/ginclude >/dev/null 2>&1 \
  	   || cp $$file ../tmp/ginclude; \
  	done
  	cd objc; \
  	for file in *[0-9a-zA-Z+]; do \
! 	  ln $$file ../tmp/objc >/dev/null 2>&1 || cp $$file ../tmp/objc; \
  	done
! 	ln .gdbinit tmp
  
  # Finish making `distdir', after the languages have done their thing.
--- 2302,2313 ----
  	cd ginclude; \
  	for file in *[0-9a-zA-Z+]; do \
! 	  $(HARDLINK) $$file ../tmp/ginclude >/dev/null 2>&1 \
  	   || cp $$file ../tmp/ginclude; \
  	done
  	cd objc; \
  	for file in *[0-9a-zA-Z+]; do \
! 	  $(HARDLINK) $$file ../tmp/objc >/dev/null 2>&1 || cp $$file ../tmp/objc; \
  	done
! 	$(HARDLINK) .gdbinit tmp
  
  # Finish making `distdir', after the languages have done their thing.
***************
*** 2330,2344 ****
  # 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/xgcc -Bstage1/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) STAGE_PREFIX=stage1/ LANGUAGES="$(LANGUAGES)"
  	$(MAKE) stage2
! 	$(MAKE) CC="stage2/xgcc -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) STAGE_PREFIX=stage2/ LANGUAGES="$(LANGUAGES)"
  
  bootstrap2: force
! 	$(MAKE) CC="stage1/xgcc -Bstage1/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) STAGE_PREFIX=stage1/ LANGUAGES="$(LANGUAGES)"
  	$(MAKE) stage2
! 	$(MAKE) CC="stage2/xgcc -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) STAGE_PREFIX=stage2/ LANGUAGES="$(LANGUAGES)"
  
  bootstrap3: force
! 	$(MAKE) CC="stage2/xgcc -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) STAGE_PREFIX=stage2/ LANGUAGES="$(LANGUAGES)"
  
  # Compare the object files in the current directory with those in the
--- 2344,2358 ----
  # 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/$(XGCC) -Bstage1/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) STAGE_PREFIX=stage1/ LANGUAGES="$(LANGUAGES)"
  	$(MAKE) stage2
! 	$(MAKE) CC="stage2/$(XGCC) -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) STAGE_PREFIX=stage2/ LANGUAGES="$(LANGUAGES)"
  
  bootstrap2: force
! 	$(MAKE) CC="stage1/$(XGCC) -Bstage1/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) STAGE_PREFIX=stage1/ LANGUAGES="$(LANGUAGES)"
  	$(MAKE) stage2
! 	$(MAKE) CC="stage2/$(XGCC) -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) STAGE_PREFIX=stage2/ LANGUAGES="$(LANGUAGES)"
  
  bootstrap3: force
! 	$(MAKE) CC="stage2/$(XGCC) -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" LDFLAGS="$(BOOT_LDFLAGS)" libdir=$(libdir) STAGE_PREFIX=stage2/ LANGUAGES="$(LANGUAGES)"
  
  # Compare the object files in the current directory with those in the
***************
*** 2415,2426 ****
  	-for dir in . $(SUBDIRS) ; \
  	 do \
! 	   if [ -d stage1/$$dir ] ; then true ; else mkdir stage1/$$dir ; fi ; \
  	 done
  	-mv $(STAGESTUFF) stage1
  # Copy as/ld if they exist to stage dir, so that running xgcc from the stage
  # dir will work properly.
! 	-if [ -f as$(exeext) ] ; then ln -s ../as$(exeext) stage1 || cp as$(exeext) stage1 ; else true ; fi
! 	-if [ -f ld$(exeext) ] ; then ln -s ../ld$(exeext) stage1 || cp ld$(exeext) stage1 ; else true ; fi
! 	-if [ -f collect-ld$(exeext) ] ; then ln -s ../collect-ld$(exeext) stage1 || cp collect-ld$(exeext) stage1 ; else true ; fi
  	-rm -f stage1/libgcc.a
  	-cp libgcc.a stage1
--- 2429,2440 ----
  	-for dir in . $(SUBDIRS) ; \
  	 do \
! 	   if [ -d stage1/$$dir ] ; then true ; else mkdir stage1/$$dir ; fi; \
  	 done
  	-mv $(STAGESTUFF) stage1
  # Copy as/ld if they exist to stage dir, so that running xgcc from the stage
  # dir will work properly.
! 	-if [ -f as$(exeext) ] ; then $(SYMLINK) ../as$(exeext) stage1 || cp as$(exeext) stage1 ; else true ; fi
! 	-if [ -f ld$(exeext) ] ; then $(SYMLINK) ../ld$(exeext) stage1 || cp ld$(exeext) stage1 ; else true ; fi
! 	-if [ -f collect-ld$(exeext) ] ; then $(SYMLINK) ../collect-ld$(exeext) stage1 || cp collect-ld$(exeext) stage1 ; else true ; fi
  	-rm -f stage1/libgcc.a
  	-cp libgcc.a stage1
***************
*** 2432,2443 ****
  	-for dir in . $(SUBDIRS) ; \
  	 do \
! 	   if [ -d stage2/$$dir ] ; then true ; else mkdir stage2/$$dir ; fi ; \
  	 done
  	-mv $(STAGESTUFF) stage2
  # Copy as/ld if they exist to stage dir, so that running xgcc from the stage
  # dir will work properly.
! 	-if [ -f as$(exeext) ] ; then ln -s ../as$(exeext) stage2 || cp as$(exeext) stage2 ; else true ; fi
! 	-if [ -f ld$(exeext) ] ; then ln -s ../ld$(exeext) stage2 || cp ld$(exeext) stage2 ; else true ; fi
! 	-if [ -f collect-ld ] ; then ln -s ../collect-ld$(exeext) stage2 || cp collect-ld$(exeext) stage2 ; else true ; fi
  	-rm -f stage2/libgcc.a
  	-cp libgcc.a stage2
--- 2446,2457 ----
  	-for dir in . $(SUBDIRS) ; \
  	 do \
! 	   if [ -d stage2/$$dir ] ; then true ; else mkdir stage2/$$dir ; fi; \
  	 done
  	-mv $(STAGESTUFF) stage2
  # Copy as/ld if they exist to stage dir, so that running xgcc from the stage
  # dir will work properly.
! 	-if [ -f as$(exeext) ] ; then $(SYMLINK) ../as$(exeext) stage2 || cp as$(exeext) stage2 ; else true ; fi
! 	-if [ -f ld$(exeext) ] ; then $(SYMLINK) ../ld$(exeext) stage2 || cp ld$(exeext) stage2 ; else true ; fi
! 	-if [ -f collect-ld ] ; then $(SYMLINK) ../collect-ld$(exeext) stage2 || cp collect-ld$(exeext) stage2 ; else true ; fi
  	-rm -f stage2/libgcc.a
  	-cp libgcc.a stage2
***************
*** 2449,2460 ****
  	-for dir in . $(SUBDIRS) ; \
  	 do \
! 	   if [ -d stage3/$$dir ] ; then true ; else mkdir stage3/$$dir ; fi ; \
  	 done
  	-mv $(STAGESTUFF) stage3
  # Copy as/ld if they exist to stage dir, so that running xgcc from the stage
  # dir will work properly.
! 	-if [ -f as$(exeext) ] ; then ln -s ../as$(exeext) stage3 || cp as$(exeext) stage3 ; else true ; fi
! 	-if [ -f ld$(exeext) ] ; then ln -s ../ld$(exeext) stage3 || cp ld$(exeext) stage3 ; else true ; fi
! 	-if [ -f collect-ld$(exeext) ] ; then ln -s ../collect-ld$(exeext) stage3 || cp collect-ld$(exeext) stage3 ; else true ; fi
  	-rm -f stage3/libgcc.a
  	-cp libgcc.a stage3
--- 2463,2474 ----
  	-for dir in . $(SUBDIRS) ; \
  	 do \
! 	   if [ -d stage3/$$dir ] ; then true ; else mkdir stage3/$$dir ; fi; \
  	 done
  	-mv $(STAGESTUFF) stage3
  # Copy as/ld if they exist to stage dir, so that running xgcc from the stage
  # dir will work properly.
! 	-if [ -f as$(exeext) ] ; then $(SYMLINK) ../as$(exeext) stage3 || cp as$(exeext) stage3 ; else true ; fi
! 	-if [ -f ld$(exeext) ] ; then $(SYMLINK) ../ld$(exeext) stage3 || cp ld$(exeext) stage3 ; else true ; fi
! 	-if [ -f collect-ld$(exeext) ] ; then $(SYMLINK) ../collect-ld$(exeext) stage3 || cp collect-ld$(exeext) stage3 ; else true ; fi
  	-rm -f stage3/libgcc.a
  	-cp libgcc.a stage3
***************
*** 2466,2477 ****
  	-for dir in . $(SUBDIRS) ; \
  	 do \
! 	   if [ -d stage4/$$dir ] ; then true ; else mkdir stage4/$$dir ; fi ; \
  	 done
  	-mv $(STAGESTUFF) stage4
  # Copy as/ld if they exist to stage dir, so that running xgcc from the stage
  # dir will work properly.
! 	-if [ -f as$(exeext) ] ; then ln -s ../as$(exeext) stage4 || cp as$(exeext) stage4 ; else true ; fi
! 	-if [ -f ld$(exeext) ] ; then ln -s ../ld$(exeext) stage4 || cp ld$(exeext) stage4 ; else true ; fi
! 	-if [ -f collect-ld$(exeext) ] ; then ln -s ../collect-ld$(exeext) stage4 || cp collect-ld$(exeext) stage4 ; else true ; fi
  	-rm -f stage4/libgcc.a
  	-cp libgcc.a stage4
--- 2480,2491 ----
  	-for dir in . $(SUBDIRS) ; \
  	 do \
! 	   if [ -d stage4/$$dir ] ; then true ; else mkdir stage4/$$dir ; fi; \
  	 done
  	-mv $(STAGESTUFF) stage4
  # Copy as/ld if they exist to stage dir, so that running xgcc from the stage
  # dir will work properly.
! 	-if [ -f as$(exeext) ] ; then $(SYMLINK) ../as$(exeext) stage4 || cp as$(exeext) stage4 ; else true ; fi
! 	-if [ -f ld$(exeext) ] ; then $(SYMLINK) ../ld$(exeext) stage4 || cp ld$(exeext) stage4 ; else true ; fi
! 	-if [ -f collect-ld$(exeext) ] ; then $(SYMLINK) ../collect-ld$(exeext) stage4 || cp collect-ld$(exeext) stage4 ; else true ; fi
  	-rm -f stage4/libgcc.a
  	-cp libgcc.a stage4
diff -2rcN /usr/goinfre/gcc-2.7.0/Product-Info gcc-2.7.0-amiga/Product-Info
*** /usr/goinfre/gcc-2.7.0/Product-Info
--- gcc-2.7.0-amiga/Product-Info	Fri Jun 23 11:52:13 1995
***************
*** 0 ****
--- 1,22 ----
+ .name
+ gcc
+ .fullname
+ GNU C/C++/Objective-C compiler
+ .type
+ Compiler
+ .short
+ GNU C/C++/Obj-C compilers.
+ .description
+ The GNU C, C++, and Objective C compilers.  Includes all support for
+ compiling C, C++ and Objective C, including a run-time library for
+ Objective C.
+ .version
+ 2.6.4
+ .author
+ Free Software Foundation
+ .requirements
+ Amiga binaries require ixemul.library.
+ .distribution
+ GNU Public License
+ .described-by
+ Fred Fish (fnf@amigalib.com)
diff -2rcN /usr/goinfre/gcc-2.7.0/amigasup.c gcc-2.7.0-amiga/amigasup.c
*** /usr/goinfre/gcc-2.7.0/amigasup.c
--- gcc-2.7.0-amiga/amigasup.c	Fri Jun 23 11:52:14 1995
***************
*** 0 ****
--- 1,171 ----
+ /* Supplementary host support for AmigaDOS.  Used only when host is AmigaDOS.
+    Copyright (C) 1994 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 code segment will interface between the startup code and the user's
+ main(), adjusting the stack if necessary. Two entry points are provided,
+ main(), and stkexit(). Programs should be compiled using
+ 	gcc -Dmain=stkmain -Dexit=stkexit
+ and linked with this module.  Calling _exit is not provided for, but should
+ be trivial to implement.
+ 
+ The minimum acceptable stack size is obtained from the environment variable
+ GCC_STACK (change the #define ENVNAME to customize). If this variable is
+ not defined, the default is 50000 bytes (change the #define SIZE to
+ customize). If the current stack size is less than the minimum acceptable,
+ then a new stack is allocated, and appropriate actions are taken to ensure
+ that the original stack is restored before exit.
+ 
+ To link with my stderrfix hack, you will need to compile it using
+    	gcc -Dmain=stkmain -c stderrfix.c
+ and compile everything else (apart from this file) using
+    	gcc -Dmain=mymain -Dexit=stkexit
+ (I have not tested this, but there is no reason why it shouldn't work.)
+ 
+ AUTHOR:     Kriton Kyrimis (kyrimis@theseas.ntua.gr)
+ KNOWN BUGS: Calling stkexit(0x8000000) will cause the program to exit
+             with the wrong exit code (0).
+ DISCLAIMER: Use this code at your own risk.
+ */
+ 
+ /* Putting this in version.c seems to screw up configure, which attempts to
+    extract the version number with a sed command that doesn't take this
+    string into account.  Also, don't include the date of compilation
+    in this string because the annoyance of not being able to do multistage
+    build comparisons across days is more than the convenience gained
+    (if any) by having the build date incoporated in the executables. -fnf */
+ char VERSION[]="$VER:gcc 2.6.4";
+ 
+ #undef main
+ #undef exit
+ 
+ #include <stdlib.h>
+ #include <setjmp.h>
+ #include <dos/dosextens.h>
+ #include <proto/exec.h>
+ #include <proto/dos.h>
+ 
+ #define SIZE 50000
+ #define ENVNAME "GCCSTACK"
+ 
+ #define MAGIC 0x80000000
+ 
+ void stkexit(int);
+ 
+ static jmp_buf jmp;
+ static int swapped = 0;
+ 
+ main(int argc, char **argv)
+ {
+   /* Declare all variables as static, so that they are available no matter
+      which stack is active */
+   static struct Process *p;
+   static struct CommandLineInterface *c;
+   static int stacksize, prefsize, status;
+   static struct StackSwapStruct stack;
+   static char *envsize, *newstack;
+   /* The next two variables point to information in the old stack. Declare
+      them volatile, to avoid unexpected surprises introduced by the optimizer.
+      (This is apparently unnecessary under 2.6.1, but you never know.) */
+   static volatile int myargc;
+   static volatile char **myargv;
+ 
+   /* Determine original stack size */
+   p = (struct Process *)FindTask(NULL);
+   c = BADDR(p->pr_CLI);
+   if (c) {
+     stacksize = c->cli_DefaultStack * sizeof(LONG);
+   }else{
+     stacksize = p->pr_StackSize;
+   }
+ 
+   /* Determine preferred stack size */
+   envsize = getenv(ENVNAME);
+   if (envsize) {
+     prefsize = atoi(envsize);
+   }else{
+     prefsize = SIZE;
+   }
+ 
+   myargc = argc;
+   myargv = argv;
+ 
+   if (prefsize > stacksize) {
+     /* Round size to next long word */
+     prefsize = ((prefsize + (sizeof(LONG) - 1)) / sizeof(LONG)) * sizeof(LONG);
+ 
+     /* Allocate new stack */
+     newstack = malloc(prefsize);
+     if (!newstack) {
+       Printf("Can't allocate new stack!\n");
+       exit(RETURN_FAIL);
+     }
+ 
+     /* Build new stack structure */
+     stack.stk_Lower = newstack;
+     stack.stk_Upper = (ULONG)newstack + prefsize;
+     /* Determine the address the stackpointer has to go:
+      * Point to the last longword of the stackframe and subtract
+      * the arguments of StackSwap() since the compiler might
+      * try to adjust the stackpointer after calling it :-(.
+      */
+     stack.stk_Pointer = (APTR)(stack.stk_Upper-2*sizeof(long));
+ 
+     /* Switch to new stack */
+     StackSwap(&stack);
+     swapped = 1;
+     if (c) {
+       c->cli_DefaultStack = prefsize / sizeof(LONG);
+     }
+ 
+     /* Save the current position, so that on exit we may return to the exact
+        stack depth where we switched stacks, and switch them back again.
+        Programs should invoke stkexit() rather than exit(), or return from
+        stkmain(). Status contains the exit status given to stkexit().*/
+     if ((status = setjmp(jmp)) != 0) {
+       /* Switch back to old stack before exiting */
+       StackSwap(&stack);
+       if (c) {
+ 	c->cli_DefaultStack = stacksize / sizeof(LONG);
+       }
+       free(newstack);
+       if (status == MAGIC) {	/* If real exit status is 0, stkexit converts */
+         status = 0;		/* it to MAGIC, to avoid confusing setjmp */
+       }
+       exit(status);
+     }
+     status = stkmain(myargc, myargv);
+     stkexit(status);
+   } else {
+     return stkmain(myargc, myargv);
+   }
+ }
+ 
+ void
+ stkexit(int status)
+ {
+   if (!swapped) {
+     exit (status);
+   } else {
+     if (status == 0) {	/* The world will end iff we pass 0 as the value */
+       status = MAGIC;	/* for longjmp */
+     }
+     longjmp(jmp, status);
+   }
+ }
+ 
diff -2rcN /usr/goinfre/gcc-2.7.0/calls.c gcc-2.7.0-amiga/calls.c
*** /usr/goinfre/gcc-2.7.0/calls.c	Thu Jun 15 12:15:32 1995
--- gcc-2.7.0-amiga/calls.c	Fri Jun 23 11:52:15 1995
***************
*** 2264,2267 ****
--- 2264,2275 ----
    argvec = (struct arg *) alloca (nargs * sizeof (struct arg));
  
+ #if defined (__amigados__)
+ /* 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
+ #endif
+ 
    INIT_CUMULATIVE_ARGS (args_so_far, NULL_TREE, fun);
  
***************
*** 2572,2575 ****
--- 2580,2591 ----
    argvec = (struct arg *) alloca ((nargs + 1) * sizeof (struct arg));
  
+ #if defined (__amigados__)
+ /* 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
+ #endif
+ 
    INIT_CUMULATIVE_ARGS (args_so_far, NULL_TREE, fun);
  
diff -2rcN /usr/goinfre/gcc-2.7.0/cccp.c gcc-2.7.0-amiga/cccp.c
*** /usr/goinfre/gcc-2.7.0/cccp.c	Thu Jun 15 12:16:31 1995
--- gcc-2.7.0-amiga/cccp.c	Sun Jun 25 15:41:07 1995
***************
*** 41,44 ****
--- 41,62 ----
  #endif /* not EMACS */
  
+ #ifdef INHIBIT_ALLOCA_USE
+ /* Since cpp uses alloca to store all its read files, this is quite deadly
+    on a system with non-automatic stackgrowth like amigados, so we better
+    turn it off now.  Normally alloca is #defined to __builtin_alloca, so
+    undefining it causes an external alloca to be used.
+ 
+    Note that it's not wise to generally inhibit __builtin_alloca, since
+    using the generic emulator results in a serious (!) speed penalty, and
+    it's bad enough that we have to live with it in cccp, don't make cc1
+    unbearably slow as well... */
+ 
+ #undef alloca
+ #endif
+ 
+ #ifdef __amigados__
+ static int amigados_abs_filename ();
+ #endif
+ 
  #ifndef STANDARD_INCLUDE_DIR
  #define STANDARD_INCLUDE_DIR "/usr/include"
***************
*** 361,364 ****
--- 379,390 ----
  static int max_include_len;
  
+ #ifdef __amigados__
+ /* Phil.B: 03-Oct-94 Flag indicating process priority */
+ static int amiga_priority = -1;
+ static int amiga_old_priority;
+ #include <proto/exec.h>
+ struct Task *amiga_task;
+ #endif /* __amigados__ */
+ 
  /* Nonzero means turn NOTREACHED into #pragma NOTREACHED etc */
  
***************
*** 1311,1314 ****
--- 1337,1349 ----
  #endif /* RLIMIT_STACK defined */
  
+ #ifdef __amigados__
+   {
+     char *envstr;
+ 
+     if (envstr = getenv("GCCPRIORITY"))
+       if (((i = atoi(envstr)) > -20) && (i < 20)) amiga_priority = i;
+   }
+ #endif /* __amigados__ */
+ 
  #ifdef SIGPIPE
    signal (SIGPIPE, pipe_closed);
***************
*** 1320,1323 ****
--- 1355,1361 ----
  	 && cp[-1] != DIR_SEPARATOR
  #endif
+ #ifdef VOL_SEPARATOR
+ 	 && cp[-1] != VOL_SEPARATOR
+ #endif
  	 )
      --cp;
***************
*** 1519,1522 ****
--- 1557,1570 ----
  
        case 'p':
+ #ifdef __amigados__
+ 	if (!strcmp (argv[i], "-priority")) {
+ 	  if (i + 1 == argc)
+ 	    fatal ("Priority missing after -P option");
+           if ((amiga_priority = atoi(argv[++i])) < -25)
+ 	    amiga_priority = -25;
+           else if (amiga_priority > 25)
+ 	    amiga_priority = 25;
+         } else
+ #endif /* __amigados__ */
  	if (!strcmp (argv[i], "-pedantic"))
  	  pedantic = 1;
***************
*** 1808,1811 ****
--- 1856,1866 ----
    }
  
+ #ifdef __amigados__
+   Forbid();
+   amiga_task = FindTask(NULL);
+   Permit();
+   amiga_old_priority = SetTaskPri(amiga_task, amiga_priority);
+ #endif /* __amigados__ */
+ 
    /* Add dirs from CPATH after dirs from -I.  */
    /* There seems to be confusion about what CPATH should do,
***************
*** 2166,2169 ****
--- 2221,2227 ----
  
        /* Discard all directory prefixes from filename.  */
+ #ifdef FILE_NAME_NONDIRECTORY
+       q = FILE_NAME_NONDIRECTORY (in_fname);
+ #else
        if ((q = rindex (in_fname, '/')) != NULL
  #ifdef DIR_SEPARATOR
***************
*** 2174,2178 ****
        else
  	q = in_fname;
! 
        /* Copy remainder to mungable area.  */
        p = (char *) alloca (strlen(q) + 8);
--- 2232,2236 ----
        else
  	q = in_fname;
! #endif
        /* Copy remainder to mungable area.  */
        p = (char *) alloca (strlen(q) + 8);
***************
*** 2329,2332 ****
--- 2387,2395 ----
      fatal ("I/O error on output");
  
+ /* PhB 25-Jun-95: restore old process priority before exiting */
+ #ifdef __amigados__
+   SetTaskPri(amiga_task, amiga_old_priority);
+ #endif /* __amigados__ */
+ 
    if (errors)
      exit (FATAL_EXIT_CODE);
***************
*** 4007,4011 ****
--- 4070,4079 ----
        if (!no_output && already_output == 0
  	  && (kt->pass_thru
+ /* Phil.B 27-Mar-93 not quite sure to keep this old fix */	  
+ #if defined (__amigados__) && 0
+ 	      || ((kt->type == T_DEFINE || kt->type == T_UNDEF)
+ #else
  	      || (kt->type == T_DEFINE
+ #endif /* __amigados__ */
  		  && (dump_macros == dump_names
  		      || dump_macros == dump_definitions)))) {
***************
*** 4358,4361 ****
--- 4426,4437 ----
  	    }
  #endif
+ #ifdef VOL_SEPARATOR
+ 	    if (ep == NULL) ep = rindex (nam, VOL_SEPARATOR);
+ 	    else {
+ 	      char *tmp = rindex (nam, VOL_SEPARATOR);
+ 	      if (tmp != NULL && tmp > ep) ep = tmp;
+ 	    }
+ 	    if (ep != NULL && *ep == VOL_SEPARATOR) ep++;
+ #endif
  #else				/* VMS */
  	    ep = rindex (nam, ']');
***************
*** 4484,4487 ****
--- 4560,4566 ----
    /* If specified file name is absolute, just open it.  */
  
+ #ifdef __amigados__
+   if (amigados_abs_filename (fbeg, flen)) {
+ #else
    if (*fbeg == '/'
  #ifdef DIR_SEPARATOR
***************
*** 4489,4492 ****
--- 4568,4572 ----
  #endif
        ) {
+ #endif
      strncpy (fname, (char *) fbeg, flen);
      fname[flen] = 0;
***************
*** 4511,4514 ****
--- 4591,4597 ----
  	  continue;
  	strcpy (fname, searchptr->fname);
+ #ifdef __amigados__
+ 	if (fname[strlen (fname) - 1] != ':')
+ #endif
  	strcat (fname, "/");
  	fname[strlen (fname) + flen] = 0;
***************
*** 9925,9928 ****
--- 10008,10016 ----
    va_list args;
  
+ /* PhB 25-Jun-95: restore old process priority before exiting */
+ #ifdef __amigados__
+   SetTaskPri(amiga_task, amiga_old_priority);
+ #endif /* __amigados__ */
+ 
    fprintf (stderr, "%s: ", progname);
    VA_START (args, msg);
***************
*** 10421,10422 ****
--- 10509,10534 ----
  }
  #endif /* VMS */
+ 
+ 
+ #ifdef __amigados__
+ 
+ /* This function returns whether the LEN characters long filename FNAME 
+    is an absolute path specification. */
+ 
+ static int
+ amigados_abs_filename (fname, len)
+      char *fname;
+      int len;
+ {
+   /* we're using ixemul.library, which treats `/foo' as `foo:', so 
+      fname[0] is to be considered absolute as well */
+   if (fname[0] == '/')
+     return 1;
+ 
+   /* else do an index() on fname, but one which is limited to len characters */
+   while (*fname && *fname != ':' && len) 
+     fname++, len--;
+ 
+   return *fname == ':';
+ }
+ #endif /* __amigados__ */
diff -2rcN /usr/goinfre/gcc-2.7.0/config/m68k/amigados.c gcc-2.7.0-amiga/config/m68k/amigados.c
*** /usr/goinfre/gcc-2.7.0/config/m68k/amigados.c
--- gcc-2.7.0-amiga/config/m68k/amigados.c	Fri Jun 23 11:52:18 1995
***************
*** 0 ****
--- 1,205 ----
+ /* Definitions of target machine for GNU compiler.  amiga 68000/68020 version.
+    Copyright (C) 1992 Free Software Foundation, Inc.
+    Contributed by Markus M. Wild (wild@amiga.physik.unizh.ch).
+ 
+ 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.  */
+ 
+ #include "m68k/m68k.c"
+ 
+ /* 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.
+ 
+    This function is used in base relative code generation. */
+ 
+ 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;
+ }
+ 
+ 
+ /* the rest of the file is to implement AmigaDOS specific keywords some day.
+    The approach used so far used __attribute__ for this, but this required
+    changes to c-parse.y as well as if we'd use the common keywords used
+    on commercial AmigaDOS C-compilers as well. So in the future I'll probably
+    switch to __saveds and __interrupt keywords as well.
+ 
+    The rest of this file is currently ignored, because it's no longer
+    working with the current gcc version. */
+ 
+ #if not_yet_working
+ 
+ #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;
+ }
+ 
+ #endif
+ 
+ /*
+ Stack checking and auto-extend
+ 
+ This is my first attempt to implement stack extension with gcc.
+ If you think some things should be changed please write
+ to me immediately (fleischr@izfm.uni-stuttgart.de, or even better
+ to amiga-gcc-port@lists.funet.fi for discussion).
+ 
+ If you don't want to recompile gcc (to check it out) you can still
+ test the example supported (bigtest.c) or read the documentation.
+ Simply do a 'make' to build it.
+ 
+ Matthias
+ */
+ 
+ rtx gen_stack_management_call (stack_pointer, arg, func)
+      rtx stack_pointer; /* rtx to put the result into       */
+      rtx arg;           /* The argument to put into d0      */
+      char *func;        /* The name of the function to call */
+ {
+   rtx fcall, assem;
+   emit_move_insn (gen_rtx (REG, SImode, 0), arg); /* Move arg to d0 */
+   assem = gen_rtx (ASM_OPERANDS, VOIDmode, func, "=r", 0,
+                    rtvec_alloc(1), rtvec_alloc(1), "internal", 0);
+   XVECEXP (assem, 3, 0) = gen_rtx (REG, SImode, 0);
+   XVECEXP (assem, 4, 0) = gen_rtx (ASM_INPUT, SImode, "r");
+   fcall = gen_rtx (PARALLEL, VOIDmode, rtvec_alloc(1+4));
+   XVECEXP (fcall, 0, 0)
+     = gen_rtx (SET, VOIDmode, stack_pointer, assem);
+   XVECEXP (fcall, 0, 1)
+     = gen_rtx (CLOBBER, VOIDmode, gen_rtx (REG, QImode, 9));
+   XVECEXP (fcall, 0, 2)
+     = gen_rtx (CLOBBER, VOIDmode, gen_rtx (REG, QImode, 8));
+   XVECEXP (fcall, 0, 3)
+     = gen_rtx (CLOBBER, VOIDmode, gen_rtx (REG, QImode, 1));
+   XVECEXP (fcall, 0, 4)
+     = gen_rtx (CLOBBER, VOIDmode, gen_rtx (REG, QImode, 0));  
+   return fcall; /* call function sp=func(d0) */
+ }
+ 
+ rtx gen_stack_cleanup_call (stack_pointer,sa)
+      rtx stack_pointer;
+      rtx sa;
+ {
+   return gen_stack_management_call (stack_pointer, sa, "jbsr ___move_d0_sp");
+ }
diff -2rcN /usr/goinfre/gcc-2.7.0/config/m68k/amigados.h gcc-2.7.0-amiga/config/m68k/amigados.h
*** /usr/goinfre/gcc-2.7.0/config/m68k/amigados.h
--- gcc-2.7.0-amiga/config/m68k/amigados.h	Sun Aug  6 21:30:47 1995
***************
*** 0 ****
--- 1,453 ----
+ /* Definitions of target machine for GNU compiler.  amiga 68000/68020 version.
+    Copyright (C) 1992 Free Software Foundation, Inc.
+    Contributed by Markus M. Wild (wild@amiga.physik.unizh.ch).
+ 
+ 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.  */
+ 
+ /* Phil.B 12-Mar-95: Define USE_GAS if GCC is supposed to work with the GNU
+    assembler, GNU linker and GNU debugger using DBX debugging information. */
+ 
+ #define USE_GAS
+ 
+ /* Control assembler-syntax conditionals in m68k.md.  */
+ 
+ #ifndef USE_GAS
+ #define MOTOROLA		/* Use Motorola syntax rather than "MIT" */
+ #endif /* !USE_GAS */
+ 
+ #include "m68k/m68k.h"
+ 
+ /* See m68k.h for bits in TARGET_DEFAULT.
+    0 means 68000, no hardware fpu (68881/68882/68040).
+    7 means 68020 (or higher) with hardware fpu.  */
+ 
+ #ifndef TARGET_DEFAULT
+ #define TARGET_DEFAULT 0
+ #endif
+ 
+ /* Define __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:-D__HAVE_68881__ }\
+ %{!ansi:%{m68000:-Dmc68010}%{mc68000:-Dmc68010}%{m68030:-Dmc68030}%{mc68030:-Dmc68030}%{m68040:-Dmc68040}\
+ %{mc68040:-Dmc68040}%{!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}%{m68030:-Dmc68030}%{mc68030:-Dmc68030}%{m68040:-Dmc68040}\
+ %{mc68040:-Dmc68040}%{!mc68020:%{!m68020:%{!mc68030:%{!m68030:%{!mc68040:%{!m68040:-Dmc68010}}}}}}}"
+ 
+ /* Don't try using XFmode since we don't have appropriate runtime software
+    support.  */
+ #undef LONG_DOUBLE_TYPE_SIZE
+ #define LONG_DOUBLE_TYPE_SIZE 64
+ 
+ #endif
+ 
+ /* -m68000 requires special flags to the assembler.  */
+ 
+ #define ASM_SPEC \
+  "%{m68000:-mc68010} %{mc68000:-mc68010} %{m68020:-mc68020} %{mc68020:-mc68020} %{m68030:-mc68030} %{mc68030:-mc68030} \
+ %{m68040:-mc68040} %{mc68040:-mc68040} %{m68020-40:-mc68020} %{mc68020-40:-mc68020} \
+ %{!mc68000:%{!m68000:%{!mc68020:%{!m68020:%{!mc68030:%{!m68030:%{!mc68040:%{!m68040:%{!m68020-40:%{!mc68020-40:-mc68010}}}}}}}}}} %{msmall-code:-l}"
+ 
+ /* 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 -Asystem(amigados) -Acpu(m68k) -Amachine(m68k)"
+ 
+ /* Choose the right startup file, depending on whether we use base relative
+    code, base relative code with automatic relocation (-resident), or plain
+    crt0.o. 
+   
+    Profiling is currently only available for plain startup.
+    mcrt0.o does not (yet) exist. */
+ 
+ #define STARTFILE_SPEC \
+  "%{!noixemul:%{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}}}}}\
+ %{noixemul:%{resident:libnix/nrcrt0.o%s}%{!resident:%{fbaserel:libnix/nbcrt0.o%s}%{!fbaserel:libnix/ncrt0.o%s}}}"
+ 
+ #define ENDFILE_SPEC "%{noixemul:-lstubs}"
+ 
+ /* Automatically search libamiga.a for AmigaDOS specific functions.  Note
+    that we first search the standard C library to resolve as much as
+    possible from there, since it has names that are duplicated in libamiga.a
+    which we *don't* want from there.  Then search the standard C library
+    again to resolve any references that libamiga.a might have generated.
+    This may only be a temporary solution since it might be better to simply
+    remove the things from libamiga.a that should be pulled in from libc.a
+    instead, which would eliminate the first reference to libc.a. */
+ 
+ #define LIB_SPEC "%{!noixemul:%{!p:%{!pg:-lc -lamiga -lc}}%{p:-lc_p}%{pg:-lc_p}}%{noixemul:-lnixmain -lnix -lamiga}"
+ 
+ /* if debugging, tell the linker to output amiga-hunk symbols *and* a BSD
+    compatible debug hunk (which will probably change in the future, it's not
+    tremendously useful in its current state). */
+ 
+ #define LINK_SPEC "%{noixemul:-shortdata -fl libnix} %{fbaserel:%{!resident:-databss-together -fl libb}}\
+ %{resident:-databss-together -datadata-reloc -fl libb} %{g:-amiga-debug-hunk} \
+ %{m68020:-fl libm020} %{m68030:-fl libm020} %{m68040:-fl libm020} %{m68020-40:-fl libm020} %{m68881:-fl libm881}\
+ %{mc68020:-fl libm020} %{mc68030:-fl libm020} %{mc68040:-fl libm020} %{mc68020-40:-fl libm020} %{mc68881:-fl libm881}"
+ 
+ #define CC1_SPEC "%{m68040:-mbitfield }%{mc68040:-mbitfield }%{resident:-fbaserel }%{msmall-code:-fno-function-cse }%{!noixemul:-mfixedstack} "
+ 
+ #define CC1PLUS_SPEC "%{m68040:-mbitfield }%{mc68040:-mbitfield }%{resident:-fbaserel }%{msmall-code:-fno-function-cse }%{!noixemul:-mfixedstack} "
+ 
+ /* Omit frame pointer at high optimization levels. (This doesn't hurt, since
+    GDB doesn't work under AmigaDOS at the moment anyway..) */
+   
+ #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), but will be used by cc1
+    to output 16bit pc-relative code later.
+    PhB 21-Jun-95: use now SUBTARGET_SWITCHES instead of redefining
+    whole TARGET_SWITCHES, means that all additions made to m68k.* are
+    now taken into account */
+ 
+ #undef SUBTARGET_SWITCHES
+ #define SUBTARGET_SWITCHES  \
+     { "small-code", 0 },/* Affects *_SPEC and/or GAS.  */	\
+     { "stackcheck", 02000},			\
+     { "nostackcheck", -02000},			\
+     { "stackextend", 04000},			\
+     { "nostackextend", -04000},			\
+     { "fixedstack", -04200},
+ 
+ #define TARGET_STACKCHECK	(target_flags&02000)
+ #define TARGET_STACKEXTEND	(!TARGET_STACKCHECK&&(target_flags&04000))
+ 
+ /* Every structure or union's size must be a multiple of 2 bytes.  */
+ 
+ #define STRUCTURE_SIZE_BOUNDARY 16
+ 
+ /* This is (almost;-)) BSD, so it wants DBX format.  */
+ 
+ #define DBX_DEBUGGING_INFO
+ 
+ /* Allow folding division by zero.  */
+ #define REAL_INFINITY
+ 
+ /* The following was hacked into final.c, to allow some notice of
+  * source line and filename to be injected into the assembly code,
+  * even if not using one of the "approved" debuggers (albaugh@agames.com).
+  */
+ #if 0
+ #define ASM_NOTE_SOURCE_LINE(FILE, LINE, FILENAME)\
+   fprintf(file,"*#line %d \"%s\"\n",(LINE),(FILENAME))
+ #endif
+ 
+ #if 0	/* This apparently is no longer necessary? */
+ 
+ /* 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(CODE,FILE,VALUE)				\
+  do {								\
+       if (CODE == 'f')						\
+         {							\
+           (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))) \
+         } else {                                        \
+           long l;						\
+           REAL_VALUE_TO_TARGET_SINGLE (VALUE, l);		\
+           if (sizeof (int) == sizeof (long))			\
+             asm_fprintf ((FILE), "%I0x%x", l);			\
+           else							\
+             asm_fprintf ((FILE), "%I0x%lx", l);			\
+         }							\
+      } while (0)
+ 
+ #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)))
+ 
+ #endif	/* 0 */
+ 
+ /* 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
+ 
+ /* setup a default shell return value for those (gazillion..) programs that
+    (inspite of ANSI-C) declare main() to be void (or even VOID...) and thus
+    cause the shell to randomly caugh upon executing such programs (contrary
+    to Unix, AmigaDOS scripts are terminated with an error if a program returns
+    with an error code above the `error' or even `failure' level
+    (which is configurable with the FAILAT command) */
+ 
+ #define DEFAULT_MAIN_RETURN c_expand_return (integer_zero_node)
+ 
+ /* we do have an ansi-compliant c-library ;-) */
+ #define HAVE_VPRINTF
+ #define HAVE_VFPRINTF
+ #define HAVE_PUTENV
+ #define HAVE_STRERROR
+ #define HAVE_ATEXIT
+ 
+ /* 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))
+ 
+ /* Phil.B 12-Mar-95: check if this would fix some PIC problems */
+ /* In m68k svr4, a symbol_ref rtx can be a valid PIC operand if it is an
+    operand of a function call. */
+ /* #undef LEGITIMATE_PIC_OPERAND_P
+ #define LEGITIMATE_PIC_OPERAND_P(X) \
+   (! symbolic_operand (X, VOIDmode) \
+    || ((GET_CODE(X) == SYMBOL_REF) && SYMBOL_REF_FLAG(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 (flag_pic >= 3 && 						\
+ 	    (TREE_CODE (DECL) == STRING_CST && !flag_writable_strings))	\
+ 	  SYMBOL_REF_FLAG (XEXP (rtl, 0)) = 1;				\
+ 	else if (flag_pic < 3 &&					\
+ 		 RTX_UNCHANGING_P (rtl) && !MEM_VOLATILE_P (rtl))	\
+ 	  SYMBOL_REF_FLAG (XEXP (rtl, 0)) = 1;				\
+       }									\
+   }									\
+ while (0)
+ 
+ #undef SELECT_RTX_SECTION
+ #define SELECT_RTX_SECTION(MODE, X) readonly_data_section ();
+ 
+ /* 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) && !flag_writable_strings)	\
+ 	readonly_data_section ();					\
+       else if (flag_pic < 3						\
+ 	  && TREE_READONLY (DECL)					\
+ 	  && ! TREE_THIS_VOLATILE (DECL)				\
+ 	  && DECL_INITIAL (DECL)					\
+ 	  && (DECL_INITIAL (DECL) == error_mark_node			\
+ 	      || TREE_CONSTANT (DECL_INITIAL (DECL)))			\
+ 	  && ! (flag_pic && RELOC))					\
+ 	readonly_data_section ();					\
+       else								\
+ 	data_section ();						\
+ }
+ 
+ 
+ 
+ #if not_yet_working
+ 
+ /* 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]); }			\
+ 
+ #endif
+ 
+ 
+ /*
+  * Support for automatic stack extension.
+  */
+ 
+ #define HAVE_restore_stack_nonlocal 1
+ #define gen_restore_stack_nonlocal \
+ (TARGET_STACKEXTEND?gen_stack_cleanup_call:gen_move_insn)
+ 
+ #define HAVE_restore_stack_function 1
+ #define gen_restore_stack_function gen_restore_stack_nonlocal
+ 
+ #define HAVE_restore_stack_block 1
+ #define gen_restore_stack_block gen_restore_stack_nonlocal
+ 
+ /* Reserve PIC_OFFSET_TABLE_REGNUM (a5) for doing PIC relocation if position
+    independent code is being generated, by making it a fixed register. */
+ 
+ #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 /usr/goinfre/gcc-2.7.0/config/m68k/m68k.c gcc-2.7.0-amiga/config/m68k/m68k.c
*** /usr/goinfre/gcc-2.7.0/config/m68k/m68k.c	Thu Jun 15 20:12:45 1995
--- gcc-2.7.0-amiga/config/m68k/m68k.c	Fri Jun 23 11:52:19 1995
***************
*** 63,70 ****
  finalize_pic ()
  {
!   if (flag_pic && current_function_uses_pic_offset_table)
      {
        rtx insn = gen_rtx (USE, VOIDmode, pic_offset_table_rtx);
        emit_insn_after (insn, get_insns ());
        emit_insn (insn);
      }
--- 63,72 ----
  finalize_pic ()
  {
!   if (flag_pic && (flag_pic < 3) && current_function_uses_pic_offset_table)
      {
        rtx insn = gen_rtx (USE, VOIDmode, pic_offset_table_rtx);
+ #ifndef __amigados__
        emit_insn_after (insn, get_insns ());
+ #endif
        emit_insn (insn);
      }
***************
*** 95,102 ****
    extern char call_used_regs[];
    int fsize = (size + 3) & -4;
!   
  
    if (frame_pointer_needed)
      {
        if (fsize == 0 && TARGET_68040)
  	{
--- 97,134 ----
    extern char call_used_regs[];
    int fsize = (size + 3) & -4;
! 
  
+ /* Matthias Fleischer stack-checking and auto-extend for the Amiga */  
+ #ifndef MOTOROLA
+   if (TARGET_STACKCHECK)
+     {
+       if (fsize<256)
+         asm_fprintf (stream, "\tjbsr ___stkchk_0\n");
+       else if(fsize<0x8000)
+         asm_fprintf (stream, "\tmovel #%d:W,d0\n\tjbsr ___stkchk_d0\n",
+ 	             fsize, reg_names[FRAME_POINTER_REGNUM]);
+       else
+         asm_fprintf (stream, "\tmovel #%d,d0\n\tjbsr ___stkchk_d0\n",
+ 	             fsize, reg_names[FRAME_POINTER_REGNUM]);
+     }
+ #endif
    if (frame_pointer_needed)
      {
+ /* Matthias Fleischer stack-checking and auto-extend for the Amiga */  
+ #ifndef MOTOROLA
+       if (TARGET_STACKEXTEND)
+         {
+           if (!fsize)
+ 	    asm_fprintf (stream, "\tjbsr ___link_%s_0_f\n",
+ 	                 reg_names[FRAME_POINTER_REGNUM]);
+ 	  else if(fsize<0x8000)
+  	    asm_fprintf (stream, "\tmovel #%d:W,d0\n\tjbsr ___link_%s_d0_f\n",
+ 	  	         fsize, reg_names[FRAME_POINTER_REGNUM]);
+           else
+  	    asm_fprintf (stream, "\tmovel #%d,d0\n\tjbsr ___link_%s_d0_f\n",
+ 	  	         fsize, reg_names[FRAME_POINTER_REGNUM]);
+ 	}
+       else
+ #endif
        if (fsize == 0 && TARGET_68040)
  	{
***************
*** 144,147 ****
--- 176,193 ----
  	}
      }
+ /* Matthias Fleischer stack-checking and auto-extend for the Amiga */  
+ #ifndef MOTOROLA
+   else if (TARGET_STACKEXTEND)
+     {
+       if (!fsize)
+         asm_fprintf (stream, "\tjbsr ___sub_0_sp_f\n");
+       else if (fsize+4<0x8000)
+ 	asm_fprintf (stream, "\tmovel #%d:W,d0\n\tjbsr ___sub_d0_sp_f\n",
+ 	  	     fsize + 4, reg_names[FRAME_POINTER_REGNUM]);
+       else
+ 	asm_fprintf (stream, "\tmovel %0I%d,d0\n\tjbsr ___sub_d0_sp_f\n",
+ 	  	     fsize + 4, reg_names[FRAME_POINTER_REGNUM]);
+     }
+ #endif
    else if (fsize)
      {
***************
*** 202,205 ****
--- 248,254 ----
        num_saved_regs--;
      }
+ #ifdef PROLOGUE_EXTRA_SAVE
+   PROLOGUE_EXTRA_SAVE (mask);
+ #endif
  
  #if NEED_PROBE
***************
*** 235,239 ****
  #endif
      }
!   if (flag_pic && current_function_uses_pic_offset_table)
      {
  #ifdef MOTOROLA
--- 284,288 ----
  #endif
      }
!   if (flag_pic && (flag_pic < 3) && current_function_uses_pic_offset_table)
      {
  #ifdef MOTOROLA
***************
*** 300,303 ****
--- 349,355 ----
  	 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;
      }
***************
*** 330,333 ****
--- 382,388 ----
  	mask |= 1 << regno;
        }
+ #ifdef EPILOGUE_EXTRA_RESTORE
+   EPILOGUE_EXTRA_RESTORE(mask, nregs);
+ #endif
    offset = foffset + nregs * 4;
    if (offset + fsize >= 0x8000
***************
*** 511,514 ****
--- 566,575 ----
  	}
    if (frame_pointer_needed)
+ #ifndef MOTOROLA
+     if (TARGET_STACKEXTEND && current_function_calls_alloca)
+       asm_fprintf (stream, "\tjra ___unlk_%s_rts\n",
+                    reg_names[FRAME_POINTER_REGNUM]);
+       else
+ #endif
      fprintf (stream, "\tunlk %s\n",
  	     reg_names[FRAME_POINTER_REGNUM]);
***************
*** 534,541 ****
  	}
      }
    if (current_function_pops_args)
      asm_fprintf (stream, "\trtd %0I%d\n", current_function_pops_args);
    else
!     fprintf (stream, "\trts\n");
  }
  
--- 595,607 ----
  	}
      }
+ #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);
    else
!     if (!TARGET_STACKEXTEND ||
!        !frame_pointer_needed || !current_function_calls_alloca)
!       fprintf (stream, "\trts\n");
  }
  
***************
*** 980,989 ****
    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;
--- 1046,1063 ----
    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;
***************
*** 2436,2439 ****
--- 2510,2517 ----
  	        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 ((flag_pic == 4) && (breg == pic_offset_table_rtx))
+ 	          fprintf (file, ":L");
  	      }
  	    if (addr != 0 && ireg != 0)
diff -2rcN /usr/goinfre/gcc-2.7.0/config/m68k/m68k.md gcc-2.7.0-amiga/config/m68k/m68k.md
*** /usr/goinfre/gcc-2.7.0/config/m68k/m68k.md	Thu Jun 15 21:52:50 1995
--- gcc-2.7.0-amiga/config/m68k/m68k.md	Fri Jun 23 11:52:20 1995
***************
*** 446,450 ****
    "
  {
!   if (flag_pic && symbolic_operand (operands[1], SImode)) 
      {
        /* The source is an address which requires PIC relocation.  
--- 446,454 ----
    "
  {
!   if (flag_pic && symbolic_operand (operands[1], SImode)
! #ifdef LEGITIMATE_BASEREL_OPERAND_P
!       && (flag_pic < 3 || !LEGITIMATE_BASEREL_OPERAND_P (operands[1]))
! #endif
!      )
      {
        /* The source is an address which requires PIC relocation.  
***************
*** 793,803 ****
    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);
      }
  }")
--- 797,812 ----
    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);
!       }
      }
  }")
***************
*** 2161,2166 ****
        /* These insns can result from reloads to access
  	 stack slots over 64k from the frame pointer.  */
!       if (GET_CODE (operands[2]) == CONST_INT
! 	  && INTVAL (operands[2]) + 0x8000 >= (unsigned) 0x10000)
          return \"move%.l %2,%0\;add%.l %1,%0\";
  #ifdef SGS
--- 2170,2176 ----
        /* These insns can result from reloads to access
  	 stack slots over 64k from the frame pointer.  */
!       if (((GET_CODE (operands[2]) == CONST_INT
! 	   && INTVAL (operands[2]) + 0x8000 >= (unsigned) 0x10000))
! 	  || (flag_pic == 4 && operands[1] == pic_offset_table_rtx))
          return \"move%.l %2,%0\;add%.l %1,%0\";
  #ifdef SGS
***************
*** 5881,5885 ****
    "
  {
!   if (flag_pic && GET_CODE (XEXP (operands[0], 0)) == SYMBOL_REF)
  #ifdef MOTOROLA
      SYMBOL_REF_FLAG (XEXP (operands[0], 0)) = 1;
--- 5891,5895 ----
    "
  {
!   if (flag_pic && flag_pic < 3 && GET_CODE (XEXP (operands[0], 0)) == SYMBOL_REF)
  #ifdef MOTOROLA
      SYMBOL_REF_FLAG (XEXP (operands[0], 0)) = 1;
***************
*** 5896,5900 ****
    ;; Operand 1 not really used on the m68000.
  
!   "! flag_pic"
    "*
  #ifdef MOTOROLA
--- 5906,5910 ----
    ;; Operand 1 not really used on the m68000.
  
!   "(! flag_pic || flag_pic >= 3)"
    "*
  #ifdef MOTOROLA
***************
*** 5916,5920 ****
    ;; Operand 1 not really used on the m68000.
  
!   "flag_pic"
    "*
  #ifdef MOTOROLA
--- 5926,5930 ----
    ;; Operand 1 not really used on the m68000.
  
!   "(flag_pic && flag_pic < 3)"
    "*
  #ifdef MOTOROLA
***************
*** 5941,5945 ****
    "
  {
!   if (flag_pic && GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF)
  #ifdef MOTOROLA
      SYMBOL_REF_FLAG (XEXP (operands[1], 0)) = 1;
--- 5951,5955 ----
    "
  {
!   if (flag_pic && flag_pic < 3 && GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF)
  #ifdef MOTOROLA
      SYMBOL_REF_FLAG (XEXP (operands[1], 0)) = 1;
***************
*** 5956,5960 ****
  	      (match_operand:SI 2 "general_operand" "g")))]
    ;; Operand 2 not really used on the m68000.
!   "! flag_pic"
    "*
  #ifdef MOTOROLA
--- 5966,5970 ----
  	      (match_operand:SI 2 "general_operand" "g")))]
    ;; Operand 2 not really used on the m68000.
!   "(! flag_pic || flag_pic >= 3)"
    "*
  #ifdef MOTOROLA
***************
*** 5976,5980 ****
  	      (match_operand:SI 2 "general_operand" "g")))]
    ;; Operand 2 not really used on the m68000.
!   "flag_pic"
    "*
  #ifdef MOTOROLA
--- 5986,5990 ----
  	      (match_operand:SI 2 "general_operand" "g")))]
    ;; Operand 2 not really used on the m68000.
!   "(flag_pic && flag_pic < 3)"
    "*
  #ifdef MOTOROLA
diff -2rcN /usr/goinfre/gcc-2.7.0/config/m68k/t-amigados gcc-2.7.0-amiga/config/m68k/t-amigados
*** /usr/goinfre/gcc-2.7.0/config/m68k/t-amigados
--- gcc-2.7.0-amiga/config/m68k/t-amigados	Fri Jun 23 11:52:21 1995
***************
*** 0 ****
--- 1,352 ----
+ # Makefile fragment for amigados target.
+ 
+ # We generate two additional things:
+ #
+ # libb/libgcc.a
+ #	A base relative version of libgcc.a which is used when compiling and
+ #	linking with the '-resident' option.
+ #
+ # libb/libm020/libgcc.a
+ #	An accelerated base relative version of libgcc.a which is used when
+ #	compiling and linking with the '-mc68020' & '-resident' options.
+ #
+ # libm020/libgcc.a
+ #	An accelerated version of libgcc.a which is used when compiling and
+ #	linking with the '-mc68020' option.
+ #
+ # xgccv
+ #	A forking gcc instead of one calling ssytem(). This makes it less
+ #	system conformant (can't ^C it when started from make), while providing
+ #	increased functionality (-pipe option).
+ 
+ # Use the vfork'ing version of gcc by default, so that the -pipe option can
+ # get tested.  To use the regular version just do "make XGCC=gcc".  Note that
+ # PIPE is defined in x-amigados, so if we are doing a native build, it will
+ # be defined.  It can be overridden with "make PIPE=".
+ 
+ XGCC = xgccv $(PIPE)
+ GCC_FOR_TARGET = ./$(XGCC) -B./
+ 
+ # Build residentable versions of the gcc executables by default.  Use
+ # "make RESIDENT=" to build non-residentable versions.
+ # Note:  This failed during bootstrapping of 2.5.5.
+ 
+ #RESIDENT = -resident
+ 
+ # The standard additional target flags for the compiler.
+ 
+ T_CFLAGS = $(RESIDENT)
+ 
+ # Allow the user to override the default target optimizations with gcc, or if
+ # the target compiler is not gcc and doesn't understand -O<N>.
+ 
+ T_OPTIMISE = -O2
+ 
+ # Each compilation environment (Manx, Dice, GCC, SAS/C, etc) provides its
+ # own equivalent of the UNIX /usr/include tree.  For gcc, the standard headers
+ # are in /gnu/include and system specific headers are in /gnu/os-include.
+ # Use these paths for fixincludes.
+ 
+ SYSTEM_HEADER_DIR = /gnu/include
+ OTHER_FIXINCLUDES_DIRS = /gnu/os-include
+ 
+ # We don't need a libgcc1, it's all in ixemul.library
+ 
+ LIBGCC1 = libgcc1.null
+ 
+ # Flags to use when compiling the normal version of libgcc.a.
+ # Don't compile with debugging, as long as there is no debugger.
+ # Explicitly leave out the -resident compilation flag and don't use T_CFLAGS.
+ 
+ LIBGCC2_CFLAGS = $(T_OPTIMIZE) $(INTERNAL_CFLAGS) $(X_CFLAGS) $(CFLAGS) \
+ 		  $(CROSS_GCC_CFLAGS)
+ 
+ # Flags to use when compiling the base relative version of libgcc.a.
+ # Don't compile with debugging, as long as there is no debugger.
+ # Explicitly force -resident in the compilation flags and don't use T_CFLAGS.
+ 
+ LIBBGCC2_CFLAGS = $(T_OPTIMIZE) $(INTERNAL_CFLAGS) $(X_CFLAGS) $(CFLAGS) \
+ 		  $(CROSS_GCC_CFLAGS) -resident
+ 
+ # Flags to use when compiling the 68020 versions of libgcc.a.
+ # Don't compile with debugging, as long as there is no debugger.
+ # Explicitly force -mc68020 in the compilation flags and don't use T_CFLAGS.
+ 
+ LIBM020GCC2_CFLAGS = $(T_OPTIMIZE) $(INTERNAL_CFLAGS) $(X_CFLAGS) $(CFLAGS) \
+ 		  $(CROSS_GCC_CFLAGS) -mc68020
+ 
+ # Flags to use when compiling the base relative 68020 versions of libgcc.a.
+ # Don't compile with debugging, as long as there is no debugger.
+ # Explicitly force -mc68020 & -resident in the compilation flags and don't use
+ # T_CFLAGS.
+ 
+ LIBBM020GCC2_CFLAGS = $(LIBBGCC2_CFLAGS) -mc68020
+ 
+ # Build the base relative library and accelerated libraries.
+ # It is later copied into /gnu/lib/gcc-lib/amigados/<version>/libb/libgcc.a, whereas
+ # libgcc.a is copied into /gnu/lib/gcc-lib/amigados/<version>/libgcc.a.
+ # Accelerated libraries are copied into same directories, with an extra dir level
+ # libm020, thus libb/libm020. It doesn't work very well to define one of the
+ # EXTRA_* macros to contain libb/libgcc.a, particularly for doing "make stageN"
+ # or "make install".
+ 
+ GCC_PARTS=$(GCC_PASSES) libgcc.a libb/libgcc.a libm020/libgcc.a \
+ 		libb/libm020/libgcc.a $(EXTRA_PROGRAMS) $(USE_COLLECT2) $(EXTRA_PARTS)
+ 
+ # Add install_libbgcc to normal define of INSTALL_LIBGCC.  Let install-gccv
+ # hitch a ride on here as well.
+ 
+ INSTALL_LIBGCC = install-libgcc install-libbgcc install-libm020gcc install-libbm020gcc install-gccv
+ 
+ # This includes the knowledge that target amigados doesn't need libgcc1.a
+ 
+ libb/libgcc.a: libgcc1.null libgcc2.c libgcc2.ready $(CONFIG_H) \
+    $(LIB2FUNCS_EXTRA) machmode.h longlong.h gbl-ctors.h config.status
+ # Actually build it in tmplibbgcc.a, then rename at end,
+ # so that libb/libgcc.a itself remains nonexistent if compilation is aborted.
+ 	-rm -f tmplibbgcc.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) $(LIBBGCC2_CFLAGS) $(INCLUDES) -c -DL$${name} \
+ 	      $(srcdir)/libgcc2.c -o $${name}.o; \
+ 	  if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
+ 	  $(AR) $(AR_FLAGS) tmplibbgcc.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 || exit 1; file=$${name}.s; \
+ 	    else true; fi; \
+ 	    $(GCC_FOR_TARGET) $(LIBBGCC2_CFLAGS) $(INCLUDES) -c $${file}; \
+ 	    if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
+ 	    $(AR) $(AR_FLAGS) tmplibbgcc.a $${name}.o; \
+ 	    rm -f $${name}.[so]; \
+ 	  else true; \
+ 	  fi; \
+ 	done
+ 	-if $(RANLIB_TEST) ; then $(RANLIB) tmplibbgcc.a; else true; fi
+ 	-if [ -d libb ] ; then true ; else mkdir libb ; fi
+ 	mv tmplibbgcc.a libb/libgcc.a
+ 
+ 
+ install-libbgcc: libb/libgcc.a install-dir
+ 	-if [ -d $(libsubdir)/libb ] ; then true ; else mkdir $(libsubdir)/libb ; fi
+ 	-if [ -f libb/libgcc.a ] ; then \
+ 	  rm -f $(libsubdir)/libb/libgcc.a; \
+ 	  $(INSTALL_DATA) libb/libgcc.a $(libsubdir)/libb/libgcc.a; \
+ 	  if $(RANLIB_TEST) ; then \
+ 	    (cd $(libsubdir)/libb; $(RANLIB) libgcc.a); else true; fi; \
+ 	  chmod a-x $(libsubdir)/libb/libgcc.a; \
+ 	else true; fi
+ 
+ libm020/libgcc.a: libgcc1.null libgcc2.c libgcc2.ready $(CONFIG_H) \
+    $(LIB2FUNCS_EXTRA) machmode.h longlong.h gbl-ctors.h config.status
+ # Actually build it in tmplibm020gcc.a, then rename at end,
+ # so that libm020/libgcc.a itself remains nonexistent if compilation is aborted.
+ 	-rm -f tmplibm020gcc.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) $(LIBM020GCC2_CFLAGS) $(INCLUDES) -c -DL$${name} \
+ 	      $(srcdir)/libgcc2.c -o $${name}.o; \
+ 	  if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
+ 	  $(AR) $(AR_FLAGS) tmplibm020gcc.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 || exit 1; file=$${name}.s; \
+ 	    else true; fi; \
+ 	    $(GCC_FOR_TARGET) $(LIBBGCC2_CFLAGS) $(INCLUDES) -c $${file}; \
+ 	    if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
+ 	    $(AR) $(AR_FLAGS) tmplibm020gcc.a $${name}.o; \
+ 	    rm -f $${name}.[so]; \
+ 	  else true; \
+ 	  fi; \
+ 	done
+ 	-if $(RANLIB_TEST) ; then $(RANLIB) tmplibm020gcc.a; else true; fi
+ 	-if [ -d libm020 ] ; then true ; else mkdir libm020 ; fi
+ 	mv tmplibm020gcc.a libm020/libgcc.a
+ 
+ 
+ install-libm020gcc: libm020/libgcc.a install-dir
+ 	-if [ -d $(libsubdir)/libm020 ] ; then true ; else mkdir $(libsubdir)/libm020 ; fi
+ 	-if [ -f libm020/libgcc.a ] ; then \
+ 	  rm -f $(libsubdir)/libm020/libgcc.a; \
+ 	  $(INSTALL_DATA) libm020/libgcc.a $(libsubdir)/libm020/libgcc.a; \
+ 	  if $(RANLIB_TEST) ; then \
+ 	    (cd $(libsubdir)/libm020; $(RANLIB) libgcc.a); else true; fi; \
+ 	  chmod a-x $(libsubdir)/libm020/libgcc.a; \
+ 	else true; fi
+ 
+ libb/libm020/libgcc.a: libgcc1.null libgcc2.c libgcc2.ready $(CONFIG_H) \
+    $(LIB2FUNCS_EXTRA) machmode.h longlong.h gbl-ctors.h config.status
+ # Actually build it in tmplibbm020gcc.a, then rename at end,
+ # so that libb/libm020/libgcc.a itself remains nonexistent if compilation is aborted.
+ 	-rm -f tmplibbm020gcc.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) $(LIBBM020GCC2_CFLAGS) $(INCLUDES) -c -DL$${name} \
+ 	      $(srcdir)/libgcc2.c -o $${name}.o; \
+ 	  if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
+ 	  $(AR) $(AR_FLAGS) tmplibbm020gcc.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 || exit 1; file=$${name}.s; \
+ 	    else true; fi; \
+ 	    $(GCC_FOR_TARGET) $(LIBBGCC2CFLAGS) $(INCLUDES) -c $${file}; \
+ 	    if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
+ 	    $(AR) $(AR_FLAGS) tmplibbm020gcc.a $${name}.o; \
+ 	    rm -f $${name}.[so]; \
+ 	  else true; \
+ 	  fi; \
+ 	done
+ 	-if $(RANLIB_TEST) ; then $(RANLIB) tmplibbm020gcc.a; else true; fi
+ 	-if [ -d libb ] ; then true ; else mkdir libb ; fi
+ 	-if [ -d libb/libm020 ] ; then true ; else mkdir libb/libm020 ; fi
+ 	mv tmplibbm020gcc.a libb/libm020/libgcc.a
+ 
+ 
+ install-libbm020gcc: libb/libm020/libgcc.a install-dir
+ 	-if [ -d $(libsubdir)/libb/libm020 ] ; then true ; else mkdir $(libsubdir)/libb/libm020 ; fi
+ 	-if [ -f libb/libm020/libgcc.a ] ; then \
+ 	  rm -f $(libsubdir)/libb/libm020/libgcc.a; \
+ 	  $(INSTALL_DATA) libb/libm020/libgcc.a $(libsubdir)/libb/libm020/libgcc.a; \
+ 	  if $(RANLIB_TEST) ; then \
+ 	    (cd $(libsubdir)/libb/libm020; $(RANLIB) libgcc.a); else true; fi; \
+ 	  chmod a-x $(libsubdir)/libb/libm020/libgcc.a; \
+ 	else true; fi
+ 
+ # PhB:
+ # toplev.o target need to define additional flags to handle stack
+ # allocation in real main. As for now we hack building of toplev.o
+ # defining MAYBE_USE_COLLECT2 flag, which is only used for toplev.o.
+ # Then we define EXTRA_OBJS to amigasup.o.
+ 
+ MAYBE_USE_COLLECT2= -Dmain=stkmain -Dexit=stkexit
+ EXTRA_OBJS = amigasup.o
+ 
+ # The default gcc (xgcc) is built without -DAMIGADOS_FORK_GCC. This gcc (xgccv)
+ # is built with AMIGADOS_FORK_GCC defined, so that it can use '-pipe'.  We
+ # don't want to define EXTRA_PASSES to xgccv because that will cause xgccv
+ # to be installed in $(libsubdir), so instead we use the default GCC_PASSES
+ # and add xgccv to it.
+ 
+ GCC_PASSES = xgcc xgccv cc1 cpp $(EXTRA_PASSES)
+ 
+ xgccv: xgccv.o version.o $(LIBDEPS)
+ 	$(CC) $(ALL_CFLAGS) $(LDFLAGS) -o xgccv xgccv.o version.o $(LIBS)
+ 
+ xgccv.o: gcc.c $(CONFIG_H) config.status
+ 	$(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
+   -DSTANDARD_STARTFILE_PREFIX=\"$(libdir)/\" \
+   -DSTANDARD_EXEC_PREFIX=\"$(libdir)/gcc-lib/\" \
+   -DDEFAULT_TARGET_VERSION=\"$(version)\" \
+   -DDEFAULT_TARGET_MACHINE=\"$(target)\" \
+   -DTOOLDIR_BASE_PREFIX=\"$(exec_prefix)/\" \
+   -DAMIGADOS_FORK_GCC \
+   -c `echo $(srcdir)/gcc.c | sed 's,^\./,,'` -o xgccv.o
+ 
+ install-gccv: xgccv
+ 	rm -f $(bindir)/gccv
+ 	$(INSTALL_PROGRAM) xgccv $(bindir)/gccv
+ 
+ # When making one of the stage<N> dirs, we need to make subdirs for
+ # additional libraries, and copy them there. base-relative libraries
+ # and accelerated libraries are preserved through stages.
+ 
+ EXTRA_STAGE1_TARGETS = stage1-libamiga
+ EXTRA_STAGE2_TARGETS = stage2-libamiga
+ EXTRA_STAGE3_TARGETS = stage3-libamiga
+ EXTRA_STAGE4_TARGETW = stage4-libamiga
+ 
+ stage1-libamiga:
+ 	-if [ -d stage1 ] ; then true ; else mkdir stage1 ; fi
+ 	-if [ -d stage1/libb ] ; then true ; else mkdir stage1/libb ; fi
+ 	-if [ -d stage1/libb/libm020 ] ; then true ; else mkdir stage1/libb/libm020 ; fi
+ 	-if [ -d stage1/libm020 ] ; then true ; else mkdir stage1/libm020 ; fi
+ 	-cp libb/libgcc.a stage1/libb/libgcc.a
+ 	-cp libb/libm020/libgcc.a stage1/libb/libm020/libgcc.a
+ 	-cp libm020/libgcc.a stage1/libm020/libgcc.a
+ 	-if $(RANLIB_TEST) ; then $(RANLIB) stage1/libb/libgcc.i; else true; fi
+ 	-if $(RANLIB_TEST) ; then $(RANLIB) stage1/libb/libm020/libgcc.a; else true; fi
+ 	-if $(RANLIB_TEST) ; then $(RANLIB) stage1/libm020/libgcc.a; else true; fi
+ 
+ stage2-libamiga:
+ 	-if [ -d stage2 ] ; then true ; else mkdir stage2 ; fi
+ 	-if [ -d stage2/libb ] ; then true ; else mkdir stage2/libb ; fi
+ 	-if [ -d stage2/libb/libm020 ] ; then true ; else mkdir stage2/libb/libm020 ; fi
+ 	-if [ -d stage2/libm020 ] ; then true ; else mkdir stage2/libm020 ; fi
+ 	-cp libb/libgcc.a stage2/libb/libgcc.a
+ 	-cp libb/libm020/libgcc.a stage2/libb/libm020/libgcc.a
+ 	-cp libm020/libgcc.a stage2/libm020/libgcc.a
+ 	-if $(RANLIB_TEST) ; then $(RANLIB) stage2/libb/libgcc.a; else true; fi
+ 	-if $(RANLIB_TEST) ; then $(RANLIB) stage2/libb/libm020/libgcc.a; else true; fi
+ 	-if $(RANLIB_TEST) ; then $(RANLIB) stage2/libm020/libgcc.a; else true; fi
+ 
+ stage3-libamiga:
+ 	-if [ -d stage3 ] ; then true ; else mkdir stage3 ; fi
+ 	-if [ -d stage3/libb ] ; then true ; else mkdir stage3/libb ; fi
+ 	-if [ -d stage3/libb/libm020 ] ; then true ; else mkdir stage3/libb/libm020 ; fi
+ 	-if [ -d stage3/libm020 ] ; then true ; else mkdir stage3/libm020 ; fi
+ 	-cp libb/libgcc.a stage3/libb/libgcc.a
+ 	-cp libb/libm020/libgcc.a stage3/libb/libm020/libgcc.a
+ 	-cp libm020/libgcc.a stage3/libm020/libgcc.a
+ 	-if $(RANLIB_TEST) ; then $(RANLIB) stage3/libb/libgcc.a; else true; fi
+ 	-if $(RANLIB_TEST) ; then $(RANLIB) stage3/libb/libm020/libgcc.a; else true; fi
+ 	-if $(RANLIB_TEST) ; then $(RANLIB) stage3/libm020/libgcc.a; else true; fi
+ 
+ stage4-libamiga:
+ 	-if [ -d stage4 ] ; then true ; else mkdir stage4 ; fi
+ 	-if [ -d stage4/libb ] ; then true ; else mkdir stage4/libb ; fi
+ 	-if [ -d stage4/libb/libm020 ] ; then true ; else mkdir stage4/libb/libm020 ; fi
+ 	-if [ -d stage4/libm020 ] ; then true ; else mkdir stage4/libm020 ; fi
+ 	-cp libb/libgcc.a stage4/libb/libgcc.a
+ 	-cp libb/libm020/libgcc.a stage4/libb/libm020/libgcc.a
+ 	-cp libm020/libgcc.a stage4/libm020/libgcc.a
+ 	-if $(RANLIB_TEST) ; then $(RANLIB) stage4/libb/libgcc.a; else true; fi
+ 	-if $(RANLIB_TEST) ; then $(RANLIB) stage4/libb/libm020/libgcc.a; else true; fi
+ 	-if $(RANLIB_TEST) ; then $(RANLIB) stage4/libm020/libgcc.a; else true; fi
diff -2rcN /usr/goinfre/gcc-2.7.0/config/m68k/x-amigados gcc-2.7.0-amiga/config/m68k/x-amigados
*** /usr/goinfre/gcc-2.7.0/config/m68k/x-amigados
--- gcc-2.7.0-amiga/config/m68k/x-amigados	Fri Jun 23 11:52:21 1995
***************
*** 0 ****
--- 1,52 ----
+ # Note: It doesn't do any good to try to define prefix or local_prefix
+ # in the host overrides because configure will just change them back.
+ # You either have to give an appropriate option to configure or live with
+ # an Amiga specific patch to configure.  See the note in configure.  -fnf
+ 
+ # Building under amigados almost certainly requires an already working gcc.
+ # Use gccv, which is a gcc compiled with AMIGADOS_FORK_GCC so "-pipe" will
+ # work and get exercised.  To bootstrap with the regular gcc just do
+ # "make CC=gcc".  To bootstrap without "-pipe" do "make PIPE=".
+ 
+ CC = gccv $(PIPE)
+ 
+ # Disable -pipe for now since I had problems bootstrapping gcc 2.5.5 with
+ # it. (fnf)
+ #PIPE = -pipe
+ 
+ # Allow the user to override the default host optimization with gcc, or if the
+ # host compiler is not gcc and doesn't understand -O<N>.
+ 
+ X_OPTIMIZE = -O2
+ 
+ # The standard additional host flags for the compiler.
+ 
+ X_CFLAGS = $(X_OPTIMIZE)
+ 
+ # Man pages get a wierd suffix...
+ 
+ manext = .0
+ 
+ # We really shouldn't specify CFLAGS from here, but there's no other way
+ # to get rid of the `-g' indoctrinated by Makefile.in.  Note this becomes
+ # part of both the host compilation CFLAGS and the target compilation
+ # CFLAGS.
+ 
+ CFLAGS =
+ 
+ # Ranlib does exist, but may not be in a path where the default RANLIB_TEST
+ # expects it, so just force it to true.
+ 
+ RANLIB_TEST = true
+ 
+ # Until we can make sure no cross-device hardlinks are tried, and until
+ # symlinks can be made in canonical amigados format (dev:path/file), just
+ # use copy with timestamp preservation.  This only wastes some disk space
+ # and means you have to reconfigure if you change any of the files that
+ # would normally be linked to.  -fnf
+ 
+ HARDLINK = cp -p
+ SYMLINK = cp -p
+ 
+ # Build supplimentary Amiga host support file.
+ amigasup.o: amigasup.c
diff -2rcN /usr/goinfre/gcc-2.7.0/config/m68k/xm-amigados.h gcc-2.7.0-amiga/config/m68k/xm-amigados.h
*** /usr/goinfre/gcc-2.7.0/config/m68k/xm-amigados.h
--- gcc-2.7.0-amiga/config/m68k/xm-amigados.h	Fri Jun 23 11:52:21 1995
***************
*** 0 ****
--- 1,255 ----
+ /* Configuration for GNU C-compiler for Commodore Amiga, running AmigaDOS.
+    Copyright (C) 1992 Free Software Foundation, Inc.
+    Contributed by Markus M. Wild (wild@amiga.physik.unizh.ch).
+ 
+ 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.  */
+ 
+ /* first include the generic header, then modify some parts.. */
+ 
+ #include "m68k/xm-m68k.h"
+ 
+ /* On the Amiga, there are two pathname separators, '/' (DIR_SEPARATOR)
+    and ':' (VOL_SEPARATOR).  DIR_SEPARATOR defaults to the correct
+    character, so we don't have to explicitly set it. */
+ 
+ #define VOL_SEPARATOR ':'
+ 
+ /* Amiga specific headers, such as from the Native Developer Update kits,
+    go in SYSTEM_INCLUDE_DIR.  STANDARD_INCLUDE_DIR is the equivalent of
+    Unix "/usr/include".  All other include paths are set in Makefile. */
+ 
+ #define SYSTEM_INCLUDE_DIR	"/gnu/os-include"
+ #define STANDARD_INCLUDE_DIR	"/gnu/include"
+ 
+ /* Fork one piped subcommand.  SEARCH_FLAG is the system call to use
+    (either execv or execvp).  ARGV is the arg vector to use.
+    NOT_LAST is nonzero if this is not the last subcommand
+    (i.e. its output should be piped to the next one.)  */
+ 
+ #ifndef AMIGADOS_FORK_GCC
+ 
+ /* This version uses a more or less amigados-conformant way of running a
+    program (in the context of the parent). If you want to use -pipe however,
+    you'll have to use the vfork() version afterwards.
+    Phil.B: 29-May-94 quick hack (number 20 added to length) because xgcc
+    doesn't work.
+  */
+ 
+ #define PEXECUTE(SEARCH_FLAG,PROGRAM,ARGV,NOT_LAST) \
+ ({char *_argline;						\
+   int _arglinelength, _i;					\
+ 								\
+   for (_i = 1, _arglinelength=0; ARGV[_i]; ++_i)		\
+     _arglinelength += strlen(ARGV[_i]) + 1;			\
+ 								\
+   _arglinelength += strlen(PROGRAM) + 20 + 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]);				\
+     }								\
+ 								\
+   ssystem(_argline); })						\
+ 
+ #define PEXECUTE_RESULT(STATUS, COMMAND) \
+   ({ STATUS = COMMAND.pid; })
+ 
+ #else
+ 
+ /* the vfork() version. This one has the drawback, that gcc is not 
+    interruptible when started from make, since ixemul.library doesn't yet
+    propagate ^C to subprocesses. */
+ 
+ #define PEXECUTE(SEARCH_FLAG,PROGRAM,ARGV,NOT_LAST) \
+ ({int (*_func)() = (SEARCH_FLAG ? execv : execvp);			\
+   int _pid;								\
+   int _pdes[2];								\
+   int _input_desc = last_pipe_input;					\
+   int _output_desc = STDOUT_FILE_NO;					\
+   int _retries, _sleep_interval, _result;				\
+ 									\
+   /* If this isn't the last process, make a pipe for its output,	\
+      and record it as waiting to be the input to the next process.  */	\
+ 									\
+   if (NOT_LAST)								\
+     {									\
+       if (pipe (_pdes) < 0)						\
+ 	pfatal_with_name ("pipe");					\
+       _output_desc = _pdes[WRITE_PORT];					\
+       last_pipe_input = _pdes[READ_PORT];				\
+     }									\
+   else									\
+     last_pipe_input = STDIN_FILE_NO;					\
+ 									\
+   /* Fork a subprocess; wait and retry if it fails.  */			\
+   _sleep_interval = 1;							\
+   for (_retries = 0; _retries < 4; _retries++)				\
+     {									\
+       _pid = vfork ();							\
+       if (_pid >= 0)							\
+ 	break;								\
+       sleep (_sleep_interval);						\
+       _sleep_interval *= 2;						\
+     }									\
+ 									\
+   switch (_pid)								\
+     {									\
+     case -1:								\
+       pfatal_with_name ("vfork");					\
+       /* NOTREACHED */							\
+       _result = 0;							\
+       break;								\
+ 									\
+     case 0: /* child */							\
+       /* Move the input and output pipes into place, if nec.  */	\
+       if (_input_desc != STDIN_FILE_NO)					\
+ 	{								\
+ 	  close (STDIN_FILE_NO);					\
+ 	  dup (_input_desc);						\
+ 	  close (_input_desc);						\
+ 	}								\
+       if (_output_desc != STDOUT_FILE_NO)				\
+ 	{								\
+ 	  close (STDOUT_FILE_NO);					\
+ 	  dup (_output_desc);						\
+ 	  close (_output_desc);						\
+ 	}								\
+ 									\
+       /* Close the parent's descs that aren't wanted here.  */		\
+       if (last_pipe_input != STDIN_FILE_NO)				\
+ 	close (last_pipe_input);					\
+ 									\
+       /* Exec the program.  */						\
+       (*_func) (PROGRAM, ARGV);						\
+       perror_exec (PROGRAM);						\
+       exit (-1);							\
+       /* NOTREACHED */							\
+       _result = 0;							\
+       break;								\
+ 									\
+     default:								\
+       /* In the parent, after forking.					\
+ 	 Close the descriptors that we made for this child.  */		\
+       if (_input_desc != STDIN_FILE_NO)					\
+ 	close (_input_desc);						\
+       if (_output_desc != STDOUT_FILE_NO)				\
+ 	close (_output_desc);						\
+ 									\
+       /* Return child's process number.  */				\
+       _result = _pid;							\
+       break;								\
+     } 									\
+ _result; })								\
+ 
+ #define PEXECUTE_RESULT(STATUS, COMMAND) \
+   ({ wait (& STATUS); })
+ 
+ #endif /* AMIGADOS_FORK_GCC */
+ 
+ /* the following macros are stolen more or less from xm-vms.h ... */
+ 
+ /* This macro is used to help compare filenames in cp-lex.c.
+ 
+    We also need to make sure that the names are all lower case, because
+    we must be able to compare filenames to determine if a file implements
+    a class.  */
+ 
+ #define FILE_NAME_NONDIRECTORY(C)				\
+ ({								\
+    extern char *rindex();					\
+    char * pnt_ = (C), * pnt1_;					\
+    pnt1_ = pnt_ - 1;						\
+    while (*++pnt1_)						\
+      if ((*pnt1_ >= 'A' && *pnt1_ <= 'Z')) *pnt1_ |= 0x20;	\
+    pnt1_ = rindex (pnt_, '/'); 					\
+    pnt1_ = (pnt1_ == 0 ? rindex (pnt_, ':') : pnt1_);		\
+    (pnt1_ == 0 ? pnt_ : pnt1_ + 1);				\
+  })
+ 
+ /* Macro to generate the name of the cross reference file.  The standard
+    one does not work, since it was written assuming that the conventions
+    of a unix style filesystem will work on the host system.
+  
+    Contrary to VMS, I'm using the original unix filename, there's no reason
+    not to use this under AmigaDOS. */
+ 
+ #define XREF_FILE_NAME(BUFF, NAME)	\
+   s = FILE_NAME_NONDIRECTORY (NAME);			\
+   if (s == NAME) sprintf(BUFF, ".%s.gxref", NAME);	\
+   else {						\
+     unsigned char ch = *s; /* could be Latin1 char.. */	\
+     /* temporary: cut the filename from the directory */\
+     *s = 0;						\
+     sprintf (BUFF, "%s.%c%s.gxref", NAME, ch, s+1);	\
+     /* and restore the filename */			\
+     *s = ch;						\
+   }							\
+ 
+ /* Macro that is used in cp-xref.c to determine whether a file name is
+    absolute or not.
+ 
+    This checks for both, '/' as first character, since we're running under
+    ixemul.library which provides for this unix'ism, and for the usual 
+    logical-terminator, ':', somewhere in the filename. */
+ 
+ #define FILE_NAME_ABSOLUTE_P(NAME) (NAME[0] == '/' || index(NAME, ':'))
+ 
+ /* the colon conflicts with the name space of logicals */
+ 
+ #define PATH_SEPARATOR ','
+ 
+ /* AmigaDOS handles rename(2) *much* better than any link(2)/unlink(2)
+    hacks. It's actually the inverse case as on Unix. rename(2) was always
+    there, link(2) is new with OS 2.0 */
+ 
+ #define HAVE_rename 1
+ 
+ /* Phil.B 17-Apr-95 Added stack checking code submitted by Kriton Kyrimis
+    (kyrimis@theseas.ntua.gr) on 10-Feb-95, modified for inclusion into gcc
+ 
+    What stackcheck does is to add the following code at the beginning of
+    each function:
+ 	cmpl __StackBottom,sp
+ 	bccs .+8
+ 	jmp __StackOverflow
+ 
+    _StackBottom and _StackOverflow() are defined in stackchecksetup.c.
+    _StackBottom is set to the bottom of the stack plus some leeway for
+    subroutine arguments (128 bytes).  _StackOverflow() sets the stack
+    pointer to a sane value, prints an error message and exits.
+ 
+    Even with stack checking, you cannot be completely safe, as overflows
+    are detected on function entry, rather than during function execution.
+    E.g.,
+ 	crash(){
+ 	  char scribble[100000];
+ 	  int i;
+ 	  for (i=0; i<100000; i++) scribble[i]=0;
+ 	  check(scribble);
+ 	}
+ 	check(char *x){}
+    In the above example, stack overflow and its side-effects will occur in
+    crash(), but it will be detected in check(), when it is too late. (The
+    same thing happens with SAS/C's stack checking, BTW.)
+ */
+ 
+ /* #defined AMIGA_STACK_CHECKING */
diff -2rcN /usr/goinfre/gcc-2.7.0/configure gcc-2.7.0-amiga/configure
*** /usr/goinfre/gcc-2.7.0/configure	Thu Jun 15 22:54:14 1995
--- gcc-2.7.0-amiga/configure	Fri Jun 23 11:52:22 1995
***************
*** 5,8 ****
--- 5,12 ----
  #This file is part of GNU CC.
  
+ # AmigaDOS Notes:  Where "echo" can be invoked with a first arg that
+ # starts with '-', run the external echo instead, since the pdksh builtin
+ # version botches this case.
+ 
  #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
***************
*** 54,80 ****
  # Default --srcdir to the directory where the script is found, 
  # if a directory was specified.
! # The second sed call is to convert `.//configure' to `./configure'.
! srcdir=`echo $0 | sed 's|//|/|' | sed 's|/[^/]*$||'`
  if [ x$srcdir = x$0 ]
  then
  srcdir=
  fi
  
  host=
  
! # Default prefix to /usr/local.
! prefix=/usr/local
! 
  # On systems where GCC is the native compiler, $prefix should be
  # /usr. But the user can change it with configure --prefix=/foo/bar
  native_prefix=/usr
   
! # local_prefix specifies where to find the directory /usr/local/include
  # We don't use $(prefix) for this
! # because we always want GCC to search /usr/local/include
! # even if GCC is installed somewhere other than /usr/local.
  # Think THREE TIMES before specifying any other value for this!
  # DO NOT make this use $prefix!
! local_prefix=/usr/local
  # Default is to let the Makefile set exec_prefix from $(prefix)
  exec_prefix='$(prefix)'
--- 58,100 ----
  # Default --srcdir to the directory where the script is found, 
  # if a directory was specified.
! # The first sed call works around a bug in the AmigaDOS port of sksh, where
! # $0 has a trailing slash appended to it.  It is a NOP for other systems.
! # The third sed call is to convert `.//configure' to `./configure'.
! srcdir=`echo $0 | sed 's|/$||' | sed 's|//|/|' | sed 's|/[^/]*$||'`
  if [ x$srcdir = x$0 ]
  then
  srcdir=
  fi
+ # On systems where GCC is the native compiler, $prefix should be
+ # /usr. But the user can change it with configure --prefix=/foo/bar
+ native_prefix=/usr
+  
  
  host=
  
! # Note:  For AmigaDOS we want this to default to /gnu unless we specify
! # otherwise to configure.  We also don't want to have to remember to always
! # configure with "--prefix=/gnu".  Changing it in Makefile.in or in
! # config/m68k/x-amigados is ineffective since configure will always change
! # it back in the final generated Makefile, so we have to go to the root of
! # the problem, which is here.  There should be a way to do this in the
! # individual machine configuration files!  -fnf
! # here.  -fnf
! # Default prefix to "/gnu".
! prefix=/gnu
!   
  # On systems where GCC is the native compiler, $prefix should be
  # /usr. But the user can change it with configure --prefix=/foo/bar
  native_prefix=/usr
   
! # local_prefix specifies where to find the directory /gnu/local/include
  # We don't use $(prefix) for this
! # because we always want GCC to search /gnu/local/include
! # even if GCC is installed somewhere other than /gnu/local.
  # Think THREE TIMES before specifying any other value for this!
  # DO NOT make this use $prefix!
! # Note:  See AmigaDOS note above for this AmigaDOS specific change.  -fnf
! # NoteII:We don't want to have yet-another-assign so we use /gnu/local
! local_prefix=/gnu/local
  # Default is to let the Makefile set exec_prefix from $(prefix)
  exec_prefix='$(prefix)'
***************
*** 88,93 ****
  
  remove=rm
! hard_link=ln
! symbolic_link='ln -s'
  copy=cp
  
--- 108,118 ----
  
  remove=rm
! # AmigaDOS specific change.  Although we support symbolic links using
! # the GNU tools, they need to be made using the syntax "somewhere:foo/bar"
! # and not "/somewhere/foo/bar", since they must be in standard AmigaDOS
! # format.  This should probably be done by having GNU ln translate paths
! # that start with '/' to canonical AmigaDOS device:name form.
! hard_link=cp
! symbolic_link=cp
  copy=cp
  
***************
*** 145,149 ****
      # Double any backslashes or dollar signs in the argument.
      if [ -n "${arg}" ] ; then
!       program_transform_name="${program_transform_name} -e `echo ${arg} | sed -e 's/\\\\/\\\\\\\\/g' -e 's/\\\$/$$/g'`"
      fi
      program_transform_set=yes
--- 170,174 ----
      # Double any backslashes or dollar signs in the argument.
      if [ -n "${arg}" ] ; then
!       program_transform_name="${program_transform_name} -e `/bin/echo ${arg} | sed -e 's/\\\\/\\\\\\\\/g' -e 's/\\\$/$$/g'`"
      fi
      program_transform_set=yes
***************
*** 152,156 ****
    --program-prefix)
      if [ -n "${arg}" ]; then
!       program_transform_name="${program_transform_name} -e s,^,`echo ${arg} | sed -e 's/\\\\/\\\\\\\\/g' -e 's/\\\$/$$/g'`,"
      fi
      program_transform_set=yes
--- 177,181 ----
    --program-prefix)
      if [ -n "${arg}" ]; then
!       program_transform_name="${program_transform_name} -e s,^,`/bin/echo ${arg} | sed -e 's/\\\\/\\\\\\\\/g' -e 's/\\\$/$$/g'`,"
      fi
      program_transform_set=yes
***************
*** 159,163 ****
    --program-suffix)
      if [ -n "${arg}" ]; then
!       program_transform_name="${program_transform_name} -e s,\$\$,`echo ${arg} | sed -e 's/\\\\/\\\\\\\\/g' -e 's/\\\$/$$/g'`,"
      fi
      program_transform_set=yes
--- 184,188 ----
    --program-suffix)
      if [ -n "${arg}" ]; then
!       program_transform_name="${program_transform_name} -e s,\$\$,`/bin/echo ${arg} | sed -e 's/\\\\/\\\\\\\\/g' -e 's/\\\$/$$/g'`,"
      fi
      program_transform_set=yes
***************
*** 183,187 ****
  	;;
       -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
! 	srcdir=`echo $arg | sed 's/-*s[a-z]*=//'`
  	;;
       -host | --host | --hos | --ho)
--- 208,212 ----
  	;;
       -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
! 	srcdir=`/bin/echo $arg | sed 's/-*s[a-z]*=//'`
  	;;
       -host | --host | --hos | --ho)
***************
*** 189,193 ****
  	;;
       -host=* | --host=* | --hos=* | --ho=*)
! 	host=`echo $arg | sed 's/-*h[a-z]*=//'`
  	;; 
       -target | --target | --targe | --targ | --tar | --ta | --t)
--- 214,218 ----
  	;;
       -host=* | --host=* | --hos=* | --ho=*)
! 	host=`/bin/echo $arg | sed 's/-*h[a-z]*=//'`
  	;; 
       -target | --target | --targe | --targ | --tar | --ta | --t)
***************
*** 195,199 ****
  	;;
       -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
! 	target=`echo $arg | sed 's/-*t[a-z]*=//'`
  	;; 
       -build | --build | --buil | --bui | --bu | --b)
--- 220,224 ----
  	;;
       -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
! 	target=`/bin/echo $arg | sed 's/-*t[a-z]*=//'`
  	;; 
       -build | --build | --buil | --bui | --bu | --b)
***************
*** 201,205 ****
  	;;
       -build=* | --build=* | --buil=* | --bui=* | --bu=* | --b=*)
! 	build=`echo $arg | sed 's/-*b[a-z]*=//'`
  	;; 
       -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
--- 226,230 ----
  	;;
       -build=* | --build=* | --buil=* | --bui=* | --bu=* | --b=*)
! 	build=`/bin/echo $arg | sed 's/-*b[a-z]*=//'`
  	;; 
       -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
***************
*** 207,211 ****
  	;;
       -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
! 	prefix=`echo $arg | sed 's/-*p[a-z]*=//'`
  	native_prefix=$prefix
  	;;
--- 232,236 ----
  	;;
       -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
! 	prefix=`/bin/echo $arg | sed 's/-*p[a-z]*=//'`
  	native_prefix=$prefix
  	;;
***************
*** 217,221 ****
  	| --local-pre=* | --local-pr=* | --local-p=* | --local-=* | --local=* \
  	| --loc=* | --lo=* | --l=*)
! 	local_prefix=`echo $arg | sed 's/-*l[-a-z]*=//'`
  	;;
       -gxx-include-dir | --gxx-include-dir | --gxx-include \
--- 242,246 ----
  	| --local-pre=* | --local-pr=* | --local-p=* | --local-=* | --local=* \
  	| --loc=* | --lo=* | --l=*)
! 	local_prefix=`/bin/echo $arg | sed 's/-*l[-a-z]*=//'`
  	;;
       -gxx-include-dir | --gxx-include-dir | --gxx-include \
***************
*** 227,231 ****
  	| --gxx-incl=* | --gxx-inc=* | --gxx-in=* | --gxx-i=* \
  	| --gxx-=* | --gxx=* | --gxx=* | --gxx=* | --g=*)
! 	gxx_include_dir=`echo $arg | sed 's/-*g[-a-z]*=//'`
  	;;
       -exec-prefix | --exec-prefix | --exec-prefi | --exec-pref | --exec-pre \
--- 252,256 ----
  	| --gxx-incl=* | --gxx-inc=* | --gxx-in=* | --gxx-i=* \
  	| --gxx-=* | --gxx=* | --gxx=* | --gxx=* | --g=*)
! 	gxx_include_dir=`/bin/echo $arg | sed 's/-*g[-a-z]*=//'`
  	;;
       -exec-prefix | --exec-prefix | --exec-prefi | --exec-pref | --exec-pre \
***************
*** 236,240 ****
  	| --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* | --exec=* \
  	| --exe=* | --ex=* | --e=*)
! 	exec_prefix=`echo $arg | sed 's/-*e[-a-z]*=//'`
  	;;
       -program-transform-name | --program-transform-name \
--- 261,265 ----
  	| --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* | --exec=* \
  	| --exe=* | --ex=* | --e=*)
! 	exec_prefix=`/bin/echo $arg | sed 's/-*e[-a-z]*=//'`
  	;;
       -program-transform-name | --program-transform-name \
***************
*** 252,259 ****
  	| --program-transf=* | --program-trans=* | --program-tran=* \
  	| --program-tra=* | --program-tr=* | --program-t=*)
! 	arg=`echo ${arg} | sed -e 's/^[-a-z_]*=//'`
  	# Double any \ or $ in the argument.
  	if [ -n "${arg}" ] ; then
! 	  program_transform_name="${program_transform_name} -e `echo ${arg} | sed -e 's/\\\\/\\\\\\\\/g' -e 's/\\\$/$$/g'`"
  	fi
  	program_transform_set=yes
--- 277,284 ----
  	| --program-transf=* | --program-trans=* | --program-tran=* \
  	| --program-tra=* | --program-tr=* | --program-t=*)
! 	arg=`/bin/echo ${arg} | sed -e 's/^[-a-z_]*=//'`
  	# Double any \ or $ in the argument.
  	if [ -n "${arg}" ] ; then
! 	  program_transform_name="${program_transform_name} -e `/bin/echo ${arg} | sed -e 's/\\\\/\\\\\\\\/g' -e 's/\\\$/$$/g'`"
  	fi
  	program_transform_set=yes
***************
*** 267,273 ****
  	| --program-pref=* | --program-pre=* | --program-pr=* \
  	| --program-p=*)
! 	arg=`echo ${arg} | sed -e 's/^[-a-z_]*=//'`
  	if [ -n "${arg}" ]; then
! 	  program_transform_name="${program_transform_name} -e s,^,`echo ${arg} | sed -e 's/\\\\/\\\\\\\\/g' -e 's/\\\$/$$/g'`,"
  	fi
  	program_transform_set=yes
--- 292,298 ----
  	| --program-pref=* | --program-pre=* | --program-pr=* \
  	| --program-p=*)
! 	arg=`/bin/echo ${arg} | sed -e 's/^[-a-z_]*=//'`
  	if [ -n "${arg}" ]; then
! 	  program_transform_name="${program_transform_name} -e s,^,`/bin/echo ${arg} | sed -e 's/\\\\/\\\\\\\\/g' -e 's/\\\$/$$/g'`,"
  	fi
  	program_transform_set=yes
***************
*** 281,287 ****
  	| --program-suff=* | --program-suf=* | --program-su=* \
  	| --program-s=*)
! 	arg=`echo ${arg} | sed -e 's/^[-a-z_]*=//'`
  	if [ -n "${arg}" ]; then
! 	  program_transform_name="${program_transform_name} -e s,\$\$,`echo ${arg} | sed -e 's/\\\\/\\\\\\\\/g' -e 's/\\\$/$$/g'`,"
  	fi
  	program_transform_set=yes
--- 306,312 ----
  	| --program-suff=* | --program-suf=* | --program-su=* \
  	| --program-s=*)
! 	arg=`/bin/echo ${arg} | sed -e 's/^[-a-z_]*=//'`
  	if [ -n "${arg}" ]; then
! 	  program_transform_name="${program_transform_name} -e s,\$\$,`/bin/echo ${arg} | sed -e 's/\\\\/\\\\\\\\/g' -e 's/\\\$/$$/g'`,"
  	fi
  	program_transform_set=yes
***************
*** 496,500 ****
  	# Set this to override the default target model.
  	target_cpu_default=
! 	# Set this to force use of install.sh.
  	broken_install=
  	# Set this to control which fixincludes program to use.
--- 521,526 ----
  	# Set this to override the default target model.
  	target_cpu_default=
! 	# Set this to force use of install.sh (if set to 'yes')
! 	# Set to name of installer to use a custom installer.
  	broken_install=
  	# Set this to control which fixincludes program to use.
***************
*** 1468,1471 ****
--- 1494,1507 ----
  		extra_headers=math-68881.h
  		;;
+ 	m68k-*-amigados)
+ 		xm_file=m68k/xm-amigados.h
+ 		out_file=m68k/amigados.c
+ 		tm_file=m68k/amigados.h
+ 		tmake_file=m68k/t-amigados
+ 		xmake_file=m68k/x-amigados
+ 		fixincludes=Makefile.in # Headers are already fixed.
+ 		broken_install=cp
+ 		install_headers_dir=install-headers-cp
+ 		;;
  	m68k-wrs-vxworks*)
  		tm_file=m68k/vxm68k.h
***************
*** 2500,2513 ****
  rm -f specs.h options.h
  touch specs.h options.h
! for subdir in . $subdirs
  do
! 	if [ -f $srcdir/$subdir/lang-specs.h ]; then
! 		echo "#include \"$subdir/lang-specs.h\"" >>specs.h
! 		lang_specs_files="$lang_specs_files $subdir/lang-specs.h"
! 	fi
! 	if [ -f $srcdir/$subdir/lang-options.h ]; then
! 		echo "#include \"$subdir/lang-options.h\"" >>options.h
! 		lang_options_files="$lang_options_files $subdir/lang-options.h"
! 	fi
  done
  
--- 2536,2548 ----
  rm -f specs.h options.h
  touch specs.h options.h
! for lang_specs in $srcdir/*/lang-specs.h
  do
! 	echo "#include \"$lang_specs\"" >>specs.h
! 	lang_specs_files="$lang_specs_files $lang_specs"
! done
! for lang_options in $srcdir/*/lang-options.h
! do
! 	echo "#include \"$lang_options\"" >>options.h
! 	lang_options_files="$lang_options_files $lang_options"
  done
  
***************
*** 2615,2620 ****
  	else
  		rm -f Makefile.xx
! 		abssrcdir=`cd ${srcdir}; pwd`
! 		sed "s|^INSTALL = .*|INSTALL = ${abssrcdir}/install.sh -c|" Makefile.tem > Makefile.xx
  		rm -f Makefile.tem
  		mv Makefile.xx Makefile.tem
--- 2650,2661 ----
  	else
  		rm -f Makefile.xx
!  		if [ x$host_broken_install = xyes ]
!  		then
!  			abssrcdir=`cd ${srcdir}; pwd`
!  			installer="${abssrcdir}/install.sh -c"
!  		else
!  			installer=$host_broken_install
!  		fi
!  		sed "s|^INSTALL = .*|INSTALL = ${installer}|" Makefile.tem > Makefile.xx
  		rm -f Makefile.tem
  		mv Makefile.xx Makefile.tem
***************
*** 2860,2867 ****
  		if $symbolic_link symtest1.tem symtest.tem 2>/dev/null
  		then
! 			sed -e 's,CC=set-by-configure,CC=$(CC),' \
  			    Makefile.tem > Makefile.xx
  		else
! 			sed -e "s,CC=set-by-configure,CC=\`case '$(CC)' in stage*) echo '$(CC)' | sed -e 's|stage|../stage|g';; *) echo '$(CC)';; esac\`," \
  			    Makefile.tem > Makefile.xx
  		fi
--- 2901,2908 ----
  		if $symbolic_link symtest1.tem symtest.tem 2>/dev/null
  		then
! 			sed -e 's,CC=set-by-configure,CC=\$(CC),' \
  			    Makefile.tem > Makefile.xx
  		else
! 			sed -e "s,CC=set-by-configure,CC=\`case '\$(CC)' in stage*) echo '\$(CC)' | sed -e 's|stage|../stage|g';; *) echo '\$(CC)';; esac\`," \
  			    Makefile.tem > Makefile.xx
  		fi
diff -2rcN /usr/goinfre/gcc-2.7.0/cp/Make-lang.in gcc-2.7.0-amiga/cp/Make-lang.in
*** /usr/goinfre/gcc-2.7.0/cp/Make-lang.in	Fri Jun 16 20:09:57 1995
--- gcc-2.7.0-amiga/cp/Make-lang.in	Fri Jun 23 11:52:22 1995
***************
*** 74,78 ****
  cxxmain.o: cplus-dem.c demangle.h
  	rm -f cxxmain.c
! 	ln -s $(srcdir)/cplus-dem.c cxxmain.c > /dev/null 2>&1 \
  	 || cp $(srcdir)/cplus-dem.c cxxmain.c
  	$(CC) -c -DMAIN $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
--- 74,78 ----
  cxxmain.o: cplus-dem.c demangle.h
  	rm -f cxxmain.c
! 	$(SYMLINK) $(srcdir)/cplus-dem.c cxxmain.c > /dev/null 2>&1 \
  	 || cp $(srcdir)/cplus-dem.c cxxmain.c
  	$(CC) -c -DMAIN $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
***************
*** 122,126 ****
  	    chmod a+x $(bindir)/$(GXX_CROSS_NAME)$(exeext); \
  	    rm -f $(bindir)/$(CXX_CROSS_NAME)$(exeext); \
! 	    ln $(bindir)/$(GXX_CROSS_NAME)$(exeext) $(bindir)/$(CXX_CROSS_NAME)$(exeext) \
  	      > /dev/null 2>&1 \
  	      || cp $(bindir)/$(GXX_CROSS_NAME)$(exeext) $(bindir)/$(CXX_CROSS_NAME)$(exeext) ; \
--- 122,126 ----
  	    chmod a+x $(bindir)/$(GXX_CROSS_NAME)$(exeext); \
  	    rm -f $(bindir)/$(CXX_CROSS_NAME)$(exeext); \
! 	    $(HARDLINK) $(bindir)/$(GXX_CROSS_NAME)$(exeext) $(bindir)/$(CXX_CROSS_NAME)$(exeext) \
  	      > /dev/null 2>&1 \
  	      || cp $(bindir)/$(GXX_CROSS_NAME)$(exeext) $(bindir)/$(CXX_CROSS_NAME)$(exeext) ; \
***************
*** 130,134 ****
  	    chmod a+x $(bindir)/$(GXX_INSTALL_NAME)$(exeext); \
  	    rm -f $(bindir)/$(CXX_INSTALL_NAME)$(exeext); \
! 	    ln $(bindir)/$(GXX_INSTALL_NAME)$(exeext) $(bindir)/$(CXX_INSTALL_NAME)$(exeext) \
  	      > /dev/null 2>&1 \
  	      || cp $(bindir)/$(GXX_INSTALL_NAME)$(exeext) $(bindir)/$(CXX_INSTALL_NAME)$(exeext) ; \
--- 130,134 ----
  	    chmod a+x $(bindir)/$(GXX_INSTALL_NAME)$(exeext); \
  	    rm -f $(bindir)/$(CXX_INSTALL_NAME)$(exeext); \
! 	    $(HARDLINK) $(bindir)/$(GXX_INSTALL_NAME)$(exeext) $(bindir)/$(CXX_INSTALL_NAME)$(exeext) \
  	      > /dev/null 2>&1 \
  	      || cp $(bindir)/$(GXX_INSTALL_NAME)$(exeext) $(bindir)/$(CXX_INSTALL_NAME)$(exeext) ; \
***************
*** 194,197 ****
  	cd cp; \
  	for file in *[0-9a-zA-Z+]; do \
! 	  ln $$file ../tmp/cp >/dev/null 2>&1 || cp $$file ../tmp/cp; \
  	done
--- 194,197 ----
  	cd cp; \
  	for file in *[0-9a-zA-Z+]; do \
! 	  $(HARDLINK) $$file ../tmp/cp >/dev/null 2>&1 || cp $$file ../tmp/cp; \
  	done
diff -2rcN /usr/goinfre/gcc-2.7.0/cp/g++.c gcc-2.7.0-amiga/cp/g++.c
*** /usr/goinfre/gcc-2.7.0/cp/g++.c	Thu Jun 15 13:23:15 1995
--- gcc-2.7.0-amiga/cp/g++.c	Fri Jun 23 11:52:23 1995
***************
*** 242,246 ****
--- 242,250 ----
  
    if (errno < sys_nerr)
+ #ifdef HAVE_STRERROR
+     s = concat ("%s: ", strerror(errno), "");
+ #else
      s = concat ("%s: ", sys_errlist[errno], "");
+ #endif
    else
      s = "cannot open %s";
diff -2rcN /usr/goinfre/gcc-2.7.0/cpplib.c gcc-2.7.0-amiga/cpplib.c
*** /usr/goinfre/gcc-2.7.0/cpplib.c	Thu Jun 15 12:24:38 1995
--- gcc-2.7.0-amiga/cpplib.c	Fri Jun 23 11:52:24 1995
***************
*** 152,155 ****
--- 152,159 ----
  static char *predefs = "";
  #endif
+ 
+ #ifdef __amigados__
+ static int amigados_abs_filename ();
+ #endif
  
  /* We let tm.h override the types used here, to handle trivial differences
***************
*** 3304,3308 ****
--- 3308,3317 ----
    /* If specified file name is absolute, just open it.  */
  
+ /* Phil.B 10-Apr-95 check for absolute filenames */
+ #ifdef __amigados__
+   if (amigados_abs_filename (fbeg, flen)) {
+ #else
    if (*fbeg == '/') {
+ #endif
      strncpy (fname, fbeg, flen);
      fname[flen] = 0;
***************
*** 3327,3330 ****
--- 3336,3343 ----
  	  continue;
  	strcpy (fname, searchptr->fname);
+ /* Phil.B 10-Arp-95 Avoir foo:/ situations */
+ #ifdef __amigados__
+ 	if (fname[strlen (fname) - 1] != ':')
+ #endif
  	strcat (fname, "/");
  	fname[strlen (fname) + flen] = 0;
***************
*** 3400,3403 ****
--- 3413,3420 ----
  					   + strlen (fname) + 2);
  		      strcpy (p, searchptr->fname);
+ /* Phil.B 10-Arp-95 Avoir foo:/ situations */
+ #ifdef __amigados__
+ 	              if (p[strlen (p) - 1] != ':')
+ #endif
  		      strcat (p, "/");
  		      strcat (p, fname);
***************
*** 7511,7514 ****
--- 7528,7554 ----
  }
  
+ #ifdef __amigados__
+ 
+ /* This function returns whether the LEN characters long filename FNAME 
+    is an absolute path specification. */
+ 
+ static int
+ amigados_abs_filename (fname, len)
+      char *fname;
+      int len;
+ {
+   /* we're using ixemul.library, which treats `/foo' as `foo:', so 
+      fname[0] is to be considered absolute as well */
+   if (fname[0] == '/')
+     return 1;
+ 
+   /* else do an index() on fname, but one which is limited to len characters */
+   while (*fname && *fname != ':' && len) 
+     fname++, len--;
+ 
+   return *fname == ':';
+ }
+ #endif /* __amigados__ */
+ 
  /* TODO:
   * No pre-compiled header file support.
diff -2rcN /usr/goinfre/gcc-2.7.0/cpplib.h gcc-2.7.0-amiga/cpplib.h
*** /usr/goinfre/gcc-2.7.0/cpplib.h	Thu Jun 15 12:25:11 1995
--- gcc-2.7.0-amiga/cpplib.h	Fri Jun 23 11:52:25 1995
***************
*** 316,319 ****
--- 316,324 ----
    char verbose;
  
+ /* Phil.B 10-Apr-95 handle amiga process priority */
+ #ifdef __amigados__
+   int amiga_priority;
+ #endif /* __amigados__ */
+ 
    /* Nonzero means use extra default include directories for C++.  */
  
diff -2rcN /usr/goinfre/gcc-2.7.0/cppmain.c gcc-2.7.0-amiga/cppmain.c
*** /usr/goinfre/gcc-2.7.0/cppmain.c	Thu Jun 15 12:25:35 1995
--- gcc-2.7.0-amiga/cppmain.c	Fri Jun 23 11:52:25 1995
***************
*** 33,36 ****
--- 33,41 ----
  cpp_options options;
  
+ #ifdef __amigados__
+ #include <proto/exec.h>
+ struct Task *amiga_task;
+ #endif /* __amigados__ */
+ 
  /* More 'friendly' abort that prints the line and file.
     config.h can #define abort fancy_abort if you like that sort of thing.  */
***************
*** 53,56 ****
--- 58,70 ----
    struct cpp_options *opts = &options;
  
+ #ifdef __amigados__
+   {
+     char *envstr;
+ 
+     if (envstr = getenv("GCCPRIORITY"))
+       if (((i = atoi(envstr)) > -20) && (i < 20)) opts->amiga_priority = i;
+   }
+ #endif /* __amigados__ */
+ 
    p = argv[0] + strlen (argv[0]);
    while (p != argv[0] && p[-1] != '/') --p;
***************
*** 67,70 ****
--- 81,91 ----
    parse_in.show_column = 1;
  
+ #ifdef __amigados__
+   Forbid();
+   amiga_task = FindTask(NULL);
+   Permit();
+   SetTaskPri(amiga_task, opts->amiga_priority);
+ #endif /* __amigados__ */
+ 
    i = push_parse_file (&parse_in, opts->in_fname);
    if (i != SUCCESS_EXIT_CODE)
diff -2rcN /usr/goinfre/gcc-2.7.0/explow.c gcc-2.7.0-amiga/explow.c
*** /usr/goinfre/gcc-2.7.0/explow.c	Thu Jun 15 12:30:10 1995
--- gcc-2.7.0-amiga/explow.c	Fri Jun 23 11:52:26 1995
***************
*** 31,34 ****
--- 31,35 ----
  #include "insn-codes.h"
  
+ rtx gen_stack_cleanup_call();
  static rtx break_out_memory_refs	PROTO((rtx));
  
***************
*** 1096,1099 ****
--- 1097,1109 ----
      }
    else
+ #endif
+ #if 1 /* HAVE_stack_on_heap */
+   if (TARGET_STACKCHECK)
+     emit_insn (gen_stack_management_call
+                 (stack_pointer_rtx, size, "jbsr ___stkchk_d0"));
+   if (TARGET_STACKEXTEND)
+     emit_insn (gen_stack_management_call 
+                 (stack_pointer_rtx, size, "jbsr ___sub_d0_sp"));
+   else
  #endif
      {
diff -2rcN /usr/goinfre/gcc-2.7.0/final.c gcc-2.7.0-amiga/final.c
*** /usr/goinfre/gcc-2.7.0/final.c	Thu Jun 15 12:32:51 1995
--- gcc-2.7.0-amiga/final.c	Fri Jun 23 11:52:26 1995
***************
*** 2039,2042 ****
--- 2039,2046 ----
    if (write_symbols != NO_DEBUG)
      {
+ /* Phil.B: 03-Oct-94 added q_anote from albaugh@agames.com (Mike Albaugh) */
+ #if defined(__amigados__) && defined(ASM_NOTE_SOURCE_LINE)
+   ASM_NOTE_SOURCE_LINE(file,last_linenum,filename);
+ #endif
  #ifdef SDB_DEBUGGING_INFO
        if (write_symbols == SDB_DEBUG
diff -2rcN /usr/goinfre/gcc-2.7.0/fixincludes gcc-2.7.0-amiga/fixincludes
*** /usr/goinfre/gcc-2.7.0/fixincludes	Sun Jun 11 18:37:31 1995
--- gcc-2.7.0-amiga/fixincludes	Fri Jun 23 11:52:27 1995
***************
*** 58,61 ****
--- 58,64 ----
    LINKS=false
  fi
+ # AmigaDOS hack - we have symbolic links, but it's generally
+ # better to not depend on them working correctly.
+ LINKS=false
  
  echo Finding directories and links to directories
diff -2rcN /usr/goinfre/gcc-2.7.0/gcc.c gcc-2.7.0-amiga/gcc.c
*** /usr/goinfre/gcc-2.7.0/gcc.c	Thu Jun 15 12:38:02 1995
--- gcc-2.7.0-amiga/gcc.c	Fri Jun 23 11:52:28 1995
***************
*** 225,228 ****
--- 225,235 ----
  static int save_temps_flag;
  
+ #ifdef __amigados__
+ /* Phil.B: 03-Oct-94 Flag indicating process priority */
+ static int amiga_priority = 0;
+ /* Phil.B: 17-Apr-95 Flag indicating stack checking */
+ static int amiga_stackcheck = 0;
+ #endif /* __amigados__ */
+ 
  /* The compiler version.  */
  
***************
*** 817,820 ****
--- 824,831 ----
     {"--pipe", "-pipe", 0},
     {"--prefix", "-B", "a"},
+ /* Phil.B: 03-Oct-94, allow priority settings for all programs started by gcc */
+ #ifdef __amigados__
+    {"--priority", "-priority", "a"},
+ #endif /* __amigados__ */
     {"--preprocess", "-E", 0},
     {"--print-search-dirs", "-print-search-dirs", 0},
***************
*** 1348,1356 ****
  
  #ifndef STANDARD_EXEC_PREFIX
! #define STANDARD_EXEC_PREFIX "/usr/local/lib/gcc-lib/"
  #endif /* !defined STANDARD_EXEC_PREFIX */
  
  static char *standard_exec_prefix = STANDARD_EXEC_PREFIX;
! static char *standard_exec_prefix_1 = "/usr/lib/gcc/";
  #ifdef MD_EXEC_PREFIX
  static char *md_exec_prefix = MD_EXEC_PREFIX;
--- 1359,1367 ----
  
  #ifndef STANDARD_EXEC_PREFIX
! #define STANDARD_EXEC_PREFIX "/gnu/lib/gcc-lib/"
  #endif /* !defined STANDARD_EXEC_PREFIX */
  
  static char *standard_exec_prefix = STANDARD_EXEC_PREFIX;
! static char *standard_exec_prefix_1 = "/local/lib/gcc-lib/";
  #ifdef MD_EXEC_PREFIX
  static char *md_exec_prefix = MD_EXEC_PREFIX;
***************
*** 1358,1362 ****
  
  #ifndef STANDARD_STARTFILE_PREFIX
! #define STANDARD_STARTFILE_PREFIX "/usr/local/lib/"
  #endif /* !defined STANDARD_STARTFILE_PREFIX */
  
--- 1369,1373 ----
  
  #ifndef STANDARD_STARTFILE_PREFIX
! #define STANDARD_STARTFILE_PREFIX "/gnu/lib/"
  #endif /* !defined STANDARD_STARTFILE_PREFIX */
  
***************
*** 1368,1376 ****
  #endif
  static char *standard_startfile_prefix = STANDARD_STARTFILE_PREFIX;
! static char *standard_startfile_prefix_1 = "/lib/";
! static char *standard_startfile_prefix_2 = "/usr/lib/";
  
  #ifndef TOOLDIR_BASE_PREFIX
! #define TOOLDIR_BASE_PREFIX "/usr/local/"
  #endif
  static char *tooldir_base_prefix = TOOLDIR_BASE_PREFIX;
--- 1379,1387 ----
  #endif
  static char *standard_startfile_prefix = STANDARD_STARTFILE_PREFIX;
! static char *standard_startfile_prefix_1 = "/local/lib/";
! static char *standard_startfile_prefix_2 = "/local/lib/";
  
  #ifndef TOOLDIR_BASE_PREFIX
! #define TOOLDIR_BASE_PREFIX "/local/"
  #endif
  static char *tooldir_base_prefix = TOOLDIR_BASE_PREFIX;
***************
*** 1573,1576 ****
--- 1584,1591 ----
  #endif
  
+ #ifdef __amigados__
+   if (!base) /* No env var set */
+     base = "RAM:";
+ #else
    base = choose_temp_base_try (concat4 (dir_separator_str, "usr", 
                                          dir_separator_str, "tmp"), 
***************
*** 1578,1581 ****
--- 1593,1598 ----
    base = choose_temp_base_try (concat (dir_separator_str, "tmp"), base);
   
+ #endif
+ 
    /* If all else fails, use the current directory! */  
    if (base == (char *)0) base = concat(".", dir_separator_str);
***************
*** 1586,1590 ****
    strcpy (temp_filename, base);
    if (len > 0 && temp_filename[len-1] != '/'
!       && temp_filename[len-1] != DIR_SEPARATOR)
      temp_filename[len++] = DIR_SEPARATOR;
    strcpy (temp_filename + len, "ccXXXXXX");
--- 1603,1611 ----
    strcpy (temp_filename, base);
    if (len > 0 && temp_filename[len-1] != '/'
!       && temp_filename[len-1] != DIR_SEPARATOR
! #ifdef VOL_SEPARATOR
!       && temp_filename[len-1] != VOL_SEPARATOR
! #endif
! 	)
      temp_filename[len++] = DIR_SEPARATOR;
    strcpy (temp_filename + len, "ccXXXXXX");
***************
*** 1747,1751 ****
    /* Determine the filename to execute (special case for absolute paths).  */
  
!   if (*name == '/' || *name == DIR_SEPARATOR)
      {
        if (access (name, mode))
--- 1768,1776 ----
    /* Determine the filename to execute (special case for absolute paths).  */
  
!   if (*name == '/' || *name == DIR_SEPARATOR
! #ifdef VOL_SEPARATOR
!       || index (name, VOL_SEPARATOR)
! #endif
! 	)
      {
        if (access (name, mode))
***************
*** 1967,1970 ****
--- 1992,1996 ----
     (i.e. its output should be piped to the next one.)  */
  
+ #ifndef PEXECUTE
  #ifdef __MSDOS__
  
***************
*** 2171,2174 ****
--- 2197,2201 ----
  }
  #endif /* OS2 or _WIN32 */
+ #endif /* !defined (PEXECUTE) */
  
  
***************
*** 2266,2272 ****
--- 2293,2305 ----
        char *string = commands[i].argv[0];
  
+ #ifdef PEXECUTE
+       commands[i].pid = PEXECUTE (string != commands[i].prog,
+ 				  string, commands[i].argv,
+ 				  i + 1 < n_commands);
+ #else
        commands[i].pid = pexecute (string != commands[i].prog,
  				  string, commands[i].argv,
  				  i + 1 < n_commands);
+ #endif
  
        if (string != commands[i].prog)
***************
*** 2291,2294 ****
--- 2324,2330 ----
  	int pid;
  
+ #ifdef PEXECUTE_RESULT
+ 	pid = PEXECUTE_RESULT (status, commands[i]);
+ #else /* PEXECUTE_RESULT */
  #ifdef __MSDOS__
          status = pid = commands[i].pid;
***************
*** 2300,2303 ****
--- 2336,2340 ----
  #endif
  #endif
+ #endif /* PEXECUTE_RESULT */
  	if (pid < 0)
  	  abort ();
***************
*** 2419,2422 ****
--- 2456,2460 ----
  	    {
  	      strncpy (nstore, startp, endp-startp);
+ #ifndef __amigados__
  	      if (endp == startp)
  		strcpy (nstore, concat (".", dir_separator_str));
***************
*** 2428,2431 ****
--- 2466,2478 ----
  	      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_prefixes, nstore, 0, 0, NULL_PTR);
  	      if (*endp == 0)
***************
*** 2450,2453 ****
--- 2497,2501 ----
  	    {
  	      strncpy (nstore, startp, endp-startp);
+ #ifndef __amigados__
  	      if (endp == startp)
  		strcpy (nstore, concat (".", dir_separator_str));
***************
*** 2459,2462 ****
--- 2507,2519 ----
  	      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_prefixes, nstore, 0, 0, NULL_PTR);
  	      if (*endp == 0)
***************
*** 2482,2485 ****
--- 2539,2543 ----
  	    {
  	      strncpy (nstore, startp, endp-startp);
+ #ifndef __amigados__
  	      if (endp == startp)
  		strcpy (nstore, concat (".", dir_separator_str));
***************
*** 2491,2494 ****
--- 2549,2561 ----
  	      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_prefixes, nstore, 0, 0, NULL_PTR);
  	      if (*endp == 0)
***************
*** 2510,2513 ****
--- 2577,2590 ----
    for (i = 1; i < argc; i++)
      {
+ #ifdef __amigados__
+       /* Phil.B 03-Oct-94 added -priority keyword */
+       if (! strcmp (argv[i], "-priority"))
+         {
+ 	  if (i + 1 == argc)
+ 	    fatal ("argument to `-priority' is missing");
+           amiga_priority = atoi(argv[++i]);
+         }
+       else
+ #endif /* __amigados__ */
        if (! strcmp (argv[i], "-dumpspecs"))
  	{
***************
*** 4483,4490 ****
--- 4560,4571 ----
  	  int len;
  
+ #ifdef FILE_NAME_NONDIRECTORY
+ 	  input_basename = FILE_NAME_NONDIRECTORY (input_filename);
+ #else
  	  input_basename = input_filename;
  	  for (p = input_filename; *p; p++)
  	    if (*p == '/' || *p == DIR_SEPARATOR)
  	      input_basename = p + 1;
+ #endif
  
  	  /* Find a suffix starting with the last period,
diff -2rcN /usr/goinfre/gcc-2.7.0/genconfig.c gcc-2.7.0-amiga/genconfig.c
*** /usr/goinfre/gcc-2.7.0/genconfig.c	Thu Jun 15 12:40:18 1995
--- gcc-2.7.0-amiga/genconfig.c	Fri Jun 23 11:52:29 1995
***************
*** 305,310 ****
--- 305,318 ----
  from the machine description file `md'.  */\n\n");
  
+ #ifdef __amigados__
+   /* this constant probably better be 14 in general, or a cross compiling
+      host might choke on some amigados header files... */
+ 
+   /* 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 = 9;  /* We will add 1 later.  */
+ #endif
    max_dup_operands = 1;
  
diff -2rcN /usr/goinfre/gcc-2.7.0/ginclude/stdarg.h gcc-2.7.0-amiga/ginclude/stdarg.h
*** /usr/goinfre/gcc-2.7.0/ginclude/stdarg.h	Sun Apr 30 13:10:28 1995
--- gcc-2.7.0-amiga/ginclude/stdarg.h	Fri Jun 23 11:52:29 1995
***************
*** 168,170 ****
--- 168,178 ----
  
  #endif /* not _ANSI_STDARG_H_ */
+ 
+ #ifdef __amigados__
+ # ifndef _VA_LIST
+ #  define _VA_LIST
+    typedef __gnuc_va_list va_list;
+ # endif
+ #endif /* __amigados__ */
+ 
  #endif /* not _STDARG_H */
diff -2rcN /usr/goinfre/gcc-2.7.0/ginclude/stddef.h gcc-2.7.0-amiga/ginclude/stddef.h
*** /usr/goinfre/gcc-2.7.0/ginclude/stddef.h	Wed May 31 00:02:59 1995
--- gcc-2.7.0-amiga/ginclude/stddef.h	Fri Jun 23 11:52:29 1995
***************
*** 4,7 ****
--- 4,47 ----
  #ifndef __STDDEF_H__
  
+ #ifdef __amigados__
+ 
+ /* GNU libc has special support in this file, 4.3bsd-net2 libc deserves that
+    just as well. The system headers are ANSI compliant, the used compiler IS
+    gcc, so it's really ok to use the system header, no reason to hassle
+    with a jungle of ifdefs. Besides, amigados is only defined if compiling
+    with host=amigados, it doesn't apply if compiling with target=amigados
+    on a different host with possibly different system headers. Same thing
+    would apply to gstdarg.h and gvarargs.h, but those headers are more
+    easily fixable than this one and I'm sick of writing the same comment
+    there as well. MW
+ 
+    Include the contents of <stddef.h> inline rather than with a #include,
+    to avoid infinite include recursion when this file is installed in
+    gcc's include directory as stddef.h.  (fnf)  */
+ 
+ #define _STDDEF_H_
+ 
+ #include <machine/ansi.h>
+ 
+ typedef	_PTRDIFF_T_	ptrdiff_t;
+ 
+ #ifdef	_SIZE_T_
+ typedef	_SIZE_T_	size_t;
+ #undef	_SIZE_T_
+ #endif
+ 
+ #ifdef	_WCHAR_T_
+ typedef	_WCHAR_T_	wchar_t;
+ #undef	_WCHAR_T_
+ #endif
+ 
+ #ifndef	NULL
+ #define	NULL	0
+ #endif
+ 
+ #define	offsetof(type, member)	((size_t)(&((type *)0)->member))
+ 
+ #else /* not __amigados__ */
+ 
  /* Any one of these symbols __need_* means that GNU libc
     wants us just to define one data type.  So don't define
***************
*** 238,241 ****
--- 278,283 ----
  #define __WCHAR_TYPE__ int
  #endif
+ 
+ #endif /* not  __amigados__ */
  typedef __WCHAR_TYPE__ wchar_t;
  #endif
diff -2rcN /usr/goinfre/gcc-2.7.0/ginclude/varargs.h gcc-2.7.0-amiga/ginclude/varargs.h
*** /usr/goinfre/gcc-2.7.0/ginclude/varargs.h	Sun Apr 30 13:10:30 1995
--- gcc-2.7.0-amiga/ginclude/varargs.h	Fri Jun 23 11:52:30 1995
***************
*** 185,186 ****
--- 185,193 ----
  #undef _BSD_VA_LIST
  #endif
+ 
+ #ifdef __amigados__
+ # ifndef _VA_LIST
+ #  define _VA_LIST
+    typedef __gnuc_va_list va_list;
+ # endif
+ #endif /* __amigados__ */
Binary files /usr/goinfre/gcc-2.7.0/libb/libgcc.a and gcc-2.7.0-amiga/libb/libgcc.a differ
Binary files /usr/goinfre/gcc-2.7.0/libb/libm020/libgcc.a and gcc-2.7.0-amiga/libb/libm020/libgcc.a differ
Binary files /usr/goinfre/gcc-2.7.0/libm020/libgcc.a and gcc-2.7.0-amiga/libm020/libgcc.a differ
diff -2rcN /usr/goinfre/gcc-2.7.0/protoize.c gcc-2.7.0-amiga/protoize.c
*** /usr/goinfre/gcc-2.7.0/protoize.c	Thu Jun 15 12:57:09 1995
--- gcc-2.7.0-amiga/protoize.c	Fri Jun 23 11:52:30 1995
***************
*** 884,889 ****
--- 884,894 ----
    struct default_include *p;
  
+ #ifdef FILE_NAME_ABSOLUTE_P
+   if (! FILE_NAME_ABSOLUTE_P (path))
+     abort ();
+ #else
    if (path[0] != '/')
      abort ();		/* Must be an absolutized filename.  */
+ #endif
  
    for (p = include_defaults; p->fname; p++)
***************
*** 1312,1316 ****
--- 1317,1325 ----
      const char *src_p;
  
+ #ifdef FILE_NAME_ABSOLUTE_P
+     if (! FILE_NAME_ABSOLUTE_P (rel_filename))
+ #else
      if (rel_filename[0] != '/')
+ #endif
        {
          src_p = cwd2;
***************
*** 1575,1578 ****
--- 1584,1606 ----
  }
  
+ /* Use this macro to advance a char * over the filename part in a line
+    read from an aux-info file. */
+ 
+ #ifndef __amigados__
+ /* Version for file systems where the colon has no special meaning */
+ #define ADVANCE_PAST_FILENAME(CP) \
+   while (* (CP) != ':') (CP)++
+ #else
+ /* Have to heuristically decide whether the colon is part of the filename
+    or whether it serves to delimit the filename from the line number. If
+    it's the latter case, then the character following the colon *must*
+    be a digit. Note that this heuristic fails if the filename starts
+    with a digit. */
+ #define ADVANCE_PAST_FILENAME(CP) \
+     while ((CP)[0] != ':' || !isdigit ((CP)[1])) \
+       (CP)++;
+ #endif
+ 
+ 
  /* Given a line from  an aux info file, and a time at which the aux info
     file it came from was created, check to see if the item described in
***************
*** 1596,1601 ****
      const char *filename_start = p = l + 3;
  
!     while (*p != ':')
!       p++;
      filename = (char *) alloca ((size_t) (p - filename_start) + 1);
      strncpy (filename, filename_start, (size_t) (p - filename_start));
--- 1624,1628 ----
      const char *filename_start = p = l + 3;
  
!     ADVANCE_PAST_FILENAME (p);
      filename = (char *) alloca ((size_t) (p - filename_start) + 1);
      strncpy (filename, filename_start, (size_t) (p - filename_start));
***************
*** 1654,1659 ****
      char *filename;
  
!     while (*p != ':')
!       p++;
      filename = (char *) alloca ((size_t) (p - filename_start) + 1);
      strncpy (filename, filename_start, (size_t) (p - filename_start));
--- 1681,1685 ----
      char *filename;
  
!     ADVANCE_PAST_FILENAME (p);
      filename = (char *) alloca ((size_t) (p - filename_start) + 1);
      strncpy (filename, filename_start, (size_t) (p - filename_start));
***************
*** 2382,2386 ****
      char *p = aux_info_base;
  
!     while (*p != ':')
        p++;
      p++;
--- 2408,2414 ----
      char *p = aux_info_base;
  
!     /* have to make sure at least one space is following the colon to make
!        sure the colon is not part of the filename */
!     while (*p != ':' && p[1] != ' ')
        p++;
      p++;
***************
*** 2396,2400 ****
      aux_info_second_line = p;
      aux_info_relocated_name = 0;
!     if (invocation_filename[0] != '/')
        {
  	/* INVOCATION_FILENAME is relative;
--- 2424,2432 ----
      aux_info_second_line = p;
      aux_info_relocated_name = 0;
! #ifdef FILE_NAME_ABSOLUTE_P
!     if (! FILE_NAME_ABSOLUTE_P (invocation_filename))
! #else
!       if (invocation_filename[0] != '/')
! #endif
        {
  	/* INVOCATION_FILENAME is relative;
***************
*** 2485,2489 ****
  
  /* Check an individual filename for a .c suffix.  If the filename has this
!    suffix, rename the file such that its suffix is changed to .C.  This
     function implements the -C option.  */
  
--- 2517,2521 ----
  
  /* Check an individual filename for a .c suffix.  If the filename has this
!    suffix, rename the file such that its suffix is changed to .cc.  This
     function implements the -C option.  */
  
***************
*** 2494,2498 ****
    const char *filename = hp->symbol;
    int last_char_index = strlen (filename) - 1;
!   char *const new_filename = (char *) alloca (strlen (filename) + 1);
  
    /* Note that we don't care here if the given file was converted or not.  It
--- 2526,2530 ----
    const char *filename = hp->symbol;
    int last_char_index = strlen (filename) - 1;
!   char *const new_filename = (char *) alloca (strlen (filename) + 2);
  
    /* Note that we don't care here if the given file was converted or not.  It
***************
*** 2506,2511 ****
  
    strcpy (new_filename, filename);
!   new_filename[last_char_index] = 'C';
  
    if (my_link (filename, new_filename) == -1)
      {
--- 2538,2560 ----
  
    strcpy (new_filename, filename);
!   strcat (new_filename + last_char_index, "cc");
!   
!   /* use rename(2) if available !! Update config files to include HAVE_rename
!      if the used OS provides it. Advantages are: it's atomic, it's one
!      system call compared to two. */
  
+ #ifdef HAVE_rename
+   /* if the mentioned systems (POSIX 1003.1-1988) have rename(2), this has
+      to be changed to `my_rename' as well. */
+ 
+   if (rename (filename, new_filename) == -1)
+     {
+       fprintf (stderr, "%s: warning: can't rename file `%s' to `%s': %s\n",
+ 	       pname, shortpath (NULL, filename),
+ 	       shortpath (NULL, new_filename), my_strerror(errno));
+       errors++;
+       return;
+     }
+ #else
    if (my_link (filename, new_filename) == -1)
      {
***************
*** 2524,2527 ****
--- 2573,2577 ----
        return;
      }
+ #endif
  }
  
diff -2rcN /usr/goinfre/gcc-2.7.0/real.c gcc-2.7.0-amiga/real.c
*** /usr/goinfre/gcc-2.7.0/real.c	Thu Jun 15 12:57:39 1995
--- gcc-2.7.0-amiga/real.c	Fri Jun 23 11:52:31 1995
***************
*** 4422,4428 ****
--- 4422,4434 ----
      {
        if (sign)
+ #ifdef __amigados__
  	sprintf (wstring, " -Infinity ");
        else
  	sprintf (wstring, " Infinity ");
+ #else
+ 	sprintf (wstring, " -NaN ");
+       else
+ 	sprintf (wstring, " NaN ");
+ #endif
        goto bxit;
      }
diff -2rcN /usr/goinfre/gcc-2.7.0/rtl.def gcc-2.7.0-amiga/rtl.def
*** /usr/goinfre/gcc-2.7.0/rtl.def	Thu Jun 15 13:03:32 1995
--- gcc-2.7.0-amiga/rtl.def	Fri Jun 23 11:52:32 1995
***************
*** 705,710 ****
--- 705,712 ----
  DEF_RTL_EXPR(FLOAT_TRUNCATE, "float_truncate", "e", '1')
  
+ #ifndef SUPPRESS_RTL_FLOAT_DEFINITION	/* Amiga hack - avoid clash with <exec/types.h> typedef */
  /* Conversion of fixed point operand to floating point value.  */
  DEF_RTL_EXPR(FLOAT, "float", "e", '1')
+ #endif
  
  /* With fixed-point machine mode:
diff -2rcN /usr/goinfre/gcc-2.7.0/scan-types.sh gcc-2.7.0-amiga/scan-types.sh
*** /usr/goinfre/gcc-2.7.0/scan-types.sh	Mon Apr 18 08:07:12 1994
--- gcc-2.7.0-amiga/scan-types.sh	Fri Jun 23 11:52:33 1995
***************
*** 1,3 ****
! #! /bin/sh
  # Deduce values of standard ANSI and POSIX types (e.g. size_t, pid_t).
  # Emits macros definitions for these, and some other types.
--- 1,3 ----
! #!/bin/sh
  # Deduce values of standard ANSI and POSIX types (e.g. size_t, pid_t).
  # Emits macros definitions for these, and some other types.
diff -2rcN /usr/goinfre/gcc-2.7.0/toplev.c gcc-2.7.0-amiga/toplev.c
*** /usr/goinfre/gcc-2.7.0/toplev.c	Thu Jun 15 13:09:51 1995
--- gcc-2.7.0-amiga/toplev.c	Sun Jun 25 15:45:16 1995
***************
*** 56,59 ****
--- 56,62 ----
  #include "input.h"
  #include "tree.h"
+ #ifdef __amigados__
+ #define SUPPRESS_RTL_FLOAT_DEFINITION	/* Avoid <exec/types.h> and rtl.def typedef clash for "float" */
+ #endif
  #include "rtl.h"
  #include "flags.h"
***************
*** 142,145 ****
--- 145,156 ----
  static char *decl_name ();
  
+ #ifdef __amigados__
+ /* Phil.B: 03-Oct-94 Flag indicating process priority */
+ static int amiga_priority = -1;
+ static int amiga_old_priority;
+ #include <proto/exec.h>
+ struct Task *amiga_task;
+ #endif /* __amigados__ */
+ 
  /* Name of program invoked, sans directories.  */
  
***************
*** 540,543 ****
--- 551,555 ----
    {"writable-strings", &flag_writable_strings, 1},
    {"peephole", &flag_no_peephole, 0},
+   {"large-baserel", &flag_pic, 4},
    {"force-mem", &flag_force_mem, 1},
    {"force-addr", &flag_force_addr, 1},
***************
*** 558,561 ****
--- 570,574 ----
    {"pic", &flag_pic, 1},
    {"PIC", &flag_pic, 2},
+   {"baserel", &flag_pic, 3},
    {"fast-math", &flag_fast_math, 1},
    {"common", &flag_no_common, 0},
***************
*** 1361,1364 ****
--- 1374,1382 ----
    va_list ap;
  
+ /* PhB 25-Jun-95: restore old process priority before exiting */
+ #ifdef __amigados__
+   SetTaskPri(amiga_task, amiga_old_priority);
+ #endif /* __amigados__ */
+ 
    VA_START (ap, s);
  
***************
*** 1918,1921 ****
--- 1936,1942 ----
       char *input_name;
  {
+ #ifdef FILE_NAME_NONDIRECTORY
+   char *na = FILE_NAME_NONDIRECTORY (input_name);
+ #else
    int len = strlen (input_name);
    char *na = input_name + len;
***************
*** 1928,1931 ****
--- 1949,1953 ----
        na--;
      }
+ #endif
  
  #ifdef ASM_OUTPUT_MAIN_SOURCE_FILENAME
***************
*** 3320,3323 ****
--- 3342,3348 ----
  	 && p[-1] != DIR_SEPARATOR
  #endif
+ #ifdef VOL_SEPARATOR
+ 	 && p[-1] != VOL_SEPARATOR
+ #endif
  	 )
      --p;
***************
*** 3336,3339 ****
--- 3361,3373 ----
  #endif /* RLIMIT_STACK */
  
+ #ifdef __amigados__
+   {
+     char *envstr;
+ 
+     if (envstr = getenv("GCCPRIORITY"))
+       if (((i = atoi(envstr)) > -20) && (i < 20)) amiga_priority = i;
+   }
+ #endif /* __amigados__ */
+ 
    signal (SIGFPE, float_signal);
  
***************
*** 3581,3584 ****
--- 3615,3631 ----
  	  else if (!strcmp (str, "pedantic-errors"))
  	    flag_pedantic_errors = pedantic = 1;
+ #ifdef __amigados__
+ 	  else if (!strcmp (str, "priority"))
+ 	    {
+ 	      char *p = str + 1;
+ 
+ 	      if (*p)
+ 		amiga_priority = atoi (p);
+               if (amiga_priority < -25)
+ 	        amiga_priority = -25;
+               else if (amiga_priority > 25)
+ 	        amiga_priority = 25;
+ 	    }
+ #endif /* __amigados__ */
  	  else if (!strcmp (str, "quiet"))
  	    quiet_flag = 1;
***************
*** 3830,3833 ****
--- 3877,3887 ----
      }
  
+ #ifdef __amigados__
+   Forbid();
+   amiga_task = FindTask(NULL);
+   Permit();
+   amiga_old_priority = SetTaskPri(amiga_task, amiga_priority);
+ #endif /* __amigados__ */
+ 
    /* Initialize for bytecode output.  A good idea to do this as soon as
       possible after the "-f" options have been parsed. */
***************
*** 3916,3920 ****
    compile_file (filename);
  
! #if !defined(OS2) && !defined(VMS) && !defined(_WIN32)
    if (flag_print_mem)
      {
--- 3970,3974 ----
    compile_file (filename);
  
! #if !defined(OS2) && !defined(VMS) && !defined(_WIN32) && !defined (__amigados__)
    if (flag_print_mem)
      {
***************
*** 3934,3938 ****
  #endif /* not USG */
      }
! #endif /* not OS2 and not VMS and not _WIN32 */
  
    if (errorcount)
--- 3988,3998 ----
  #endif /* not USG */
      }
! #endif /* not OS2 and not VMS and not _WIN32 and not __amigados__ */
! 
! /* PhB 25-Jun-95: restore old process priority before exiting */
! #ifdef __amigados__
!   SetTaskPri(amiga_task, amiga_old_priority);
! #endif /* __amigados__ */
! 
  
    if (errorcount)
