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 + #include + #include + #include + #include + + #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 + 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. + + 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//libb/libgcc.a, whereas + # libgcc.a is copied into /gnu/lib/gcc-lib/amigados//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 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. + + 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 + 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 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 + + 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 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 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 + 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)