home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 6 / FreshFish_September1994.bin / bbs / gnu / gcc-2.3.3-diffs.lha / GNU / src / diffs / gcc-2.3.3.diffs
Encoding:
Text File  |  1994-09-07  |  178.2 KB  |  5,884 lines

  1. diff -rc --new-file gcc-2.3.3/Makefile.in /gnu/src/amiga/gcc-2.3.3/Makefile.in
  2. *** gcc-2.3.3/Makefile.in    Fri Dec 25 07:07:58 1992
  3. --- /gnu/src/amiga/gcc-2.3.3/Makefile.in    Sun Feb  6 19:10:21 1994
  4. ***************
  5. *** 58,64 ****
  6.   AR_FLAGS = rc
  7.   SHELL = /bin/sh
  8.   # on sysV, define this as cp.
  9. ! INSTALL = install -c
  10.   # These permit overriding just for certain files.
  11.   INSTALL_PROGRAM = $(INSTALL)
  12.   INSTALL_DATA = $(INSTALL)
  13. --- 58,64 ----
  14.   AR_FLAGS = rc
  15.   SHELL = /bin/sh
  16.   # on sysV, define this as cp.
  17. ! INSTALL = cp
  18.   # These permit overriding just for certain files.
  19.   INSTALL_PROGRAM = $(INSTALL)
  20.   INSTALL_DATA = $(INSTALL)
  21. ***************
  22. *** 133,138 ****
  23. --- 133,145 ----
  24.   # Common prefix for installation directories.
  25.   # NOTE: This directory must exist when you start installation.
  26.   prefix = /usr/local
  27. + # Directory in which to put localized header files. On the systems with
  28. + # gcc as the native cc, `local_prefix' may not be `prefix' which is
  29. + # `/usr'.  Similar considerations apply for toolkits located on non-writable
  30. + # storage, such as CD-ROM, where we need a completely separate place to put
  31. + # local include files.
  32. + # NOTE: local_prefix *should not* default from prefix.
  33. + local_prefix = /usr/local
  34.   # Directory in which to put host dependent programs and libraries
  35.   exec_prefix = $(prefix)
  36.   # Directory in which to put the executable for the command `gcc'
  37. ***************
  38. *** 482,489 ****
  39.       $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o xgcc gcc.o version.o $(LIBS)
  40.   
  41.   # Dump a specs file to make -B./ read these specs over installed ones.
  42. ! specs: xgcc
  43. !     ./xgcc -dumpspecs > specs
  44.   
  45.   # We do want to create an executable named `xgcc', so we can use it to
  46.   # compile libgcc2.a.
  47. --- 489,496 ----
  48.       $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o xgcc gcc.o version.o $(LIBS)
  49.   
  50.   # Dump a specs file to make -B./ read these specs over installed ones.
  51. ! specs: xgcc xgccv
  52. !     ./$(XGCC) -dumpspecs > specs
  53.   
  54.   # We do want to create an executable named `xgcc', so we can use it to
  55.   # compile libgcc2.a.
  56. ***************
  57. *** 659,666 ****
  58.       then (cd tmpcopy; $(AR) x ../$(LIBGCC1));    \
  59.       else true;                    \
  60.       fi
  61. !     (cd tmpcopy; $(AR) x ../$(LIBGCC2))
  62. !     (cd tmpcopy; $(AR) $(AR_FLAGS) ../tmplibgcc.a *.o)
  63.       rm -rf tmpcopy
  64.       -if $(RANLIB_TEST) ; then $(RANLIB) tmplibgcc.a; else true; fi
  65.   # Actually build it in tmplibgcc.a, then rename at end,
  66. --- 666,676 ----
  67.       then (cd tmpcopy; $(AR) x ../$(LIBGCC1));    \
  68.       else true;                    \
  69.       fi
  70. ! # the cd .. make sure there's no lock left on tmpcopy (this is actually a
  71. ! # bug in ixemul.library, but I can't get around it currently because it
  72. ! # involves an OS bug which is beyond my capabilities to fix...)
  73. !     (cd tmpcopy; $(AR) x ../$(LIBGCC2) ; cd ..; /c/wait 2)
  74. !     (cd tmpcopy; $(AR) $(AR_FLAGS) ../tmplibgcc.a *.o; cd ..; /c/wait 2)
  75.       rm -rf tmpcopy
  76.       -if $(RANLIB_TEST) ; then $(RANLIB) tmplibgcc.a; else true; fi
  77.   # Actually build it in tmplibgcc.a, then rename at end,
  78. ***************
  79. *** 677,686 ****
  80.       cd objc; \
  81.       $(MAKE) -f $${srcdir1}/objc/Makefile libobjc.a \
  82.         srcdir=$${srcdir1} tooldir=$(tooldir) AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" \
  83. !       GCC_FOR_TARGET="$${thisdir1}/xgcc -B$${thisdir1}/" \
  84.         GCC_CFLAGS="$(GCC_CFLAGS)"
  85.       -rm -f libobjc.a
  86. !     ln objc/libobjc.a . >/dev/null 2>&1 || cp objc/libobjc.a .
  87.       -if $(RANLIB_TEST) ; then $(RANLIB) libobjc.a; else true; fi
  88.   
  89.   # This is used by objc/Makefile if the user runs that directly.
  90. --- 687,696 ----
  91.       cd objc; \
  92.       $(MAKE) -f $${srcdir1}/objc/Makefile libobjc.a \
  93.         srcdir=$${srcdir1} tooldir=$(tooldir) AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" \
  94. !       GCC_FOR_TARGET="$${thisdir1}/$(XGCC) -B$${thisdir1}/" \
  95.         GCC_CFLAGS="$(GCC_CFLAGS)"
  96.       -rm -f libobjc.a
  97. !     cp objc/libobjc.a . >/dev/null 2>&1 || cp objc/libobjc.a .
  98.       -if $(RANLIB_TEST) ; then $(RANLIB) libobjc.a; else true; fi
  99.   
  100.   # This is used by objc/Makefile if the user runs that directly.
  101. ***************
  102. *** 690,696 ****
  103.       cd objc; \
  104.       $(MAKE) -f $$srcdir1/objc/Makefile libobjc.a \
  105.         srcdir=$$srcdir1 tooldir=$(tooldir) AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" \
  106. !       GCC_FOR_TARGET="$$thisdir1/xgcc -B$$thisdir1/" \
  107.         GCC_CFLAGS="$(GCC_CFLAGS)"
  108.   
  109.   # Compile two additional files that are linked with every program
  110. --- 700,706 ----
  111.       cd objc; \
  112.       $(MAKE) -f $$srcdir1/objc/Makefile libobjc.a \
  113.         srcdir=$$srcdir1 tooldir=$(tooldir) AR="$(AR)" AR_FLAGS="$(AR_FLAGS)" \
  114. !       GCC_FOR_TARGET="$$thisdir1/$(XGCC) -B$$thisdir1/" \
  115.         GCC_CFLAGS="$(GCC_CFLAGS)"
  116.   
  117.   # Compile two additional files that are linked with every program
  118. ***************
  119. *** 772,778 ****
  120.   # To make a configuration always use collect2, set USE_COLLECT2 to ld.
  121.   ld: collect2
  122.       rm -f ld
  123. !     ln collect2 ld
  124.   
  125.   collect2 : collect2.o version.o $(LIBDEPS)
  126.   # Don't try modifying collect2 (aka ld) in place--it might be linking this.
  127. --- 782,788 ----
  128.   # To make a configuration always use collect2, set USE_COLLECT2 to ld.
  129.   ld: collect2
  130.       rm -f ld
  131. !     cp collect2 ld
  132.   
  133.   collect2 : collect2.o version.o $(LIBDEPS)
  134.   # Don't try modifying collect2 (aka ld) in place--it might be linking this.
  135. ***************
  136. *** 1157,1163 ****
  137.   # Making the preprocessor
  138.   cpp: cccp
  139.       -rm -f cpp
  140. !     ln cccp cpp
  141.   cccp: cccp.o cexp.o version.o $(LIBDEPS)
  142.       $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o cccp cccp.o cexp.o version.o $(LIBS)
  143.   cexp.o: $(srcdir)/cexp.c $(CONFIG_H)
  144. --- 1167,1173 ----
  145.   # Making the preprocessor
  146.   cpp: cccp
  147.       -rm -f cpp
  148. !     cp cccp cpp
  149.   cccp: cccp.o cexp.o version.o $(LIBDEPS)
  150.       $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o cccp cccp.o cexp.o version.o $(LIBS)
  151.   cexp.o: $(srcdir)/cexp.c $(CONFIG_H)
  152. ***************
  153. *** 1170,1176 ****
  154.       $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
  155.         -DGCC_INCLUDE_DIR=\"$(libsubdir)/include\" \
  156.         -DGPLUSPLUS_INCLUDE_DIR=\"$(libdir)/g++-include\" \
  157. !       -DLOCAL_INCLUDE_DIR=\"$(prefix)/include\" \
  158.         -DCROSS_INCLUDE_DIR=\"$(libsubdir)/sys-include\" \
  159.         -DTOOLDIR=\"$(tooldir)/\" \
  160.         -c `echo $(srcdir)/cccp.c | sed 's,^\./,,'`
  161. --- 1180,1186 ----
  162.       $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
  163.         -DGCC_INCLUDE_DIR=\"$(libsubdir)/include\" \
  164.         -DGPLUSPLUS_INCLUDE_DIR=\"$(libdir)/g++-include\" \
  165. !       -DLOCAL_INCLUDE_DIR=\"$(local_prefix)/include\" \
  166.         -DCROSS_INCLUDE_DIR=\"$(libsubdir)/sys-include\" \
  167.         -DTOOLDIR=\"$(tooldir)/\" \
  168.         -c `echo $(srcdir)/cccp.c | sed 's,^\./,,'`
  169. ***************
  170. *** 1357,1363 ****
  171.   
  172.   # Copy the files of native compiler into directories where they will be run.
  173.   install-native: install-common install-libgcc $(INSTALL_HEADERS) \
  174. !    install-man
  175.   
  176.   # Copy the files of cross compiler into directories where they will be run.
  177.   install-cross: install-common install-common-headers \
  178. --- 1367,1373 ----
  179.   
  180.   # Copy the files of native compiler into directories where they will be run.
  181.   install-native: install-common install-libgcc $(INSTALL_HEADERS) \
  182. !    install-man $(INSTALL_EXTRA_PARTS)
  183.   
  184.   # Copy the files of cross compiler into directories where they will be run.
  185.   install-cross: install-common install-common-headers \
  186. ***************
  187. *** 1490,1496 ****
  188.         rm -f $(bindir)/gcc; \
  189.         $(INSTALL_PROGRAM) xgcc $(bindir)/gcc; \
  190.         rm -f $(bindir)/gcc-$(target)-1; \
  191. !       ln $(bindir)/gcc $(bindir)/gcc-$(target)-1; \
  192.         mv $(bindir)/gcc-$(target)-1 $(bindir)/gcc-$(target); \
  193.       fi
  194.   # Install protoize if it was compiled.
  195. --- 1500,1506 ----
  196.         rm -f $(bindir)/gcc; \
  197.         $(INSTALL_PROGRAM) xgcc $(bindir)/gcc; \
  198.         rm -f $(bindir)/gcc-$(target)-1; \
  199. !       cp $(bindir)/gcc $(bindir)/gcc-$(target)-1; \
  200.         mv $(bindir)/gcc-$(target)-1 $(bindir)/gcc-$(target); \
  201.       fi
  202.   # Install protoize if it was compiled.
  203. ***************
  204. *** 1707,1723 ****
  205.       mkdir tmp/config
  206.       mkdir tmp/objc
  207.       for file in *[0-9a-zA-Z+]; do \
  208. !       ln $$file tmp > /dev/null 2>&1 || cp $$file tmp; \
  209.       done
  210.       cd config; \
  211.       for file in *[0-9a-zA-Z+]; do \
  212. !       ln $$file ../tmp/config >/dev/null 2>&1 || cp $$file ../tmp/config; \
  213.       done
  214.       cd objc; \
  215.       for file in *[0-9a-zA-Z+]; do \
  216. !       ln $$file ../tmp/objc >/dev/null 2>&1 || cp $$file ../tmp/objc; \
  217.       done
  218. !     ln .gdbinit tmp
  219.       mv tmp gcc-$(version)
  220.   # Get rid of everything we don't want in the distribution.
  221.       cd gcc-$(version); make -f Makefile.in extraclean
  222. --- 1717,1733 ----
  223.       mkdir tmp/config
  224.       mkdir tmp/objc
  225.       for file in *[0-9a-zA-Z+]; do \
  226. !       cp $$file tmp > /dev/null 2>&1 || cp $$file tmp; \
  227.       done
  228.       cd config; \
  229.       for file in *[0-9a-zA-Z+]; do \
  230. !       cp $$file ../tmp/config >/dev/null 2>&1 || cp $$file ../tmp/config; \
  231.       done
  232.       cd objc; \
  233.       for file in *[0-9a-zA-Z+]; do \
  234. !       cp $$file ../tmp/objc >/dev/null 2>&1 || cp $$file ../tmp/objc; \
  235.       done
  236. !     cp .gdbinit tmp
  237.       mv tmp gcc-$(version)
  238.   # Get rid of everything we don't want in the distribution.
  239.       cd gcc-$(version); make -f Makefile.in extraclean
  240. ***************
  241. *** 1730,1746 ****
  242.   # in the intended test directory to make it a suitable test directory.
  243.   # THIS IS OBSOLETE; use the -srcdir operand in configure instead. 
  244.   maketest:
  245. !     ln -s $(DIR)/*.[chy] .
  246. !     ln -s $(DIR)/configure .
  247. !     ln -s $(DIR)/*.def .
  248.       -rm -f =*
  249. !     ln -s $(DIR)/.gdbinit .
  250. !     ln -s $(DIR)/$(FIXINCLUDES) .
  251. !     -ln -s $(DIR)/bison.simple .
  252. !     ln -s $(DIR)/config .
  253. !     ln -s $(DIR)/move-if-change .
  254.   # The then and else were swapped to avoid a problem on Ultrix.
  255. !     if [ ! -f Makefile ] ; then ln -s $(DIR)/Makefile .; else false; fi
  256.       -rm tm.h aux-output.c config.h md
  257.       make clean
  258.   # You must then run config to set up for compilation.
  259. --- 1740,1756 ----
  260.   # in the intended test directory to make it a suitable test directory.
  261.   # THIS IS OBSOLETE; use the -srcdir operand in configure instead. 
  262.   maketest:
  263. !     cp $(DIR)/*.[chy] .
  264. !     cp $(DIR)/configure .
  265. !     cp $(DIR)/*.def .
  266.       -rm -f =*
  267. !     cp $(DIR)/.gdbinit .
  268. !     cp $(DIR)/$(FIXINCLUDES) .
  269. !     -cp $(DIR)/bison.simple .
  270. !     cp $(DIR)/config .
  271. !     cp $(DIR)/move-if-change .
  272.   # The then and else were swapped to avoid a problem on Ultrix.
  273. !     if [ ! -f Makefile ] ; then cp $(DIR)/Makefile .; else false; fi
  274.       -rm tm.h aux-output.c config.h md
  275.       make clean
  276.   # You must then run config to set up for compilation.
  277. ***************
  278. *** 1756,1772 ****
  279.   # To prevent `make install' from compiling alloca.o and then relinking cc1
  280.   # because alloca.o is newer, we permit these recursive makes to compile
  281.   # alloca.o.  Then cc1 is newer, so it won't have to be relinked.
  282. !     $(MAKE) CC="stage1/xgcc -Bstage1/" CFLAGS="$(BOOT_CFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
  283.       $(MAKE) stage2
  284. !     $(MAKE) CC="stage2/xgcc -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
  285.   
  286.   bootstrap2: force
  287. !     $(MAKE) CC="stage1/xgcc -Bstage1/" CFLAGS="$(BOOT_CFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
  288.       $(MAKE) stage2
  289. !     $(MAKE) CC="stage2/xgcc -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
  290.   
  291.   bootstrap3: force
  292. !     $(MAKE) CC="stage2/xgcc -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
  293.   
  294.   # Compare the object files in the current directory with those in the
  295.   # stage2 directory.
  296. --- 1766,1782 ----
  297.   # To prevent `make install' from compiling alloca.o and then relinking cc1
  298.   # because alloca.o is newer, we permit these recursive makes to compile
  299.   # alloca.o.  Then cc1 is newer, so it won't have to be relinked.
  300. !     $(MAKE) CC="stage1/$(XGCC) -Bstage1/" CFLAGS="$(BOOT_CFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
  301.       $(MAKE) stage2
  302. !     $(MAKE) CC="stage2/$(XGCC) -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
  303.   
  304.   bootstrap2: force
  305. !     $(MAKE) CC="stage1/$(XGCC) -Bstage1/" CFLAGS="$(BOOT_CFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
  306.       $(MAKE) stage2
  307. !     $(MAKE) CC="stage2/$(XGCC) -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
  308.   
  309.   bootstrap3: force
  310. !     $(MAKE) CC="stage2/$(XGCC) -Bstage2/" CFLAGS="$(BOOT_CFLAGS)" libdir=$(libdir) LANGUAGES="$(LANGUAGES)"
  311.   
  312.   # Compare the object files in the current directory with those in the
  313.   # stage2 directory.
  314. ***************
  315. *** 1789,1816 ****
  316.       -rm -f tmp-foo*
  317.   
  318.   # Copy the object files from a particular stage into a subdirectory.
  319. ! stage1: force
  320.       -if [ -d stage1 ] ; then true ; else mkdir stage1 ; fi
  321.       -mv $(STAGESTUFF) stage1
  322.       -rm -f stage1/libgcc.a
  323.       -cp libgcc.a stage1
  324.       -if $(RANLIB_TEST) ; then $(RANLIB) stage1/libgcc.a; else true; fi
  325.   
  326. ! stage2: force
  327.       -if [ -d stage2 ] ; then true ; else mkdir stage2 ; fi
  328.       -mv $(STAGESTUFF) stage2
  329.       -rm -f stage2/libgcc.a
  330.       -cp libgcc.a stage2
  331.       -if $(RANLIB_TEST) ; then $(RANLIB) stage2/libgcc.a; else true; fi
  332.   
  333. ! stage3: force
  334.       -if [ -d stage3 ] ; then true ; else mkdir stage3 ; fi
  335.       -mv $(STAGESTUFF) stage3
  336.       -rm -f stage3/libgcc.a
  337.       -cp libgcc.a stage3
  338.       -if $(RANLIB_TEST) ; then $(RANLIB) stage3/libgcc.a; else true; fi
  339.   
  340. ! stage4: force
  341.       -if [ -d stage4 ] ; then true ; else mkdir stage4 ; fi
  342.       -mv $(STAGESTUFF) stage4
  343.       -rm -f stage4/libgcc.a
  344. --- 1799,1826 ----
  345.       -rm -f tmp-foo*
  346.   
  347.   # Copy the object files from a particular stage into a subdirectory.
  348. ! stage1: force $(EXTRA_STAGE1_TARGETS)
  349.       -if [ -d stage1 ] ; then true ; else mkdir stage1 ; fi
  350.       -mv $(STAGESTUFF) stage1
  351.       -rm -f stage1/libgcc.a
  352.       -cp libgcc.a stage1
  353.       -if $(RANLIB_TEST) ; then $(RANLIB) stage1/libgcc.a; else true; fi
  354.   
  355. ! stage2: force $(EXTRA_STAGE2_TARGETS)
  356.       -if [ -d stage2 ] ; then true ; else mkdir stage2 ; fi
  357.       -mv $(STAGESTUFF) stage2
  358.       -rm -f stage2/libgcc.a
  359.       -cp libgcc.a stage2
  360.       -if $(RANLIB_TEST) ; then $(RANLIB) stage2/libgcc.a; else true; fi
  361.   
  362. ! stage3: force $(EXTRA_STAGE3_TARGETS)
  363.       -if [ -d stage3 ] ; then true ; else mkdir stage3 ; fi
  364.       -mv $(STAGESTUFF) stage3
  365.       -rm -f stage3/libgcc.a
  366.       -cp libgcc.a stage3
  367.       -if $(RANLIB_TEST) ; then $(RANLIB) stage3/libgcc.a; else true; fi
  368.   
  369. ! stage4: force $(EXTRA_STAGE4_TARGETS)
  370.       -if [ -d stage4 ] ; then true ; else mkdir stage4 ; fi
  371.       -mv $(STAGESTUFF) stage4
  372.       -rm -f stage4/libgcc.a
  373. diff -rc --new-file gcc-2.3.3/Product-Info /gnu/src/amiga/gcc-2.3.3/Product-Info
  374. *** gcc-2.3.3/Product-Info    Thu Jan  1 00:00:00 1970
  375. --- /gnu/src/amiga/gcc-2.3.3/Product-Info    Tue Jul 12 17:12:57 1994
  376. ***************
  377. *** 0 ****
  378. --- 1,22 ----
  379. + .name
  380. + gcc
  381. + .fullname
  382. + GNU C/C++/Objective-C compiler
  383. + .type
  384. + Compiler
  385. + .short
  386. + GNU C/C++/Obj-C compilers
  387. + .description
  388. + The GNU C, C++, and Objective C compilers.  Includes all support for
  389. + compiling C, C++ and Objective C, including a run-time library for
  390. + Objective C.
  391. + .version
  392. + 2.3.3
  393. + .author
  394. + Free Software Foundation
  395. + .requirements
  396. + Amiga binaries require ixemul.library.
  397. + .distribution
  398. + GNU Public License
  399. + .described-by
  400. + Fred Fish (fnf@amigalib.com)
  401. diff -rc --new-file gcc-2.3.3/c-parse.c /gnu/src/amiga/gcc-2.3.3/c-parse.c
  402. *** gcc-2.3.3/c-parse.c    Wed Oct  7 20:19:19 1992
  403. --- /gnu/src/amiga/gcc-2.3.3/c-parse.c    Sun Feb  6 19:09:24 1994
  404. ***************
  405. *** 1,5 ****
  406.   
  407. ! /*  A Bison parser, made from c-parse.y  */
  408.   
  409.   #define YYBISON 1  /* Identify Bison output.  */
  410.   
  411. --- 1,6 ----
  412.   
  413. ! /*  A Bison parser, made from c-parse.y with Bison version GNU Bison version 1.22
  414. !   */
  415.   
  416.   #define YYBISON 1  /* Identify Bison output.  */
  417.   
  418. ***************
  419. *** 132,140 ****
  420. --- 133,143 ----
  421.   
  422.   #include <stdio.h>
  423.   
  424. + #ifndef __cplusplus
  425.   #ifndef __STDC__
  426.   #define const
  427.   #endif
  428. + #endif
  429.   
  430.   
  431.   
  432. ***************
  433. *** 178,183 ****
  434. --- 181,187 ----
  435.       60,    61,    62,    63,    64,    65,    66,    67
  436.   };
  437.   
  438. + #if YYDEBUG != 0
  439.   static const short yyprhs[] = {     0,
  440.        0,     1,     3,     4,     7,     8,    12,    14,    16,    22,
  441.       26,    31,    36,    39,    42,    45,    48,    50,    51,    52,
  442. ***************
  443. *** 333,338 ****
  444. --- 337,344 ----
  445.       89,     0
  446.   };
  447.   
  448. + #endif
  449.   #if YYDEBUG != 0
  450.   static const short yyrline[] = { 0,
  451.      209,   213,   222,   224,   224,   225,   227,   229,   230,   240,
  452. ***************
  453. *** 350,375 ****
  454.      742,   745,   758,   761,   765,   767,   775,   776,   777,   781,
  455.      783,   789,   790,   791,   794,   796,   799,   801,   804,   807,
  456.      813,   818,   820,   826,   831,   833,   840,   843,   848,   850,
  457. !    855,   860,   870,   881,   899,   901,   905,   907,   909,   915,
  458. !    918,   921,   925,   930,   932,   934,   936,   940,   957,   961,
  459. !    978,   985,   987,   992,   995,  1000,  1002,  1004,  1006,  1014,
  460. !   1020,  1022,  1024,  1026,  1032,  1038,  1040,  1042,  1044,  1046,
  461. !   1049,  1054,  1058,  1061,  1063,  1065,  1067,  1070,  1072,  1075,
  462. !   1078,  1081,  1084,  1088,  1090,  1093,  1095,  1099,  1102,  1107,
  463. !   1109,  1111,  1125,  1131,  1136,  1141,  1146,  1150,  1152,  1156,
  464. !   1160,  1164,  1173,  1175,  1180,  1183,  1187,  1190,  1194,  1197,
  465. !   1200,  1203,  1207,  1210,  1214,  1218,  1220,  1222,  1224,  1226,
  466. !   1228,  1230,  1232,  1240,  1242,  1243,  1246,  1248,  1251,  1254,
  467. !   1265,  1267,  1272,  1274,  1277,  1291,  1294,  1297,  1299,  1304,
  468. !   1309,  1317,  1322,  1325,  1338,  1346,  1350,  1354,  1358,  1364,
  469. !   1368,  1373,  1375,  1386,  1389,  1394,  1399,  1402,  1410,  1412,
  470. !   1422,  1432,  1433,  1441,  1444,  1456,  1460,  1476,  1483,  1492,
  471. !   1494,  1499,  1504,  1508,  1512,  1523,  1530,  1537,  1544,  1555,
  472. !   1559,  1566,  1590,  1618,  1633,  1644,  1647,  1651,  1654,  1659,
  473. !   1661,  1664,  1666,  1670,  1675,  1678,  1684,  1689,  1694,  1696,
  474. !   1705,  1706,  1712,  1714,  1719,  1721,  1725,  1728,  1734,  1737,
  475. !   1739,  1741,  1743,  1750,  1755,  1760,  1762,  1771,  1774,  1779,
  476. !   1782
  477.   };
  478.   
  479.   static const char * const yytname[] = {   "$","error","$illegal.","IDENTIFIER",
  480. --- 356,381 ----
  481.      742,   745,   758,   761,   765,   767,   775,   776,   777,   781,
  482.      783,   789,   790,   791,   794,   796,   799,   801,   804,   807,
  483.      813,   818,   820,   826,   831,   833,   840,   843,   848,   850,
  484. !    855,   867,   877,   888,   906,   908,   912,   914,   916,   922,
  485. !    925,   928,   932,   937,   939,   941,   943,   947,   964,   968,
  486. !    985,   992,   994,   999,  1002,  1007,  1009,  1011,  1013,  1021,
  487. !   1027,  1029,  1031,  1033,  1039,  1045,  1047,  1049,  1051,  1053,
  488. !   1056,  1061,  1065,  1068,  1070,  1072,  1074,  1077,  1079,  1082,
  489. !   1085,  1088,  1091,  1095,  1097,  1100,  1102,  1106,  1109,  1114,
  490. !   1116,  1118,  1132,  1138,  1143,  1148,  1153,  1157,  1159,  1163,
  491. !   1167,  1171,  1180,  1182,  1187,  1190,  1194,  1197,  1201,  1204,
  492. !   1207,  1210,  1214,  1217,  1221,  1225,  1227,  1229,  1231,  1233,
  493. !   1235,  1237,  1239,  1247,  1249,  1250,  1253,  1255,  1258,  1261,
  494. !   1272,  1274,  1279,  1281,  1284,  1298,  1301,  1304,  1306,  1311,
  495. !   1316,  1324,  1329,  1332,  1345,  1353,  1357,  1361,  1365,  1371,
  496. !   1375,  1380,  1382,  1393,  1396,  1401,  1406,  1409,  1417,  1419,
  497. !   1429,  1439,  1440,  1448,  1451,  1463,  1467,  1483,  1490,  1499,
  498. !   1501,  1506,  1511,  1515,  1519,  1530,  1537,  1544,  1551,  1562,
  499. !   1566,  1573,  1597,  1625,  1640,  1651,  1654,  1658,  1661,  1666,
  500. !   1668,  1671,  1673,  1677,  1682,  1685,  1691,  1696,  1701,  1703,
  501. !   1712,  1713,  1719,  1721,  1726,  1728,  1732,  1735,  1741,  1744,
  502. !   1746,  1748,  1750,  1757,  1762,  1767,  1769,  1778,  1781,  1786,
  503. !   1789
  504.   };
  505.   
  506.   static const char * const yytname[] = {   "$","error","$illegal.","IDENTIFIER",
  507. ***************
  508. *** 1078,1084 ****
  509.       50,    51
  510.   };
  511.   /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
  512. ! #line 3 "bison.simple"
  513.   
  514.   /* Skeleton output parser for bison,
  515.      Copyright (C) 1984, 1989, 1990 Bob Corbett and Richard Stallman
  516. --- 1084,1090 ----
  517.       50,    51
  518.   };
  519.   /* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
  520. ! #line 3 "/usr/lib/bison.simple"
  521.   
  522.   /* Skeleton output parser for bison,
  523.      Copyright (C) 1984, 1989, 1990 Bob Corbett and Richard Stallman
  524. ***************
  525. *** 1102,1108 ****
  526.   #ifdef __GNUC__
  527.   #define alloca __builtin_alloca
  528.   #else /* not GNU C.  */
  529. ! #if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__)
  530.   #include <alloca.h>
  531.   #else /* not sparc */
  532.   #if defined (MSDOS) && !defined (__TURBOC__)
  533. --- 1108,1114 ----
  534.   #ifdef __GNUC__
  535.   #define alloca __builtin_alloca
  536.   #else /* not GNU C.  */
  537. ! #if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi)
  538.   #include <alloca.h>
  539.   #else /* not sparc */
  540.   #if defined (MSDOS) && !defined (__TURBOC__)
  541. ***************
  542. *** 1111,1116 ****
  543. --- 1117,1132 ----
  544.   #if defined(_AIX)
  545.   #include <malloc.h>
  546.    #pragma alloca
  547. + #else /* not MSDOS, __TURBOC__, or _AIX */
  548. + #ifdef __hpux
  549. + #ifdef __cplusplus
  550. + extern "C" {
  551. + void *alloca (unsigned int);
  552. + };
  553. + #else /* not __cplusplus */
  554. + void *alloca ();
  555. + #endif /* not __cplusplus */
  556. + #endif /* __hpux */
  557.   #endif /* not _AIX */
  558.   #endif /* not MSDOS, or __TURBOC__ */
  559.   #endif /* not sparc.  */
  560. ***************
  561. *** 1204,1209 ****
  562. --- 1220,1230 ----
  563.   #ifndef YYMAXDEPTH
  564.   #define YYMAXDEPTH 10000
  565.   #endif
  566. + /* Prevent warning if -Wstrict-prototypes.  */
  567. + #ifdef __GNUC__
  568. + int yyparse (void);
  569. + #endif
  570.   
  571.   #if __GNUC__ > 1        /* GNU C and GNU C++ define this.  */
  572.   #define __yy_bcopy(FROM,TO,COUNT)    __builtin_memcpy(TO,FROM,COUNT)
  573. ***************
  574. *** 1244,1250 ****
  575.   #endif
  576.   #endif
  577.   
  578. ! #line 169 "bison.simple"
  579.   int
  580.   yyparse()
  581.   {
  582. --- 1265,1271 ----
  583.   #endif
  584.   #endif
  585.   
  586. ! #line 184 "/usr/lib/bison.simple"
  587.   int
  588.   yyparse()
  589.   {
  590. ***************
  591. *** 1253,1259 ****
  592.     register short *yyssp;
  593.     register YYSTYPE *yyvsp;
  594.     int yyerrstatus;    /*  number of tokens to shift before error messages enabled */
  595. !   int yychar1;        /*  lookahead token as an internal (translated) token number */
  596.   
  597.     short    yyssa[YYINITDEPTH];    /*  the state stack            */
  598.     YYSTYPE yyvsa[YYINITDEPTH];    /*  the semantic value stack        */
  599. --- 1274,1280 ----
  600.     register short *yyssp;
  601.     register YYSTYPE *yyvsp;
  602.     int yyerrstatus;    /*  number of tokens to shift before error messages enabled */
  603. !   int yychar1 = 0;        /*  lookahead token as an internal (translated) token number */
  604.   
  605.     short    yyssa[YYINITDEPTH];    /*  the state stack            */
  606.     YYSTYPE yyvsa[YYINITDEPTH];    /*  the semantic value stack        */
  607. ***************
  608. *** 1300,1306 ****
  609.   
  610.     /* Initialize stack pointers.
  611.        Waste one element of value and location stack
  612. !      so that they stay on the same level as the state stack.  */
  613.   
  614.     yyssp = yyss - 1;
  615.     yyvsp = yyvs;
  616. --- 1321,1328 ----
  617.   
  618.     /* Initialize stack pointers.
  619.        Waste one element of value and location stack
  620. !      so that they stay on the same level as the state stack.
  621. !      The wasted elements are never initialized.  */
  622.   
  623.     yyssp = yyss - 1;
  624.     yyvsp = yyvs;
  625. ***************
  626. *** 1331,1343 ****
  627.   #ifdef yyoverflow
  628.         /* Each stack pointer address is followed by the size of
  629.        the data in use in that stack, in bytes.  */
  630.         yyoverflow("parser stack overflow",
  631.            &yyss1, size * sizeof (*yyssp),
  632.            &yyvs1, size * sizeof (*yyvsp),
  633. - #ifdef YYLSP_NEEDED
  634.            &yyls1, size * sizeof (*yylsp),
  635. - #endif
  636.            &yystacksize);
  637.   
  638.         yyss = yyss1; yyvs = yyvs1;
  639.   #ifdef YYLSP_NEEDED
  640. --- 1353,1372 ----
  641.   #ifdef yyoverflow
  642.         /* Each stack pointer address is followed by the size of
  643.        the data in use in that stack, in bytes.  */
  644. + #ifdef YYLSP_NEEDED
  645. +       /* This used to be a conditional around just the two extra args,
  646. +      but that might be undefined if yyoverflow is a macro.  */
  647.         yyoverflow("parser stack overflow",
  648.            &yyss1, size * sizeof (*yyssp),
  649.            &yyvs1, size * sizeof (*yyvsp),
  650.            &yyls1, size * sizeof (*yylsp),
  651.            &yystacksize);
  652. + #else
  653. +       yyoverflow("parser stack overflow",
  654. +          &yyss1, size * sizeof (*yyssp),
  655. +          &yyvs1, size * sizeof (*yyvsp),
  656. +          &yystacksize);
  657. + #endif
  658.   
  659.         yyss = yyss1; yyvs = yyvs1;
  660.   #ifdef YYLSP_NEEDED
  661. ***************
  662. *** 1383,1388 ****
  663. --- 1412,1418 ----
  664.       fprintf(stderr, "Entering state %d\n", yystate);
  665.   #endif
  666.   
  667. +   goto yybackup;
  668.    yybackup:
  669.   
  670.   /* Do appropriate processing given the current state.  */
  671. ***************
  672. *** 1497,1503 ****
  673.   /* Do a reduction.  yyn is the number of a rule to reduce with.  */
  674.   yyreduce:
  675.     yylen = yyr2[yyn];
  676. !   yyval = yyvsp[1-yylen]; /* implement default value of the action */
  677.   
  678.   #if YYDEBUG != 0
  679.     if (yydebug)
  680. --- 1527,1534 ----
  681.   /* Do a reduction.  yyn is the number of a rule to reduce with.  */
  682.   yyreduce:
  683.     yylen = yyr2[yyn];
  684. !   if (yylen > 0)
  685. !     yyval = yyvsp[1-yylen]; /* implement default value of the action */
  686.   
  687.   #if YYDEBUG != 0
  688.     if (yydebug)
  689. ***************
  690. *** 1507,1513 ****
  691.         fprintf (stderr, "Reducing via rule %d (line %d), ",
  692.              yyn, yyrline[yyn]);
  693.   
  694. !       /* Print the symboles being reduced, and their result.  */
  695.         for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
  696.       fprintf (stderr, "%s ", yytname[yyrhs[i]]);
  697.         fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
  698. --- 1538,1544 ----
  699.         fprintf (stderr, "Reducing via rule %d (line %d), ",
  700.              yyn, yyrline[yyn]);
  701.   
  702. !       /* Print the symbols being reduced, and their result.  */
  703.         for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
  704.       fprintf (stderr, "%s ", yytname[yyrhs[i]]);
  705.         fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
  706. ***************
  707. *** 2210,2222 ****
  708.       break;}
  709.   case 151:
  710.   #line 856 "c-parse.y"
  711. ! { if (strcmp (IDENTIFIER_POINTER (yyvsp[0].ttype), "packed"))
  712.           warning ("`%s' attribute directive ignored",
  713.                IDENTIFIER_POINTER (yyvsp[0].ttype));
  714.         yyval.ttype = yyvsp[0].ttype; ;
  715.       break;}
  716.   case 152:
  717. ! #line 861 "c-parse.y"
  718.   { /* If not "mode (m)", then issue warning.  */
  719.         if (strcmp (IDENTIFIER_POINTER (yyvsp[-3].ttype), "mode") != 0)
  720.           {
  721. --- 2241,2260 ----
  722.       break;}
  723.   case 151:
  724.   #line 856 "c-parse.y"
  725. ! {
  726. ! #ifdef HANDLE_ATTRIBUTE0
  727. !       /* give the function a chance to validate further attributes */
  728. !       if (HANDLE_ATTRIBUTE0 (IDENTIFIER_POINTER (yyvsp[0].ttype)) ||
  729. !           strcmp (IDENTIFIER_POINTER (yyvsp[0].ttype), "packed"))
  730. ! #else
  731. !       if (strcmp (IDENTIFIER_POINTER (yyvsp[0].ttype), "packed"))
  732. ! #endif
  733.           warning ("`%s' attribute directive ignored",
  734.                IDENTIFIER_POINTER (yyvsp[0].ttype));
  735.         yyval.ttype = yyvsp[0].ttype; ;
  736.       break;}
  737.   case 152:
  738. ! #line 868 "c-parse.y"
  739.   { /* If not "mode (m)", then issue warning.  */
  740.         if (strcmp (IDENTIFIER_POINTER (yyvsp[-3].ttype), "mode") != 0)
  741.           {
  742. ***************
  743. *** 2228,2234 ****
  744.           yyval.ttype = tree_cons (yyvsp[-3].ttype, yyvsp[-1].ttype, NULL_TREE); ;
  745.       break;}
  746.   case 153:
  747. ! #line 871 "c-parse.y"
  748.   { /* if not "aligned(n)", then issue warning */
  749.         if (strcmp (IDENTIFIER_POINTER (yyvsp[-3].ttype), "aligned") != 0
  750.             || TREE_CODE (yyvsp[-1].ttype) != INTEGER_CST)
  751. --- 2266,2272 ----
  752.           yyval.ttype = tree_cons (yyvsp[-3].ttype, yyvsp[-1].ttype, NULL_TREE); ;
  753.       break;}
  754.   case 153:
  755. ! #line 878 "c-parse.y"
  756.   { /* if not "aligned(n)", then issue warning */
  757.         if (strcmp (IDENTIFIER_POINTER (yyvsp[-3].ttype), "aligned") != 0
  758.             || TREE_CODE (yyvsp[-1].ttype) != INTEGER_CST)
  759. ***************
  760. *** 2241,2247 ****
  761.           yyval.ttype = tree_cons (yyvsp[-3].ttype, yyvsp[-1].ttype, NULL_TREE); ;
  762.       break;}
  763.   case 154:
  764. ! #line 882 "c-parse.y"
  765.   { /* if not "format(...)", then issue warning */
  766.         if (strcmp (IDENTIFIER_POINTER (yyvsp[-7].ttype), "format") != 0
  767.             || TREE_CODE (yyvsp[-3].ttype) != INTEGER_CST
  768. --- 2279,2285 ----
  769.           yyval.ttype = tree_cons (yyvsp[-3].ttype, yyvsp[-1].ttype, NULL_TREE); ;
  770.       break;}
  771.   case 154:
  772. ! #line 889 "c-parse.y"
  773.   { /* if not "format(...)", then issue warning */
  774.         if (strcmp (IDENTIFIER_POINTER (yyvsp[-7].ttype), "format") != 0
  775.             || TREE_CODE (yyvsp[-3].ttype) != INTEGER_CST
  776. ***************
  777. *** 2259,2320 ****
  778.                   NULL_TREE); ;
  779.       break;}
  780.   case 156:
  781. ! #line 902 "c-parse.y"
  782.   { yyval.ttype = build_nt (CONSTRUCTOR, NULL_TREE, NULL_TREE);
  783.             if (pedantic)
  784.               pedwarn ("ANSI C forbids empty initializer braces"); ;
  785.       break;}
  786.   case 157:
  787. ! #line 906 "c-parse.y"
  788.   { yyval.ttype = build_nt (CONSTRUCTOR, NULL_TREE, nreverse (yyvsp[-1].ttype)); ;
  789.       break;}
  790.   case 158:
  791. ! #line 908 "c-parse.y"
  792.   { yyval.ttype = build_nt (CONSTRUCTOR, NULL_TREE, nreverse (yyvsp[-2].ttype)); ;
  793.       break;}
  794.   case 159:
  795. ! #line 910 "c-parse.y"
  796.   { yyval.ttype = NULL_TREE; ;
  797.       break;}
  798.   case 160:
  799. ! #line 917 "c-parse.y"
  800.   { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
  801.       break;}
  802.   case 161:
  803. ! #line 919 "c-parse.y"
  804.   { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype); ;
  805.       break;}
  806.   case 162:
  807. ! #line 922 "c-parse.y"
  808.   { yyval.ttype = build_tree_list (tree_cons (yyvsp[-4].ttype, NULL_TREE,
  809.                              build_tree_list (yyvsp[-2].ttype, NULL_TREE)),
  810.                       yyvsp[0].ttype); ;
  811.       break;}
  812.   case 163:
  813. ! #line 926 "c-parse.y"
  814.   { yyval.ttype = tree_cons (tree_cons (yyvsp[-4].ttype, NULL_TREE,
  815.                            build_tree_list (yyvsp[-2].ttype, NULL_TREE)),
  816.                     yyvsp[0].ttype,
  817.                     yyvsp[-7].ttype); ;
  818.       break;}
  819.   case 164:
  820. ! #line 931 "c-parse.y"
  821.   { yyval.ttype = build_tree_list (yyvsp[-2].ttype, yyvsp[0].ttype); ;
  822.       break;}
  823.   case 165:
  824. ! #line 933 "c-parse.y"
  825.   { yyval.ttype = tree_cons (yyvsp[-2].ttype, yyvsp[0].ttype, yyvsp[-5].ttype); ;
  826.       break;}
  827.   case 166:
  828. ! #line 935 "c-parse.y"
  829.   { yyval.ttype = build_tree_list (yyvsp[-2].ttype, yyvsp[0].ttype); ;
  830.       break;}
  831.   case 167:
  832. ! #line 937 "c-parse.y"
  833.   { yyval.ttype = tree_cons (yyvsp[-2].ttype, yyvsp[0].ttype, yyvsp[-4].ttype); ;
  834.       break;}
  835.   case 168:
  836. ! #line 942 "c-parse.y"
  837.   { push_c_function_context ();
  838.             if (! start_function (current_declspecs, yyvsp[0].ttype, 1))
  839.               {
  840. --- 2297,2358 ----
  841.                   NULL_TREE); ;
  842.       break;}
  843.   case 156:
  844. ! #line 909 "c-parse.y"
  845.   { yyval.ttype = build_nt (CONSTRUCTOR, NULL_TREE, NULL_TREE);
  846.             if (pedantic)
  847.               pedwarn ("ANSI C forbids empty initializer braces"); ;
  848.       break;}
  849.   case 157:
  850. ! #line 913 "c-parse.y"
  851.   { yyval.ttype = build_nt (CONSTRUCTOR, NULL_TREE, nreverse (yyvsp[-1].ttype)); ;
  852.       break;}
  853.   case 158:
  854. ! #line 915 "c-parse.y"
  855.   { yyval.ttype = build_nt (CONSTRUCTOR, NULL_TREE, nreverse (yyvsp[-2].ttype)); ;
  856.       break;}
  857.   case 159:
  858. ! #line 917 "c-parse.y"
  859.   { yyval.ttype = NULL_TREE; ;
  860.       break;}
  861.   case 160:
  862. ! #line 924 "c-parse.y"
  863.   { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
  864.       break;}
  865.   case 161:
  866. ! #line 926 "c-parse.y"
  867.   { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-2].ttype); ;
  868.       break;}
  869.   case 162:
  870. ! #line 929 "c-parse.y"
  871.   { yyval.ttype = build_tree_list (tree_cons (yyvsp[-4].ttype, NULL_TREE,
  872.                              build_tree_list (yyvsp[-2].ttype, NULL_TREE)),
  873.                       yyvsp[0].ttype); ;
  874.       break;}
  875.   case 163:
  876. ! #line 933 "c-parse.y"
  877.   { yyval.ttype = tree_cons (tree_cons (yyvsp[-4].ttype, NULL_TREE,
  878.                            build_tree_list (yyvsp[-2].ttype, NULL_TREE)),
  879.                     yyvsp[0].ttype,
  880.                     yyvsp[-7].ttype); ;
  881.       break;}
  882.   case 164:
  883. ! #line 938 "c-parse.y"
  884.   { yyval.ttype = build_tree_list (yyvsp[-2].ttype, yyvsp[0].ttype); ;
  885.       break;}
  886.   case 165:
  887. ! #line 940 "c-parse.y"
  888.   { yyval.ttype = tree_cons (yyvsp[-2].ttype, yyvsp[0].ttype, yyvsp[-5].ttype); ;
  889.       break;}
  890.   case 166:
  891. ! #line 942 "c-parse.y"
  892.   { yyval.ttype = build_tree_list (yyvsp[-2].ttype, yyvsp[0].ttype); ;
  893.       break;}
  894.   case 167:
  895. ! #line 944 "c-parse.y"
  896.   { yyval.ttype = tree_cons (yyvsp[-2].ttype, yyvsp[0].ttype, yyvsp[-4].ttype); ;
  897.       break;}
  898.   case 168:
  899. ! #line 949 "c-parse.y"
  900.   { push_c_function_context ();
  901.             if (! start_function (current_declspecs, yyvsp[0].ttype, 1))
  902.               {
  903. ***************
  904. *** 2325,2336 ****
  905.             store_parm_decls (); ;
  906.       break;}
  907.   case 169:
  908. ! #line 957 "c-parse.y"
  909.   { finish_function (1);
  910.             pop_c_function_context (); ;
  911.       break;}
  912.   case 170:
  913. ! #line 963 "c-parse.y"
  914.   { push_c_function_context ();
  915.             if (! start_function (current_declspecs, yyvsp[0].ttype, 1))
  916.               {
  917. --- 2363,2374 ----
  918.             store_parm_decls (); ;
  919.       break;}
  920.   case 169:
  921. ! #line 964 "c-parse.y"
  922.   { finish_function (1);
  923.             pop_c_function_context (); ;
  924.       break;}
  925.   case 170:
  926. ! #line 970 "c-parse.y"
  927.   { push_c_function_context ();
  928.             if (! start_function (current_declspecs, yyvsp[0].ttype, 1))
  929.               {
  930. ***************
  931. *** 2341,2622 ****
  932.             store_parm_decls (); ;
  933.       break;}
  934.   case 171:
  935. ! #line 978 "c-parse.y"
  936.   { finish_function (1);
  937.             pop_c_function_context (); ;
  938.       break;}
  939.   case 174:
  940. ! #line 994 "c-parse.y"
  941.   { yyval.ttype = yyvsp[-1].ttype; ;
  942.       break;}
  943.   case 175:
  944. ! #line 996 "c-parse.y"
  945.   { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
  946.       break;}
  947.   case 176:
  948. ! #line 1001 "c-parse.y"
  949.   { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
  950.       break;}
  951.   case 177:
  952. ! #line 1003 "c-parse.y"
  953.   { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
  954.       break;}
  955.   case 178:
  956. ! #line 1005 "c-parse.y"
  957.   { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  958.       break;}
  959.   case 180:
  960. ! #line 1016 "c-parse.y"
  961.   { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
  962.       break;}
  963.   case 181:
  964. ! #line 1021 "c-parse.y"
  965.   { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
  966.       break;}
  967.   case 182:
  968. ! #line 1023 "c-parse.y"
  969.   { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
  970.       break;}
  971.   case 183:
  972. ! #line 1025 "c-parse.y"
  973.   { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  974.       break;}
  975.   case 185:
  976. ! #line 1034 "c-parse.y"
  977.   { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
  978.       break;}
  979.   case 186:
  980. ! #line 1039 "c-parse.y"
  981.   { yyval.ttype = yyvsp[-1].ttype; ;
  982.       break;}
  983.   case 187:
  984. ! #line 1041 "c-parse.y"
  985.   { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  986.       break;}
  987.   case 188:
  988. ! #line 1043 "c-parse.y"
  989.   { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
  990.       break;}
  991.   case 189:
  992. ! #line 1045 "c-parse.y"
  993.   { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
  994.       break;}
  995.   case 191:
  996. ! #line 1051 "c-parse.y"
  997.   { yyval.ttype = start_struct (RECORD_TYPE, yyvsp[-1].ttype);
  998.             /* Start scope of tag before parsing components.  */
  999.           ;
  1000.       break;}
  1001.   case 192:
  1002. ! #line 1055 "c-parse.y"
  1003.   { yyval.ttype = finish_struct (yyvsp[-2].ttype, yyvsp[-1].ttype);
  1004.             /* Really define the structure.  */
  1005.           ;
  1006.       break;}
  1007.   case 193:
  1008. ! #line 1059 "c-parse.y"
  1009.   { yyval.ttype = finish_struct (start_struct (RECORD_TYPE, NULL_TREE),
  1010.                         yyvsp[-1].ttype); ;
  1011.       break;}
  1012.   case 194:
  1013. ! #line 1062 "c-parse.y"
  1014.   { yyval.ttype = xref_tag (RECORD_TYPE, yyvsp[0].ttype); ;
  1015.       break;}
  1016.   case 195:
  1017. ! #line 1064 "c-parse.y"
  1018.   { yyval.ttype = start_struct (UNION_TYPE, yyvsp[-1].ttype); ;
  1019.       break;}
  1020.   case 196:
  1021. ! #line 1066 "c-parse.y"
  1022.   { yyval.ttype = finish_struct (yyvsp[-2].ttype, yyvsp[-1].ttype); ;
  1023.       break;}
  1024.   case 197:
  1025. ! #line 1068 "c-parse.y"
  1026.   { yyval.ttype = finish_struct (start_struct (UNION_TYPE, NULL_TREE),
  1027.                         yyvsp[-1].ttype); ;
  1028.       break;}
  1029.   case 198:
  1030. ! #line 1071 "c-parse.y"
  1031.   { yyval.ttype = xref_tag (UNION_TYPE, yyvsp[0].ttype); ;
  1032.       break;}
  1033.   case 199:
  1034. ! #line 1073 "c-parse.y"
  1035.   { yyvsp[0].itype = suspend_momentary ();
  1036.             yyval.ttype = start_enum (yyvsp[-1].ttype); ;
  1037.       break;}
  1038.   case 200:
  1039. ! #line 1076 "c-parse.y"
  1040.   { yyval.ttype = finish_enum (yyvsp[-3].ttype, nreverse (yyvsp[-2].ttype));
  1041.             resume_momentary (yyvsp[-4].itype); ;
  1042.       break;}
  1043.   case 201:
  1044. ! #line 1079 "c-parse.y"
  1045.   { yyvsp[0].itype = suspend_momentary ();
  1046.             yyval.ttype = start_enum (NULL_TREE); ;
  1047.       break;}
  1048.   case 202:
  1049. ! #line 1082 "c-parse.y"
  1050.   { yyval.ttype = finish_enum (yyvsp[-3].ttype, nreverse (yyvsp[-2].ttype));
  1051.             resume_momentary (yyvsp[-4].itype); ;
  1052.       break;}
  1053.   case 203:
  1054. ! #line 1085 "c-parse.y"
  1055.   { yyval.ttype = xref_tag (ENUMERAL_TYPE, yyvsp[0].ttype); ;
  1056.       break;}
  1057.   case 207:
  1058. ! #line 1096 "c-parse.y"
  1059.   { if (pedantic) pedwarn ("comma at end of enumerator list"); ;
  1060.       break;}
  1061.   case 208:
  1062. ! #line 1101 "c-parse.y"
  1063.   { yyval.ttype = yyvsp[0].ttype; ;
  1064.       break;}
  1065.   case 209:
  1066. ! #line 1103 "c-parse.y"
  1067.   { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype);
  1068.             pedwarn ("no semicolon at end of struct or union"); ;
  1069.       break;}
  1070.   case 210:
  1071. ! #line 1108 "c-parse.y"
  1072.   { yyval.ttype = NULL_TREE; ;
  1073.       break;}
  1074.   case 211:
  1075. ! #line 1110 "c-parse.y"
  1076.   { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[-1].ttype); ;
  1077.       break;}
  1078.   case 212:
  1079. ! #line 1112 "c-parse.y"
  1080.   { if (pedantic)
  1081.               pedwarn ("extra semicolon in struct or union specified"); ;
  1082.       break;}
  1083.   case 213:
  1084. ! #line 1127 "c-parse.y"
  1085.   { yyval.ttype = yyvsp[0].ttype;
  1086.             current_declspecs = TREE_VALUE (declspec_stack);
  1087.             declspec_stack = TREE_CHAIN (declspec_stack);
  1088.             resume_momentary (yyvsp[-1].itype); ;
  1089.       break;}
  1090.   case 214:
  1091. ! #line 1132 "c-parse.y"
  1092.   { if (pedantic)
  1093.               pedwarn ("ANSI C forbids member declarations with no members");
  1094.             shadow_tag(yyvsp[0].ttype);
  1095.             yyval.ttype = NULL_TREE; ;
  1096.       break;}
  1097.   case 215:
  1098. ! #line 1137 "c-parse.y"
  1099.   { yyval.ttype = yyvsp[0].ttype;
  1100.             current_declspecs = TREE_VALUE (declspec_stack);
  1101.             declspec_stack = TREE_CHAIN (declspec_stack);
  1102.             resume_momentary (yyvsp[-1].itype); ;
  1103.       break;}
  1104.   case 216:
  1105. ! #line 1142 "c-parse.y"
  1106.   { if (pedantic)
  1107.               pedwarn ("ANSI C forbids member declarations with no members");
  1108.             shadow_tag(yyvsp[0].ttype);
  1109.             yyval.ttype = NULL_TREE; ;
  1110.       break;}
  1111.   case 217:
  1112. ! #line 1147 "c-parse.y"
  1113.   { yyval.ttype = NULL_TREE; ;
  1114.       break;}
  1115.   case 219:
  1116. ! #line 1153 "c-parse.y"
  1117.   { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
  1118.       break;}
  1119.   case 220:
  1120. ! #line 1158 "c-parse.y"
  1121.   { yyval.ttype = grokfield (yyvsp[-3].filename, yyvsp[-2].lineno, yyvsp[-1].ttype, current_declspecs, NULL_TREE);
  1122.             decl_attributes (yyval.ttype, yyvsp[0].ttype); ;
  1123.       break;}
  1124.   case 221:
  1125. ! #line 1162 "c-parse.y"
  1126.   { yyval.ttype = grokfield (yyvsp[-5].filename, yyvsp[-4].lineno, yyvsp[-3].ttype, current_declspecs, yyvsp[-1].ttype);
  1127.             decl_attributes (yyval.ttype, yyvsp[0].ttype); ;
  1128.       break;}
  1129.   case 222:
  1130. ! #line 1165 "c-parse.y"
  1131.   { yyval.ttype = grokfield (yyvsp[-3].filename, yyvsp[-2].lineno, NULL_TREE, current_declspecs, yyvsp[0].ttype); ;
  1132.       break;}
  1133.   case 224:
  1134. ! #line 1176 "c-parse.y"
  1135.   { yyval.ttype = chainon (yyvsp[0].ttype, yyvsp[-2].ttype); ;
  1136.       break;}
  1137.   case 225:
  1138. ! #line 1182 "c-parse.y"
  1139.   { yyval.ttype = build_enumerator (yyvsp[0].ttype, NULL_TREE); ;
  1140.       break;}
  1141.   case 226:
  1142. ! #line 1184 "c-parse.y"
  1143.   { yyval.ttype = build_enumerator (yyvsp[-2].ttype, yyvsp[0].ttype); ;
  1144.       break;}
  1145.   case 227:
  1146. ! #line 1189 "c-parse.y"
  1147.   { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  1148.       break;}
  1149.   case 228:
  1150. ! #line 1191 "c-parse.y"
  1151.   { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  1152.       break;}
  1153.   case 229:
  1154. ! #line 1196 "c-parse.y"
  1155.   { yyval.ttype = NULL_TREE; ;
  1156.       break;}
  1157.   case 231:
  1158. ! #line 1202 "c-parse.y"
  1159.   { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
  1160.       break;}
  1161.   case 232:
  1162. ! #line 1204 "c-parse.y"
  1163.   { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
  1164.       break;}
  1165.   case 233:
  1166. ! #line 1209 "c-parse.y"
  1167.   { yyval.ttype = NULL_TREE; ;
  1168.       break;}
  1169.   case 234:
  1170. ! #line 1211 "c-parse.y"
  1171.   { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
  1172.       break;}
  1173.   case 235:
  1174. ! #line 1216 "c-parse.y"
  1175.   { yyval.ttype = yyvsp[-1].ttype; ;
  1176.       break;}
  1177.   case 236:
  1178. ! #line 1219 "c-parse.y"
  1179.   { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  1180.       break;}
  1181.   case 237:
  1182. ! #line 1221 "c-parse.y"
  1183.   { yyval.ttype = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE); ;
  1184.       break;}
  1185.   case 238:
  1186. ! #line 1223 "c-parse.y"
  1187.   { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
  1188.       break;}
  1189.   case 239:
  1190. ! #line 1225 "c-parse.y"
  1191.   { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
  1192.       break;}
  1193.   case 240:
  1194. ! #line 1227 "c-parse.y"
  1195.   { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
  1196.       break;}
  1197.   case 241:
  1198. ! #line 1229 "c-parse.y"
  1199.   { yyval.ttype = build_nt (CALL_EXPR, NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
  1200.       break;}
  1201.   case 242:
  1202. ! #line 1231 "c-parse.y"
  1203.   { yyval.ttype = build_nt (ARRAY_REF, NULL_TREE, yyvsp[-1].ttype); ;
  1204.       break;}
  1205.   case 243:
  1206. ! #line 1233 "c-parse.y"
  1207.   { yyval.ttype = build_nt (ARRAY_REF, NULL_TREE, NULL_TREE); ;
  1208.       break;}
  1209.   case 250:
  1210. ! #line 1255 "c-parse.y"
  1211.   { emit_line_note (input_filename, lineno);
  1212.             pushlevel (0);
  1213.             clear_last_expr ();
  1214. --- 2379,2660 ----
  1215.             store_parm_decls (); ;
  1216.       break;}
  1217.   case 171:
  1218. ! #line 985 "c-parse.y"
  1219.   { finish_function (1);
  1220.             pop_c_function_context (); ;
  1221.       break;}
  1222.   case 174:
  1223. ! #line 1001 "c-parse.y"
  1224.   { yyval.ttype = yyvsp[-1].ttype; ;
  1225.       break;}
  1226.   case 175:
  1227. ! #line 1003 "c-parse.y"
  1228.   { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
  1229.       break;}
  1230.   case 176:
  1231. ! #line 1008 "c-parse.y"
  1232.   { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
  1233.       break;}
  1234.   case 177:
  1235. ! #line 1010 "c-parse.y"
  1236.   { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
  1237.       break;}
  1238.   case 178:
  1239. ! #line 1012 "c-parse.y"
  1240.   { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  1241.       break;}
  1242.   case 180:
  1243. ! #line 1023 "c-parse.y"
  1244.   { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
  1245.       break;}
  1246.   case 181:
  1247. ! #line 1028 "c-parse.y"
  1248.   { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
  1249.       break;}
  1250.   case 182:
  1251. ! #line 1030 "c-parse.y"
  1252.   { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
  1253.       break;}
  1254.   case 183:
  1255. ! #line 1032 "c-parse.y"
  1256.   { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  1257.       break;}
  1258.   case 185:
  1259. ! #line 1041 "c-parse.y"
  1260.   { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
  1261.       break;}
  1262.   case 186:
  1263. ! #line 1046 "c-parse.y"
  1264.   { yyval.ttype = yyvsp[-1].ttype; ;
  1265.       break;}
  1266.   case 187:
  1267. ! #line 1048 "c-parse.y"
  1268.   { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  1269.       break;}
  1270.   case 188:
  1271. ! #line 1050 "c-parse.y"
  1272.   { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
  1273.       break;}
  1274.   case 189:
  1275. ! #line 1052 "c-parse.y"
  1276.   { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
  1277.       break;}
  1278.   case 191:
  1279. ! #line 1058 "c-parse.y"
  1280.   { yyval.ttype = start_struct (RECORD_TYPE, yyvsp[-1].ttype);
  1281.             /* Start scope of tag before parsing components.  */
  1282.           ;
  1283.       break;}
  1284.   case 192:
  1285. ! #line 1062 "c-parse.y"
  1286.   { yyval.ttype = finish_struct (yyvsp[-2].ttype, yyvsp[-1].ttype);
  1287.             /* Really define the structure.  */
  1288.           ;
  1289.       break;}
  1290.   case 193:
  1291. ! #line 1066 "c-parse.y"
  1292.   { yyval.ttype = finish_struct (start_struct (RECORD_TYPE, NULL_TREE),
  1293.                         yyvsp[-1].ttype); ;
  1294.       break;}
  1295.   case 194:
  1296. ! #line 1069 "c-parse.y"
  1297.   { yyval.ttype = xref_tag (RECORD_TYPE, yyvsp[0].ttype); ;
  1298.       break;}
  1299.   case 195:
  1300. ! #line 1071 "c-parse.y"
  1301.   { yyval.ttype = start_struct (UNION_TYPE, yyvsp[-1].ttype); ;
  1302.       break;}
  1303.   case 196:
  1304. ! #line 1073 "c-parse.y"
  1305.   { yyval.ttype = finish_struct (yyvsp[-2].ttype, yyvsp[-1].ttype); ;
  1306.       break;}
  1307.   case 197:
  1308. ! #line 1075 "c-parse.y"
  1309.   { yyval.ttype = finish_struct (start_struct (UNION_TYPE, NULL_TREE),
  1310.                         yyvsp[-1].ttype); ;
  1311.       break;}
  1312.   case 198:
  1313. ! #line 1078 "c-parse.y"
  1314.   { yyval.ttype = xref_tag (UNION_TYPE, yyvsp[0].ttype); ;
  1315.       break;}
  1316.   case 199:
  1317. ! #line 1080 "c-parse.y"
  1318.   { yyvsp[0].itype = suspend_momentary ();
  1319.             yyval.ttype = start_enum (yyvsp[-1].ttype); ;
  1320.       break;}
  1321.   case 200:
  1322. ! #line 1083 "c-parse.y"
  1323.   { yyval.ttype = finish_enum (yyvsp[-3].ttype, nreverse (yyvsp[-2].ttype));
  1324.             resume_momentary (yyvsp[-4].itype); ;
  1325.       break;}
  1326.   case 201:
  1327. ! #line 1086 "c-parse.y"
  1328.   { yyvsp[0].itype = suspend_momentary ();
  1329.             yyval.ttype = start_enum (NULL_TREE); ;
  1330.       break;}
  1331.   case 202:
  1332. ! #line 1089 "c-parse.y"
  1333.   { yyval.ttype = finish_enum (yyvsp[-3].ttype, nreverse (yyvsp[-2].ttype));
  1334.             resume_momentary (yyvsp[-4].itype); ;
  1335.       break;}
  1336.   case 203:
  1337. ! #line 1092 "c-parse.y"
  1338.   { yyval.ttype = xref_tag (ENUMERAL_TYPE, yyvsp[0].ttype); ;
  1339.       break;}
  1340.   case 207:
  1341. ! #line 1103 "c-parse.y"
  1342.   { if (pedantic) pedwarn ("comma at end of enumerator list"); ;
  1343.       break;}
  1344.   case 208:
  1345. ! #line 1108 "c-parse.y"
  1346.   { yyval.ttype = yyvsp[0].ttype; ;
  1347.       break;}
  1348.   case 209:
  1349. ! #line 1110 "c-parse.y"
  1350.   { yyval.ttype = chainon (yyvsp[-1].ttype, yyvsp[0].ttype);
  1351.             pedwarn ("no semicolon at end of struct or union"); ;
  1352.       break;}
  1353.   case 210:
  1354. ! #line 1115 "c-parse.y"
  1355.   { yyval.ttype = NULL_TREE; ;
  1356.       break;}
  1357.   case 211:
  1358. ! #line 1117 "c-parse.y"
  1359.   { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[-1].ttype); ;
  1360.       break;}
  1361.   case 212:
  1362. ! #line 1119 "c-parse.y"
  1363.   { if (pedantic)
  1364.               pedwarn ("extra semicolon in struct or union specified"); ;
  1365.       break;}
  1366.   case 213:
  1367. ! #line 1134 "c-parse.y"
  1368.   { yyval.ttype = yyvsp[0].ttype;
  1369.             current_declspecs = TREE_VALUE (declspec_stack);
  1370.             declspec_stack = TREE_CHAIN (declspec_stack);
  1371.             resume_momentary (yyvsp[-1].itype); ;
  1372.       break;}
  1373.   case 214:
  1374. ! #line 1139 "c-parse.y"
  1375.   { if (pedantic)
  1376.               pedwarn ("ANSI C forbids member declarations with no members");
  1377.             shadow_tag(yyvsp[0].ttype);
  1378.             yyval.ttype = NULL_TREE; ;
  1379.       break;}
  1380.   case 215:
  1381. ! #line 1144 "c-parse.y"
  1382.   { yyval.ttype = yyvsp[0].ttype;
  1383.             current_declspecs = TREE_VALUE (declspec_stack);
  1384.             declspec_stack = TREE_CHAIN (declspec_stack);
  1385.             resume_momentary (yyvsp[-1].itype); ;
  1386.       break;}
  1387.   case 216:
  1388. ! #line 1149 "c-parse.y"
  1389.   { if (pedantic)
  1390.               pedwarn ("ANSI C forbids member declarations with no members");
  1391.             shadow_tag(yyvsp[0].ttype);
  1392.             yyval.ttype = NULL_TREE; ;
  1393.       break;}
  1394.   case 217:
  1395. ! #line 1154 "c-parse.y"
  1396.   { yyval.ttype = NULL_TREE; ;
  1397.       break;}
  1398.   case 219:
  1399. ! #line 1160 "c-parse.y"
  1400.   { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
  1401.       break;}
  1402.   case 220:
  1403. ! #line 1165 "c-parse.y"
  1404.   { yyval.ttype = grokfield (yyvsp[-3].filename, yyvsp[-2].lineno, yyvsp[-1].ttype, current_declspecs, NULL_TREE);
  1405.             decl_attributes (yyval.ttype, yyvsp[0].ttype); ;
  1406.       break;}
  1407.   case 221:
  1408. ! #line 1169 "c-parse.y"
  1409.   { yyval.ttype = grokfield (yyvsp[-5].filename, yyvsp[-4].lineno, yyvsp[-3].ttype, current_declspecs, yyvsp[-1].ttype);
  1410.             decl_attributes (yyval.ttype, yyvsp[0].ttype); ;
  1411.       break;}
  1412.   case 222:
  1413. ! #line 1172 "c-parse.y"
  1414.   { yyval.ttype = grokfield (yyvsp[-3].filename, yyvsp[-2].lineno, NULL_TREE, current_declspecs, yyvsp[0].ttype); ;
  1415.       break;}
  1416.   case 224:
  1417. ! #line 1183 "c-parse.y"
  1418.   { yyval.ttype = chainon (yyvsp[0].ttype, yyvsp[-2].ttype); ;
  1419.       break;}
  1420.   case 225:
  1421. ! #line 1189 "c-parse.y"
  1422.   { yyval.ttype = build_enumerator (yyvsp[0].ttype, NULL_TREE); ;
  1423.       break;}
  1424.   case 226:
  1425. ! #line 1191 "c-parse.y"
  1426.   { yyval.ttype = build_enumerator (yyvsp[-2].ttype, yyvsp[0].ttype); ;
  1427.       break;}
  1428.   case 227:
  1429. ! #line 1196 "c-parse.y"
  1430.   { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  1431.       break;}
  1432.   case 228:
  1433. ! #line 1198 "c-parse.y"
  1434.   { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  1435.       break;}
  1436.   case 229:
  1437. ! #line 1203 "c-parse.y"
  1438.   { yyval.ttype = NULL_TREE; ;
  1439.       break;}
  1440.   case 231:
  1441. ! #line 1209 "c-parse.y"
  1442.   { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
  1443.       break;}
  1444.   case 232:
  1445. ! #line 1211 "c-parse.y"
  1446.   { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
  1447.       break;}
  1448.   case 233:
  1449. ! #line 1216 "c-parse.y"
  1450.   { yyval.ttype = NULL_TREE; ;
  1451.       break;}
  1452.   case 234:
  1453. ! #line 1218 "c-parse.y"
  1454.   { yyval.ttype = tree_cons (NULL_TREE, yyvsp[0].ttype, yyvsp[-1].ttype); ;
  1455.       break;}
  1456.   case 235:
  1457. ! #line 1223 "c-parse.y"
  1458.   { yyval.ttype = yyvsp[-1].ttype; ;
  1459.       break;}
  1460.   case 236:
  1461. ! #line 1226 "c-parse.y"
  1462.   { yyval.ttype = make_pointer_declarator (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  1463.       break;}
  1464.   case 237:
  1465. ! #line 1228 "c-parse.y"
  1466.   { yyval.ttype = make_pointer_declarator (yyvsp[0].ttype, NULL_TREE); ;
  1467.       break;}
  1468.   case 238:
  1469. ! #line 1230 "c-parse.y"
  1470.   { yyval.ttype = build_nt (CALL_EXPR, yyvsp[-2].ttype, yyvsp[0].ttype, NULL_TREE); ;
  1471.       break;}
  1472.   case 239:
  1473. ! #line 1232 "c-parse.y"
  1474.   { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-3].ttype, yyvsp[-1].ttype); ;
  1475.       break;}
  1476.   case 240:
  1477. ! #line 1234 "c-parse.y"
  1478.   { yyval.ttype = build_nt (ARRAY_REF, yyvsp[-2].ttype, NULL_TREE); ;
  1479.       break;}
  1480.   case 241:
  1481. ! #line 1236 "c-parse.y"
  1482.   { yyval.ttype = build_nt (CALL_EXPR, NULL_TREE, yyvsp[0].ttype, NULL_TREE); ;
  1483.       break;}
  1484.   case 242:
  1485. ! #line 1238 "c-parse.y"
  1486.   { yyval.ttype = build_nt (ARRAY_REF, NULL_TREE, yyvsp[-1].ttype); ;
  1487.       break;}
  1488.   case 243:
  1489. ! #line 1240 "c-parse.y"
  1490.   { yyval.ttype = build_nt (ARRAY_REF, NULL_TREE, NULL_TREE); ;
  1491.       break;}
  1492.   case 250:
  1493. ! #line 1262 "c-parse.y"
  1494.   { emit_line_note (input_filename, lineno);
  1495.             pushlevel (0);
  1496.             clear_last_expr ();
  1497. ***************
  1498. *** 2625,2636 ****
  1499.           ;
  1500.       break;}
  1501.   case 252:
  1502. ! #line 1268 "c-parse.y"
  1503.   { if (pedantic)
  1504.               pedwarn ("ANSI C forbids label declarations"); ;
  1505.       break;}
  1506.   case 255:
  1507. ! #line 1279 "c-parse.y"
  1508.   { tree link;
  1509.             for (link = yyvsp[-1].ttype; link; link = TREE_CHAIN (link))
  1510.               {
  1511. --- 2663,2674 ----
  1512.           ;
  1513.       break;}
  1514.   case 252:
  1515. ! #line 1275 "c-parse.y"
  1516.   { if (pedantic)
  1517.               pedwarn ("ANSI C forbids label declarations"); ;
  1518.       break;}
  1519.   case 255:
  1520. ! #line 1286 "c-parse.y"
  1521.   { tree link;
  1522.             for (link = yyvsp[-1].ttype; link; link = TREE_CHAIN (link))
  1523.               {
  1524. ***************
  1525. *** 2641,2676 ****
  1526.           ;
  1527.       break;}
  1528.   case 256:
  1529. ! #line 1293 "c-parse.y"
  1530.   {;
  1531.       break;}
  1532.   case 258:
  1533. ! #line 1298 "c-parse.y"
  1534.   { yyval.ttype = convert (void_type_node, integer_zero_node); ;
  1535.       break;}
  1536.   case 259:
  1537. ! #line 1300 "c-parse.y"
  1538.   { emit_line_note (input_filename, lineno);
  1539.             expand_end_bindings (getdecls (), 1, 0);
  1540.             yyval.ttype = poplevel (1, 1, 0);
  1541.             pop_momentary (); ;
  1542.       break;}
  1543.   case 260:
  1544. ! #line 1305 "c-parse.y"
  1545.   { emit_line_note (input_filename, lineno);
  1546.             expand_end_bindings (getdecls (), kept_level_p (), 0);
  1547.             yyval.ttype = poplevel (kept_level_p (), 0, 0);
  1548.             pop_momentary (); ;
  1549.       break;}
  1550.   case 261:
  1551. ! #line 1310 "c-parse.y"
  1552.   { emit_line_note (input_filename, lineno);
  1553.             expand_end_bindings (getdecls (), kept_level_p (), 0);
  1554.             yyval.ttype = poplevel (kept_level_p (), 0, 0);
  1555.             pop_momentary (); ;
  1556.       break;}
  1557.   case 264:
  1558. ! #line 1327 "c-parse.y"
  1559.   { emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno);
  1560.             expand_start_cond (truthvalue_conversion (yyvsp[-1].ttype), 0);
  1561.             yyvsp[-3].itype = stmt_count;
  1562. --- 2679,2714 ----
  1563.           ;
  1564.       break;}
  1565.   case 256:
  1566. ! #line 1300 "c-parse.y"
  1567.   {;
  1568.       break;}
  1569.   case 258:
  1570. ! #line 1305 "c-parse.y"
  1571.   { yyval.ttype = convert (void_type_node, integer_zero_node); ;
  1572.       break;}
  1573.   case 259:
  1574. ! #line 1307 "c-parse.y"
  1575.   { emit_line_note (input_filename, lineno);
  1576.             expand_end_bindings (getdecls (), 1, 0);
  1577.             yyval.ttype = poplevel (1, 1, 0);
  1578.             pop_momentary (); ;
  1579.       break;}
  1580.   case 260:
  1581. ! #line 1312 "c-parse.y"
  1582.   { emit_line_note (input_filename, lineno);
  1583.             expand_end_bindings (getdecls (), kept_level_p (), 0);
  1584.             yyval.ttype = poplevel (kept_level_p (), 0, 0);
  1585.             pop_momentary (); ;
  1586.       break;}
  1587.   case 261:
  1588. ! #line 1317 "c-parse.y"
  1589.   { emit_line_note (input_filename, lineno);
  1590.             expand_end_bindings (getdecls (), kept_level_p (), 0);
  1591.             yyval.ttype = poplevel (kept_level_p (), 0, 0);
  1592.             pop_momentary (); ;
  1593.       break;}
  1594.   case 264:
  1595. ! #line 1334 "c-parse.y"
  1596.   { emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno);
  1597.             expand_start_cond (truthvalue_conversion (yyvsp[-1].ttype), 0);
  1598.             yyvsp[-3].itype = stmt_count;
  1599. ***************
  1600. *** 2679,2685 ****
  1601.             position_after_white_space (); ;
  1602.       break;}
  1603.   case 265:
  1604. ! #line 1340 "c-parse.y"
  1605.   { stmt_count++;
  1606.             emit_line_note (yyvsp[-2].filename, yyvsp[-1].lineno);
  1607.             /* See comment in `while' alternative, above.  */
  1608. --- 2717,2723 ----
  1609.             position_after_white_space (); ;
  1610.       break;}
  1611.   case 265:
  1612. ! #line 1347 "c-parse.y"
  1613.   { stmt_count++;
  1614.             emit_line_note (yyvsp[-2].filename, yyvsp[-1].lineno);
  1615.             /* See comment in `while' alternative, above.  */
  1616. ***************
  1617. *** 2688,2718 ****
  1618.             position_after_white_space (); ;
  1619.       break;}
  1620.   case 266:
  1621. ! #line 1347 "c-parse.y"
  1622.   { expand_loop_continue_here (); ;
  1623.       break;}
  1624.   case 267:
  1625. ! #line 1351 "c-parse.y"
  1626.   { yyval.filename = input_filename; ;
  1627.       break;}
  1628.   case 268:
  1629. ! #line 1355 "c-parse.y"
  1630.   { yyval.lineno = lineno; ;
  1631.       break;}
  1632.   case 269:
  1633. ! #line 1360 "c-parse.y"
  1634.   { ;
  1635.       break;}
  1636.   case 270:
  1637. ! #line 1365 "c-parse.y"
  1638.   { ;
  1639.       break;}
  1640.   case 271:
  1641. ! #line 1370 "c-parse.y"
  1642.   { ;
  1643.       break;}
  1644.   case 273:
  1645. ! #line 1376 "c-parse.y"
  1646.   { int next;
  1647.             position_after_white_space ();
  1648.             next = getc (finput);
  1649. --- 2726,2756 ----
  1650.             position_after_white_space (); ;
  1651.       break;}
  1652.   case 266:
  1653. ! #line 1354 "c-parse.y"
  1654.   { expand_loop_continue_here (); ;
  1655.       break;}
  1656.   case 267:
  1657. ! #line 1358 "c-parse.y"
  1658.   { yyval.filename = input_filename; ;
  1659.       break;}
  1660.   case 268:
  1661. ! #line 1362 "c-parse.y"
  1662.   { yyval.lineno = lineno; ;
  1663.       break;}
  1664.   case 269:
  1665. ! #line 1367 "c-parse.y"
  1666.   { ;
  1667.       break;}
  1668.   case 270:
  1669. ! #line 1372 "c-parse.y"
  1670.   { ;
  1671.       break;}
  1672.   case 271:
  1673. ! #line 1377 "c-parse.y"
  1674.   { ;
  1675.       break;}
  1676.   case 273:
  1677. ! #line 1383 "c-parse.y"
  1678.   { int next;
  1679.             position_after_white_space ();
  1680.             next = getc (finput);
  1681. ***************
  1682. *** 2722,2762 ****
  1683.           ;
  1684.       break;}
  1685.   case 274:
  1686. ! #line 1388 "c-parse.y"
  1687.   { stmt_count++; ;
  1688.       break;}
  1689.   case 275:
  1690. ! #line 1390 "c-parse.y"
  1691.   { stmt_count++;
  1692.             emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
  1693.             c_expand_expr_stmt (yyvsp[-1].ttype);
  1694.             clear_momentary (); ;
  1695.       break;}
  1696.   case 276:
  1697. ! #line 1395 "c-parse.y"
  1698.   { expand_start_else ();
  1699.             yyvsp[-1].itype = stmt_count;
  1700.             position_after_white_space (); ;
  1701.       break;}
  1702.   case 277:
  1703. ! #line 1399 "c-parse.y"
  1704.   { expand_end_cond ();
  1705.             if (extra_warnings && stmt_count == yyvsp[-3].itype)
  1706.               warning ("empty body in an else-statement"); ;
  1707.       break;}
  1708.   case 278:
  1709. ! #line 1403 "c-parse.y"
  1710.   { expand_end_cond ();
  1711.             if (extra_warnings && stmt_count == yyvsp[0].itype)
  1712.               warning_with_file_and_line (if_stmt_file, if_stmt_line,
  1713.                           "empty body in an if-statement"); ;
  1714.       break;}
  1715.   case 279:
  1716. ! #line 1411 "c-parse.y"
  1717.   { expand_end_cond (); ;
  1718.       break;}
  1719.   case 280:
  1720. ! #line 1413 "c-parse.y"
  1721.   { stmt_count++;
  1722.             emit_line_note (yyvsp[-2].filename, yyvsp[-1].lineno);
  1723.             /* The emit_nop used to come before emit_line_note,
  1724. --- 2760,2800 ----
  1725.           ;
  1726.       break;}
  1727.   case 274:
  1728. ! #line 1395 "c-parse.y"
  1729.   { stmt_count++; ;
  1730.       break;}
  1731.   case 275:
  1732. ! #line 1397 "c-parse.y"
  1733.   { stmt_count++;
  1734.             emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
  1735.             c_expand_expr_stmt (yyvsp[-1].ttype);
  1736.             clear_momentary (); ;
  1737.       break;}
  1738.   case 276:
  1739. ! #line 1402 "c-parse.y"
  1740.   { expand_start_else ();
  1741.             yyvsp[-1].itype = stmt_count;
  1742.             position_after_white_space (); ;
  1743.       break;}
  1744.   case 277:
  1745. ! #line 1406 "c-parse.y"
  1746.   { expand_end_cond ();
  1747.             if (extra_warnings && stmt_count == yyvsp[-3].itype)
  1748.               warning ("empty body in an else-statement"); ;
  1749.       break;}
  1750.   case 278:
  1751. ! #line 1410 "c-parse.y"
  1752.   { expand_end_cond ();
  1753.             if (extra_warnings && stmt_count == yyvsp[0].itype)
  1754.               warning_with_file_and_line (if_stmt_file, if_stmt_line,
  1755.                           "empty body in an if-statement"); ;
  1756.       break;}
  1757.   case 279:
  1758. ! #line 1418 "c-parse.y"
  1759.   { expand_end_cond (); ;
  1760.       break;}
  1761.   case 280:
  1762. ! #line 1420 "c-parse.y"
  1763.   { stmt_count++;
  1764.             emit_line_note (yyvsp[-2].filename, yyvsp[-1].lineno);
  1765.             /* The emit_nop used to come before emit_line_note,
  1766. ***************
  1767. *** 2768,2774 ****
  1768.             emit_nop (); ;
  1769.       break;}
  1770.   case 281:
  1771. ! #line 1423 "c-parse.y"
  1772.   { /* Don't start the loop till we have succeeded
  1773.                in parsing the end test.  This is to make sure
  1774.                that we end every loop we start.  */
  1775. --- 2806,2812 ----
  1776.             emit_nop (); ;
  1777.       break;}
  1778.   case 281:
  1779. ! #line 1430 "c-parse.y"
  1780.   { /* Don't start the loop till we have succeeded
  1781.                in parsing the end test.  This is to make sure
  1782.                that we end every loop we start.  */
  1783. ***************
  1784. *** 2779,2789 ****
  1785.             position_after_white_space (); ;
  1786.       break;}
  1787.   case 282:
  1788. ! #line 1432 "c-parse.y"
  1789.   { expand_end_loop (); ;
  1790.       break;}
  1791.   case 283:
  1792. ! #line 1435 "c-parse.y"
  1793.   { emit_line_note (input_filename, lineno);
  1794.             expand_exit_loop_if_false (NULL_PTR,
  1795.                            truthvalue_conversion (yyvsp[-2].ttype));
  1796. --- 2817,2827 ----
  1797.             position_after_white_space (); ;
  1798.       break;}
  1799.   case 282:
  1800. ! #line 1439 "c-parse.y"
  1801.   { expand_end_loop (); ;
  1802.       break;}
  1803.   case 283:
  1804. ! #line 1442 "c-parse.y"
  1805.   { emit_line_note (input_filename, lineno);
  1806.             expand_exit_loop_if_false (NULL_PTR,
  1807.                            truthvalue_conversion (yyvsp[-2].ttype));
  1808. ***************
  1809. *** 2791,2802 ****
  1810.             clear_momentary (); ;
  1811.       break;}
  1812.   case 284:
  1813. ! #line 1442 "c-parse.y"
  1814.   { expand_end_loop ();
  1815.             clear_momentary (); ;
  1816.       break;}
  1817.   case 285:
  1818. ! #line 1446 "c-parse.y"
  1819.   { stmt_count++;
  1820.             emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno);
  1821.             /* See comment in `while' alternative, above.  */
  1822. --- 2829,2840 ----
  1823.             clear_momentary (); ;
  1824.       break;}
  1825.   case 284:
  1826. ! #line 1449 "c-parse.y"
  1827.   { expand_end_loop ();
  1828.             clear_momentary (); ;
  1829.       break;}
  1830.   case 285:
  1831. ! #line 1453 "c-parse.y"
  1832.   { stmt_count++;
  1833.             emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno);
  1834.             /* See comment in `while' alternative, above.  */
  1835. ***************
  1836. *** 2809,2820 ****
  1837.           ;
  1838.       break;}
  1839.   case 286:
  1840. ! #line 1458 "c-parse.y"
  1841.   { yyvsp[0].lineno = lineno;
  1842.             yyval.filename = input_filename; ;
  1843.       break;}
  1844.   case 287:
  1845. ! #line 1461 "c-parse.y"
  1846.   { 
  1847.             /* Start the loop.  Doing this after parsing
  1848.                all the expressions ensures we will end the loop.  */
  1849. --- 2847,2858 ----
  1850.           ;
  1851.       break;}
  1852.   case 286:
  1853. ! #line 1465 "c-parse.y"
  1854.   { yyvsp[0].lineno = lineno;
  1855.             yyval.filename = input_filename; ;
  1856.       break;}
  1857.   case 287:
  1858. ! #line 1468 "c-parse.y"
  1859.   { 
  1860.             /* Start the loop.  Doing this after parsing
  1861.                all the expressions ensures we will end the loop.  */
  1862. ***************
  1863. *** 2831,2837 ****
  1864.             yyvsp[-2].filename = input_filename; ;
  1865.       break;}
  1866.   case 288:
  1867. ! #line 1476 "c-parse.y"
  1868.   { /* Emit the increment expression, with a line number.  */
  1869.             emit_line_note (yyvsp[-4].filename, yyvsp[-5].lineno);
  1870.             expand_loop_continue_here ();
  1871. --- 2869,2875 ----
  1872.             yyvsp[-2].filename = input_filename; ;
  1873.       break;}
  1874.   case 288:
  1875. ! #line 1483 "c-parse.y"
  1876.   { /* Emit the increment expression, with a line number.  */
  1877.             emit_line_note (yyvsp[-4].filename, yyvsp[-5].lineno);
  1878.             expand_loop_continue_here ();
  1879. ***************
  1880. *** 2841,2847 ****
  1881.             expand_end_loop (); ;
  1882.       break;}
  1883.   case 289:
  1884. ! #line 1484 "c-parse.y"
  1885.   { stmt_count++;
  1886.             emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno);
  1887.             c_expand_start_case (yyvsp[-1].ttype);
  1888. --- 2879,2885 ----
  1889.             expand_end_loop (); ;
  1890.       break;}
  1891.   case 289:
  1892. ! #line 1491 "c-parse.y"
  1893.   { stmt_count++;
  1894.             emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno);
  1895.             c_expand_start_case (yyvsp[-1].ttype);
  1896. ***************
  1897. *** 2851,2888 ****
  1898.             position_after_white_space (); ;
  1899.       break;}
  1900.   case 290:
  1901. ! #line 1492 "c-parse.y"
  1902.   { expand_end_case (yyvsp[-3].ttype);
  1903.             pop_momentary (); ;
  1904.       break;}
  1905.   case 291:
  1906. ! #line 1495 "c-parse.y"
  1907.   { stmt_count++;
  1908.             emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
  1909.             if ( ! expand_exit_something ())
  1910.               error ("break statement not within loop or switch"); ;
  1911.       break;}
  1912.   case 292:
  1913. ! #line 1500 "c-parse.y"
  1914.   { stmt_count++;
  1915.             emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
  1916.             if (! expand_continue_loop (NULL_PTR))
  1917.               error ("continue statement not within a loop"); ;
  1918.       break;}
  1919.   case 293:
  1920. ! #line 1505 "c-parse.y"
  1921.   { stmt_count++;
  1922.             emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
  1923.             c_expand_return (NULL_TREE); ;
  1924.       break;}
  1925.   case 294:
  1926. ! #line 1509 "c-parse.y"
  1927.   { stmt_count++;
  1928.             emit_line_note (yyvsp[-4].filename, yyvsp[-3].lineno);
  1929.             c_expand_return (yyvsp[-1].ttype); ;
  1930.       break;}
  1931.   case 295:
  1932. ! #line 1513 "c-parse.y"
  1933.   { stmt_count++;
  1934.             emit_line_note (yyvsp[-7].filename, yyvsp[-6].lineno);
  1935.             STRIP_NOPS (yyvsp[-2].ttype);
  1936. --- 2889,2926 ----
  1937.             position_after_white_space (); ;
  1938.       break;}
  1939.   case 290:
  1940. ! #line 1499 "c-parse.y"
  1941.   { expand_end_case (yyvsp[-3].ttype);
  1942.             pop_momentary (); ;
  1943.       break;}
  1944.   case 291:
  1945. ! #line 1502 "c-parse.y"
  1946.   { stmt_count++;
  1947.             emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
  1948.             if ( ! expand_exit_something ())
  1949.               error ("break statement not within loop or switch"); ;
  1950.       break;}
  1951.   case 292:
  1952. ! #line 1507 "c-parse.y"
  1953.   { stmt_count++;
  1954.             emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
  1955.             if (! expand_continue_loop (NULL_PTR))
  1956.               error ("continue statement not within a loop"); ;
  1957.       break;}
  1958.   case 293:
  1959. ! #line 1512 "c-parse.y"
  1960.   { stmt_count++;
  1961.             emit_line_note (yyvsp[-3].filename, yyvsp[-2].lineno);
  1962.             c_expand_return (NULL_TREE); ;
  1963.       break;}
  1964.   case 294:
  1965. ! #line 1516 "c-parse.y"
  1966.   { stmt_count++;
  1967.             emit_line_note (yyvsp[-4].filename, yyvsp[-3].lineno);
  1968.             c_expand_return (yyvsp[-1].ttype); ;
  1969.       break;}
  1970.   case 295:
  1971. ! #line 1520 "c-parse.y"
  1972.   { stmt_count++;
  1973.             emit_line_note (yyvsp[-7].filename, yyvsp[-6].lineno);
  1974.             STRIP_NOPS (yyvsp[-2].ttype);
  1975. ***************
  1976. *** 2894,2900 ****
  1977.               error ("argument of `asm' is not a constant string"); ;
  1978.       break;}
  1979.   case 296:
  1980. ! #line 1524 "c-parse.y"
  1981.   { stmt_count++;
  1982.             emit_line_note (yyvsp[-9].filename, yyvsp[-8].lineno);
  1983.             c_expand_asm_operands (yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE, NULL_TREE,
  1984. --- 2932,2938 ----
  1985.               error ("argument of `asm' is not a constant string"); ;
  1986.       break;}
  1987.   case 296:
  1988. ! #line 1531 "c-parse.y"
  1989.   { stmt_count++;
  1990.             emit_line_note (yyvsp[-9].filename, yyvsp[-8].lineno);
  1991.             c_expand_asm_operands (yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE, NULL_TREE,
  1992. ***************
  1993. *** 2902,2908 ****
  1994.                        input_filename, lineno); ;
  1995.       break;}
  1996.   case 297:
  1997. ! #line 1531 "c-parse.y"
  1998.   { stmt_count++;
  1999.             emit_line_note (yyvsp[-11].filename, yyvsp[-10].lineno);
  2000.             c_expand_asm_operands (yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE,
  2001. --- 2940,2946 ----
  2002.                        input_filename, lineno); ;
  2003.       break;}
  2004.   case 297:
  2005. ! #line 1538 "c-parse.y"
  2006.   { stmt_count++;
  2007.             emit_line_note (yyvsp[-11].filename, yyvsp[-10].lineno);
  2008.             c_expand_asm_operands (yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype, NULL_TREE,
  2009. ***************
  2010. *** 2910,2916 ****
  2011.                        input_filename, lineno); ;
  2012.       break;}
  2013.   case 298:
  2014. ! #line 1539 "c-parse.y"
  2015.   { stmt_count++;
  2016.             emit_line_note (yyvsp[-13].filename, yyvsp[-12].lineno);
  2017.             c_expand_asm_operands (yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype,
  2018. --- 2948,2954 ----
  2019.                        input_filename, lineno); ;
  2020.       break;}
  2021.   case 298:
  2022. ! #line 1546 "c-parse.y"
  2023.   { stmt_count++;
  2024.             emit_line_note (yyvsp[-13].filename, yyvsp[-12].lineno);
  2025.             c_expand_asm_operands (yyvsp[-8].ttype, yyvsp[-6].ttype, yyvsp[-4].ttype, yyvsp[-2].ttype,
  2026. ***************
  2027. *** 2918,2924 ****
  2028.                        input_filename, lineno); ;
  2029.       break;}
  2030.   case 299:
  2031. ! #line 1545 "c-parse.y"
  2032.   { tree decl;
  2033.             stmt_count++;
  2034.             emit_line_note (yyvsp[-4].filename, yyvsp[-3].lineno);
  2035. --- 2956,2962 ----
  2036.                        input_filename, lineno); ;
  2037.       break;}
  2038.   case 299:
  2039. ! #line 1552 "c-parse.y"
  2040.   { tree decl;
  2041.             stmt_count++;
  2042.             emit_line_note (yyvsp[-4].filename, yyvsp[-3].lineno);
  2043. ***************
  2044. *** 2931,2943 ****
  2045.           ;
  2046.       break;}
  2047.   case 300:
  2048. ! #line 1556 "c-parse.y"
  2049.   { stmt_count++;
  2050.             emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno);
  2051.             expand_computed_goto (convert (ptr_type_node, yyvsp[-1].ttype)); ;
  2052.       break;}
  2053.   case 302:
  2054. ! #line 1567 "c-parse.y"
  2055.   { register tree value = check_case_value (yyvsp[-1].ttype);
  2056.             register tree label
  2057.               = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
  2058. --- 2969,2981 ----
  2059.           ;
  2060.       break;}
  2061.   case 300:
  2062. ! #line 1563 "c-parse.y"
  2063.   { stmt_count++;
  2064.             emit_line_note (yyvsp[-5].filename, yyvsp[-4].lineno);
  2065.             expand_computed_goto (convert (ptr_type_node, yyvsp[-1].ttype)); ;
  2066.       break;}
  2067.   case 302:
  2068. ! #line 1574 "c-parse.y"
  2069.   { register tree value = check_case_value (yyvsp[-1].ttype);
  2070.             register tree label
  2071.               = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
  2072. ***************
  2073. *** 2963,2969 ****
  2074.             position_after_white_space (); ;
  2075.       break;}
  2076.   case 303:
  2077. ! #line 1591 "c-parse.y"
  2078.   { register tree value1 = check_case_value (yyvsp[-3].ttype);
  2079.             register tree value2 = check_case_value (yyvsp[-1].ttype);
  2080.             register tree label
  2081. --- 3001,3007 ----
  2082.             position_after_white_space (); ;
  2083.       break;}
  2084.   case 303:
  2085. ! #line 1598 "c-parse.y"
  2086.   { register tree value1 = check_case_value (yyvsp[-3].ttype);
  2087.             register tree value2 = check_case_value (yyvsp[-1].ttype);
  2088.             register tree label
  2089. ***************
  2090. *** 2993,2999 ****
  2091.             position_after_white_space (); ;
  2092.       break;}
  2093.   case 304:
  2094. ! #line 1619 "c-parse.y"
  2095.   {
  2096.             tree duplicate;
  2097.             register tree label
  2098. --- 3031,3037 ----
  2099.             position_after_white_space (); ;
  2100.       break;}
  2101.   case 304:
  2102. ! #line 1626 "c-parse.y"
  2103.   {
  2104.             tree duplicate;
  2105.             register tree label
  2106. ***************
  2107. *** 3010,3016 ****
  2108.             position_after_white_space (); ;
  2109.       break;}
  2110.   case 305:
  2111. ! #line 1634 "c-parse.y"
  2112.   { tree label = define_label (input_filename, lineno, yyvsp[-1].ttype);
  2113.             stmt_count++;
  2114.             emit_nop ();
  2115. --- 3048,3054 ----
  2116.             position_after_white_space (); ;
  2117.       break;}
  2118.   case 305:
  2119. ! #line 1641 "c-parse.y"
  2120.   { tree label = define_label (input_filename, lineno, yyvsp[-1].ttype);
  2121.             stmt_count++;
  2122.             emit_nop ();
  2123. ***************
  2124. *** 3019,3069 ****
  2125.             position_after_white_space (); ;
  2126.       break;}
  2127.   case 306:
  2128. ! #line 1646 "c-parse.y"
  2129.   { emit_line_note (input_filename, lineno); ;
  2130.       break;}
  2131.   case 307:
  2132. ! #line 1648 "c-parse.y"
  2133.   { emit_line_note (input_filename, lineno); ;
  2134.       break;}
  2135.   case 308:
  2136. ! #line 1653 "c-parse.y"
  2137.   { yyval.ttype = NULL_TREE; ;
  2138.       break;}
  2139.   case 310:
  2140. ! #line 1660 "c-parse.y"
  2141.   { yyval.ttype = NULL_TREE; ;
  2142.       break;}
  2143.   case 313:
  2144. ! #line 1667 "c-parse.y"
  2145.   { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
  2146.       break;}
  2147.   case 314:
  2148. ! #line 1672 "c-parse.y"
  2149.   { yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
  2150.       break;}
  2151.   case 315:
  2152. ! #line 1677 "c-parse.y"
  2153.   { yyval.ttype = tree_cons (NULL_TREE, combine_strings (yyvsp[0].ttype), NULL_TREE); ;
  2154.       break;}
  2155.   case 316:
  2156. ! #line 1679 "c-parse.y"
  2157.   { yyval.ttype = tree_cons (NULL_TREE, combine_strings (yyvsp[0].ttype), yyvsp[-2].ttype); ;
  2158.       break;}
  2159.   case 317:
  2160. ! #line 1685 "c-parse.y"
  2161.   { pushlevel (0);
  2162.             clear_parm_order ();
  2163.             declare_parm_level (0); ;
  2164.       break;}
  2165.   case 318:
  2166. ! #line 1689 "c-parse.y"
  2167.   { yyval.ttype = yyvsp[0].ttype;
  2168.             parmlist_tags_warning ();
  2169.             poplevel (0, 0, 0); ;
  2170.       break;}
  2171.   case 320:
  2172. ! #line 1697 "c-parse.y"
  2173.   { tree parm;
  2174.             if (pedantic)
  2175.               pedwarn ("ANSI C forbids forward parameter declarations");
  2176. --- 3057,3107 ----
  2177.             position_after_white_space (); ;
  2178.       break;}
  2179.   case 306:
  2180. ! #line 1653 "c-parse.y"
  2181.   { emit_line_note (input_filename, lineno); ;
  2182.       break;}
  2183.   case 307:
  2184. ! #line 1655 "c-parse.y"
  2185.   { emit_line_note (input_filename, lineno); ;
  2186.       break;}
  2187.   case 308:
  2188. ! #line 1660 "c-parse.y"
  2189.   { yyval.ttype = NULL_TREE; ;
  2190.       break;}
  2191.   case 310:
  2192. ! #line 1667 "c-parse.y"
  2193.   { yyval.ttype = NULL_TREE; ;
  2194.       break;}
  2195.   case 313:
  2196. ! #line 1674 "c-parse.y"
  2197.   { yyval.ttype = chainon (yyvsp[-2].ttype, yyvsp[0].ttype); ;
  2198.       break;}
  2199.   case 314:
  2200. ! #line 1679 "c-parse.y"
  2201.   { yyval.ttype = build_tree_list (yyvsp[-3].ttype, yyvsp[-1].ttype); ;
  2202.       break;}
  2203.   case 315:
  2204. ! #line 1684 "c-parse.y"
  2205.   { yyval.ttype = tree_cons (NULL_TREE, combine_strings (yyvsp[0].ttype), NULL_TREE); ;
  2206.       break;}
  2207.   case 316:
  2208. ! #line 1686 "c-parse.y"
  2209.   { yyval.ttype = tree_cons (NULL_TREE, combine_strings (yyvsp[0].ttype), yyvsp[-2].ttype); ;
  2210.       break;}
  2211.   case 317:
  2212. ! #line 1692 "c-parse.y"
  2213.   { pushlevel (0);
  2214.             clear_parm_order ();
  2215.             declare_parm_level (0); ;
  2216.       break;}
  2217.   case 318:
  2218. ! #line 1696 "c-parse.y"
  2219.   { yyval.ttype = yyvsp[0].ttype;
  2220.             parmlist_tags_warning ();
  2221.             poplevel (0, 0, 0); ;
  2222.       break;}
  2223.   case 320:
  2224. ! #line 1704 "c-parse.y"
  2225.   { tree parm;
  2226.             if (pedantic)
  2227.               pedwarn ("ANSI C forbids forward parameter declarations");
  2228. ***************
  2229. *** 3073,3146 ****
  2230.             clear_parm_order (); ;
  2231.       break;}
  2232.   case 321:
  2233. ! #line 1705 "c-parse.y"
  2234.   { yyval.ttype = yyvsp[0].ttype; ;
  2235.       break;}
  2236.   case 322:
  2237. ! #line 1707 "c-parse.y"
  2238.   { yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, NULL_TREE); ;
  2239.       break;}
  2240.   case 323:
  2241. ! #line 1713 "c-parse.y"
  2242.   { yyval.ttype = get_parm_info (0); ;
  2243.       break;}
  2244.   case 324:
  2245. ! #line 1715 "c-parse.y"
  2246.   { yyval.ttype = get_parm_info (0);
  2247.             if (pedantic)
  2248.               pedwarn ("ANSI C requires a named argument before `...'");
  2249.           ;
  2250.       break;}
  2251.   case 325:
  2252. ! #line 1720 "c-parse.y"
  2253.   { yyval.ttype = get_parm_info (1); ;
  2254.       break;}
  2255.   case 326:
  2256. ! #line 1722 "c-parse.y"
  2257.   { yyval.ttype = get_parm_info (0); ;
  2258.       break;}
  2259.   case 327:
  2260. ! #line 1727 "c-parse.y"
  2261.   { push_parm_decl (yyvsp[0].ttype); ;
  2262.       break;}
  2263.   case 328:
  2264. ! #line 1729 "c-parse.y"
  2265.   { push_parm_decl (yyvsp[0].ttype); ;
  2266.       break;}
  2267.   case 329:
  2268. ! #line 1736 "c-parse.y"
  2269.   { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype)    ; ;
  2270.       break;}
  2271.   case 330:
  2272. ! #line 1738 "c-parse.y"
  2273.   { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype)    ; ;
  2274.       break;}
  2275.   case 331:
  2276. ! #line 1740 "c-parse.y"
  2277.   { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  2278.       break;}
  2279.   case 332:
  2280. ! #line 1742 "c-parse.y"
  2281.   { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype)    ; ;
  2282.       break;}
  2283.   case 333:
  2284. ! #line 1744 "c-parse.y"
  2285.   { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  2286.       break;}
  2287.   case 334:
  2288. ! #line 1751 "c-parse.y"
  2289.   { pushlevel (0);
  2290.             clear_parm_order ();
  2291.             declare_parm_level (1); ;
  2292.       break;}
  2293.   case 335:
  2294. ! #line 1755 "c-parse.y"
  2295.   { yyval.ttype = yyvsp[0].ttype;
  2296.             parmlist_tags_warning ();
  2297.             poplevel (0, 0, 0); ;
  2298.       break;}
  2299.   case 337:
  2300. ! #line 1763 "c-parse.y"
  2301.   { tree t;
  2302.             for (t = yyvsp[-1].ttype; t; t = TREE_CHAIN (t))
  2303.               if (TREE_VALUE (t) == NULL_TREE)
  2304. --- 3111,3184 ----
  2305.             clear_parm_order (); ;
  2306.       break;}
  2307.   case 321:
  2308. ! #line 1712 "c-parse.y"
  2309.   { yyval.ttype = yyvsp[0].ttype; ;
  2310.       break;}
  2311.   case 322:
  2312. ! #line 1714 "c-parse.y"
  2313.   { yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, NULL_TREE); ;
  2314.       break;}
  2315.   case 323:
  2316. ! #line 1720 "c-parse.y"
  2317.   { yyval.ttype = get_parm_info (0); ;
  2318.       break;}
  2319.   case 324:
  2320. ! #line 1722 "c-parse.y"
  2321.   { yyval.ttype = get_parm_info (0);
  2322.             if (pedantic)
  2323.               pedwarn ("ANSI C requires a named argument before `...'");
  2324.           ;
  2325.       break;}
  2326.   case 325:
  2327. ! #line 1727 "c-parse.y"
  2328.   { yyval.ttype = get_parm_info (1); ;
  2329.       break;}
  2330.   case 326:
  2331. ! #line 1729 "c-parse.y"
  2332.   { yyval.ttype = get_parm_info (0); ;
  2333.       break;}
  2334.   case 327:
  2335. ! #line 1734 "c-parse.y"
  2336.   { push_parm_decl (yyvsp[0].ttype); ;
  2337.       break;}
  2338.   case 328:
  2339. ! #line 1736 "c-parse.y"
  2340.   { push_parm_decl (yyvsp[0].ttype); ;
  2341.       break;}
  2342.   case 329:
  2343. ! #line 1743 "c-parse.y"
  2344.   { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype)    ; ;
  2345.       break;}
  2346.   case 330:
  2347. ! #line 1745 "c-parse.y"
  2348.   { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype)    ; ;
  2349.       break;}
  2350.   case 331:
  2351. ! #line 1747 "c-parse.y"
  2352.   { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  2353.       break;}
  2354.   case 332:
  2355. ! #line 1749 "c-parse.y"
  2356.   { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype)    ; ;
  2357.       break;}
  2358.   case 333:
  2359. ! #line 1751 "c-parse.y"
  2360.   { yyval.ttype = build_tree_list (yyvsp[-1].ttype, yyvsp[0].ttype); ;
  2361.       break;}
  2362.   case 334:
  2363. ! #line 1758 "c-parse.y"
  2364.   { pushlevel (0);
  2365.             clear_parm_order ();
  2366.             declare_parm_level (1); ;
  2367.       break;}
  2368.   case 335:
  2369. ! #line 1762 "c-parse.y"
  2370.   { yyval.ttype = yyvsp[0].ttype;
  2371.             parmlist_tags_warning ();
  2372.             poplevel (0, 0, 0); ;
  2373.       break;}
  2374.   case 337:
  2375. ! #line 1770 "c-parse.y"
  2376.   { tree t;
  2377.             for (t = yyvsp[-1].ttype; t; t = TREE_CHAIN (t))
  2378.               if (TREE_VALUE (t) == NULL_TREE)
  2379. ***************
  2380. *** 3148,3171 ****
  2381.             yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, yyvsp[-1].ttype); ;
  2382.       break;}
  2383.   case 338:
  2384. ! #line 1773 "c-parse.y"
  2385.   { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
  2386.       break;}
  2387.   case 339:
  2388. ! #line 1775 "c-parse.y"
  2389.   { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
  2390.       break;}
  2391.   case 340:
  2392. ! #line 1781 "c-parse.y"
  2393.   { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
  2394.       break;}
  2395.   case 341:
  2396. ! #line 1783 "c-parse.y"
  2397.   { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
  2398.       break;}
  2399.   }
  2400.      /* the action file gets copied in in place of this dollarsign */
  2401. ! #line 440 "bison.simple"
  2402.   
  2403.     yyvsp -= yylen;
  2404.     yyssp -= yylen;
  2405. --- 3186,3209 ----
  2406.             yyval.ttype = tree_cons (NULL_TREE, NULL_TREE, yyvsp[-1].ttype); ;
  2407.       break;}
  2408.   case 338:
  2409. ! #line 1780 "c-parse.y"
  2410.   { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
  2411.       break;}
  2412.   case 339:
  2413. ! #line 1782 "c-parse.y"
  2414.   { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
  2415.       break;}
  2416.   case 340:
  2417. ! #line 1788 "c-parse.y"
  2418.   { yyval.ttype = build_tree_list (NULL_TREE, yyvsp[0].ttype); ;
  2419.       break;}
  2420.   case 341:
  2421. ! #line 1790 "c-parse.y"
  2422.   { yyval.ttype = chainon (yyvsp[-2].ttype, build_tree_list (NULL_TREE, yyvsp[0].ttype)); ;
  2423.       break;}
  2424.   }
  2425.      /* the action file gets copied in in place of this dollarsign */
  2426. ! #line 465 "/usr/lib/bison.simple"
  2427.   
  2428.     yyvsp -= yylen;
  2429.     yyssp -= yylen;
  2430. ***************
  2431. *** 3235,3241 ****
  2432.         int x, count;
  2433.   
  2434.         count = 0;
  2435. !       for (x = 0; x < (sizeof(yytname) / sizeof(char *)); x++)
  2436.           if (yycheck[x + yyn] == x)
  2437.             size += strlen(yytname[x]) + 15, count++;
  2438.         msg = (char *) malloc(size + 15);
  2439. --- 3273,3281 ----
  2440.         int x, count;
  2441.   
  2442.         count = 0;
  2443. !       /* Start X at -yyn if nec to avoid negative indexes in yycheck.  */
  2444. !       for (x = (yyn < 0 ? -yyn : 0);
  2445. !            x < (sizeof(yytname) / sizeof(char *)); x++)
  2446.           if (yycheck[x + yyn] == x)
  2447.             size += strlen(yytname[x]) + 15, count++;
  2448.         msg = (char *) malloc(size + 15);
  2449. ***************
  2450. *** 3246,3252 ****
  2451.             if (count < 5)
  2452.           {
  2453.             count = 0;
  2454. !           for (x = 0; x < (sizeof(yytname) / sizeof(char *)); x++)
  2455.               if (yycheck[x + yyn] == x)
  2456.                 {
  2457.               strcat(msg, count == 0 ? ", expecting `" : " or `");
  2458. --- 3286,3293 ----
  2459.             if (count < 5)
  2460.           {
  2461.             count = 0;
  2462. !           for (x = (yyn < 0 ? -yyn : 0);
  2463. !                x < (sizeof(yytname) / sizeof(char *)); x++)
  2464.               if (yycheck[x + yyn] == x)
  2465.                 {
  2466.               strcat(msg, count == 0 ? ", expecting `" : " or `");
  2467. ***************
  2468. *** 3266,3271 ****
  2469. --- 3307,3313 ----
  2470.       yyerror("parse error");
  2471.       }
  2472.   
  2473. +   goto yyerrlab1;
  2474.   yyerrlab1:   /* here on error raised explicitly by an action */
  2475.   
  2476.     if (yyerrstatus == 3)
  2477. ***************
  2478. *** 3357,3361 ****
  2479.     yystate = yyn;
  2480.     goto yynewstate;
  2481.   }
  2482. ! #line 1786 "c-parse.y"
  2483.   
  2484. --- 3399,3403 ----
  2485.     yystate = yyn;
  2486.     goto yynewstate;
  2487.   }
  2488. ! #line 1793 "c-parse.y"
  2489.   
  2490. diff -rc --new-file gcc-2.3.3/c-parse.y /gnu/src/amiga/gcc-2.3.3/c-parse.y
  2491. *** gcc-2.3.3/c-parse.y    Wed Oct  7 20:19:01 1992
  2492. --- /gnu/src/amiga/gcc-2.3.3/c-parse.y    Sun Feb  6 19:10:17 1994
  2493. ***************
  2494. *** 853,859 ****
  2495.   
  2496.   attrib
  2497.       : IDENTIFIER
  2498. !     { if (strcmp (IDENTIFIER_POINTER ($1), "packed"))
  2499.           warning ("`%s' attribute directive ignored",
  2500.                IDENTIFIER_POINTER ($1));
  2501.         $$ = $1; }
  2502. --- 853,866 ----
  2503.   
  2504.   attrib
  2505.       : IDENTIFIER
  2506. !     {
  2507. ! #ifdef HANDLE_ATTRIBUTE0
  2508. !       /* give the function a chance to validate further attributes */
  2509. !       if (HANDLE_ATTRIBUTE0 (IDENTIFIER_POINTER ($1)) ||
  2510. !           strcmp (IDENTIFIER_POINTER ($1), "packed"))
  2511. ! #else
  2512. !       if (strcmp (IDENTIFIER_POINTER ($1), "packed"))
  2513. ! #endif
  2514.           warning ("`%s' attribute directive ignored",
  2515.                IDENTIFIER_POINTER ($1));
  2516.         $$ = $1; }
  2517. diff -rc --new-file gcc-2.3.3/cccp.c /gnu/src/amiga/gcc-2.3.3/cccp.c
  2518. *** gcc-2.3.3/cccp.c    Wed Dec 16 04:25:36 1992
  2519. --- /gnu/src/amiga/gcc-2.3.3/cccp.c    Sun Feb  6 19:10:17 1994
  2520. ***************
  2521. *** 39,44 ****
  2522. --- 39,60 ----
  2523.   #include "config.h"
  2524.   #endif /* not EMACS */
  2525.   
  2526. + #ifdef amigados
  2527. + /* Since cpp uses alloca to store all its read files, this is quite deadly
  2528. +    on a system with non-automatic stackgrowth like amigados, so we better
  2529. +    turn it off now.  Normally alloca is #defined to __builtin_alloca, so
  2530. +    undefining it causes an external alloca to be used.
  2531. +    Note that it's not wise to generally inhibit __builtin_alloca, since
  2532. +    using the generic emulator entitels a serious (!) speed penalty, and
  2533. +    it's bad enough that we have to live with it in cccp, don't make cc1
  2534. +    unbearably slow as well... */
  2535. + #undef alloca
  2536. + static int amigados_abs_filename ();
  2537. + #endif
  2538.   #ifndef STANDARD_INCLUDE_DIR
  2539.   #define STANDARD_INCLUDE_DIR "/usr/include"
  2540.   #endif
  2541. ***************
  2542. *** 180,186 ****
  2543. --- 196,206 ----
  2544.   extern char *version_string;
  2545.   extern struct tm *localtime ();
  2546.   extern int sys_nerr;
  2547. + #ifndef HAVE_STRERROR
  2548.   extern char *sys_errlist[];
  2549. + #define strerror(err) sys_errlist[err]
  2550. + #endif
  2551.   
  2552.   #ifndef errno
  2553.   extern int errno;
  2554. ***************
  2555. *** 1672,1682 ****
  2556. --- 1692,1706 ----
  2557.         char *p = in_fname;
  2558.         char *p1 = p;
  2559.         /* Discard all directory prefixes from P.  */
  2560. + #ifdef FILE_NAME_NONDIRECTORY
  2561. +       p = FILE_NAME_NONDIRECTORY (p);
  2562. + #else
  2563.         while (*p1) {
  2564.       if (*p1 == '/')
  2565.         p = p1 + 1;
  2566.       p1++;
  2567.         }
  2568. + #endif
  2569.         /* Output P, but remove known suffixes.  */
  2570.         len = strlen (p);
  2571.         if (p[len - 2] == '.' && p[len - 1] == 'c')
  2572. ***************
  2573. *** 3393,3399 ****
  2574.   
  2575.         if (!no_output && already_output == 0
  2576.         && (kt->pass_thru
  2577. !           || (kt->type == T_DEFINE
  2578.             && (dump_macros == dump_names
  2579.                 || dump_macros == dump_definitions)))) {
  2580.           int len;
  2581. --- 3417,3423 ----
  2582.   
  2583.         if (!no_output && already_output == 0
  2584.         && (kt->pass_thru
  2585. !           || ((kt->type == T_DEFINE || kt->type == T_UNDEF)
  2586.             && (dump_macros == dump_names
  2587.                 || dump_macros == dump_definitions)))) {
  2588.           int len;
  2589. ***************
  2590. *** 3725,3730 ****
  2591. --- 3749,3766 ----
  2592.           search_start = dsp;
  2593.   #ifndef VMS
  2594.           ep = rindex (nam, '/');
  2595. + #ifdef amigados
  2596. +         /* amigados uses unix-style directory-filename separation, but
  2597. +            has VMS-style logicals as well */
  2598. +         if (ep == NULL) 
  2599. +           {
  2600. +         ep = rindex (nam, ':');
  2601. +         /* a ':' is part of the directory name, a '/' isn't ! */
  2602. +             if (ep != NULL) ep++;
  2603. +           }
  2604. + #endif /* amigados */
  2605.   #else                /* VMS */
  2606.           ep = rindex (nam, ']');
  2607.           if (ep == NULL) ep = rindex (nam, '>');
  2608. ***************
  2609. *** 3800,3806 ****
  2610. --- 3836,3846 ----
  2611.   
  2612.     /* If specified file name is absolute, just open it.  */
  2613.   
  2614. + #ifndef amigados
  2615.     if (*fbeg == '/') {
  2616. + #else
  2617. +   if (amigados_abs_filename (fbeg, flen)) {
  2618. + #endif
  2619.       strncpy (fname, fbeg, flen);
  2620.       fname[flen] = 0;
  2621.       if (redundant_include_p (fname))
  2622. ***************
  2623. *** 3823,3828 ****
  2624. --- 3863,3872 ----
  2625.       if (searchptr->fname[0] == 0)
  2626.         continue;
  2627.       strcpy (fname, searchptr->fname);
  2628. + #ifdef amigados
  2629. +     if (fname[strlen (fname) - 1] != ':')
  2630. + #endif
  2631.       strcat (fname, "/");
  2632.       fname[strlen (fname) + flen] = 0;
  2633.         } else {
  2634. ***************
  2635. *** 7637,7643 ****
  2636.       fprintf (stderr, "%s:%d: ", ip->nominal_fname, ip->lineno);
  2637.   
  2638.     if (errno < sys_nerr)
  2639. !     fprintf (stderr, "%s: %s\n", name, sys_errlist[errno]);
  2640.     else
  2641.       fprintf (stderr, "%s: undocumented I/O error\n", name);
  2642.   
  2643. --- 7681,7687 ----
  2644.       fprintf (stderr, "%s:%d: ", ip->nominal_fname, ip->lineno);
  2645.   
  2646.     if (errno < sys_nerr)
  2647. !     fprintf (stderr, "%s: %s\n", name, strerror (errno));
  2648.     else
  2649.       fprintf (stderr, "%s: undocumented I/O error\n", name);
  2650.   
  2651. ***************
  2652. *** 8538,8546 ****
  2653.   perror_with_name (name)
  2654.        char *name;
  2655.   {
  2656.     fprintf (stderr, "%s: ", progname);
  2657. !   if (errno < sys_nerr)
  2658. !     fprintf (stderr, "%s: %s\n", name, sys_errlist[errno]);
  2659.     else
  2660.       fprintf (stderr, "%s: undocumented I/O error\n", name);
  2661.     errors++;
  2662. --- 8582,8592 ----
  2663.   perror_with_name (name)
  2664.        char *name;
  2665.   {
  2666. +   int error = errno;
  2667.     fprintf (stderr, "%s: ", progname);
  2668. !   if (error < sys_nerr)
  2669. !     fprintf (stderr, "%s: %s\n", name, strerror (error));
  2670.     else
  2671.       fprintf (stderr, "%s: undocumented I/O error\n", name);
  2672.     errors++;
  2673. ***************
  2674. *** 8916,8918 ****
  2675. --- 8962,8988 ----
  2676.     return dst;
  2677.   }
  2678.   #endif /* VMS */
  2679. + #ifdef amigados
  2680. + /* This function returns whether the LEN characters long filename FNAME 
  2681. +    is an absolute path specification. */
  2682. + static int
  2683. + amigados_abs_filename (fname, len)
  2684. +      char *fname;
  2685. +      int len;
  2686. + {
  2687. +   /* we're using ixemul.library, which treats `/foo' as `foo:', so 
  2688. +      fname[0] is to be considered absolute as well */
  2689. +   if (fname[0] == '/')
  2690. +     return 1;
  2691. +   /* else do an index() on fname, but one which is limited to len characters */
  2692. +   while (*fname && *fname != ':' && len) 
  2693. +     fname++, len--;
  2694. +   return *fname == ':';
  2695. + }
  2696. + #endif /* amigados */
  2697. diff -rc --new-file gcc-2.3.3/config/amigados.c /gnu/src/amiga/gcc-2.3.3/config/amigados.c
  2698. *** gcc-2.3.3/config/amigados.c    Thu Jan  1 00:00:00 1970
  2699. --- /gnu/src/amiga/gcc-2.3.3/config/amigados.c    Sun Feb  6 19:09:11 1994
  2700. ***************
  2701. *** 0 ****
  2702. --- 1,158 ----
  2703. + /* Definitions of target machine for GNU compiler.  amiga 68000/68020 version.
  2704. +    Copyright (C) 1992 Free Software Foundation, Inc.
  2705. +    Contributed by Markus M. Wild (wild@amiga.physik.unizh.ch).
  2706. + This file is part of GNU CC.
  2707. + GNU CC is free software; you can redistribute it and/or modify
  2708. + it under the terms of the GNU General Public License as published by
  2709. + the Free Software Foundation; either version 2, or (at your option)
  2710. + any later version.
  2711. + GNU CC is distributed in the hope that it will be useful,
  2712. + but WITHOUT ANY WARRANTY; without even the implied warranty of
  2713. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  2714. + GNU General Public License for more details.
  2715. + You should have received a copy of the GNU General Public License
  2716. + along with GNU CC; see the file COPYING.  If not, write to
  2717. + the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  2718. + #include "m68k.c"
  2719. + /* Does operand (which is a symbolic_operand) live in text space? If
  2720. +    so SYMBOL_REF_FLAG, which is set by ENCODE_SECTION_INFO, will be true.
  2721. +    This function is used in base relative code generation. */
  2722. + int
  2723. + read_only_operand (operand)
  2724. +      rtx operand;
  2725. + {
  2726. +   if (GET_CODE (operand) == CONST)
  2727. +     operand = XEXP (XEXP (operand, 0), 0);
  2728. +   if (GET_CODE (operand) == SYMBOL_REF)
  2729. +     return SYMBOL_REF_FLAG (operand) || CONSTANT_POOL_ADDRESS_P (operand);
  2730. +   return 1;
  2731. + }
  2732. + /* the rest of the file is to implement AmigaDOS specific keywords some day.
  2733. +    The approach used so far used __attribute__ for this, but this required
  2734. +    changes to c-parse.y as well as if we'd use the common keywords used
  2735. +    on commercial AmigaDOS C-compilers as well. So in the future I'll probably
  2736. +    switch to __saveds and __interrupt keywords as well.
  2737. +    The rest of this file is currently ignored, because it's no longer
  2738. +    working with the current gcc version. */
  2739. + #if not_yet_working
  2740. + #include "tree.h"
  2741. + struct attribute {
  2742. +   tree ident;
  2743. +   int  saveds : 1,
  2744. +        interrupt : 1;
  2745. + };
  2746. + static struct attribute *a_tab = 0;
  2747. + static int a_index, a_size;
  2748. + void
  2749. + add_attr_entry (attr)
  2750. +     struct attribute *attr;
  2751. + {
  2752. +   if (! a_tab)
  2753. +     {
  2754. +       a_size = 10;
  2755. +       a_index = 0;
  2756. +       a_tab  = (struct attribute *) xmalloc (a_size * sizeof (struct attribute));
  2757. +     }
  2758. +   if (a_index == a_size)
  2759. +     {
  2760. +       a_size <<= 1;
  2761. +       a_tab = (struct attribute *) xrealloc (a_tab, a_size * sizeof (struct attribute));
  2762. +     }
  2763. +   a_tab[a_index++] = *attr;
  2764. + }
  2765. + void
  2766. + attr_do_saveds (function_ident)
  2767. +       tree function_ident;
  2768. + {
  2769. +   struct attribute attr, *a;
  2770. +   int i;
  2771. +   for (i = 0, a = a_tab; i < a_index; i++, a++)
  2772. +     if (a->ident == function_ident)
  2773. +       {
  2774. +     a->saveds = 1;
  2775. +     return;
  2776. +       }
  2777. +   /* create a new entry for this function */
  2778. +   attr.ident     = function_ident;
  2779. +   attr.saveds    = 1;
  2780. +   attr.interrupt = 0;
  2781. +   add_attr_entry (&attr);
  2782. + }
  2783. + void
  2784. + attr_do_interrupt (function_ident)
  2785. +     tree function_ident;
  2786. + {
  2787. +   struct attribute attr, *a;
  2788. +   int i;
  2789. +   for (i = 0, a = a_tab; i < a_index; i++, a++)
  2790. +     if (a->ident == function_ident)
  2791. +       {
  2792. +     /* __interrupt implies __saveds */
  2793. +     a->saveds    = 1;
  2794. +     a->interrupt = 1;
  2795. +     return;
  2796. +       }
  2797. +   /* create a new entry for this function */
  2798. +   attr.ident     = function_ident;
  2799. +   attr.saveds     = 1;
  2800. +   attr.interrupt = 1;
  2801. +   add_attr_entry (&attr);
  2802. + }
  2803. + int
  2804. + attr_does_saveds (function_name)
  2805. +     char *function_name;
  2806. + {
  2807. +   tree ident = get_identifier (function_name);
  2808. +   struct attribute *attr;
  2809. +   int i;
  2810. +   
  2811. +   for (i = 0, attr = a_tab; i < a_index; i++, attr++)
  2812. +     if (attr->ident == ident)
  2813. +       return attr->saveds;
  2814. +   return 0;
  2815. + }
  2816. + int
  2817. + attr_does_interrupt (function_name)
  2818. +     char *function_name;
  2819. + {
  2820. +   tree ident = get_identifier (function_name);
  2821. +   struct attribute *attr;
  2822. +   int i;
  2823. +   
  2824. +   for (i = 0, attr = a_tab; i < a_index; i++, attr++)
  2825. +     if (attr->ident == ident)
  2826. +       return attr->interrupt;
  2827. +   return 0;
  2828. + }
  2829. + #endif
  2830. diff -rc --new-file gcc-2.3.3/config/amigados.h /gnu/src/amiga/gcc-2.3.3/config/amigados.h
  2831. *** gcc-2.3.3/config/amigados.h    Thu Jan  1 00:00:00 1970
  2832. --- /gnu/src/amiga/gcc-2.3.3/config/amigados.h    Sat Jul  9 08:15:22 1994
  2833. ***************
  2834. *** 0 ****
  2835. --- 1,388 ----
  2836. + /* Definitions of target machine for GNU compiler.  amiga 68000/68020 version.
  2837. +    Copyright (C) 1992 Free Software Foundation, Inc.
  2838. +    Contributed by Markus M. Wild (wild@amiga.physik.unizh.ch).
  2839. + This file is part of GNU CC.
  2840. + GNU CC is free software; you can redistribute it and/or modify
  2841. + it under the terms of the GNU General Public License as published by
  2842. + the Free Software Foundation; either version 2, or (at your option)
  2843. + any later version.
  2844. + GNU CC is distributed in the hope that it will be useful,
  2845. + but WITHOUT ANY WARRANTY; without even the implied warranty of
  2846. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  2847. + GNU General Public License for more details.
  2848. + You should have received a copy of the GNU General Public License
  2849. + along with GNU CC; see the file COPYING.  If not, write to
  2850. + the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  2851. + #include "m68k.h"
  2852. + /* See m68k.h for bits in TARGET_DEFAULT.
  2853. +    0 means 68000, no hardware fpu (68881/68882/68040).
  2854. +    7 means 68020 (or higher) with hardware fpu.  */
  2855. + #ifndef TARGET_DEFAULT
  2856. + #define TARGET_DEFAULT 0
  2857. + #endif
  2858. + /* Define __HAVE_68881__ in preprocessor according to the -m flags.
  2859. +    This will control the use of inline 68881 insns in certain macros.
  2860. +    Also inform the program which CPU this is for.  */
  2861. + #if TARGET_DEFAULT & 02
  2862. + /* -m68881 is the default */
  2863. + #define CPP_SPEC \
  2864. + "%{!msoft-float:-D__HAVE_68881__ }\
  2865. + %{!ansi:%{m68000:-Dmc68010}%{mc68000:-Dmc68010}%{!mc68000:%{!m68000:-Dmc68020}}}"
  2866. + #else
  2867. + /* -msoft-float is the default, assume -mc68000 as well */
  2868. + #define CPP_SPEC \
  2869. + "%{m68881:-D__HAVE_68881__ }\
  2870. + %{!ansi:%{m68020:-Dmc68020}%{mc68020:-Dmc68020}%{!mc68020:%{!m68020:-Dmc68010}}}"
  2871. + #endif
  2872. + /* -m68000 requires special flags to the assembler.  */
  2873. + #if TARGET_DEFAULT & 01
  2874. + #define ASM_SPEC \
  2875. +  "%{m68000:-mc68010}%{mc68000:-mc68010}%{!mc68000:%{!m68000:-mc68020}} %{msmall-code:-l} "
  2876. + #else
  2877. + #define ASM_SPEC \
  2878. +  "%{m68020:-mc68020}%{mc68020:-mc68020}%{!mc68020:%{!m68020:-mc68010}} %{msmall-code:-l} "
  2879. + #endif
  2880. + /* amiga/amigados are the new "standard" defines for the Amiga, MCH_AMIGA
  2881. +  * was used before and is included for compatibility reasons */
  2882. + #define CPP_PREDEFINES "-Dmc68000 -Damiga -Damigados -DMCH_AMIGA -DAMIGA"
  2883. + /* Choose the right startup file, depending on whether we use base relative
  2884. +    code, base relative code with automatic relocation (-resident), or plain
  2885. +    crt0.o. 
  2886. +   
  2887. +    Profiling is currently only available for plain startup.
  2888. +    mcrt0.o does not (yet) exist. */
  2889. + #define STARTFILE_SPEC \
  2890. +   "%{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}}}}"
  2891. + /* Automatically search libamiga.a for AmigaDOS specific functions.  Note
  2892. +    that we first search the standard C library to resolve as much as
  2893. +    possible from there, since it has names that are duplicated in libamiga.a
  2894. +    which we *don't* want from there.  Then search the standard C library
  2895. +    again to resolve any references that libamiga.a might have generated.
  2896. +    This may only be a temporary solution since it might be better to simply
  2897. +    remove the things from libamiga.a that should be pulled in from libc.a
  2898. +    instead, which would eliminate the first reference to libc.a. */
  2899. + #define LIB_SPEC "%{!p:%{!pg:-lc -lamiga -lc}}%{p:-lc_p -lamiga -lc_p}%{pg:-lc_p -lamiga -lc_p}"
  2900. + /* if debugging, tell the linker to output amiga-hunk symbols *and* a BSD
  2901. +    compatible debug hunk (which will probably change in the future, it's not
  2902. +    tremendously useful in its current state). */
  2903. + #define LINK_SPEC "%{g:-amiga-debug-hunk} %{fbaserel:-databss-together} %{resident:-databss-together -datadata-reloc -flavor libb} "
  2904. + #define CC1_SPEC "%{resident:-fbaserel} "
  2905. + #define CC1PLUS_SPEC "%{resident:-fbaserel} "
  2906. + /* Omit frame pointer at high optimization levels. (This doesn't hurt, since
  2907. +    GDB doesn't work under AmigaDOS at the moment anyway..) */
  2908. +   
  2909. + #define OPTIMIZATION_OPTIONS(OPTIMIZE) \
  2910. + {                                  \
  2911. +   if (OPTIMIZE >= 2)                         \
  2912. +     flag_omit_frame_pointer = 1;                \
  2913. + }
  2914. + /* provide a dummy entry for the small-code switch. This is currently only
  2915. +    needed by the assembler (explanations: m68k.h), but will be used by cc1
  2916. +    to output 16bit pc-relative code later. */
  2917. + #undef TARGET_SWITCHES
  2918. + #define TARGET_SWITCHES  \
  2919. +   { { "68020", 5},                \
  2920. +     { "c68020", 5},                \
  2921. +     { "68881", 2},                \
  2922. +     { "bitfield", 4},                \
  2923. +     { "68000", -5},                \
  2924. +     { "c68000", -5},                \
  2925. +     { "soft-float", -0102},            \
  2926. +     { "nobitfield", -4},            \
  2927. +     { "rtd", 8},                \
  2928. +     { "nortd", -8},                \
  2929. +     { "short", 040},                \
  2930. +     { "noshort", -040},                \
  2931. +     { "fpa", 0100},                \
  2932. +     { "nofpa", -0100},                \
  2933. +     { "sky", 0200},                \
  2934. +     { "nosky", -0200},                \
  2935. +     { "68040", 0407},                \
  2936. +     { "68030", -01400},                \
  2937. +     { "68030", 7},                \
  2938. +     { "68040-only", 01000},            \
  2939. +     { "small-code", 0 },            \
  2940. +     { "", TARGET_DEFAULT}}
  2941. + /* Every structure or union's size must be a multiple of 2 bytes.  */
  2942. + #define STRUCTURE_SIZE_BOUNDARY 16
  2943. + /* This is (almost;-)) BSD, so it wants DBX format.  */
  2944. + #define DBX_DEBUGGING_INFO
  2945. + /* Allow folding division by zero.  */
  2946. + #define REAL_INFINITY
  2947. + /* This is how to output an assembler line defining a `double' constant.  */
  2948. + #undef ASM_OUTPUT_DOUBLE
  2949. + #define ASM_OUTPUT_DOUBLE(FILE,VALUE)                    \
  2950. +   {                                    \
  2951. +     if (REAL_VALUE_ISINF (VALUE))                    \
  2952. +       fprintf (FILE, "\t.double 0r%s99e999\n", (VALUE) > 0 ? "" : "-");    \
  2953. +     else if (isnan (VALUE))                        \
  2954. +       {                                    \
  2955. +     union { double d; long l[2];} t;                \
  2956. +     t.d = (VALUE);                            \
  2957. +     fprintf (FILE, "\t.long 0x%lx\n\t.long 0x%lx\n", t.l[0], t.l[1]); \
  2958. +       }                                    \
  2959. +     else                                \
  2960. +       fprintf (FILE, "\t.double 0r%.17g\n", VALUE);            \
  2961. +   }
  2962. + /* This is how to output an assembler line defining a `float' constant.  */
  2963. + #undef ASM_OUTPUT_FLOAT
  2964. + #define ASM_OUTPUT_FLOAT(FILE,VALUE)                    \
  2965. +   {                                    \
  2966. +     if (REAL_VALUE_ISINF (VALUE))                    \
  2967. +       fprintf (FILE, "\t.single 0r%s99e999\n", (VALUE) > 0 ? "" : "-");    \
  2968. +     else if (isnan (VALUE))                        \
  2969. +       {                                    \
  2970. +     union { float f; long l;} t;                    \
  2971. +     t.f = (VALUE);                            \
  2972. +     fprintf (FILE, "\t.long 0x%lx\n", t.l);                \
  2973. +       }                                    \
  2974. +     else                                \
  2975. +       fprintf (FILE, "\t.single 0r%.9g\n", VALUE);            \
  2976. +   }
  2977. + /* This is how to output an assembler lines defining floating operands.
  2978. +    There's no way to output a NaN's fraction, so we lose it.  */
  2979. +   
  2980. + #undef ASM_OUTPUT_FLOAT_OPERAND
  2981. + #define ASM_OUTPUT_FLOAT_OPERAND(FILE,VALUE)                \
  2982. +   (REAL_VALUE_ISINF ((VALUE))                        \
  2983. +    ? asm_fprintf (FILE, "%I0r%s99e999", ((VALUE) > 0 ? "" : "-")) \
  2984. +    : (VALUE) == -0.0                            \
  2985. +    ? asm_fprintf (FILE, "%I0r-0.0")                    \
  2986. +    : asm_fprintf (FILE, "%I0r%.9g", (VALUE)))
  2987. + #undef ASM_OUTPUT_DOUBLE_OPERAND
  2988. + #define ASM_OUTPUT_DOUBLE_OPERAND(FILE,VALUE)                \
  2989. +   (REAL_VALUE_ISINF ((VALUE))                        \
  2990. +    ? asm_fprintf (FILE, "%I0r%s99e999", ((VALUE) > 0 ? "" : "-")) \
  2991. +    : (VALUE) == -0.0                            \
  2992. +    ? asm_fprintf (FILE, "%I0r-0.0")                    \
  2993. +    : asm_fprintf (FILE, "%I0r%.17g", (VALUE)))
  2994. + /* use A5 as framepointer instead of A6, this makes A6 available as a
  2995. +    general purpose register, and can thus be used without problems in
  2996. +    direct library calls. */
  2997. + #undef FRAME_POINTER_REGNUM
  2998. + #define FRAME_POINTER_REGNUM 13
  2999. + #undef ARG_POINTER_REGNUM
  3000. + #define ARG_POINTER_REGNUM 13
  3001. + /* we use A4 for this, not A5, which is the framepointer */
  3002. + #undef PIC_OFFSET_TABLE_REGNUM
  3003. + #define PIC_OFFSET_TABLE_REGNUM 12
  3004. + /* setup a default shell return value for those (gazillion..) programs that
  3005. +    (inspite of ANSI-C) declare main() to be void (or even VOID...) and thus
  3006. +    cause the shell to randomly caugh upon executing such programs (contrary
  3007. +    to Unix, AmigaDOS scripts are terminated with an error if a program returns
  3008. +    with an error code above the `error' or even `failure' level
  3009. +    (which is configurable with the FAILAT command) */
  3010. + #define DEFAULT_MAIN_RETURN c_expand_return (integer_zero_node)
  3011. + /* we do have an ansi-compliant c-library ;-) */
  3012. + #define HAVE_VPRINTF
  3013. + #define HAVE_VFPRINTF
  3014. + #define HAVE_PUTENV
  3015. + #define HAVE_STRERROR
  3016. + #define HAVE_ATEXIT
  3017. + /* given that symbolic_operand(X), return TRUE if no special
  3018. +    base relative relocation is necessary */
  3019. + #define LEGITIMATE_BASEREL_OPERAND_P(X) \
  3020. +   (flag_pic >= 3 && read_only_operand (X))
  3021. + #undef LEGITIMATE_PIC_OPERAND_P
  3022. + #define LEGITIMATE_PIC_OPERAND_P(X) \
  3023. +   (! symbolic_operand (X, VOIDmode) || LEGITIMATE_BASEREL_OPERAND_P (X))
  3024. + /* Define this macro if references to a symbol must be treated
  3025. +    differently depending on something about the variable or
  3026. +    function named by the symbol (such as what section it is in).
  3027. +    The macro definition, if any, is executed immediately after the
  3028. +    rtl for DECL or other node is created.
  3029. +    The value of the rtl will be a `mem' whose address is a
  3030. +    `symbol_ref'.
  3031. +    The usual thing for this macro to do is to a flag in the
  3032. +    `symbol_ref' (such as `SYMBOL_REF_FLAG') or to store a modified
  3033. +    name string in the `symbol_ref' (if one bit is not enough
  3034. +    information).
  3035. +    On the Amiga we use this to indicate if a symbol is in text or
  3036. +    data space.  */
  3037. + #define ENCODE_SECTION_INFO(DECL)\
  3038. + do                                    \
  3039. +   {                                    \
  3040. +     if (TREE_CODE (DECL) == FUNCTION_DECL)                \
  3041. +       SYMBOL_REF_FLAG (XEXP (DECL_RTL (DECL), 0)) = 1;            \
  3042. +     else                                \
  3043. +       {                                    \
  3044. +     rtx rtl = (TREE_CODE_CLASS (TREE_CODE (DECL)) != 'd'        \
  3045. +            ? TREE_CST_RTL (DECL) : DECL_RTL (DECL));        \
  3046. +     if (RTX_UNCHANGING_P (rtl) && !MEM_VOLATILE_P (rtl))        \
  3047. +       SYMBOL_REF_FLAG (XEXP (rtl, 0)) = 1;                \
  3048. +       }                                    \
  3049. +   }                                    \
  3050. + while (0)
  3051. + #undef SELECT_RTX_SECTION
  3052. + #define SELECT_RTX_SECTION(MODE, X) readonly_data_section ();
  3053. + /* according to varasm.c, RELOC referrs *only* to whether constants (!)
  3054. +    are addressed by address. This doesn't matter in baserelative code,
  3055. +    so we allow (inspite of flag_pic) readonly_data_section() in that
  3056. +    case */
  3057. + #undef SELECT_SECTION
  3058. + #define SELECT_SECTION(DECL, RELOC)                    \
  3059. + {                                    \
  3060. +   if (TREE_CODE (DECL) == STRING_CST)                    \
  3061. +     {                                    \
  3062. +       if (! flag_writable_strings)                    \
  3063. +     readonly_data_section ();                    \
  3064. +       else                                \
  3065. +     data_section ();                        \
  3066. +     }                                    \
  3067. +   else if (TREE_CODE (DECL) == VAR_DECL)                \
  3068. +     {                                    \
  3069. +       if ((flag_pic && flag_pic < 3 && RELOC)                \
  3070. +       || !TREE_READONLY (DECL) || TREE_SIDE_EFFECTS (DECL))        \
  3071. +     data_section ();                        \
  3072. +       else                                \
  3073. +     readonly_data_section ();                    \
  3074. +     }                                    \
  3075. +   else                                    \
  3076. +     readonly_data_section ();                        \
  3077. + }
  3078. + #if not_yet_working
  3079. + /* starting support for amiga specific keywords
  3080. +  * --------------------------------------------
  3081. +  */
  3082. + /* validate attributes that don't take a parameter. Currently we support
  3083. +  * __attribute__ (saveds) and __attribute__ (interrupt)
  3084. +  */
  3085. + #define HANDLE_ATTRIBUTE0(attr) \
  3086. +   (strcmp(attr, "saveds") != 0 && strcmp(attr, "interrupt") != 0)
  3087. + /* (c-common.c)
  3088. +  * install additional attributes
  3089. +  */
  3090. + #define HANDLE_EXTRA_ATTRIBUTES(a)                         \
  3091. +   if (TREE_VALUE (a) != 0                            \
  3092. +       && TREE_CODE (TREE_VALUE (a)) == IDENTIFIER_NODE                \
  3093. +       && TREE_VALUE (a) == get_identifier ("saveds"))                \
  3094. +     {                                        \
  3095. +       if (TREE_CODE (decl) != FUNCTION_DECL)                    \
  3096. +         {                                    \
  3097. +           warning_with_decl (decl,                        \
  3098. +               "saveds attribute specified for non-function `%s'");        \
  3099. +       return;                                \
  3100. +         }                                    \
  3101. +                                               \
  3102. +       attr_do_saveds (DECL_NAME (decl));                    \
  3103. +     }                                        \
  3104. +   else if (TREE_VALUE (a) != 0                            \
  3105. +       && TREE_CODE (TREE_VALUE (a)) == IDENTIFIER_NODE                \
  3106. +       && TREE_VALUE (a) == get_identifier ("interrupt"))            \
  3107. +     {                                        \
  3108. +       if (TREE_CODE (decl) != FUNCTION_DECL)                    \
  3109. +         {                                    \
  3110. +           warning_with_decl (decl,                        \
  3111. +               "saveds attribute specified for non-function `%s'");        \
  3112. +       return;                                \
  3113. +         }                                    \
  3114. +                                               \
  3115. +       attr_do_interrupt (DECL_NAME (decl));                    \
  3116. +     }                                        \
  3117. + #define PROLOGUE_EXTRA_SAVE(mask)                        \
  3118. +   { extern char *current_function_name;                        \
  3119. +     /* saveds makes the function preserve d1/a0/a1 as well */            \
  3120. +     if (attr_does_saveds (current_function_name))                \
  3121. +       mask |= 0x40c0; }                                \
  3122. + #define EPILOGUE_EXTRA_RESTORE(mask, nregs)                    \
  3123. +   { extern char *current_function_name;                        \
  3124. +     /* restore those extra registers */                        \
  3125. +     if (attr_does_saveds (current_function_name))                \
  3126. +       {                                        \
  3127. +     mask |= 0x0302;                                \
  3128. +     nregs += 3;                                \
  3129. +       } }                                    \
  3130. + #define EPILOGUE_EXTRA_BARRIER_KLUDGE(stream)                    \
  3131. +   { extern char *current_function_name;                        \
  3132. +     /* PLEASE Help! how is this done cleaner?? */                \
  3133. +     if (attr_does_saveds (current_function_name))                \
  3134. +       {                                        \
  3135. +     fprintf (stderr,                             \
  3136. +          "warning: couldn't cleanup `saveds'-stack in `%s'.\n");    \
  3137. +     fprintf (stderr,                            \
  3138. +          "         this is only ok, if the function never returns!\n");    \
  3139. +       }    }                                    \
  3140. +         
  3141. + #define EPILOGUE_EXTRA_TEST(stream)                        \
  3142. +   { extern char *current_function_name;                        \
  3143. +     /* with the interrupt-attribute, we have to set the cc before rts */    \
  3144. +     if (attr_does_interrupt (current_function_name))                \
  3145. +       asm_fprintf (stream, "\ttstl %s\n", reg_names[0]); }            \
  3146. + #endif
  3147. diff -rc --new-file gcc-2.3.3/config/m68k.c /gnu/src/amiga/gcc-2.3.3/config/m68k.c
  3148. *** gcc-2.3.3/config/m68k.c    Fri Oct 30 01:00:58 1992
  3149. --- /gnu/src/amiga/gcc-2.3.3/config/m68k.c    Sun Feb  6 19:09:12 1994
  3150. ***************
  3151. *** 60,66 ****
  3152.      
  3153.   finalize_pic ()
  3154.   {
  3155. !   if (flag_pic && current_function_uses_pic_offset_table)
  3156.       emit_insn (gen_rtx (USE, VOIDmode, pic_offset_table_rtx));
  3157.   }
  3158.   
  3159. --- 60,66 ----
  3160.      
  3161.   finalize_pic ()
  3162.   {
  3163. !   if (flag_pic && (flag_pic < 3) && current_function_uses_pic_offset_table)
  3164.       emit_insn (gen_rtx (USE, VOIDmode, pic_offset_table_rtx));
  3165.   }
  3166.   
  3167. ***************
  3168. *** 180,185 ****
  3169. --- 180,188 ----
  3170.         mask &= ~ (1 << (15 - FRAME_POINTER_REGNUM));
  3171.         num_saved_regs--;
  3172.       }
  3173. + #ifdef PROLOGUE_EXTRA_SAVE
  3174. +   PROLOGUE_EXTRA_SAVE (mask);
  3175. + #endif
  3176.   
  3177.   #if NEED_PROBE
  3178.     fprintf (stream, "\ttstl sp@(%d)\n", NEED_PROBE - num_saved_regs * 4);
  3179. ***************
  3180. *** 213,219 ****
  3181.         asm_fprintf (stream, "\tmoveml %0I0x%x,%Rsp@-\n", mask);
  3182.   #endif
  3183.       }
  3184. !   if (flag_pic && current_function_uses_pic_offset_table)
  3185.       {
  3186.   #ifdef MOTOROLA
  3187.         asm_fprintf (stream, "\t%Omove.l %0I__GLOBAL_OFFSET_TABLE_, %s\n",
  3188. --- 216,222 ----
  3189.         asm_fprintf (stream, "\tmoveml %0I0x%x,%Rsp@-\n", mask);
  3190.   #endif
  3191.       }
  3192. !   if (flag_pic && (flag_pic < 3) && current_function_uses_pic_offset_table)
  3193.       {
  3194.   #ifdef MOTOROLA
  3195.         asm_fprintf (stream, "\t%Omove.l %0I__GLOBAL_OFFSET_TABLE_, %s\n",
  3196. ***************
  3197. *** 281,286 ****
  3198. --- 284,292 ----
  3199.         /* Output just a no-op so that debuggers don't get confused
  3200.        about which function the pc is in at this address.  */
  3201.         asm_fprintf (stream, "\tnop\n");
  3202. + #ifdef EPILOGUE_EXTRA_BARRIER_KLUDGE
  3203. +       EPILOGUE_EXTRA_BARRIER_KLUDGE(stream);
  3204. + #endif
  3205.         return;
  3206.       }
  3207.   
  3208. ***************
  3209. *** 311,316 ****
  3210. --- 317,325 ----
  3211.           nregs++;
  3212.       mask |= 1 << regno;
  3213.         }
  3214. + #ifdef EPILOGUE_EXTRA_RESTORE
  3215. +   EPILOGUE_EXTRA_RESTORE(mask, nregs);
  3216. + #endif
  3217.     offset = foffset + nregs * 4;
  3218.     if (offset + fsize >= 0x8000
  3219.         && frame_pointer_needed
  3220. ***************
  3221. *** 513,518 ****
  3222. --- 522,530 ----
  3223.   #endif
  3224.       }
  3225.       }
  3226. + #ifdef EPILOGUE_EXTRA_TEST
  3227. +   EPILOGUE_EXTRA_TEST(stream);
  3228. + #endif
  3229.     if (current_function_pops_args)
  3230.       asm_fprintf (stream, "\trtd %0I%d\n", current_function_pops_args);
  3231.     else
  3232. ***************
  3233. *** 803,817 ****
  3234.     /* First handle a simple SYMBOL_REF or LABEL_REF */
  3235.     if (GET_CODE (orig) == SYMBOL_REF || GET_CODE (orig) == LABEL_REF)
  3236.       {
  3237.         if (reg == 0)
  3238.       abort ();
  3239.   
  3240. !       pic_ref = gen_rtx (MEM, Pmode,
  3241. !              gen_rtx (PLUS, Pmode,
  3242. !                   pic_offset_table_rtx, orig));
  3243.         current_function_uses_pic_offset_table = 1;
  3244.         RTX_UNCHANGING_P (pic_ref) = 1;
  3245.         emit_move_insn (reg, pic_ref);
  3246.         return reg;
  3247.       }
  3248.     else if (GET_CODE (orig) == CONST)
  3249. --- 815,839 ----
  3250.     /* First handle a simple SYMBOL_REF or LABEL_REF */
  3251.     if (GET_CODE (orig) == SYMBOL_REF || GET_CODE (orig) == LABEL_REF)
  3252.       {
  3253. + #ifdef LEGITIMATE_BASEREL_OPERAND_P
  3254. +   if (LEGITIMATE_BASEREL_OPERAND_P (orig))
  3255. +     return orig;
  3256. + #endif
  3257.         if (reg == 0)
  3258.       abort ();
  3259.   
  3260. !       if (flag_pic >= 3)
  3261. !     pic_ref = gen_rtx (PLUS, Pmode, pic_offset_table_rtx, orig);
  3262. !       else
  3263. !         pic_ref = gen_rtx (MEM, Pmode,
  3264. !                gen_rtx (PLUS, Pmode,
  3265. !                     pic_offset_table_rtx, orig));
  3266.         current_function_uses_pic_offset_table = 1;
  3267.         RTX_UNCHANGING_P (pic_ref) = 1;
  3268.         emit_move_insn (reg, pic_ref);
  3269.         return reg;
  3270.       }
  3271.     else if (GET_CODE (orig) == CONST)
  3272. ***************
  3273. *** 840,845 ****
  3274. --- 862,868 ----
  3275.         pic_ref = gen_rtx (PLUS, Pmode, base, orig);
  3276.         /* Likewise, should we set special REG_NOTEs here?  */
  3277.       }
  3278.     return pic_ref;
  3279.   }
  3280.   
  3281. ***************
  3282. *** 1887,1892 ****
  3283. --- 1910,1919 ----
  3284.                 fprintf (file, ":w");
  3285.               if ((flag_pic == 2) && (breg == pic_offset_table_rtx))
  3286.                 fprintf (file, ":l");
  3287. +             if ((flag_pic == 3) && (breg == pic_offset_table_rtx))
  3288. +               fprintf (file, ":W");
  3289. +             if ((flag_pic == 4) && (breg == pic_offset_table_rtx))
  3290. +               fprintf (file, ":L");
  3291.             }
  3292.           if (addr != 0 && ireg != 0)
  3293.             {
  3294. diff -rc --new-file gcc-2.3.3/config/m68k.h /gnu/src/amiga/gcc-2.3.3/config/m68k.h
  3295. *** gcc-2.3.3/config/m68k.h    Tue Nov 24 22:01:03 1992
  3296. --- /gnu/src/amiga/gcc-2.3.3/config/m68k.h    Sun Feb  6 19:09:12 1994
  3297. ***************
  3298. *** 327,335 ****
  3299.   #ifndef SUPPORT_SUN_FPA
  3300.   
  3301.   #define CONDITIONAL_REGISTER_USAGE \
  3302. ! {                                               \
  3303. !   if (flag_pic)                                 \
  3304. !     fixed_regs[PIC_OFFSET_TABLE_REGNUM] = 1;    \
  3305.   }
  3306.   
  3307.   #else /* defined SUPPORT_SUN_FPA */
  3308. --- 327,338 ----
  3309.   #ifndef SUPPORT_SUN_FPA
  3310.   
  3311.   #define CONDITIONAL_REGISTER_USAGE \
  3312. ! {                                                \
  3313. !   if (flag_pic)                                  \
  3314. !     fixed_regs[PIC_OFFSET_TABLE_REGNUM] = 1;     \
  3315. !   /* prevent saving/restoring of the base reg */ \
  3316. !   if (flag_pic == 3)                 \
  3317. !     call_used_regs[PIC_OFFSET_TABLE_REGNUM] = 1; \
  3318.   }
  3319.   
  3320.   #else /* defined SUPPORT_SUN_FPA */
  3321. diff -rc --new-file gcc-2.3.3/config/m68k.md /gnu/src/amiga/gcc-2.3.3/config/m68k.md
  3322. *** gcc-2.3.3/config/m68k.md    Mon Nov 23 22:47:27 1992
  3323. --- /gnu/src/amiga/gcc-2.3.3/config/m68k.md    Sun Feb  6 19:09:12 1994
  3324. ***************
  3325. *** 704,716 ****
  3326.   {
  3327.     if (flag_pic && symbolic_operand (operands[1], SImode)) 
  3328.       {
  3329. !       /* The source is an address which requires PIC relocation.  
  3330. !          Call legitimize_pic_address with the source, mode, and a relocation
  3331. !          register (a new pseudo, or the final destination if reload_in_progress
  3332. !          is set).   Then fall through normally */
  3333. !       extern rtx legitimize_pic_address();
  3334. !       rtx temp = reload_in_progress ? operands[0] : gen_reg_rtx (Pmode);
  3335. !       operands[1] = legitimize_pic_address (operands[1], SImode, temp);
  3336.       }
  3337.   }")
  3338.   
  3339. --- 704,721 ----
  3340.   {
  3341.     if (flag_pic && symbolic_operand (operands[1], SImode)) 
  3342.       {
  3343. ! #ifdef LEGITIMATE_BASEREL_OPERAND_P
  3344. !       if (flag_pic < 3 || !LEGITIMATE_BASEREL_OPERAND_P (operands[1]))
  3345. ! #endif
  3346. !       {
  3347. !         /* The source is an address which requires PIC relocation.  
  3348. !            Call legitimize_pic_address with the source, mode, and a relocation
  3349. !            register (a new pseudo, or the final destination if reload_in_progress
  3350. !            is set).   Then fall through normally */
  3351. !         extern rtx legitimize_pic_address();
  3352. !         rtx temp = reload_in_progress ? operands[0] : gen_reg_rtx (Pmode);
  3353. !         operands[1] = legitimize_pic_address (operands[1], SImode, temp);
  3354. !       }
  3355.       }
  3356.   }")
  3357.   
  3358. ***************
  3359. *** 1711,1718 ****
  3360.   
  3361.         /* These insns can result from reloads to access
  3362.        stack slots over 64k from the frame pointer.  */
  3363. !       if (GET_CODE (operands[2]) == CONST_INT
  3364. !       && INTVAL (operands[2]) + 0x8000 >= (unsigned) 0x10000)
  3365.           return \"move%.l %2,%0\;add%.l %1,%0\";
  3366.   #ifdef SGS
  3367.         if (GET_CODE (operands[2]) == REG)
  3368. --- 1716,1724 ----
  3369.   
  3370.         /* These insns can result from reloads to access
  3371.        stack slots over 64k from the frame pointer.  */
  3372. !       if (((GET_CODE (operands[2]) == CONST_INT
  3373. !        && INTVAL (operands[2]) + 0x8000 >= (unsigned) 0x10000))
  3374. !       || (flag_pic == 4 && operands[1] == pic_offset_table_rtx))
  3375.           return \"move%.l %2,%0\;add%.l %1,%0\";
  3376.   #ifdef SGS
  3377.         if (GET_CODE (operands[2]) == REG)
  3378. ***************
  3379. *** 4651,4657 ****
  3380.     ""
  3381.     "
  3382.   {
  3383. !   if (flag_pic && GET_CODE (XEXP (operands[0], 0)) == SYMBOL_REF)
  3384.       operands[0] = gen_rtx (MEM, GET_MODE (operands[0]),
  3385.                  force_reg (Pmode, XEXP (operands[0], 0)));
  3386.   }")
  3387. --- 4657,4663 ----
  3388.     ""
  3389.     "
  3390.   {
  3391. !   if (flag_pic && flag_pic < 3 && GET_CODE (XEXP (operands[0], 0)) == SYMBOL_REF)
  3392.       operands[0] = gen_rtx (MEM, GET_MODE (operands[0]),
  3393.                  force_reg (Pmode, XEXP (operands[0], 0)));
  3394.   }")
  3395. ***************
  3396. *** 4662,4668 ****
  3397.        (match_operand:SI 1 "general_operand" "g"))]
  3398.     ;; Operand 1 not really used on the m68000.
  3399.   
  3400. !   "! flag_pic"
  3401.     "*
  3402.   #ifdef MOTOROLA
  3403.     return \"jsr %0\";
  3404. --- 4668,4674 ----
  3405.        (match_operand:SI 1 "general_operand" "g"))]
  3406.     ;; Operand 1 not really used on the m68000.
  3407.   
  3408. !   "(! flag_pic || flag_pic >= 3)"
  3409.     "*
  3410.   #ifdef MOTOROLA
  3411.     return \"jsr %0\";
  3412. ***************
  3413. *** 4677,4683 ****
  3414.        (match_operand:SI 1 "general_operand" "g"))]
  3415.     ;; Operand 1 not really used on the m68000.
  3416.   
  3417. !   "flag_pic"
  3418.     "*
  3419.     return \"jsr %0\";
  3420.   ")
  3421. --- 4683,4689 ----
  3422.        (match_operand:SI 1 "general_operand" "g"))]
  3423.     ;; Operand 1 not really used on the m68000.
  3424.   
  3425. !   "(flag_pic && flag_pic < 3)"
  3426.     "*
  3427.     return \"jsr %0\";
  3428.   ")
  3429. ***************
  3430. *** 4693,4699 ****
  3431.     ""
  3432.     "
  3433.   {
  3434. !   if (flag_pic && GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF)
  3435.       operands[1] = gen_rtx (MEM, GET_MODE (operands[1]),
  3436.                  force_reg (Pmode, XEXP (operands[1], 0)));
  3437.   }")
  3438. --- 4699,4705 ----
  3439.     ""
  3440.     "
  3441.   {
  3442. !   if (flag_pic && flag_pic < 3 && GET_CODE (XEXP (operands[1], 0)) == SYMBOL_REF)
  3443.       operands[1] = gen_rtx (MEM, GET_MODE (operands[1]),
  3444.                  force_reg (Pmode, XEXP (operands[1], 0)));
  3445.   }")
  3446. ***************
  3447. *** 4704,4710 ****
  3448.       (call (match_operand:QI 1 "memory_operand" "o")
  3449.             (match_operand:SI 2 "general_operand" "g")))]
  3450.     ;; Operand 2 not really used on the m68000.
  3451. !   "! flag_pic"
  3452.     "*
  3453.   #ifdef MOTOROLA
  3454.     return \"jsr %1\";
  3455. --- 4710,4716 ----
  3456.       (call (match_operand:QI 1 "memory_operand" "o")
  3457.             (match_operand:SI 2 "general_operand" "g")))]
  3458.     ;; Operand 2 not really used on the m68000.
  3459. !   "(! flag_pic || flag_pic >= 3)"
  3460.     "*
  3461.   #ifdef MOTOROLA
  3462.     return \"jsr %1\";
  3463. ***************
  3464. *** 4719,4725 ****
  3465.       (call (match_operand:QI 1 "memory_operand" "o")
  3466.             (match_operand:SI 2 "general_operand" "g")))]
  3467.     ;; Operand 2 not really used on the m68000.
  3468. !   "flag_pic"
  3469.     "*
  3470.     return \"jsr %1\";
  3471.   ")
  3472. --- 4725,4731 ----
  3473.       (call (match_operand:QI 1 "memory_operand" "o")
  3474.             (match_operand:SI 2 "general_operand" "g")))]
  3475.     ;; Operand 2 not really used on the m68000.
  3476. !   "(flag_pic && flag_pic < 3)"
  3477.     "*
  3478.     return \"jsr %1\";
  3479.   ")
  3480. diff -rc --new-file gcc-2.3.3/config/t-amigados /gnu/src/amiga/gcc-2.3.3/config/t-amigados
  3481. *** gcc-2.3.3/config/t-amigados    Thu Jan  1 00:00:00 1970
  3482. --- /gnu/src/amiga/gcc-2.3.3/config/t-amigados    Sun Feb  6 19:09:13 1994
  3483. ***************
  3484. *** 0 ****
  3485. --- 1,180 ----
  3486. + # Makefile fragment for amigados target.
  3487. + # We generate two additional things:
  3488. + #
  3489. + # libb/libgcc.a
  3490. + #    A base relative version of libgcc.a which is used when compiling and
  3491. + #    linking with the '-resident' option.
  3492. + #
  3493. + # xgccv
  3494. + #    A forking gcc instead of one calling ssytem(). This makes it less
  3495. + #    system conformant (can't ^C it when started from make), while
  3496. + #    providing increased functionality (-pipe option).
  3497. + # Use the vfork'ing version of gcc by default, so that the -pipe option can
  3498. + # get tested.  To use the regular version just do "make XGCC=gcc".
  3499. + XGCC = xgccv -pipe
  3500. + GCC_FOR_TARGET = ./$(XGCC) -B./
  3501. + # Build residentable versions of the gcc executables by default.  Use
  3502. + # "make RESIDENT=" to build non-residentable versions.
  3503. + RESIDENT = -resident
  3504. + # The standard additional target flags for the compiler.
  3505. + T_CFLAGS = $(RESIDENT)
  3506. + # Allow the user to override the default target optimizations with gcc, or
  3507. + # if the target compiler is not gcc and doesn't understand -O<N>.
  3508. + T_OPTIMISE = -O2
  3509. + # Each compilation environment (Manx, Dice, GCC, SAS/C, etc) provides its
  3510. + # own equivalent of the UNIX /usr/include tree.  For gcc, the standard
  3511. + # headers are in /gnu/include and system specific headers are in
  3512. + # /gnu/os-include.  Use these paths for fixincludes.
  3513. + SYSTEM_HEADER_DIR = /gnu/include
  3514. + OTHER_FIXINCLUDES_DIRS = /gnu/os-include
  3515. + # We don't need a libgcc1, it's all in ixemul.library
  3516. + LIBGCC1 = libgcc1.null
  3517. + # Flags to use when compiling the normal version of libgcc.a.
  3518. + # Don't compile with debugging, as long as there is no debugger.
  3519. + # Explicitly leave out the -resident compilation flag and don't use T_CFLAGS.
  3520. + LIBGCC2_CFLAGS = $(T_OPTIMIZE) $(INTERNAL_CFLAGS) $(X_CFLAGS) $(CFLAGS) \
  3521. +           $(CROSS_GCC_CFLAGS)
  3522. + # Flags to use when compiling the base relative version of libgcc.a.
  3523. + # Don't compile with debugging, as long as there is no debugger.
  3524. + # Explicitly force -resident in the compilation flags and don't use T_CFLAGS.
  3525. + LIBBGCC2_CFLAGS = $(T_OPTIMIZE) $(INTERNAL_CFLAGS) $(X_CFLAGS) $(CFLAGS) \
  3526. +           $(CROSS_GCC_CFLAGS) -resident
  3527. + # Build the base relative library.
  3528. + # It is later copied into /gnu/lib/gcc-lib/amigados/<version>/libb/libgcc.a,
  3529. + # whereas libgcc.a is copied into /gnu/lib/gcc-lib/amigados/<version>/libgcc.a.
  3530. + # It doesn't work very well to define one of the EXTRA_* macros to contain
  3531. + # libb/libgcc.a, particularly for doing "make stageN" or "make install".
  3532. + GCC_PARTS=$(GCC_PASSES) libgcc.a libb/libgcc.a $(EXTRA_PROGRAMS) $(USE_COLLECT2) $(EXTRA_PARTS)
  3533. + INSTALL_EXTRA_PARTS = install-libbgcc install-gccv
  3534. + # This includes the knowledge that target amigados doesn't need libgcc1.a
  3535. + libb/libgcc.a: libgcc2.c libgcc2.ready $(CONFIG_H) $(LIB2FUNCS_EXTRA) \
  3536. +    longlong.h gbl-ctors.h config.status
  3537. + # Actually build it in tmplibbgcc.a, then rename at end,
  3538. + # so that libb/libgcc.a itself remains nonexistent if compilation is aborted.
  3539. +     -rm -f tmplibbgcc.a
  3540. + # -e causes any failing command to make this rule fail.
  3541. + # -e doesn't work in certain shells, so we test $$? as well.
  3542. +     set -e; \
  3543. +     for name in $(LIB2FUNCS); \
  3544. +     do \
  3545. +       echo $${name}; \
  3546. +       $(GCC_FOR_TARGET) $(LIBBGCC2_CFLAGS) $(INCLUDES) -c -DL$${name} \
  3547. +           $(srcdir)/libgcc2.c -o $${name}.o; \
  3548. +       if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
  3549. +       $(AR) $(AR_FLAGS) tmplibbgcc.a $${name}.o; \
  3550. +       rm -f $${name}.o; \
  3551. +     done
  3552. + # Some shells crash when a loop has no items.
  3553. + # So make sure there is always at least one--`..'.
  3554. + # Then ignore it.
  3555. + # We don't use -e here because there are if statements
  3556. + # that should not make the command give up when the if condition is false.
  3557. + # Instead, we test for failure after each command where it matters.
  3558. +     -for file in .. $(LIB2FUNCS_EXTRA); \
  3559. +     do \
  3560. +       if [ x$${file} != x.. ]; then \
  3561. +         name=`echo $${file} | sed -e 's/[.]c$$//' -e 's/[.]asm$$//'`; \
  3562. +         echo $${name}; \
  3563. +         if [ $${name}.asm = $${file} ]; then \
  3564. +           cp $${file} $${name}.s; file=$${name}.s; \
  3565. +           if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
  3566. +         else true; fi; \
  3567. +         $(GCC_FOR_TARGET) $(LIBBGCC2_CFLAGS) $(INCLUDES) -c $${file}; \
  3568. +         if [ $$? -eq 0 ] ; then true; else exit 1; fi; \
  3569. +         $(AR) $(AR_FLAGS) tmplibbgcc.a $${name}.o; \
  3570. +         rm -f $${name}.[so]; \
  3571. +       else true; \
  3572. +       fi; \
  3573. +     done
  3574. +     -if $(RANLIB_TEST) ; then $(RANLIB) tmplibbgcc.a; else true; fi
  3575. +     -if [ -d libb ] ; then true ; else mkdir libb ; fi
  3576. +     mv tmplibbgcc.a libb/libgcc.a
  3577. + install-libbgcc: libb/libgcc.a install-dir
  3578. +     -if [ -d $(libsubdir)/libb ] ; then true ; else mkdir $(libsubdir)/libb ; fi
  3579. +     -if [ -f libb/libgcc.a ] ; then \
  3580. +       rm -f $(libsubdir)/libb/libgcc.a; \
  3581. +       $(INSTALL_DATA) libb/libgcc.a $(libsubdir)/libb/libgcc.a; \
  3582. +       if $(RANLIB_TEST) ; then \
  3583. +         (cd $(libsubdir)/libb; $(RANLIB) libgcc.a); else true; fi; \
  3584. +       chmod a-x $(libsubdir)/libb/libgcc.a; \
  3585. +     else true; fi
  3586. +     
  3587. + # The default gcc (xgcc) is built without -DAMIGADOS_FORK_GCC. This gcc (xgccv)
  3588. + # is built with AMIGADOS_FORK_GCC defined, so that it can use '-pipe'.  We
  3589. + # don't want to define EXTRA_PASSES to xgccv because that will cause xgccv
  3590. + # to be installed in $(libsubdir), so instead we use the default GCC_PASSES
  3591. + # and add xgccv to it.
  3592. + GCC_PASSES = xgcc xgccv cc1 cpp $(EXTRA_PASSES)
  3593. + xgccv: xgccv.o version.o $(LIBDEPS)
  3594. +     $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o xgccv xgccv.o version.o $(LIBS)
  3595. + xgccv.o: gcc.c $(CONFIG_H) gvarargs.h obstack.h
  3596. +     $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \
  3597. +   -DSTANDARD_STARTFILE_PREFIX=\"$(libdir)/\" \
  3598. +   -DSTANDARD_EXEC_PREFIX=\"$(libdir)/gcc-lib/\" \
  3599. +   -DDEFAULT_TARGET_MACHINE=\"$(target)\" \
  3600. +   -DTOOLDIR=\"$(tooldir)/\" \
  3601. +   -DAMIGADOS_FORK_GCC \
  3602. +   -c `echo $(srcdir)/gcc.c | sed 's,^\./,,'` -o xgccv.o
  3603. + install-gccv: xgccv
  3604. +     rm -f $(bindir)/gccv
  3605. +     $(INSTALL_PROGRAM) xgccv $(bindir)/gccv
  3606. + # When making one of the stage<N> dirs, we need to make a libb subdir for
  3607. + # it, and copy libbgcc.a there as libgcc.a.
  3608. + EXTRA_STAGE1_TARGETS = stage1-libb
  3609. + EXTRA_STAGE2_TARGETS = stage2-libb
  3610. + EXTRA_STAGE3_TARGETS = stage3-libb
  3611. + EXTRA_STAGE4_TARGETS = stage4-libb
  3612. + stage1-libb:
  3613. +     -if [ -d stage1 ] ; then true ; else mkdir stage1 ; fi
  3614. +     -if [ -d stage1/libb ] ; then true ; else mkdir stage1/libb ; fi
  3615. +     -cp libb/libgcc.a stage1/libb/libgcc.a
  3616. +     -if $(RANLIB_TEST) ; then $(RANLIB) stage1/libb/libgcc.a; else true; fi
  3617. + stage2-libb:
  3618. +     -if [ -d stage2 ] ; then true ; else mkdir stage2 ; fi
  3619. +     -if [ -d stage2/libb ] ; then true ; else mkdir stage2/libb ; fi
  3620. +     -cp libb/libgcc.a stage2/libb/libgcc.a
  3621. +     -if $(RANLIB_TEST) ; then $(RANLIB) stage2/libb/libgcc.a; else true; fi
  3622. + stage3-libb:
  3623. +     -if [ -d stage3 ] ; then true ; else mkdir stage3 ; fi
  3624. +     -if [ -d stage3/libb ] ; then true ; else mkdir stage3/libb ; fi
  3625. +     -cp libb/libgcc.a stage3/libb/libgcc.a
  3626. +     -if $(RANLIB_TEST) ; then $(RANLIB) stage3/libb/libgcc.a; else true; fi
  3627. + stage4-libb:
  3628. +     -if [ -d stage4 ] ; then true ; else mkdir stage4 ; fi
  3629. +     -if [ -d stage4/libb ] ; then true ; else mkdir stage4/libb ; fi
  3630. +     -cp libb/libgcc.a stage4/libb/libgcc.a
  3631. +     -if $(RANLIB_TEST) ; then $(RANLIB) stage4/libb/libgcc.a; else true; fi
  3632. diff -rc --new-file gcc-2.3.3/config/x-amigados /gnu/src/amiga/gcc-2.3.3/config/x-amigados
  3633. *** gcc-2.3.3/config/x-amigados    Thu Jan  1 00:00:00 1970
  3634. --- /gnu/src/amiga/gcc-2.3.3/config/x-amigados    Sun Feb  6 19:09:12 1994
  3635. ***************
  3636. *** 0 ****
  3637. --- 1,36 ----
  3638. + # Note: It doesn't do any good to try to define prefix or local_prefix
  3639. + # in the host overrides because configure will just change them back.
  3640. + # You either have to give an appropriate option to configure or live with
  3641. + # an Amiga specific patch to configure.  See the note in configure.  -fnf
  3642. + # Building under amigados almost certainly requires an already working gcc.
  3643. + # Use gccv, which is a gcc compiled with AMIGADOS_FORK_GCC so "-pipe" will
  3644. + # work and get exercised.  To bootstrap with the regular gcc just do
  3645. + # "make CC=gcc"
  3646. + CC = gccv -pipe
  3647. + # Allow the user to override the default host optimization with gcc, or if the
  3648. + # host compiler is not gcc and doesn't understand -O<N>.
  3649. + X_OPTIMIZE = -O2
  3650. + # The standard additional host flags for the compiler.
  3651. + X_CFLAGS = $(X_OPTIMIZE)
  3652. + # Man pages get a wierd suffix...
  3653. + manext = .0
  3654. + # We really shouldn't specify CFLAGS from here, but there's no other way
  3655. + # to get rid of the `-g' indoctrinated by Makefile.in.  Note this becomes
  3656. + # part of both the host compilation CFLAGS and the target compilation
  3657. + # CFLAGS.
  3658. + CFLAGS =
  3659. + # Ranlib does exist, but may not be in a path where the default RANLIB_TEST
  3660. + # expects it, so just force it to true.
  3661. + RANLIB_TEST = true
  3662. diff -rc --new-file gcc-2.3.3/config/xm-amigados.h /gnu/src/amiga/gcc-2.3.3/config/xm-amigados.h
  3663. *** gcc-2.3.3/config/xm-amigados.h    Thu Jan  1 00:00:00 1970
  3664. --- /gnu/src/amiga/gcc-2.3.3/config/xm-amigados.h    Sun Feb  6 19:09:13 1994
  3665. ***************
  3666. *** 0 ****
  3667. --- 1,215 ----
  3668. + /* Configuration for GNU C-compiler for Commodore Amiga, running AmigaDOS.
  3669. +    Copyright (C) 1992 Free Software Foundation, Inc.
  3670. +    Contributed by Markus M. Wild (wild@amiga.physik.unizh.ch).
  3671. + This file is part of GNU CC.
  3672. + GNU CC is free software; you can redistribute it and/or modify
  3673. + it under the terms of the GNU General Public License as published by
  3674. + the Free Software Foundation; either version 2, or (at your option)
  3675. + any later version.
  3676. + GNU CC is distributed in the hope that it will be useful,
  3677. + but WITHOUT ANY WARRANTY; without even the implied warranty of
  3678. + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  3679. + GNU General Public License for more details.
  3680. + You should have received a copy of the GNU General Public License
  3681. + along with GNU CC; see the file COPYING.  If not, write to
  3682. + the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */
  3683. + /* first include the generic header, then modify some parts.. */
  3684. + #include "xm-m68k.h"
  3685. + /* Amiga specific headers, such as from the Native Developer Update kits,
  3686. +    go in SYSTEM_INCLUDE_DIR.  STANDARD_INCLUDE_DIR is the equivalent of
  3687. +    Unix "/usr/include".  All other include paths are set in Makefile. */
  3688. + #define SYSTEM_INCLUDE_DIR    "/gnu/os-include"
  3689. + #define STANDARD_INCLUDE_DIR    "/gnu/include"
  3690. + /* Fork one piped subcommand.  SEARCH_FLAG is the system call to use
  3691. +    (either execv or execvp).  ARGV is the arg vector to use.
  3692. +    NOT_LAST is nonzero if this is not the last subcommand
  3693. +    (i.e. its output should be piped to the next one.)  */
  3694. + #ifndef AMIGADOS_FORK_GCC
  3695. + /* This version uses a more or less amigados-conformant way of running a
  3696. +    program (in the context of the parent). If you want to use -pipe however,
  3697. +    you'll have to use the vfork() version afterwards. */
  3698. + #define PEXECUTE(SEARCH_FLAG,PROGRAM,ARGV,NOT_LAST) \
  3699. + ({char *_argline;                        \
  3700. +   int _arglinelength, _i;                    \
  3701. +                                 \
  3702. +   for (_i = 1, _arglinelength=0; ARGV[_i]; ++_i)        \
  3703. +     _arglinelength += strlen(ARGV[_i]) + 1;            \
  3704. +                                 \
  3705. +   _arglinelength += strlen(PROGRAM) + 1;            \
  3706. +                                 \
  3707. +   if (!(_argline = (char *)alloca(_arglinelength)))         \
  3708. +     pfatal_with_name ("alloca");                \
  3709. +                                 \
  3710. +   strcpy(_argline, PROGRAM);                    \
  3711. +   for (_i = 1; ARGV[_i]; ++_i)                     \
  3712. +     {                                \
  3713. +       strcat(_argline, " ");                    \
  3714. +       strcat(_argline, ARGV[_i]);                \
  3715. +     }                                \
  3716. +                                 \
  3717. +   ssystem(_argline); })                        \
  3718. + #define PEXECUTE_RESULT(STATUS, COMMAND) \
  3719. +   ({ STATUS = COMMAND.pid; })
  3720. + #else
  3721. + /* the vfork() version. This one has the drawback, that gcc is not 
  3722. +    interruptible when started from make, since ixemul.library doesn't yet
  3723. +    propagate ^C to subprocesses. */
  3724. + #define PEXECUTE(SEARCH_FLAG,PROGRAM,ARGV,NOT_LAST) \
  3725. + ({int (*_func)() = (SEARCH_FLAG ? execv : execvp);            \
  3726. +   int _pid;                                \
  3727. +   int _pdes[2];                                \
  3728. +   int _input_desc = last_pipe_input;                    \
  3729. +   int _output_desc = STDOUT_FILE_NO;                    \
  3730. +   int _retries, _sleep_interval, _result;                \
  3731. +                                     \
  3732. +   /* If this isn't the last process, make a pipe for its output,    \
  3733. +      and record it as waiting to be the input to the next process.  */    \
  3734. +                                     \
  3735. +   if (NOT_LAST)                                \
  3736. +     {                                    \
  3737. +       if (pipe (_pdes) < 0)                        \
  3738. +     pfatal_with_name ("pipe");                    \
  3739. +       _output_desc = _pdes[WRITE_PORT];                    \
  3740. +       last_pipe_input = _pdes[READ_PORT];                \
  3741. +     }                                    \
  3742. +   else                                    \
  3743. +     last_pipe_input = STDIN_FILE_NO;                    \
  3744. +                                     \
  3745. +   /* Fork a subprocess; wait and retry if it fails.  */            \
  3746. +   _sleep_interval = 1;                            \
  3747. +   for (_retries = 0; _retries < 4; _retries++)                \
  3748. +     {                                    \
  3749. +       _pid = vfork ();                            \
  3750. +       if (_pid >= 0)                            \
  3751. +     break;                                \
  3752. +       sleep (_sleep_interval);                        \
  3753. +       _sleep_interval *= 2;                        \
  3754. +     }                                    \
  3755. +                                     \
  3756. +   switch (_pid)                                \
  3757. +     {                                    \
  3758. +     case -1:                                \
  3759. +       pfatal_with_name ("vfork");                    \
  3760. +       /* NOTREACHED */                            \
  3761. +       _result = 0;                            \
  3762. +       break;                                \
  3763. +                                     \
  3764. +     case 0: /* child */                            \
  3765. +       /* Move the input and output pipes into place, if nec.  */    \
  3766. +       if (_input_desc != STDIN_FILE_NO)                    \
  3767. +     {                                \
  3768. +       close (STDIN_FILE_NO);                    \
  3769. +       dup (_input_desc);                        \
  3770. +       close (_input_desc);                        \
  3771. +     }                                \
  3772. +       if (_output_desc != STDOUT_FILE_NO)                \
  3773. +     {                                \
  3774. +       close (STDOUT_FILE_NO);                    \
  3775. +       dup (_output_desc);                        \
  3776. +       close (_output_desc);                        \
  3777. +     }                                \
  3778. +                                     \
  3779. +       /* Close the parent's descs that aren't wanted here.  */        \
  3780. +       if (last_pipe_input != STDIN_FILE_NO)                \
  3781. +     close (last_pipe_input);                    \
  3782. +                                     \
  3783. +       /* Exec the program.  */                        \
  3784. +       (*_func) (PROGRAM, ARGV);                        \
  3785. +       perror_exec (PROGRAM);                        \
  3786. +       exit (-1);                            \
  3787. +       /* NOTREACHED */                            \
  3788. +       _result = 0;                            \
  3789. +       break;                                \
  3790. +                                     \
  3791. +     default:                                \
  3792. +       /* In the parent, after forking.                    \
  3793. +      Close the descriptors that we made for this child.  */        \
  3794. +       if (_input_desc != STDIN_FILE_NO)                    \
  3795. +     close (_input_desc);                        \
  3796. +       if (_output_desc != STDOUT_FILE_NO)                \
  3797. +     close (_output_desc);                        \
  3798. +                                     \
  3799. +       /* Return child's process number.  */                \
  3800. +       _result = _pid;                            \
  3801. +       break;                                \
  3802. +     }                                     \
  3803. + _result; })                                \
  3804. + #define PEXECUTE_RESULT(STATUS, COMMAND) \
  3805. +   ({ wait (& STATUS); })
  3806. + #endif /* AMIGADOS_FORK_GCC */
  3807. + /* the following macros are stolen more or less from xm-vms.h ... */
  3808. + /* This macro is used to help compare filenames in cp-lex.c.
  3809. +    We also need to make sure that the names are all lower case, because
  3810. +    we must be able to compare filenames to determine if a file implements
  3811. +    a class.  */
  3812. + #define FILE_NAME_NONDIRECTORY(C)                \
  3813. + ({                                \
  3814. +    extern char *rindex();                    \
  3815. +    char * pnt_ = (C), * pnt1_;                    \
  3816. +    pnt1_ = pnt_ - 1;                        \
  3817. +    while (*++pnt1_)                        \
  3818. +      if ((*pnt1_ >= 'A' && *pnt1_ <= 'Z')) *pnt1_ |= 0x20;    \
  3819. +    pnt1_ = rindex (pnt_, '/');                     \
  3820. +    pnt1_ = (pnt1_ == 0 ? rindex (pnt_, ':') : pnt1_);        \
  3821. +    (pnt1_ == 0 ? pnt_ : pnt1_ + 1);                \
  3822. +  })
  3823. + /* Macro to generate the name of the cross reference file.  The standard
  3824. +    one does not work, since it was written assuming that the conventions
  3825. +    of a unix style filesystem will work on the host system.
  3826. +  
  3827. +    Contrary to VMS, I'm using the original unix filename, there's no reason
  3828. +    not to use this under AmigaDOS. */
  3829. + #define XREF_FILE_NAME(BUFF, NAME)    \
  3830. +   s = FILE_NAME_NONDIRECTORY (NAME);            \
  3831. +   if (s == NAME) sprintf(BUFF, ".%s.gxref", NAME);    \
  3832. +   else {                        \
  3833. +     unsigned char ch = *s; /* could be Latin1 char.. */    \
  3834. +     /* temporary: cut the filename from the directory */\
  3835. +     *s = 0;                        \
  3836. +     sprintf (BUFF, "%s.%c%s.gxref", NAME, ch, s+1);    \
  3837. +     /* and restore the filename */            \
  3838. +     *s = ch;                        \
  3839. +   }                            \
  3840. + /* Macro that is used in cp-xref.c to determine whether a file name is
  3841. +    absolute or not.
  3842. +    This checks for both, '/' as first character, since we're running under
  3843. +    ixemul.library which provides for this unix'ism, and for the usual 
  3844. +    logical-terminator, ':', somewhere in the filename. */
  3845. + #define FILE_NAME_ABSOLUTE_P(NAME) (NAME[0] == '/' || index(NAME, ':'))
  3846. + /* the colon conflicts with the name space of logicals */
  3847. + #define PATH_SEPARATOR ','
  3848. + /* AmigaDOS handles rename(2) *much* better than any link(2)/unlink(2)
  3849. +    hacks. It's actually the inverse case as on Unix. rename(2) was always
  3850. +    there, link(2) is new with OS 2.0 */
  3851. + #define HAVE_rename 1
  3852. diff -rc --new-file gcc-2.3.3/configure /gnu/src/amiga/gcc-2.3.3/configure
  3853. *** gcc-2.3.3/configure    Mon Dec 21 07:58:23 1992
  3854. --- /gnu/src/amiga/gcc-2.3.3/configure    Sun Feb  6 19:09:13 1994
  3855. ***************
  3856. *** 28,33 ****
  3857. --- 28,34 ----
  3858.   #       --build=TARGET    specifies configuration of machine you are
  3859.   #                using to compile GCC.
  3860.   #       --prefix=DIR        specifies directory to install in.
  3861. + #       --local-prefix=DIR    specifies directory to put local ./include in.
  3862.   #       --exec-prefix=DIR    specifies directory to install executables in.
  3863.   #       --with-gnu-ld    arrange to work with GNU ld.
  3864.   #       --with-gnu-as    arrange to work with GAS.
  3865. ***************
  3866. *** 52,65 ****
  3867.   
  3868.   host=
  3869.   
  3870. ! # Default prefix to /usr/local.
  3871. ! prefix=/usr/local
  3872.   # Default is to let the Makefile set exec_prefix from $(prefix)
  3873.   exec_prefix='$(prefix)'
  3874.   
  3875.   remove=rm
  3876. ! hard_link=ln
  3877. ! symbolic_link='ln -s'
  3878.   copy=cp
  3879.   
  3880.   # Record all the arguments, to write them in config.status.
  3881. --- 53,79 ----
  3882.   
  3883.   host=
  3884.   
  3885. ! # Note:  For AmigaDOS we want this to default to /gnu unless we specify
  3886. ! # otherwise to configure.  Changing it in Makefile.in or config/m68k/x-amigados
  3887. ! # is ineffective since configure will always change them back in the final
  3888. ! # generated Makefile, so we have to go to the root of the problem, which is
  3889. ! # here.  -fnf
  3890. ! # Default prefix to /gnu.
  3891. ! prefix=/gnu
  3892. ! # local_prefix specifies where to find the directory /usr/local/include
  3893. ! # We don't use $(prefix) for this
  3894. ! # because we always want GCC to search /usr/local/include
  3895. ! # even if GCC is installed somewhere other than /usr/local.
  3896. ! # Think THREE TIMES before specifying any other value for this!
  3897. ! # DO NOT make this use $prefix!
  3898. ! # Note:  See AmigaDOS note above for this AmigaDOS specific change.  -fnf
  3899. ! local_prefix=/local
  3900.   # Default is to let the Makefile set exec_prefix from $(prefix)
  3901.   exec_prefix='$(prefix)'
  3902.   
  3903.   remove=rm
  3904. ! hard_link=cp
  3905. ! symbolic_link=cp
  3906.   copy=cp
  3907.   
  3908.   # Record all the arguments, to write them in config.status.
  3909. ***************
  3910. *** 97,102 ****
  3911. --- 111,120 ----
  3912.       prefix=$arg
  3913.       next_arg=
  3914.       ;;
  3915. +   --local-prefix)
  3916. +     local_prefix=$arg
  3917. +     next_arg=
  3918. +     ;;
  3919.     --exec-prefix)
  3920.       exec_prefix=$arg
  3921.       next_arg=
  3922. ***************
  3923. *** 133,138 ****
  3924. --- 151,165 ----
  3925.        -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
  3926.       prefix=`echo $arg | sed 's/-*p[a-z]*=//'`
  3927.       ;;
  3928. +      -local-prefix | --local-prefix | --local-prefi | --local-pref | --local-pre \
  3929. +     | --local-pr | --local-p | --local- | --local | --loc | --lo | --l)
  3930. +     next_arg=--local-prefix
  3931. +     ;;
  3932. +      -local-prefix=* | --local-prefix=* | --local-prefi=* | --local-pref=* \
  3933. +     | --local-pre=* | --local-pr=* | --local-p=* | --local-=* | --local=* \
  3934. +     | --loc=* | --lo=* | --l=*)
  3935. +     local_prefix=`echo $arg | sed 's/-*l[-a-z]*=//'`
  3936. +     ;;
  3937.        -exec-prefix | --exec-prefix | --exec-prefi | --exec-pref | --exec-pre \
  3938.       | --exec-pr | --exec-p | --exec- | --exec | --exe | --ex | --e)
  3939.       next_arg=--exec-prefix
  3940. ***************
  3941. *** 185,191 ****
  3942.           srcdir=..
  3943.       fi
  3944.   fi
  3945.   if [ ! -r ${srcdir}/tree.c ]
  3946.   then
  3947.       if [ x$srcdirdefaulted = x ]
  3948. --- 212,218 ----
  3949.           srcdir=..
  3950.       fi
  3951.   fi
  3952. ! srcdir=../gcc-2.3.3-amiga    #Hack
  3953.   if [ ! -r ${srcdir}/tree.c ]
  3954.   then
  3955.       if [ x$srcdirdefaulted = x ]
  3956. ***************
  3957. *** 210,216 ****
  3958.   
  3959.       echo "\
  3960.   Usage: `basename $progname` [--host=HOST] [--build=BUILD]
  3961. !        [--prefix=DIR] [--exec-pref=DIR]
  3962.          [--with-gnu-as] [--with-gnu-ld] [--with-stabs] [--nfp] TARGET" 1>&2
  3963.       echo "Where HOST, TARGET and BUILD are three-part configuration names " 1>&2
  3964.       if [ -r config.status ]
  3965. --- 237,243 ----
  3966.   
  3967.       echo "\
  3968.   Usage: `basename $progname` [--host=HOST] [--build=BUILD]
  3969. !        [--prefix=DIR] [--local-pref=DIR] [--exec-pref=DIR]
  3970.          [--with-gnu-as] [--with-gnu-ld] [--with-stabs] [--nfp] TARGET" 1>&2
  3971.       echo "Where HOST, TARGET and BUILD are three-part configuration names " 1>&2
  3972.       if [ -r config.status ]
  3973. ***************
  3974. *** 476,481 ****
  3975. --- 503,515 ----
  3976.           fixincludes=fixinc.svr4
  3977.           broken_install=yes
  3978.           ;;
  3979. +     m68k-*-amigados)
  3980. +         xm_file=xm-amigados.h
  3981. +         out_file=amigados.c
  3982. +         tm_file=amigados.h
  3983. +         tmake_file=t-amigados
  3984. +         xmake_file=x-amigados
  3985. +         ;;
  3986.       m68k-cbm-sysv4*)        # Commodore variant of V.4.
  3987.           tm_file=amix.h
  3988.           xm_file=xm-amix.h
  3989. ***************
  3990. *** 1272,1284 ****
  3991.   
  3992.   # Remove all formfeeds, since some Makes get confused by them.
  3993.   # Also arrange to give the variables `target', `host_xmake_file',
  3994. ! # `tmake_file', `prefix', `exec_prefix' and `FIXINCLUDES'
  3995.   # values in the Makefile from the values they have in this script.
  3996.   rm -f Makefile.xx
  3997.   sed -e "s/ //" -e "s/^target=.*$/target=${target}/" \
  3998.       -e "s|^xmake_file=.*$|xmake_file=${host_xmake_file}|" \
  3999.       -e "s|^tmake_file=.*$|tmake_file=${tmake_file}|" \
  4000.       -e "s|^prefix[     ]*=.*|prefix = $prefix|" \
  4001.       -e "s|^exec_prefix[     ]*=.*|exec_prefix = $exec_prefix|" \
  4002.       -e "s|^FIXINCLUDES[     ]*=.*|FIXINCLUDES = $fixincludes|" \
  4003.       Makefile.tem > Makefile.xx
  4004. --- 1306,1319 ----
  4005.   
  4006.   # Remove all formfeeds, since some Makes get confused by them.
  4007.   # Also arrange to give the variables `target', `host_xmake_file',
  4008. ! # `tmake_file', `prefix', `local_prefix', `exec_prefix', `FIXINCLUDES'
  4009.   # values in the Makefile from the values they have in this script.
  4010.   rm -f Makefile.xx
  4011.   sed -e "s/ //" -e "s/^target=.*$/target=${target}/" \
  4012.       -e "s|^xmake_file=.*$|xmake_file=${host_xmake_file}|" \
  4013.       -e "s|^tmake_file=.*$|tmake_file=${tmake_file}|" \
  4014.       -e "s|^prefix[     ]*=.*|prefix = $prefix|" \
  4015. +     -e "s|^local_prefix[     ]*=.*|local_prefix = $local_prefix|" \
  4016.       -e "s|^exec_prefix[     ]*=.*|exec_prefix = $exec_prefix|" \
  4017.       -e "s|^FIXINCLUDES[     ]*=.*|FIXINCLUDES = $fixincludes|" \
  4018.       Makefile.tem > Makefile.xx
  4019. diff -rc --new-file gcc-2.3.3/expr.c /gnu/src/amiga/gcc-2.3.3/expr.c
  4020. *** gcc-2.3.3/expr.c    Sun Dec 20 07:16:15 1992
  4021. --- /gnu/src/amiga/gcc-2.3.3/expr.c    Sun Feb  6 19:10:18 1994
  4022. ***************
  4023. *** 1977,1982 ****
  4024. --- 1977,1988 ----
  4025.   
  4026.     argvec = (struct arg *) alloca (nargs * sizeof (struct arg));
  4027.   
  4028. + /* how would you do this RIGHT ?? fake a DECL node? dunno... */
  4029. + #ifdef ENCODE_SECTION_INFO
  4030. +   /* mark it as a function (to be in the text section that is) */
  4031. +   SYMBOL_REF_FLAG (fun) = 1;
  4032. + #endif
  4033.     INIT_CUMULATIVE_ARGS (args_so_far, (tree)0, fun);
  4034.   
  4035.     args_size.constant = 0;
  4036. diff -rc --new-file gcc-2.3.3/gcc.c /gnu/src/amiga/gcc-2.3.3/gcc.c
  4037. *** gcc-2.3.3/gcc.c    Tue Dec  8 13:32:53 1992
  4038. --- /gnu/src/amiga/gcc-2.3.3/gcc.c    Sun Feb  6 19:10:21 1994
  4039. ***************
  4040. *** 104,110 ****
  4041. --- 104,114 ----
  4042.   extern char *getenv ();
  4043.   
  4044.   extern int errno, sys_nerr;
  4045. + #ifndef HAVE_STRERROR
  4046. + /* provide a cheap strerror() emulator for those that don't have it */
  4047.   extern char *sys_errlist[];
  4048. + #define strerror(err) sys_errlist[err]
  4049. + #endif
  4050.   
  4051.   extern int execv (), execvp ();
  4052.   
  4053. ***************
  4054. *** 917,923 ****
  4055. --- 921,929 ----
  4056.   #endif /* !defined STANDARD_EXEC_PREFIX */
  4057.   
  4058.   static char *standard_exec_prefix = STANDARD_EXEC_PREFIX;
  4059. + #ifndef amigados
  4060.   static char *standard_exec_prefix_1 = "/usr/lib/gcc/";
  4061. + #endif
  4062.   #ifdef MD_EXEC_PREFIX
  4063.   static char *md_exec_prefix = MD_EXEC_PREFIX;
  4064.   #endif
  4065. ***************
  4066. *** 933,940 ****
  4067. --- 939,948 ----
  4068.   static char *md_startfile_prefix_1 = MD_STARTFILE_PREFIX_1;
  4069.   #endif
  4070.   static char *standard_startfile_prefix = STANDARD_STARTFILE_PREFIX;
  4071. + #ifndef amigados
  4072.   static char *standard_startfile_prefix_1 = "/lib/";
  4073.   static char *standard_startfile_prefix_2 = "/usr/lib/";
  4074. + #endif
  4075.   
  4076.   /* Clear out the vector of arguments (after a command is executed).  */
  4077.   
  4078. ***************
  4079. *** 1126,1142 ****
  4080.   #endif
  4081.         if (base == (char *)0)
  4082.       {
  4083.         if (access ("/usr/tmp", R_OK | W_OK) == 0)
  4084.           base = "/usr/tmp/";
  4085.         else
  4086.           base = "/tmp/";
  4087.       }
  4088.       }
  4089.   
  4090.     len = strlen (base);
  4091. !   temp_filename = xmalloc (len + sizeof("/ccXXXXXX"));
  4092.     strcpy (temp_filename, base);
  4093. !   if (len > 0 && temp_filename[len-1] != '/')
  4094.       temp_filename[len++] = '/';
  4095.     strcpy (temp_filename + len, "ccXXXXXX");
  4096.   
  4097. --- 1134,1158 ----
  4098.   #endif
  4099.         if (base == (char *)0)
  4100.       {
  4101. + #ifdef amigados
  4102. +       base = "ram:";
  4103. + #else
  4104.         if (access ("/usr/tmp", R_OK | W_OK) == 0)
  4105.           base = "/usr/tmp/";
  4106.         else
  4107.           base = "/tmp/";
  4108. + #endif
  4109.       }
  4110.       }
  4111.   
  4112.     len = strlen (base);
  4113. !   temp_filename = xmalloc (len + sizeof("/ccXXXXXX") + 1);
  4114.     strcpy (temp_filename, base);
  4115. !   if (len > 0 && temp_filename[len-1] != '/'
  4116. ! #ifdef amigados
  4117. !                         && temp_filename[len-1] != ':'
  4118. ! #endif
  4119. !                                     )
  4120.       temp_filename[len++] = '/';
  4121.     strcpy (temp_filename + len, "ccXXXXXX");
  4122.   
  4123. ***************
  4124. *** 1210,1215 ****
  4125. --- 1226,1232 ----
  4126.     int suffix_len = (machine_suffix) ? strlen (machine_suffix) : 0;
  4127.     int first_time = TRUE;
  4128.     struct prefix_list *pprefix;
  4129. +   char path_sep[] = { PATH_SEPARATOR, 0 };
  4130.   
  4131.     obstack_grow (&collect_obstack, env_var, strlen (env_var));
  4132.   
  4133. ***************
  4134. *** 1220,1226 ****
  4135.         if (machine_suffix)
  4136.       {
  4137.         if (!first_time)
  4138. !         obstack_grow (&collect_obstack, ":", 1);
  4139.           
  4140.         first_time = FALSE;
  4141.         obstack_grow (&collect_obstack, pprefix->prefix, len);
  4142. --- 1237,1243 ----
  4143.         if (machine_suffix)
  4144.       {
  4145.         if (!first_time)
  4146. !         obstack_grow (&collect_obstack, path_sep, 1);
  4147.           
  4148.         first_time = FALSE;
  4149.         obstack_grow (&collect_obstack, pprefix->prefix, len);
  4150. ***************
  4151. *** 1230,1236 ****
  4152.         if (just_machine_suffix && pprefix->require_machine_suffix == 2)
  4153.       {
  4154.         if (!first_time)
  4155. !         obstack_grow (&collect_obstack, ":", 1);
  4156.           
  4157.         first_time = FALSE;
  4158.         obstack_grow (&collect_obstack, pprefix->prefix, len);
  4159. --- 1247,1253 ----
  4160.         if (just_machine_suffix && pprefix->require_machine_suffix == 2)
  4161.       {
  4162.         if (!first_time)
  4163. !         obstack_grow (&collect_obstack, path_sep, 1);
  4164.           
  4165.         first_time = FALSE;
  4166.         obstack_grow (&collect_obstack, pprefix->prefix, len);
  4167. ***************
  4168. *** 1240,1246 ****
  4169.         if (!pprefix->require_machine_suffix)
  4170.       {
  4171.         if (!first_time)
  4172. !         obstack_grow (&collect_obstack, ":", 1);
  4173.   
  4174.         first_time = FALSE;
  4175.         obstack_grow (&collect_obstack, pprefix->prefix, len);
  4176. --- 1257,1263 ----
  4177.         if (!pprefix->require_machine_suffix)
  4178.       {
  4179.         if (!first_time)
  4180. !         obstack_grow (&collect_obstack, path_sep, 1);
  4181.   
  4182.         first_time = FALSE;
  4183.         obstack_grow (&collect_obstack, pprefix->prefix, len);
  4184. ***************
  4185. *** 1273,1279 ****
  4186.   
  4187.     /* Determine the filename to execute (special case for absolute paths).  */
  4188.   
  4189. !   if (*name == '/')
  4190.       {
  4191.         if (access (name, mode))
  4192.       {
  4193. --- 1290,1300 ----
  4194.   
  4195.     /* Determine the filename to execute (special case for absolute paths).  */
  4196.   
  4197. !   if (*name == '/'
  4198. ! #ifdef amigados
  4199. !           || index (name, ':')
  4200. ! #endif
  4201. !                     )
  4202.       {
  4203.         if (access (name, mode))
  4204.       {
  4205. ***************
  4206. *** 1479,1484 ****
  4207. --- 1500,1506 ----
  4208.      NOT_LAST is nonzero if this is not the last subcommand
  4209.      (i.e. its output should be piped to the next one.)  */
  4210.   
  4211. + #ifndef PEXECUTE
  4212.   #ifndef OS2
  4213.   #ifdef __MSDOS__
  4214.   
  4215. ***************
  4216. *** 1625,1630 ****
  4217. --- 1647,1653 ----
  4218.     return (search_flag ? spawnv : spawnvp) (1, program, argv);
  4219.   }
  4220.   #endif /* not OS2 */
  4221. + #endif /* !defined (PEXECUTE) */
  4222.   
  4223.   /* Execute the command specified by the arguments on the current line of spec.
  4224.      When using pipes, this includes several piped-together commands
  4225. ***************
  4226. *** 1719,1727 ****
  4227. --- 1742,1756 ----
  4228.       {
  4229.         char *string = commands[i].argv[0];
  4230.   
  4231. + #ifdef PEXECUTE
  4232. +       commands[i].pid = PEXECUTE (string != commands[i].prog,
  4233. +                   string, commands[i].argv,
  4234. +                   i + 1 < n_commands);
  4235. + #else
  4236.         commands[i].pid = pexecute (string != commands[i].prog,
  4237.                     string, commands[i].argv,
  4238.                     i + 1 < n_commands);
  4239. + #endif
  4240.   
  4241.         if (string != commands[i].prog)
  4242.       free (string);
  4243. ***************
  4244. *** 1742,1752 ****
  4245. --- 1771,1785 ----
  4246.       int pid;
  4247.       char *prog;
  4248.   
  4249. + #ifdef PEXECUTE_RESULT
  4250. +     pid = PEXECUTE_RESULT (status, commands[i]);
  4251. + #else /* PEXECUTE_RESULT */
  4252.   #ifdef __MSDOS__
  4253.           status = pid = commands[i].pid;
  4254.   #else
  4255.       pid = wait (&status);
  4256.   #endif
  4257. + #endif /* PEXECUTE_RESULT */
  4258.       if (pid < 0)
  4259.         abort ();
  4260.   
  4261. ***************
  4262. *** 1853,1858 ****
  4263. --- 1886,1892 ----
  4264.         if (*endp == PATH_SEPARATOR || *endp == 0)
  4265.           {
  4266.             strncpy (nstore, startp, endp-startp);
  4267. + #ifndef amigados
  4268.             if (endp == startp)
  4269.           {
  4270.             strcpy (nstore, "./");
  4271. ***************
  4272. *** 1864,1869 ****
  4273. --- 1898,1912 ----
  4274.           }
  4275.             else
  4276.           nstore[endp-startp] = 0;
  4277. + #else
  4278. +           if (endp[-1] != '/' && endp[-1] != ':')
  4279. +         {
  4280. +           nstore[endp-startp] = '/';
  4281. +           nstore[endp-startp+1] = 0;
  4282. +         }
  4283. +           else
  4284. +         nstore[endp-startp] = 0;
  4285. + #endif
  4286.             add_prefix (&exec_prefix, nstore, 0, 0, NULL_PTR);
  4287.             if (*endp == 0)
  4288.           break;
  4289. ***************
  4290. *** 1886,1891 ****
  4291. --- 1929,1935 ----
  4292.         if (*endp == PATH_SEPARATOR || *endp == 0)
  4293.           {
  4294.             strncpy (nstore, startp, endp-startp);
  4295. + #ifndef amigados
  4296.             if (endp == startp)
  4297.           {
  4298.             strcpy (nstore, "./");
  4299. ***************
  4300. *** 1897,1902 ****
  4301. --- 1941,1955 ----
  4302.           }
  4303.             else
  4304.           nstore[endp-startp] = 0;
  4305. + #else
  4306. +           if (endp[-1] != '/' && endp[-1] != ':')
  4307. +         {
  4308. +           nstore[endp-startp] = '/';
  4309. +           nstore[endp-startp+1] = 0;
  4310. +         }
  4311. +           else
  4312. +         nstore[endp-startp] = 0;
  4313. + #endif
  4314.             add_prefix (&startfile_prefix, nstore, 0, 0, NULL_PTR);
  4315.             /* Make separate list of dirs that came from LIBRARY_PATH.  */
  4316.             add_prefix (&library_prefix, nstore, 0, 0, NULL_PTR);
  4317. ***************
  4318. *** 1922,1927 ****
  4319. --- 1975,1981 ----
  4320.         if (*endp == PATH_SEPARATOR || *endp == 0)
  4321.           {
  4322.             strncpy (nstore, startp, endp-startp);
  4323. + #ifndef amigados
  4324.             if (endp == startp)
  4325.           {
  4326.             strcpy (nstore, "./");
  4327. ***************
  4328. *** 1933,1938 ****
  4329. --- 1987,2001 ----
  4330.           }
  4331.             else
  4332.           nstore[endp-startp] = 0;
  4333. + #else
  4334. +           if (endp[-1] != '/' && endp[-1] != ':')
  4335. +         {
  4336. +           nstore[endp-startp] = '/';
  4337. +           nstore[endp-startp+1] = 0;
  4338. +         }
  4339. +           else
  4340. +         nstore[endp-startp] = 0;
  4341. + #endif
  4342.             add_prefix (&startfile_prefix, nstore, 0, 0, NULL_PTR);
  4343.             /* Make separate list of dirs that came from LIBRARY_PATH.  */
  4344.             add_prefix (&library_prefix, nstore, 0, 0, NULL_PTR);
  4345. ***************
  4346. *** 2135,2144 ****
  4347. --- 2198,2211 ----
  4348.     /* Use 2 as fourth arg meaning try just the machine as a suffix,
  4349.        as well as trying the machine and the version.  */
  4350.     add_prefix (&exec_prefix, standard_exec_prefix, 0, 2, NULL_PTR);
  4351. + #ifndef amigados
  4352.     add_prefix (&exec_prefix, standard_exec_prefix_1, 0, 2, NULL_PTR);
  4353. + #endif
  4354.   
  4355.     add_prefix (&startfile_prefix, standard_exec_prefix, 0, 1, NULL_PTR);
  4356. + #ifndef amigados
  4357.     add_prefix (&startfile_prefix, standard_exec_prefix_1, 0, 1, NULL_PTR);
  4358. + #endif
  4359.   
  4360.     /* More prefixes are enabled in main, after we read the specs file
  4361.        and determine whether this is cross-compilation or not.  */
  4362. ***************
  4363. *** 3357,3366 ****
  4364. --- 3424,3435 ----
  4365.   
  4366.         add_prefix (&startfile_prefix, standard_startfile_prefix, 0, 0,
  4367.             NULL_PTR);
  4368. + #ifndef amigados
  4369.         add_prefix (&startfile_prefix, standard_startfile_prefix_1, 0, 0,
  4370.             NULL_PTR);
  4371.         add_prefix (&startfile_prefix, standard_startfile_prefix_2, 0, 0,
  4372.             NULL_PTR);
  4373. + #endif
  4374.   #if 0 /* Can cause surprises, and one can use -B./ instead.  */
  4375.         add_prefix (&startfile_prefix, "./", 0, 1, NULL_PTR);
  4376.   #endif
  4377. ***************
  4378. *** 3433,3442 ****
  4379. --- 3502,3515 ----
  4380.         register char *p;
  4381.         int len;
  4382.   
  4383. + #ifdef FILE_NAME_NONDIRECTORY
  4384. +       input_basename = FILE_NAME_NONDIRECTORY (input_filename);
  4385. + #else
  4386.         input_basename = input_filename;
  4387.         for (p = input_filename; *p; p++)
  4388.           if (*p == '/')
  4389.             input_basename = p + 1;
  4390. + #endif
  4391.   
  4392.         /* Find a suffix starting with the last period,
  4393.            and set basename_length to exclude that suffix.  */
  4394. ***************
  4395. *** 3675,3681 ****
  4396.     char *s;
  4397.   
  4398.     if (errno < sys_nerr)
  4399. !     s = concat ("%s: ", sys_errlist[errno], "");
  4400.     else
  4401.       s = "cannot open %s";
  4402.     fatal (s, name);
  4403. --- 3748,3754 ----
  4404.     char *s;
  4405.   
  4406.     if (errno < sys_nerr)
  4407. !     s = concat ("%s: ", strerror (errno), "");
  4408.     else
  4409.       s = "cannot open %s";
  4410.     fatal (s, name);
  4411. ***************
  4412. *** 3688,3694 ****
  4413.     char *s;
  4414.   
  4415.     if (errno < sys_nerr)
  4416. !     s = concat ("%s: ", sys_errlist[errno], "");
  4417.     else
  4418.       s = "cannot open %s";
  4419.     error (s, name);
  4420. --- 3761,3767 ----
  4421.     char *s;
  4422.   
  4423.     if (errno < sys_nerr)
  4424. !     s = concat ("%s: ", strerror (errno), "");
  4425.     else
  4426.       s = "cannot open %s";
  4427.     error (s, name);
  4428. ***************
  4429. *** 3702,3708 ****
  4430.   
  4431.     if (errno < sys_nerr)
  4432.       s = concat ("installation problem, cannot exec %s: ",
  4433. !         sys_errlist[errno], "");
  4434.     else
  4435.       s = "installation problem, cannot exec %s";
  4436.     error (s, name);
  4437. --- 3775,3781 ----
  4438.   
  4439.     if (errno < sys_nerr)
  4440.       s = concat ("installation problem, cannot exec %s: ",
  4441. !         strerror (errno), "");
  4442.     else
  4443.       s = "installation problem, cannot exec %s";
  4444.     error (s, name);
  4445. diff -rc --new-file gcc-2.3.3/genconfig.c /gnu/src/amiga/gcc-2.3.3/genconfig.c
  4446. *** gcc-2.3.3/genconfig.c    Tue Oct 13 04:11:48 1992
  4447. --- /gnu/src/amiga/gcc-2.3.3/genconfig.c    Sun Feb  6 19:10:18 1994
  4448. ***************
  4449. *** 303,310 ****
  4450. --- 303,318 ----
  4451.     printf ("/* Generated automatically by the program `genconfig'\n\
  4452.   from the machine description file `md'.  */\n\n");
  4453.   
  4454. + #ifdef amigados
  4455. +   /* this constant probably better be 14 in general, or a cross compiling
  4456. +      host might choke on some amigados header files... */
  4457. +   /* Allow at least 14 operands for the sake of asm constructs.  */
  4458. +   max_recog_operands = 14;
  4459. + #else
  4460.     /* Allow at least 10 operands for the sake of asm constructs.  */
  4461.     max_recog_operands = 9;  /* We will add 1 later.  */
  4462. + #endif
  4463.     max_dup_operands = 1;
  4464.   
  4465.     /* Read the machine description.  */
  4466. diff -rc --new-file gcc-2.3.3/gstdarg.h /gnu/src/amiga/gcc-2.3.3/gstdarg.h
  4467. *** gcc-2.3.3/gstdarg.h    Mon Nov 30 23:06:24 1992
  4468. --- /gnu/src/amiga/gcc-2.3.3/gstdarg.h    Sun Feb  6 19:10:18 1994
  4469. ***************
  4470. *** 138,141 ****
  4471. --- 138,147 ----
  4472.   
  4473.   #endif /* __GNUC__ */
  4474.   #endif /* not _ANSI_STDARG_H_ */
  4475. + #ifdef amigados
  4476. + # ifndef _VA_LIST
  4477. + #  define _VA_LIST
  4478. +    typedef __gnuc_va_list va_list;
  4479. + # endif
  4480. + #endif /* amigados */
  4481.   #endif /* not _STDARG_H */
  4482. diff -rc --new-file gcc-2.3.3/gstddef.h /gnu/src/amiga/gcc-2.3.3/gstddef.h
  4483. *** gcc-2.3.3/gstddef.h    Sun Nov 22 22:03:34 1992
  4484. --- /gnu/src/amiga/gcc-2.3.3/gstddef.h    Sun Feb  6 19:10:18 1994
  4485. ***************
  4486. *** 2,7 ****
  4487. --- 2,47 ----
  4488.   #ifndef _STDDEF_H_
  4489.   #ifndef _ANSI_STDDEF_H
  4490.   
  4491. + #ifdef amigados
  4492. + /* GNU libc has special support in this file, 4.3bsd-net2 libc deserves that
  4493. +    just as well. The system headers are ANSI compliant, the used compiler IS
  4494. +    gcc, so it's really ok to use the system header, no reason to hassle
  4495. +    with a jungle of ifdefs. Besides, amigados is only defined if compiling
  4496. +    with host=amigados, it doesn't apply if compiling with target=amigados
  4497. +    on a different host with possibly different system headers. Same thing
  4498. +    would apply to gstdarg.h and gvarargs.h, but those headers are more
  4499. +    easily fixable than this one and I'm sick of writing the same comment
  4500. +    there as well. MW
  4501. +    Include the contents of <stddef.h> inline rather than with a #include,
  4502. +    to avoid infinite include recursion when this file is installed in
  4503. +    gcc's include directory as stddef.h.  (fnf)  */
  4504. + #define _STDDEF_H_
  4505. + #include <machine/ansi.h>
  4506. + typedef    _PTRDIFF_T_    ptrdiff_t;
  4507. + #ifdef    _SIZE_T_
  4508. + typedef    _SIZE_T_    size_t;
  4509. + #undef    _SIZE_T_
  4510. + #endif
  4511. + #ifdef    _WCHAR_T_
  4512. + typedef    _WCHAR_T_    wchar_t;
  4513. + #undef    _WCHAR_T_
  4514. + #endif
  4515. + #ifndef    NULL
  4516. + #define    NULL    0
  4517. + #endif
  4518. + #define    offsetof(type, member)    ((size_t)(&((type *)0)->member))
  4519. + #else /* not amigados */
  4520.   /* Any one of these symbols __need_* means that GNU libc
  4521.      wants us just to define one data type.  So don't define
  4522.      the symbols that indicate this file's entire job has been done.  */
  4523. ***************
  4524. *** 146,151 ****
  4525. --- 186,193 ----
  4526.   #ifndef __WCHAR_TYPE__
  4527.   #define __WCHAR_TYPE__ int
  4528.   #endif
  4529. + #endif /* not amigados */
  4530.   #ifdef __GNUG__
  4531.   /* In C++, wchar_t is a distinct basic type,
  4532.      and we can expect __wchar_t to be defined by cc1plus.  */
  4533. diff -rc --new-file gcc-2.3.3/gvarargs.h /gnu/src/amiga/gcc-2.3.3/gvarargs.h
  4534. *** gcc-2.3.3/gvarargs.h    Mon Nov 30 23:07:12 1992
  4535. --- /gnu/src/amiga/gcc-2.3.3/gvarargs.h    Sun Feb  6 19:10:19 1994
  4536. ***************
  4537. *** 136,142 ****
  4538.   #if !defined (_VA_LIST_) || defined (__BSD_NET2__) || defined (____386BSD____)
  4539.   /* The macro _VA_LIST is used in SCO Unix 3.2.  */
  4540.   #ifndef _VA_LIST
  4541. ! #if !(defined (__BSD_NET2__) || defined (____386BSD____))
  4542.   #define _VA_LIST_
  4543.   #endif
  4544.   #define _VA_LIST
  4545. --- 136,142 ----
  4546.   #if !defined (_VA_LIST_) || defined (__BSD_NET2__) || defined (____386BSD____)
  4547.   /* The macro _VA_LIST is used in SCO Unix 3.2.  */
  4548.   #ifndef _VA_LIST
  4549. ! #if !(defined (__BSD_NET2__) || defined (____386BSD____) || defined (__amigados__))
  4550.   #define _VA_LIST_
  4551.   #endif
  4552.   #define _VA_LIST
  4553. ***************
  4554. *** 151,155 ****
  4555. --- 151,162 ----
  4556.   #ifdef _BSD_VA_LIST
  4557.   #undef _BSD_VA_LIST
  4558.   #endif
  4559. + #ifdef amigados
  4560. + # ifndef _VA_LIST
  4561. + #  define _VA_LIST
  4562. +    typedef __gnuc_va_list va_list;
  4563. + # endif
  4564. + #endif /* amigados */
  4565.   
  4566.   #endif /* __GNUC__ */
  4567. diff -rc --new-file gcc-2.3.3/machmode.h /gnu/src/amiga/gcc-2.3.3/machmode.h
  4568. *** gcc-2.3.3/machmode.h    Sun Aug  2 02:59:22 1992
  4569. --- /gnu/src/amiga/gcc-2.3.3/machmode.h    Sun Feb  6 19:10:19 1994
  4570. ***************
  4571. *** 83,89 ****
  4572.   
  4573.   /* Get the name of mode MODE as a string.  */
  4574.   
  4575. ! extern char *mode_name[];
  4576.   #define GET_MODE_NAME(MODE)        (mode_name[(int)(MODE)])
  4577.   
  4578.   enum mode_class { MODE_RANDOM, MODE_INT, MODE_FLOAT, MODE_PARTIAL_INT, MODE_CC,
  4579. --- 83,89 ----
  4580.   
  4581.   /* Get the name of mode MODE as a string.  */
  4582.   
  4583. ! extern char * const mode_name[];
  4584.   #define GET_MODE_NAME(MODE)        (mode_name[(int)(MODE)])
  4585.   
  4586.   enum mode_class { MODE_RANDOM, MODE_INT, MODE_FLOAT, MODE_PARTIAL_INT, MODE_CC,
  4587. ***************
  4588. *** 92,108 ****
  4589.   /* Get the general kind of object that mode MODE represents
  4590.      (integer, floating, complex, etc.)  */
  4591.   
  4592. ! extern enum mode_class mode_class[];
  4593.   #define GET_MODE_CLASS(MODE)        (mode_class[(int)(MODE)])
  4594.   
  4595.   /* Get the size in bytes of an object of mode MODE.  */
  4596.   
  4597. ! extern int mode_size[];
  4598.   #define GET_MODE_SIZE(MODE)        (mode_size[(int)(MODE)])
  4599.   
  4600.   /* Get the size in bytes of the basic parts of an object of mode MODE.  */
  4601.   
  4602. ! extern int mode_unit_size[];
  4603.   #define GET_MODE_UNIT_SIZE(MODE)    (mode_unit_size[(int)(MODE)])
  4604.   
  4605.   /* Get the number of units in the object.  */
  4606. --- 92,108 ----
  4607.   /* Get the general kind of object that mode MODE represents
  4608.      (integer, floating, complex, etc.)  */
  4609.   
  4610. ! extern const enum mode_class mode_class[];
  4611.   #define GET_MODE_CLASS(MODE)        (mode_class[(int)(MODE)])
  4612.   
  4613.   /* Get the size in bytes of an object of mode MODE.  */
  4614.   
  4615. ! extern const int mode_size[];
  4616.   #define GET_MODE_SIZE(MODE)        (mode_size[(int)(MODE)])
  4617.   
  4618.   /* Get the size in bytes of the basic parts of an object of mode MODE.  */
  4619.   
  4620. ! extern const int mode_unit_size[];
  4621.   #define GET_MODE_UNIT_SIZE(MODE)    (mode_unit_size[(int)(MODE)])
  4622.   
  4623.   /* Get the number of units in the object.  */
  4624. ***************
  4625. *** 124,130 ****
  4626.   
  4627.   /* Get the next wider natural mode (eg, QI -> HI -> SI -> DI -> TI).  */
  4628.   
  4629. ! extern enum machine_mode mode_wider_mode[];
  4630.   #define GET_MODE_WIDER_MODE(MODE)    (mode_wider_mode[(int)(MODE)])
  4631.   
  4632.   /* Return the mode for data of a given size SIZE and mode class CLASS.
  4633. --- 124,130 ----
  4634.   
  4635.   /* Get the next wider natural mode (eg, QI -> HI -> SI -> DI -> TI).  */
  4636.   
  4637. ! extern const enum machine_mode mode_wider_mode[];
  4638.   #define GET_MODE_WIDER_MODE(MODE)    (mode_wider_mode[(int)(MODE)])
  4639.   
  4640.   /* Return the mode for data of a given size SIZE and mode class CLASS.
  4641. diff -rc --new-file gcc-2.3.3/objc/Makefile /gnu/src/amiga/gcc-2.3.3/objc/Makefile
  4642. *** gcc-2.3.3/objc/Makefile    Tue Nov  3 10:32:47 1992
  4643. --- /gnu/src/amiga/gcc-2.3.3/objc/Makefile    Sun Feb  6 19:09:15 1994
  4644. ***************
  4645. *** 40,46 ****
  4646.   
  4647.   core.o: core.c $(OBJC_H) $(HASH_H) $(srcdir)/gstddef.h
  4648.   hash.o: hash.c $(OBJC_H) $(HASH_H) $(srcdir)/gstddef.h
  4649. ! object.o: object.m object.h $(OBJC_H)
  4650.       $(GCC_FOR_TARGET) -c $(GCC_CFLAGS) $(SUBDIR_INCLUDES) $<
  4651.   
  4652.   mostlyclean:
  4653. --- 40,46 ----
  4654.   
  4655.   core.o: core.c $(OBJC_H) $(HASH_H) $(srcdir)/gstddef.h
  4656.   hash.o: hash.c $(OBJC_H) $(HASH_H) $(srcdir)/gstddef.h
  4657. ! object.o: $(srcdir)/objc/object.m $(srcdir)/objc/object.h $(OBJC_H)
  4658.       $(GCC_FOR_TARGET) -c $(GCC_CFLAGS) $(SUBDIR_INCLUDES) $<
  4659.   
  4660.   mostlyclean:
  4661. diff -rc --new-file gcc-2.3.3/print-tree.c /gnu/src/amiga/gcc-2.3.3/print-tree.c
  4662. *** gcc-2.3.3/print-tree.c    Sat Oct 24 00:09:26 1992
  4663. --- /gnu/src/amiga/gcc-2.3.3/print-tree.c    Sun Feb  6 19:10:19 1994
  4664. ***************
  4665. *** 24,30 ****
  4666.   
  4667.   extern char **tree_code_name;
  4668.   
  4669. ! extern char *mode_name[];
  4670.   
  4671.   void print_node ();
  4672.   void indent_to ();
  4673. --- 24,30 ----
  4674.   
  4675.   extern char **tree_code_name;
  4676.   
  4677. ! extern char *const mode_name[];
  4678.   
  4679.   void print_node ();
  4680.   void indent_to ();
  4681. diff -rc --new-file gcc-2.3.3/protoize.c /gnu/src/amiga/gcc-2.3.3/protoize.c
  4682. *** gcc-2.3.3/protoize.c    Tue Dec 22 07:21:04 1992
  4683. --- /gnu/src/amiga/gcc-2.3.3/protoize.c    Sun Feb  6 19:10:20 1994
  4684. ***************
  4685. *** 78,84 ****
  4686. --- 78,87 ----
  4687.   #undef getopt
  4688.   
  4689.   extern int errno;
  4690. + #ifndef HAVE_STRERROR
  4691.   extern char *sys_errlist[];
  4692. + #define strerror(err) sys_errlist[err]
  4693. + #endif
  4694.   extern char *version_string;
  4695.   
  4696.   /* Systems which are compatible only with POSIX 1003.1-1988 (but *not*
  4697. ***************
  4698. *** 776,783 ****
  4699. --- 779,791 ----
  4700.   {
  4701.     struct default_include *p;
  4702.   
  4703. + #ifdef FILE_NAME_ABSOLUTE_P
  4704. +   if (! FILE_NAME_ABSOLUTE_P (path))
  4705. +     abort ();
  4706. + #else
  4707.     if (path[0] != '/')
  4708.       abort ();        /* Must be an absolutized filename.  */
  4709. + #endif
  4710.   
  4711.     for (p = include_defaults; p->fname; p++)
  4712.       if (!strncmp (path, p->fname, strlen (p->fname))
  4713. ***************
  4714. *** 1204,1210 ****
  4715. --- 1212,1222 ----
  4716.     {
  4717.       const char *src_p;
  4718.   
  4719. + #ifdef FILE_NAME_ABSOLUTE_P
  4720. +     if (! FILE_NAME_ABSOLUTE_P (rel_filename))
  4721. + #else
  4722.       if (rel_filename[0] != '/')
  4723. + #endif
  4724.         {
  4725.           src_p = cwd2;
  4726.           while (*endp++ = *src_p++)
  4727. ***************
  4728. *** 1406,1412 ****
  4729.             if (my_stat (filename, &stat_buf) == -1)
  4730.               {
  4731.                 fprintf (stderr, "%s: %s: can't get status: %s\n",
  4732. !                pname, shortpath (NULL, filename), sys_errlist[errno]);
  4733.                 stat_buf.st_mtime = (time_t) -1;
  4734.               }
  4735.           }
  4736. --- 1418,1424 ----
  4737.             if (my_stat (filename, &stat_buf) == -1)
  4738.               {
  4739.                 fprintf (stderr, "%s: %s: can't get status: %s\n",
  4740. !                pname, shortpath (NULL, filename), strerror (errno));
  4741.                 stat_buf.st_mtime = (time_t) -1;
  4742.               }
  4743.           }
  4744. ***************
  4745. *** 1467,1472 ****
  4746. --- 1479,1503 ----
  4747.     return ++q;
  4748.   }
  4749.   
  4750. + /* Use this macro to advance a char * over the filename part in a line
  4751. +    read from an aux-info file. */
  4752. + #ifndef amigados
  4753. + /* Version for file systems where the colon has no special meaning */
  4754. + #define ADVANCE_PAST_FILENAME(CP) \
  4755. +   while (* (CP) != ':') (CP)++
  4756. + #else
  4757. + /* Have to heuristically decide whether the colon is part of the filename
  4758. +    or whether it serves to delimit the filename from the line number. If
  4759. +    it's the latter case, then the character following the colon *must*
  4760. +    be a digit. Note that this heuristic fails if the filename starts
  4761. +    with a digit. */
  4762. + #define ADVANCE_PAST_FILENAME(CP) \
  4763. +     while ((CP)[0] != ':' || !isdigit ((CP)[1])) \
  4764. +       (CP)++;
  4765. + #endif
  4766.   /* Given a line from  an aux info file, and a time at which the aux info
  4767.      file it came from was created, check to see if the item described in
  4768.      the line comes from a file which has been modified since the aux info
  4769. ***************
  4770. *** 1488,1495 ****
  4771.     {
  4772.       const char *filename_start = p = l + 3;
  4773.   
  4774. !     while (*p != ':')
  4775. !       p++;
  4776.       filename = (char *) alloca ((size_t) (p - filename_start) + 1);
  4777.       strncpy (filename, filename_start, (size_t) (p - filename_start));
  4778.       filename[p-filename_start] = '\0';
  4779. --- 1519,1525 ----
  4780.     {
  4781.       const char *filename_start = p = l + 3;
  4782.   
  4783. !     ADVANCE_PAST_FILENAME (p);
  4784.       filename = (char *) alloca ((size_t) (p - filename_start) + 1);
  4785.       strncpy (filename, filename_start, (size_t) (p - filename_start));
  4786.       filename[p-filename_start] = '\0';
  4787. ***************
  4788. *** 1546,1553 ****
  4789.       const char *filename_start = p = l + 3;
  4790.       char *filename;
  4791.   
  4792. !     while (*p != ':')
  4793. !       p++;
  4794.       filename = (char *) alloca ((size_t) (p - filename_start) + 1);
  4795.       strncpy (filename, filename_start, (size_t) (p - filename_start));
  4796.       filename[p-filename_start] = '\0';
  4797. --- 1576,1582 ----
  4798.       const char *filename_start = p = l + 3;
  4799.       char *filename;
  4800.   
  4801. !     ADVANCE_PAST_FILENAME (p);
  4802.       filename = (char *) alloca ((size_t) (p - filename_start) + 1);
  4803.       strncpy (filename, filename_start, (size_t) (p - filename_start));
  4804.       filename[p-filename_start] = '\0';
  4805. ***************
  4806. *** 2000,2006 ****
  4807.         if (child_pid == -1)
  4808.           {
  4809.             fprintf (stderr, "%s: could not fork process: %s\n",
  4810. !            pname, sys_errlist[errno]);
  4811.             return 0;
  4812.           }
  4813.   
  4814. --- 2029,2035 ----
  4815.         if (child_pid == -1)
  4816.           {
  4817.             fprintf (stderr, "%s: could not fork process: %s\n",
  4818. !            pname, strerror (errno));
  4819.             return 0;
  4820.           }
  4821.   
  4822. ***************
  4823. *** 2028,2034 ****
  4824.           if (wait (&wait_status) == -1)
  4825.             {
  4826.               fprintf (stderr, "%s: wait failed: %s\n",
  4827. !              pname, sys_errlist[errno]);
  4828.               return 0;
  4829.             }
  4830.       if ((wait_status & 0x7F) != 0)
  4831. --- 2057,2063 ----
  4832.           if (wait (&wait_status) == -1)
  4833.             {
  4834.               fprintf (stderr, "%s: wait failed: %s\n",
  4835. !              pname, strerror (errno));
  4836.               return 0;
  4837.             }
  4838.       if ((wait_status & 0x7F) != 0)
  4839. ***************
  4840. *** 2055,2061 ****
  4841.         write (f, ": ", 2);
  4842.         write (f, compile_params[0], strlen (compile_params[0]));
  4843.         write (f, ": ", 2);
  4844. !       write (f, sys_errlist[e], strlen (sys_errlist[e]));
  4845.         write (f, "\n", 1);
  4846.             _exit (1);
  4847.           }
  4848. --- 2084,2090 ----
  4849.         write (f, ": ", 2);
  4850.         write (f, compile_params[0], strlen (compile_params[0]));
  4851.         write (f, ": ", 2);
  4852. !       write (f, strerror (e), strlen (strerror (e)));
  4853.         write (f, "\n", 1);
  4854.             _exit (1);
  4855.           }
  4856. ***************
  4857. *** 2115,2121 ****
  4858.       {
  4859.         fprintf (stderr, "%s: can't read aux info file `%s': %s\n",
  4860.              pname, shortpath (NULL, aux_info_filename),
  4861. !            sys_errlist[errno]);
  4862.         errors++;
  4863.         return;
  4864.       }
  4865. --- 2144,2150 ----
  4866.       {
  4867.         fprintf (stderr, "%s: can't read aux info file `%s': %s\n",
  4868.              pname, shortpath (NULL, aux_info_filename),
  4869. !            strerror (errno));
  4870.         errors++;
  4871.         return;
  4872.       }
  4873. ***************
  4874. *** 2143,2149 ****
  4875.       {
  4876.         fprintf (stderr, "%s: can't read aux info file `%s': %s\n",
  4877.              pname, shortpath (NULL, aux_info_filename),
  4878. !            sys_errlist[errno]);
  4879.         errors++;
  4880.         return;
  4881.       }
  4882. --- 2172,2178 ----
  4883.       {
  4884.         fprintf (stderr, "%s: can't read aux info file `%s': %s\n",
  4885.              pname, shortpath (NULL, aux_info_filename),
  4886. !            strerror (errno));
  4887.         errors++;
  4888.         return;
  4889.       }
  4890. ***************
  4891. *** 2158,2164 ****
  4892.         {
  4893.           fprintf (stderr, "%s: can't get status of aux info file `%s': %s\n",
  4894.            pname, shortpath (NULL, aux_info_filename),
  4895. !          sys_errlist[errno]);
  4896.           errors++;
  4897.           return;
  4898.         }
  4899. --- 2187,2193 ----
  4900.         {
  4901.           fprintf (stderr, "%s: can't get status of aux info file `%s': %s\n",
  4902.            pname, shortpath (NULL, aux_info_filename),
  4903. !          strerror (errno));
  4904.           errors++;
  4905.           return;
  4906.         }
  4907. ***************
  4908. *** 2185,2191 ****
  4909.         {
  4910.           fprintf (stderr, "%s: can't get status of aux info file `%s': %s\n",
  4911.                pname, shortpath (NULL, base_source_filename),
  4912. !              sys_errlist[errno]);
  4913.           errors++;
  4914.           return;
  4915.         }
  4916. --- 2214,2220 ----
  4917.         {
  4918.           fprintf (stderr, "%s: can't get status of aux info file `%s': %s\n",
  4919.                pname, shortpath (NULL, base_source_filename),
  4920. !              strerror (errno));
  4921.           errors++;
  4922.           return;
  4923.         }
  4924. ***************
  4925. *** 2206,2212 ****
  4926.         {
  4927.           fprintf (stderr, "%s: can't open aux info file `%s' for reading: %s\n",
  4928.            pname, shortpath (NULL, aux_info_filename),
  4929. !          sys_errlist[errno]);
  4930.           return;
  4931.         }
  4932.     
  4933. --- 2235,2241 ----
  4934.         {
  4935.           fprintf (stderr, "%s: can't open aux info file `%s' for reading: %s\n",
  4936.            pname, shortpath (NULL, aux_info_filename),
  4937. !          strerror (errno));
  4938.           return;
  4939.         }
  4940.     
  4941. ***************
  4942. *** 2222,2228 ****
  4943.         {
  4944.           fprintf (stderr, "%s: error reading aux info file `%s': %s\n",
  4945.            pname, shortpath (NULL, aux_info_filename),
  4946. !          sys_errlist[errno]);
  4947.           free (aux_info_base);
  4948.           close (aux_info_file);
  4949.           return;
  4950. --- 2251,2257 ----
  4951.         {
  4952.           fprintf (stderr, "%s: error reading aux info file `%s': %s\n",
  4953.            pname, shortpath (NULL, aux_info_filename),
  4954. !          strerror (errno));
  4955.           free (aux_info_base);
  4956.           close (aux_info_file);
  4957.           return;
  4958. ***************
  4959. *** 2234,2240 ****
  4960.         {
  4961.           fprintf (stderr, "%s: error closing aux info file `%s': %s\n",
  4962.            pname, shortpath (NULL, aux_info_filename),
  4963. !          sys_errlist[errno]);
  4964.           free (aux_info_base);
  4965.           close (aux_info_file);
  4966.           return;
  4967. --- 2263,2269 ----
  4968.         {
  4969.           fprintf (stderr, "%s: error closing aux info file `%s': %s\n",
  4970.            pname, shortpath (NULL, aux_info_filename),
  4971. !          strerror (errno));
  4972.           free (aux_info_base);
  4973.           close (aux_info_file);
  4974.           return;
  4975. ***************
  4976. *** 2248,2254 ****
  4977.       if (my_unlink (aux_info_filename) == -1)
  4978.         fprintf (stderr, "%s: can't delete aux info file `%s': %s\n",
  4979.              pname, shortpath (NULL, aux_info_filename),
  4980. !            sys_errlist[errno]);
  4981.   
  4982.     /* Save a pointer into the first line of the aux_info file which
  4983.        contains the filename of the directory from which the compiler
  4984. --- 2277,2283 ----
  4985.       if (my_unlink (aux_info_filename) == -1)
  4986.         fprintf (stderr, "%s: can't delete aux info file `%s': %s\n",
  4987.              pname, shortpath (NULL, aux_info_filename),
  4988. !            strerror (errno));
  4989.   
  4990.     /* Save a pointer into the first line of the aux_info file which
  4991.        contains the filename of the directory from which the compiler
  4992. ***************
  4993. *** 2260,2266 ****
  4994.     {
  4995.       char *p = aux_info_base;
  4996.   
  4997. !     while (*p != ':')
  4998.         p++;
  4999.       p++;
  5000.       while (*p == ' ')
  5001. --- 2289,2297 ----
  5002.     {
  5003.       char *p = aux_info_base;
  5004.   
  5005. !     /* have to make sure at least one space is following the colon to make
  5006. !        sure the colon is not part of the filename */
  5007. !     while (*p != ':' && p[1] != ' ')
  5008.         p++;
  5009.       p++;
  5010.       while (*p == ' ')
  5011. ***************
  5012. *** 2274,2280 ****
  5013. --- 2305,2315 ----
  5014.         continue;
  5015.       aux_info_second_line = p;
  5016.       aux_info_relocated_name = 0;
  5017. + #ifdef FILE_NAME_ABSOLUTE_P
  5018. +     if (! FILE_NAME_ABSOLUTE_P (invocation_filename))
  5019. + #else
  5020.       if (invocation_filename[0] != '/')
  5021. + #endif
  5022.         {
  5023.       /* INVOCATION_FILENAME is relative;
  5024.          append it to BASE_SOURCE_FILENAME's dir.  */
  5025. ***************
  5026. *** 2314,2320 ****
  5027.                     {
  5028.                       fprintf (stderr, "%s: can't delete file `%s': %s\n",
  5029.                    pname, shortpath (NULL, aux_info_filename),
  5030. !                  sys_errlist[errno]);
  5031.                       return;
  5032.                     }
  5033.                   goto start_over;
  5034. --- 2349,2355 ----
  5035.                     {
  5036.                       fprintf (stderr, "%s: can't delete file `%s': %s\n",
  5037.                    pname, shortpath (NULL, aux_info_filename),
  5038. !                  strerror (errno));
  5039.                       return;
  5040.                     }
  5041.                   goto start_over;
  5042. ***************
  5043. *** 2362,2368 ****
  5044.   #ifndef UNPROTOIZE
  5045.   
  5046.   /* Check an individual filename for a .c suffix.  If the filename has this
  5047. !    suffix, rename the file such that its suffix is changed to .C.  This
  5048.      function implements the -C option.  */
  5049.   
  5050.   static void
  5051. --- 2397,2403 ----
  5052.   #ifndef UNPROTOIZE
  5053.   
  5054.   /* Check an individual filename for a .c suffix.  If the filename has this
  5055. !    suffix, rename the file such that its suffix is changed to .cc.  This
  5056.      function implements the -C option.  */
  5057.   
  5058.   static void
  5059. ***************
  5060. *** 2371,2377 ****
  5061.   {
  5062.     const char *filename = hp->symbol;
  5063.     int last_char_index = strlen (filename) - 1;
  5064. !   char *const new_filename = (char *) alloca (strlen (filename) + 1);
  5065.   
  5066.     /* Note that we don't care here if the given file was converted or not.  It
  5067.        is possible that the given file was *not* converted, simply because there
  5068. --- 2406,2412 ----
  5069.   {
  5070.     const char *filename = hp->symbol;
  5071.     int last_char_index = strlen (filename) - 1;
  5072. !   char *const new_filename = (char *) alloca (strlen (filename) + 2);
  5073.   
  5074.     /* Note that we don't care here if the given file was converted or not.  It
  5075.        is possible that the given file was *not* converted, simply because there
  5076. ***************
  5077. *** 2383,2395 ****
  5078.       return;
  5079.   
  5080.     strcpy (new_filename, filename);
  5081. !   new_filename[last_char_index] = 'C';
  5082.   
  5083.     if (my_link (filename, new_filename) == -1)
  5084.       {
  5085.         fprintf (stderr, "%s: warning: can't link file `%s' to `%s': %s\n",
  5086.              pname, shortpath (NULL, filename),
  5087. !            shortpath (NULL, new_filename), sys_errlist[errno]);
  5088.         errors++;
  5089.         return;
  5090.       }
  5091. --- 2418,2447 ----
  5092.       return;
  5093.   
  5094.     strcpy (new_filename, filename);
  5095. !   strcat (new_filename + last_char_index, "cc");
  5096.   
  5097. +   /* use rename(2) if available !! Update config files to include HAVE_rename
  5098. +      if the used OS provides it. Advantages are: it's atomic, it's one
  5099. +      system call compared to two. */
  5100. + #ifdef HAVE_rename
  5101. +   /* if the mentioned systems (POSIX 1003.1-1988) have rename(2), this has
  5102. +      to be changed to `my_rename' as well. */
  5103. +   if (rename (filename, new_filename) == -1)
  5104. +     {
  5105. +       fprintf (stderr, "%s: warning: can't rename file `%s' to `%s': %s\n",
  5106. +            pname, shortpath (NULL, filename),
  5107. +            shortpath (NULL, new_filename), strerror (errno));
  5108. +       errors++;
  5109. +       return;
  5110. +     }
  5111. + #else
  5112.     if (my_link (filename, new_filename) == -1)
  5113.       {
  5114.         fprintf (stderr, "%s: warning: can't link file `%s' to `%s': %s\n",
  5115.              pname, shortpath (NULL, filename),
  5116. !            shortpath (NULL, new_filename), strerror (errno));
  5117.         errors++;
  5118.         return;
  5119.       }
  5120. ***************
  5121. *** 2397,2406 ****
  5122.     if (my_unlink (filename) == -1)
  5123.       {
  5124.         fprintf (stderr, "%s: warning: can't delete file `%s': %s\n",
  5125. !            pname, shortpath (NULL, filename), sys_errlist[errno]);
  5126.         errors++;
  5127.         return;
  5128.       }
  5129.   }
  5130.   
  5131.   #endif /* !defined (UNPROTOIZE) */
  5132. --- 2449,2459 ----
  5133.     if (my_unlink (filename) == -1)
  5134.       {
  5135.         fprintf (stderr, "%s: warning: can't delete file `%s': %s\n",
  5136. !            pname, shortpath (NULL, filename), strerror (errno));
  5137.         errors++;
  5138.         return;
  5139.       }
  5140. + #endif
  5141.   }
  5142.   
  5143.   #endif /* !defined (UNPROTOIZE) */
  5144. ***************
  5145. *** 4093,4099 ****
  5146.     if (my_stat ((char *)convert_filename, &stat_buf) == -1)
  5147.       {
  5148.         fprintf (stderr, "%s: can't get status for file `%s': %s\n",
  5149. !            pname, shortpath (NULL, convert_filename), sys_errlist[errno]);
  5150.         return;
  5151.       }
  5152.     orig_size = stat_buf.st_size;
  5153. --- 4146,4152 ----
  5154.     if (my_stat ((char *)convert_filename, &stat_buf) == -1)
  5155.       {
  5156.         fprintf (stderr, "%s: can't get status for file `%s': %s\n",
  5157. !            pname, shortpath (NULL, convert_filename), strerror (errno));
  5158.         return;
  5159.       }
  5160.     orig_size = stat_buf.st_size;
  5161. ***************
  5162. *** 4128,4134 ****
  5163.         {
  5164.           fprintf (stderr, "%s: can't open file `%s' for reading: %s\n",
  5165.            pname, shortpath (NULL, convert_filename),
  5166. !          sys_errlist[errno]);
  5167.           return;
  5168.         }
  5169.   
  5170. --- 4181,4187 ----
  5171.         {
  5172.           fprintf (stderr, "%s: can't open file `%s' for reading: %s\n",
  5173.            pname, shortpath (NULL, convert_filename),
  5174. !          strerror (errno));
  5175.           return;
  5176.         }
  5177.   
  5178. ***************
  5179. *** 4141,4147 ****
  5180.           close (input_file);
  5181.           fprintf (stderr, "\n%s: error reading input file `%s': %s\n",
  5182.            pname, shortpath (NULL, convert_filename),
  5183. !          sys_errlist[errno]);
  5184.           return;
  5185.         }
  5186.   
  5187. --- 4194,4200 ----
  5188.           close (input_file);
  5189.           fprintf (stderr, "\n%s: error reading input file `%s': %s\n",
  5190.            pname, shortpath (NULL, convert_filename),
  5191. !          strerror (errno));
  5192.           return;
  5193.         }
  5194.   
  5195. ***************
  5196. *** 4174,4180 ****
  5197.         {
  5198.           fprintf (stderr, "%s: can't create/open clean file `%s': %s\n",
  5199.            pname, shortpath (NULL, clean_filename),
  5200. !          sys_errlist[errno]);
  5201.           return;
  5202.         }
  5203.     
  5204. --- 4227,4233 ----
  5205.         {
  5206.           fprintf (stderr, "%s: can't create/open clean file `%s': %s\n",
  5207.            pname, shortpath (NULL, clean_filename),
  5208. !          strerror (errno));
  5209.           return;
  5210.         }
  5211.     
  5212. ***************
  5213. *** 4182,4188 ****
  5214.     
  5215.       if (write (clean_file, new_clean_text_base, clean_size) != clean_size)
  5216.         fprintf (stderr, "%s: error writing file `%s': %s\n",
  5217. !            pname, shortpath (NULL, clean_filename), sys_errlist[errno]);
  5218.     
  5219.       close (clean_file);
  5220.     }
  5221. --- 4235,4241 ----
  5222.     
  5223.       if (write (clean_file, new_clean_text_base, clean_size) != clean_size)
  5224.         fprintf (stderr, "%s: error writing file `%s': %s\n",
  5225. !            pname, shortpath (NULL, clean_filename), strerror (errno));
  5226.     
  5227.       close (clean_file);
  5228.     }
  5229. ***************
  5230. *** 4285,4291 ****
  5231.                  pname,
  5232.                  shortpath (NULL, convert_filename),
  5233.                  shortpath (NULL, new_filename),
  5234. !                sys_errlist[errno]);
  5235.                 return;
  5236.               }
  5237.           }
  5238. --- 4338,4344 ----
  5239.                  pname,
  5240.                  shortpath (NULL, convert_filename),
  5241.                  shortpath (NULL, new_filename),
  5242. !                strerror (errno));
  5243.                 return;
  5244.               }
  5245.           }
  5246. ***************
  5247. *** 4294,4300 ****
  5248.     if (my_unlink (convert_filename) == -1)
  5249.       {
  5250.         fprintf (stderr, "%s: can't delete file `%s': %s\n",
  5251. !            pname, shortpath (NULL, convert_filename), sys_errlist[errno]);
  5252.         return;
  5253.       }
  5254.   
  5255. --- 4347,4353 ----
  5256.     if (my_unlink (convert_filename) == -1)
  5257.       {
  5258.         fprintf (stderr, "%s: can't delete file `%s': %s\n",
  5259. !            pname, shortpath (NULL, convert_filename), strerror (errno));
  5260.         return;
  5261.       }
  5262.   
  5263. ***************
  5264. *** 4307,4313 ****
  5265.         {
  5266.           fprintf (stderr, "%s: can't create/open output file `%s': %s\n",
  5267.            pname, shortpath (NULL, convert_filename),
  5268. !          sys_errlist[errno]);
  5269.           return;
  5270.         }
  5271.     
  5272. --- 4360,4366 ----
  5273.         {
  5274.           fprintf (stderr, "%s: can't create/open output file `%s': %s\n",
  5275.            pname, shortpath (NULL, convert_filename),
  5276. !          strerror (errno));
  5277.           return;
  5278.         }
  5279.     
  5280. ***************
  5281. *** 4319,4325 ****
  5282.         if (write (output_file, repl_text_base, out_size) != out_size)
  5283.           fprintf (stderr, "%s: error writing file `%s': %s\n",
  5284.            pname, shortpath (NULL, convert_filename),
  5285. !          sys_errlist[errno]);
  5286.       }
  5287.     
  5288.       close (output_file);
  5289. --- 4372,4378 ----
  5290.         if (write (output_file, repl_text_base, out_size) != out_size)
  5291.           fprintf (stderr, "%s: error writing file `%s': %s\n",
  5292.            pname, shortpath (NULL, convert_filename),
  5293. !          strerror (errno));
  5294.       }
  5295.     
  5296.       close (output_file);
  5297. ***************
  5298. *** 4336,4342 ****
  5299.     /* The cast avoids an erroneous warning on AIX.  */
  5300.     if (my_chmod ((char *)convert_filename, stat_buf.st_mode) == -1)
  5301.       fprintf (stderr, "%s: can't change mode of file `%s': %s\n",
  5302. !          pname, shortpath (NULL, convert_filename), sys_errlist[errno]);
  5303.   
  5304.     /* Note:  We would try to change the owner and group of the output file
  5305.        to match those of the input file here, except that may not be a good
  5306. --- 4389,4395 ----
  5307.     /* The cast avoids an erroneous warning on AIX.  */
  5308.     if (my_chmod ((char *)convert_filename, stat_buf.st_mode) == -1)
  5309.       fprintf (stderr, "%s: can't change mode of file `%s': %s\n",
  5310. !          pname, shortpath (NULL, convert_filename), strerror (errno));
  5311.   
  5312.     /* Note:  We would try to change the owner and group of the output file
  5313.        to match those of the input file here, except that may not be a good
  5314. ***************
  5315. *** 4479,4485 ****
  5316.     if (!cwd_buffer)
  5317.       {
  5318.         fprintf (stderr, "%s: cannot get working directory: %s\n",
  5319. !            pname, sys_errlist[errno]);
  5320.         exit (1);
  5321.       }
  5322.   
  5323. --- 4532,4538 ----
  5324.     if (!cwd_buffer)
  5325.       {
  5326.         fprintf (stderr, "%s: cannot get working directory: %s\n",
  5327. !            pname, strerror (errno));
  5328.         exit (1);
  5329.       }
  5330.   
  5331. diff -rc --new-file gcc-2.3.3/rtl.c /gnu/src/amiga/gcc-2.3.3/rtl.c
  5332. *** gcc-2.3.3/rtl.c    Sat Sep 19 19:33:11 1992
  5333. --- /gnu/src/amiga/gcc-2.3.3/rtl.c    Sun Feb  6 19:10:20 1994
  5334. ***************
  5335. *** 49,55 ****
  5336.   
  5337.   #define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS)   NAME ,
  5338.   
  5339. ! char *rtx_name[] = {
  5340.   #include "rtl.def"        /* rtl expressions are documented here */
  5341.   };
  5342.   
  5343. --- 49,55 ----
  5344.   
  5345.   #define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS)   NAME ,
  5346.   
  5347. ! char * const rtx_name[] = {
  5348.   #include "rtl.def"        /* rtl expressions are documented here */
  5349.   };
  5350.   
  5351. ***************
  5352. *** 60,66 ****
  5353.   
  5354.   #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER)  NAME,
  5355.   
  5356. ! char *mode_name[(int) MAX_MACHINE_MODE] = {
  5357.   #include "machmode.def"
  5358.   
  5359.   #ifdef EXTRA_CC_MODES
  5360. --- 60,66 ----
  5361.   
  5362.   #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER)  NAME,
  5363.   
  5364. ! char * const mode_name[(int) MAX_MACHINE_MODE] = {
  5365.   #include "machmode.def"
  5366.   
  5367.   #ifdef EXTRA_CC_MODES
  5368. ***************
  5369. *** 76,82 ****
  5370.   
  5371.   #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER)  CLASS,
  5372.   
  5373. ! enum mode_class mode_class[(int) MAX_MACHINE_MODE] = {
  5374.   #include "machmode.def"
  5375.   };
  5376.   
  5377. --- 76,82 ----
  5378.   
  5379.   #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER)  CLASS,
  5380.   
  5381. ! const enum mode_class mode_class[(int) MAX_MACHINE_MODE] = {
  5382.   #include "machmode.def"
  5383.   };
  5384.   
  5385. ***************
  5386. *** 87,93 ****
  5387.   
  5388.   #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER)  SIZE,
  5389.   
  5390. ! int mode_size[(int) MAX_MACHINE_MODE] = {
  5391.   #include "machmode.def"
  5392.   };
  5393.   
  5394. --- 87,93 ----
  5395.   
  5396.   #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER)  SIZE,
  5397.   
  5398. ! const int mode_size[(int) MAX_MACHINE_MODE] = {
  5399.   #include "machmode.def"
  5400.   };
  5401.   
  5402. ***************
  5403. *** 98,104 ****
  5404.   
  5405.   #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER)  UNIT,
  5406.   
  5407. ! int mode_unit_size[(int) MAX_MACHINE_MODE] = {
  5408.   #include "machmode.def"        /* machine modes are documented here */
  5409.   };
  5410.   
  5411. --- 98,104 ----
  5412.   
  5413.   #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER)  UNIT,
  5414.   
  5415. ! const int mode_unit_size[(int) MAX_MACHINE_MODE] = {
  5416.   #include "machmode.def"        /* machine modes are documented here */
  5417.   };
  5418.   
  5419. ***************
  5420. *** 111,117 ****
  5421.   #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER)  \
  5422.     (enum machine_mode) WIDER,
  5423.   
  5424. ! enum machine_mode mode_wider_mode[(int) MAX_MACHINE_MODE] = {
  5425.   #include "machmode.def"        /* machine modes are documented here */
  5426.   };
  5427.   
  5428. --- 111,117 ----
  5429.   #define DEF_MACHMODE(SYM, NAME, CLASS, SIZE, UNIT, WIDER)  \
  5430.     (enum machine_mode) WIDER,
  5431.   
  5432. ! const enum machine_mode mode_wider_mode[(int) MAX_MACHINE_MODE] = {
  5433.   #include "machmode.def"        /* machine modes are documented here */
  5434.   };
  5435.   
  5436. ***************
  5437. *** 130,136 ****
  5438.      rtx's of that code.  The sequence is a C string in which
  5439.      each character describes one operand.  */
  5440.   
  5441. ! char *rtx_format[] = {
  5442.     /* "*" undefined.
  5443.            can cause a warning message
  5444.        "0" field is unused (or used in a phase-dependent manner)
  5445. --- 130,136 ----
  5446.      rtx's of that code.  The sequence is a C string in which
  5447.      each character describes one operand.  */
  5448.   
  5449. ! char *const rtx_format[] = {
  5450.     /* "*" undefined.
  5451.            can cause a warning message
  5452.        "0" field is unused (or used in a phase-dependent manner)
  5453. ***************
  5454. *** 161,167 ****
  5455.   /* Indexed by rtx code, gives a character representing the "class" of
  5456.      that rtx code.  See rtl.def for documentation on the defined classes.  */
  5457.   
  5458. ! char rtx_class[] = {
  5459.   #define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS)   CLASS, 
  5460.   #include "rtl.def"        /* rtl expressions are defined here */
  5461.   #undef DEF_RTL_EXPR
  5462. --- 161,167 ----
  5463.   /* Indexed by rtx code, gives a character representing the "class" of
  5464.      that rtx code.  See rtl.def for documentation on the defined classes.  */
  5465.   
  5466. ! const char rtx_class[] = {
  5467.   #define DEF_RTL_EXPR(ENUM, NAME, FORMAT, CLASS)   CLASS, 
  5468.   #include "rtl.def"        /* rtl expressions are defined here */
  5469.   #undef DEF_RTL_EXPR
  5470. ***************
  5471. *** 169,175 ****
  5472.   
  5473.   /* Names for kinds of NOTEs and REG_NOTEs.  */
  5474.   
  5475. ! char *note_insn_name[] = { "NOTE_INSN_FUNCTION_BEG", "NOTE_INSN_DELETED",
  5476.                  "NOTE_INSN_BLOCK_BEG", "NOTE_INSN_BLOCK_END",
  5477.                  "NOTE_INSN_LOOP_BEG", "NOTE_INSN_LOOP_END",
  5478.                  "NOTE_INSN_FUNCTION_END", "NOTE_INSN_SETJMP",
  5479. --- 169,176 ----
  5480.   
  5481.   /* Names for kinds of NOTEs and REG_NOTEs.  */
  5482.   
  5483. ! char * const note_insn_name[] = 
  5484. !              { "NOTE_INSN_FUNCTION_BEG", "NOTE_INSN_DELETED",
  5485.                  "NOTE_INSN_BLOCK_BEG", "NOTE_INSN_BLOCK_END",
  5486.                  "NOTE_INSN_LOOP_BEG", "NOTE_INSN_LOOP_END",
  5487.                  "NOTE_INSN_FUNCTION_END", "NOTE_INSN_SETJMP",
  5488. ***************
  5489. *** 177,183 ****
  5490.                  "NOTE_INSN_PROLOGUE_END", "NOTE_INSN_EPILOGUE_BEG",
  5491.                  "NOTE_INSN_DELETED_LABEL"};
  5492.   
  5493. ! char *reg_note_name[] = { "", "REG_DEAD", "REG_INC", "REG_EQUIV", "REG_WAS_0",
  5494.                 "REG_EQUAL", "REG_RETVAL", "REG_LIBCALL",
  5495.                 "REG_NONNEG", "REG_NO_CONFLICT", "REG_UNUSED",
  5496.                 "REG_CC_SETTER", "REG_CC_USER", "REG_LABEL",
  5497. --- 178,185 ----
  5498.                  "NOTE_INSN_PROLOGUE_END", "NOTE_INSN_EPILOGUE_BEG",
  5499.                  "NOTE_INSN_DELETED_LABEL"};
  5500.   
  5501. ! char * const reg_note_name[] = 
  5502. !             { "", "REG_DEAD", "REG_INC", "REG_EQUIV", "REG_WAS_0",
  5503.                 "REG_EQUAL", "REG_RETVAL", "REG_LIBCALL",
  5504.                 "REG_NONNEG", "REG_NO_CONFLICT", "REG_UNUSED",
  5505.                 "REG_CC_SETTER", "REG_CC_USER", "REG_LABEL",
  5506. diff -rc --new-file gcc-2.3.3/rtl.h /gnu/src/amiga/gcc-2.3.3/rtl.h
  5507. *** gcc-2.3.3/rtl.h    Sun Dec 13 01:42:19 1992
  5508. --- /gnu/src/amiga/gcc-2.3.3/rtl.h    Sun Feb  6 19:10:20 1994
  5509. ***************
  5510. *** 42,54 ****
  5511.   extern int rtx_length[];
  5512.   #define GET_RTX_LENGTH(CODE)        (rtx_length[(int)(CODE)])
  5513.   
  5514. ! extern char *rtx_name[];
  5515.   #define GET_RTX_NAME(CODE)        (rtx_name[(int)(CODE)])
  5516.   
  5517. ! extern char *rtx_format[];
  5518.   #define GET_RTX_FORMAT(CODE)        (rtx_format[(int)(CODE)])
  5519.   
  5520. ! extern char rtx_class[];
  5521.   #define GET_RTX_CLASS(CODE)        (rtx_class[(int)(CODE)])
  5522.   
  5523.   /* Common union for an element of an rtx.  */
  5524. --- 42,54 ----
  5525.   extern int rtx_length[];
  5526.   #define GET_RTX_LENGTH(CODE)        (rtx_length[(int)(CODE)])
  5527.   
  5528. ! extern char * const rtx_name[];
  5529.   #define GET_RTX_NAME(CODE)        (rtx_name[(int)(CODE)])
  5530.   
  5531. ! extern char * const rtx_format[];
  5532.   #define GET_RTX_FORMAT(CODE)        (rtx_format[(int)(CODE)])
  5533.   
  5534. ! extern const char rtx_class[];
  5535.   #define GET_RTX_CLASS(CODE)        (rtx_class[(int)(CODE)])
  5536.   
  5537.   /* Common union for an element of an rtx.  */
  5538. ***************
  5539. *** 328,334 ****
  5540.   
  5541.   /* Names for REG_NOTE's in EXPR_LIST insn's.  */
  5542.   
  5543. ! extern char *reg_note_name[];
  5544.   #define GET_REG_NOTE_NAME(MODE) (reg_note_name[(int)(MODE)])
  5545.   
  5546.   /* The label-number of a code-label.  The assembler label
  5547. --- 328,334 ----
  5548.   
  5549.   /* Names for REG_NOTE's in EXPR_LIST insn's.  */
  5550.   
  5551. ! extern char *const reg_note_name[];
  5552.   #define GET_REG_NOTE_NAME(MODE) (reg_note_name[(int)(MODE)])
  5553.   
  5554.   /* The label-number of a code-label.  The assembler label
  5555. ***************
  5556. *** 396,402 ****
  5557.   
  5558.   /* Names for NOTE insn's other than line numbers.  */
  5559.   
  5560. ! extern char *note_insn_name[];
  5561.   #define GET_NOTE_INSN_NAME(NOTE_CODE) (note_insn_name[-(NOTE_CODE)])
  5562.   
  5563.   /* The name of a label, in case it corresponds to an explicit label
  5564. --- 396,402 ----
  5565.   
  5566.   /* Names for NOTE insn's other than line numbers.  */
  5567.   
  5568. ! extern char *const note_insn_name[];
  5569.   #define GET_NOTE_INSN_NAME(NOTE_CODE) (note_insn_name[-(NOTE_CODE)])
  5570.   
  5571.   /* The name of a label, in case it corresponds to an explicit label
  5572. diff -rc --new-file gcc-2.3.3/toplev.c /gnu/src/amiga/gcc-2.3.3/toplev.c
  5573. *** gcc-2.3.3/toplev.c    Sun Nov 22 21:20:25 1992
  5574. --- /gnu/src/amiga/gcc-2.3.3/toplev.c    Sun Feb  6 19:10:20 1994
  5575. ***************
  5576. *** 472,477 ****
  5577. --- 472,478 ----
  5578.     {"unroll-all-loops", &flag_unroll_all_loops, 1},
  5579.     {"writable-strings", &flag_writable_strings, 1},
  5580.     {"peephole", &flag_no_peephole, 0},
  5581. +   {"large-baserel", &flag_pic, 4},
  5582.     {"force-mem", &flag_force_mem, 1},
  5583.     {"force-addr", &flag_force_addr, 1},
  5584.     {"function-cse", &flag_no_function_cse, 0},
  5585. ***************
  5586. *** 489,494 ****
  5587. --- 490,496 ----
  5588.     {"schedule-insns2", &flag_schedule_insns_after_reload, 1},
  5589.     {"pic", &flag_pic, 1},
  5590.     {"PIC", &flag_pic, 2},
  5591. +   {"baserel", &flag_pic, 3},
  5592.     {"fast-math", &flag_fast_math, 1},
  5593.     {"common", &flag_no_common, 0},
  5594.     {"inhibit-size-directive", &flag_inhibit_size_directive, 1},
  5595. ***************
  5596. *** 1453,1458 ****
  5597. --- 1455,1463 ----
  5598.        FILE *asm_file;
  5599.        char *input_name;
  5600.   {
  5601. + #ifdef FILE_NAME_NONDIRECTORY
  5602. +   char *na = FILE_NAME_NONDIRECTORY (input_name);
  5603. + #else
  5604.     int len = strlen (input_name);
  5605.     char *na = input_name + len;
  5606.   
  5607. ***************
  5608. *** 1463,1468 ****
  5609. --- 1468,1474 ----
  5610.       break;
  5611.         na--;
  5612.       }
  5613. + #endif
  5614.   
  5615.   #ifdef ASM_OUTPUT_MAIN_SOURCE_FILENAME
  5616.     ASM_OUTPUT_MAIN_SOURCE_FILENAME (asm_file, na);
  5617. ***************
  5618. *** 3286,3291 ****
  5619. --- 3292,3298 ----
  5620.   
  5621.   #ifndef OS2
  5622.   #ifndef VMS
  5623. + #ifndef amigados
  5624.     if (flag_print_mem)
  5625.       {
  5626.         char *lim = (char *) sbrk (0);
  5627. ***************
  5628. *** 3300,3305 ****
  5629. --- 3307,3313 ----
  5630.         system ("ps v");
  5631.   #endif /* not USG */
  5632.       }
  5633. + #endif /* not amigados */
  5634.   #endif /* not VMS */
  5635.   #endif /* not OS2 */
  5636.   
  5637. diff -rc --new-file gcc-2.3.3/tree.c /gnu/src/amiga/gcc-2.3.3/tree.c
  5638. *** gcc-2.3.3/tree.c    Thu Oct 22 12:00:22 1992
  5639. --- /gnu/src/amiga/gcc-2.3.3/tree.c    Sun Feb  6 19:10:21 1994
  5640. ***************
  5641. *** 246,252 ****
  5642.   /* Unique id for next decl created.  */
  5643.   static int next_decl_uid;
  5644.   
  5645. ! extern char *mode_name[];
  5646.   
  5647.   void gcc_obstack_init ();
  5648.   static tree stabilize_reference_1 ();
  5649. --- 246,252 ----
  5650.   /* Unique id for next decl created.  */
  5651.   static int next_decl_uid;
  5652.   
  5653. ! extern char *const mode_name[];
  5654.   
  5655.   void gcc_obstack_init ();
  5656.   static tree stabilize_reference_1 ();
  5657.