After patching the gpc-980511 drop in for egcs, I got a working egcs-gpc compiler. Some problems remain:
- the gpc testsuite is installed in gcc/p . It uses it's own site.exp - the gpc testsuite fails with dejagnu-971222, it runs ok with dejagnu-1.3
The patches are appended at the end of the mail.
=== gpc tests ===
Running target unix Using /usr/bin/../share/dejagnu/baseboards/unix.exp as board description file for target. Using /usr/bin/../share/dejagnu/config/unix.exp as generic interface file for target. Using /usr/local/packages/egcs-snapshot/egcs-snapshot-19980517/gcc/p/testsuite/config/unix.exp as tool-and-target-specific interface file. WARNING: Assuming target board is the local machine (which is probably wrong). You may need to set your DEJAGNU environment variable. Running /usr/local/packages/egcs-snapshot/egcs-snapshot-19980517/gcc/p/testsuite/gpc.iso-7185/compile/compile.exp ... called "gpc_init" with too many arguments while executing "${tool}_init $test_file_name" (procedure "runtest" line 19) invoked from within "runtest $test_name" ("foreach" body line 40) invoked from within "foreach test_name [lsort [find ${dir} *.exp]] { if { ${test_name} == "" } { continue } # Ignore this one if asked to. if { ${ignore..." ("foreach" body line 3) invoked from within "foreach dir "${test_top_dirs}" { if { ${dir} != ${srcdir} } { foreach test_name [lsort [find ${dir} *.exp]] { if { ${test_name} == "" } { ..." ("foreach" body line 77) invoked from within "foreach pass $multipass { # multipass_name is set for `record_test' to use (see framework.exp). if { [lindex $pass 0] != "" } { set multipass_n..." ("foreach" body line 26) invoked from within "foreach current_target $target_list { verbose "target is $current_target"; set current_target_name $current_target; set tlist [split $curr..." (file "/usr/bin/../share/dejagnu/runtest.exp" line 1550) make[3]: *** [check-gpc] Error 1 make[3]: Leaving directory `/mnt/tmp/packages/egcs-snapshot/egcs-snapshot-199805 17/builddir/gcc/p' make[2]: *** [check-gpc] Error 2 make[2]: Target `check' not remade because of errors.
Warning summary: There are 1553 warnings in stage3 of this bootstrap.
Number of warnings per file: 380 ../../../gcc/p/gpc-common.c 135 ../../../gcc/p/../fold-const.c 56 insn-recog.c 39 ../../gcc/dwarf2out.c 34 ../../gcc/toplev.c 34 ../../../gcc/p/../toplev.c 33 ../../gcc/config/i386/i386.c 33 ../../../gcc/p/gpc-cccp.c 30 ../../gcc/p/gpc.c 29 ../../gcc/cccp.c 28 /usr/local/packages/egcs-snapshot/egcs-snapshot-19980517/gcc/p/rts/rts-string.c 27 ../../../gcc/p/gpc-decl.c 22 ../../gcc/dwarfout.c 21 ../../gcc/reload1.c 21 ../../gcc/final.c 20 ../../gcc/combine.c 18 /usr/local/packages/egcs-snapshot/egcs-snapshot-19980517/gcc/p/rts/rts-move.p 18 ../../gcc/toplev.h 18 ../../../gcc/p/gpc-lex.c 17 ../../gcc/objc/objc-act.c 16 ../../../gcc/p/gpc-lang.c 14 cxxmain.c 14 ../../gcc/varasm.c 14 ../../gcc/cplus-dem.c 14 ../../../gcc/p/gpc-typeck.c 12 ../../gcc/objc/archive.c 11 ../../gcc/cse.c 11 ../../gcc/alias.c 11 ../../../gcc/cp/lex.c 10 ../../gcc/stor-layout.c 10 ../../../gcc/p/../stor-layout.c 9 ../../gcc/stmt.c 9 ../../gcc/global.c 9 ../../gcc/fold-const.c 9 ../../gcc/expmed.c 9 ../../../gcc/p/../expr.c 9 ../../../gcc/cp/pt.c 8 g77.c 8 g++.c 8 ../../gcc/reload.c 8 ../../gcc/real.c 8 ../../gcc/gcc.c 8 ../../gcc/expr.c 8 ../../gcc/enquire.c 8 ../../gcc/c-lex.c 7 ../../gcc/tlink.c 7 ../../gcc/regclass.c 7 ../../gcc/pexecute.c 7 ../../gcc/crtstuff.c 7 ../../../gcc/cp/decl2.c 6 insn-output.c 6 ../../gcc/tree.c 6 ../../gcc/protoize.c 6 ../../gcc/genattrtab.c 6 ../../gcc/collect2.c 6 ../../../gcc/p/../tree.c 6 ../../../gcc/cp/decl.c 5 /usr/local/packages/egcs-snapshot/egcs-snapshot-19980517/gcc/p/rts/rts-rdsub.c 5 /usr/local/packages/egcs-snapshot/egcs-snapshot-19980517/gcc/p/rts/choose-temp.c 5 ../../gcc/optabs.c 5 ../../gcc/local-alloc.c 5 ../../gcc/flow.c 5 ../../gcc/dbxout.c 5 ../../../gcc/p/util.c 5 ../../../gcc/p/../optabs.c 5 ../../../gcc/p/../dbxout.c 4 parse.y 4 insn-emit.c 4 cexp.y 4 /usr/local/packages/egcs-snapshot/egcs-snapshot-19980517/gcc/p/rts/rts-wrtinc.c 4 /usr/local/packages/egcs-snapshot/egcs-snapshot-19980517/gcc/p/rts/rts-block.c 4 ../../gcc/unroll.c 4 ../../gcc/regmove.c 4 ../../gcc/reg-stack.c 4 ../../gcc/objc/sarray.c 4 ../../gcc/jump.c 4 ../../gcc/integrate.c 4 ../../gcc/haifa-sched.c 4 ../../gcc/function.c 4 ../../gcc/calls.c 4 ../../gcc/c-decl.c 4 ../../../gcc/p/../function.c 4 ../../../gcc/cp/hash.h 3 insn-peep.c 3 /usr/local/packages/egcs-snapshot/egcs-snapshot-19980517/gcc/p/rts/rts-numtodec.p 3 ../../gcc/objc/init.c 3 ../../gcc/objc/Object.m 3 ../../gcc/loop.c 3 ../../gcc/genrecog.c 3 ../../gcc/genopinit.c 3 ../../gcc/gcov-io.h 3 ../../gcc/c-gperf.h 3 ../../../gcc/p/gpc-convert.c 3 ../../../gcc/cp/cvt.c 2 /usr/local/packages/egcs-snapshot/egcs-snapshot-19980517/gcc/p/rts/rts-str.p 2 /usr/local/packages/egcs-snapshot/egcs-snapshot-19980517/gcc/p/rts/rts-setup.c 2 /usr/local/packages/egcs-snapshot/egcs-snapshot-19980517/gcc/p/rts/rts-read.c 2 /usr/local/packages/egcs-snapshot/egcs-snapshot-19980517/gcc/p/rts/rts-file.c 2 /usr/local/packages/egcs-snapshot/egcs-snapshot-19980517/gcc/p/rts/rts-error.c 2 ../../gcc/stupid.c 2 ../../gcc/print-rtl.c 2 ../../gcc/objc/selector.c 2 ../../gcc/explow.c 2 ../../gcc/caller-save.c 2 ../../gcc/bitmap.c 2 ../../../gcc/p/types.c 2 ../../../gcc/p/hash.h 2 ../../../gcc/cp/tree.c 2 ../../../gcc/cp/spew.c 2 ../../../gcc/cp/method.c 2 ../../../gcc/cp/init.c 2 ../../../gcc/cp/expr.c 2 ../../../gcc/cp/except.c 2 ../../../gcc/cp/errfn.c 2 ../../../gcc/cp/call.c 1 insn-extract.c 1 /usr/local/packages/egcs-snapshot/egcs-snapshot-19980517/gcc/p/rts/rts-write.c 1 /usr/local/packages/egcs-snapshot/egcs-snapshot-19980517/gcc/p/rts/rts-random.c 1 /usr/local/packages/egcs-snapshot/egcs-snapshot-19980517/gcc/p/rts/rts-misc.c 1 /usr/local/packages/egcs-snapshot/egcs-snapshot-19980517/gcc/p/rts/rts-intfrac.p 1 /usr/local/packages/egcs-snapshot/egcs-snapshot-19980517/gcc/p/rts/rts-heap.c 1 /usr/local/packages/egcs-snapshot/egcs-snapshot-19980517/gcc/p/rts/rts-base.p 1 /usr/local/packages/egcs-snapshot/egcs-snapshot-19980517/gcc/p/rts/rts-assign.p 1 /usr/local/packages/egcs-snapshot/egcs-snapshot-19980517/gcc/p/rts/gpc.pas 1 ../../gcc/recog.c 1 ../../gcc/p/version.c 1 ../../gcc/objc/thr-posix.c 1 ../../gcc/objc/nil_method.c 1 ../../gcc/hash.c 1 ../../gcc/f/com.c 1 ../../gcc/except.c 1 ../../gcc/c-common.c 1 ../../../gcc/cp/typeck.c 1 ../../../gcc/cp/search.c 1 ../../../gcc/cp/class.c
Number of warning types: 487 enumeration value `???' not handled in switch 241 comparison between signed and unsigned 234 unused parameter `???' 191 implicit declaration of function `???' 96 `???' might be used uninitialized in this function 60 unused variable `???' 44 no previous prototype for `???' 35 `???' defined but not used 23 variable `???' might be clobbered by `longjmp' or `vfork' 21 ??? format, ??? arg (arg ???) 18 label `???' defined but not used 16 cast increases required alignment of target type 14 array subscript has type `char' 14 `???' declared inside parameter list 12 suggest explicit braces to avoid ambiguous `else' 9 unsigned value < 0 is always 0 7 suggest parentheses around assignment used as truth value 7 suggest parentheses around && within || 7 argument `???' might be clobbered by `longjmp' or `vfork' 2 zero-length format string 2 which is probably not what you want. 2 passing arg 1 of `???' from incompatible pointer type 2 its scope is only this definition or declaration, 2 empty body in an if-statement 1 unknown escape sequence `???' 1 this function may return with or without a value 1 pointer of type `???' used in arithmetic 1 passing arg 1 of `???' discards `???' from pointer target type 1 missing braces around initializer for `???' 1 `return' with no value, in function returning non-void 1 `???' was used with no prototype before its definition
Native configuration is i486-pc-linux-gnu
=== libio tests ===
=== libio Summary ===
# of expected passes 40 === libstdc++ tests ===
=== libstdc++ Summary ===
# of expected passes 30 Host is i686-pc-linux-gnu
=== gpc tests ===
Host is i686-pc-linux-gnu
=== gcc tests ===
FAIL: gcc.c-torture/execute/980505-1.c execution, -O2 FAIL: gcc.c-torture/execute/980505-1.c execution, -O2 -fomit-frame-pointer -finline-functions FAIL: gcc.c-torture/execute/980505-1.c execution, -O2 -g FAIL: gcc.c-torture/execute/980505-1.c execution, -Os FAIL: gcc.dg/980502-1.c (test for excess errors) FAIL: gcc.dg/clobbers.c execution test
=== gcc Summary ===
# of expected passes 7215 # of unexpected failures 6 # of expected failures 7 # of unsupported tests 10 /mnt/tmp/packages/egcs-snapshot/egcs-snapshot-19980517/builddir/gcc/xgcc version egcs-2.91.29 19980517 (gcc2 ss-980502 experimental)
Host is i686-pc-linux-gnu
=== g++ tests ===
FAIL: g++.brendan/crash30.C (test for excess errors) FAIL: g++.jason/template31.C (test for excess errors) FAIL: g++.law/inline1.C (test for excess errors) FAIL: g++.law/operators27.C (test for excess errors) FAIL: g++.other/redecl1.C (test for excess errors) FAIL: g++.other/using2.C conflict (test for errors, line 9) FAIL: g++.other/using2.C (test for excess errors) FAIL: g++.pt/ttp19.C (test for excess errors) FAIL: g++.pt/ttp40.C (test for excess errors)
=== g++ Summary ===
# of expected passes 3869 # of unexpected failures 9 # of expected failures 72 # of untested testcases 11 /mnt/tmp/packages/egcs-snapshot/egcs-snapshot-19980517/builddir/gcc/testsuite/../xgcc version egcs-2.91.29 19980517 (gcc2 ss-980502 experimental)
Host is i686-pc-linux-gnu
=== g77 tests ===
FAIL: g77.f-torture/compile/970125-0.f, -O1 FAIL: g77.f-torture/compile/970125-0.f, -O2 FAIL: g77.f-torture/compile/970125-0.f, -O2 -fomit-frame-pointer -finline-functions FAIL: g77.f-torture/compile/970125-0.f, -Os FAIL: g77.f-torture/compile/980424-0.f, -O1 FAIL: g77.f-torture/compile/980424-0.f, -O2 FAIL: g77.f-torture/compile/980424-0.f, -O2 -fomit-frame-pointer -finline-functions FAIL: g77.f-torture/compile/980424-0.f, -Os
=== g77 Summary ===
# of expected passes 214 # of unexpected failures 8 /mnt/tmp/packages/egcs-snapshot/egcs-snapshot-19980517/builddir/gcc/g77 version egcs-2.91.29 19980517 (gcc2 ss-980502 experimental)
configure flags: --host=i486-linux --prefix=/usr/lib/egcs-ss --enable-threads --enable-shared --enable-haifa --norecursion
*** gcc/p/ChangeLog~ Mon May 11 19:26:48 1998 --- gcc/p/ChangeLog Fri May 22 01:23:23 1998 *************** *** 1,3 **** --- 1,30 ---- + Thu 21 May 1998 17:50 Matthias Klose doko@cs.tu-berlin.de + + * diffs/gcc-egcs-2.91.28.diff: add check-gpc to gcc/Makefile.in + check target. + + * gpc.c (main): correctly set the language dialect, if the driver is + called with an `x' as prefix. + + set two environment variables (AUTOMAKE_GPC, AUTOMAKE_EXEC_PREFIX) + to correctly (???) call the driver for the automake feature. + Sure, that's a hack ... + + * module.c (module_must_be_recompiled): get the name of the gpc + and the exec prefix used from the environment, if set + (AUTOMAKE_GPC, AUTOMAKE_EXEC_PREFIX). + + * Makefile.in (gpc-config.h): search configure in $(srcdir) + added SCHED_CFLAGS to FLAGS_TO_PASS. + + * Make-lang.in: added p/rts/emath-stamp to GPCSTAGESTUFF. + add RANLIB and RANLIB_TEST to RTS_FLAGS_TO_PASS (@RANLIB_TEST@ + is replaced by egcs configure with empty string. + added SCHED_CFLAGS to GPC_FLAGS_TO_PASS. + (p/version.o): remember date and time of the first + build and use it for later stages, else `make compare' fails. + (pascal.distclean): remove p/gpc_date and p/gpc_time + Mon 11 May 1998 18:21 Peter Gerwinski peter@gerwinski.de
* Make-lang.in: updated version number to 980511. :-I *** gcc/p/diffs/gcc-egcs-2.91.28.diff~ Sun May 10 10:54:25 1998 --- gcc/p/diffs/gcc-egcs-2.91.28.diff Thu May 21 17:05:38 1998 *************** *** 969,971 **** --- 969,1004 ---- for (vals = TREE_OPERAND (init, 1); vals != NULL_TREE; vals = TREE_CHAIN (vals)) { + *** gcc-egcs/Makefile.in~ Thu May 14 16:09:31 1998 + --- gcc-egcs/Makefile.in Thu May 21 14:00:31 1998 + *************** + *** 2495,2501 **** + -e '1,/^## All variables above are.*##/ d' >> site.exp + -@rm -f ./tmp? + + ! CHECK_TARGETS = check-gcc check-g++ check-g77 + + check: $(CHECK_TARGETS) + + --- 2495,2501 ---- + -e '1,/^## All variables above are.*##/ d' >> site.exp + -@rm -f ./tmp? + + ! CHECK_TARGETS = check-gcc check-g++ check-g77 check-gpc + + check: $(CHECK_TARGETS) + + *************** + *** 2537,2542 **** + --- 2537,2547 ---- + TCL_LIBRARY=$${srcdir}/../tcl/library ; \ + export TCL_LIBRARY ; fi ; \ + $(RUNTEST) --tool g77 $(RUNTESTFLAGS) + + + + check-gpc: + + if [ -d p ]; then \ + + cd p && $(MAKE) check-gpc; \ + + fi + + # These exist for maintenance purposes. + *** gcc/p/module.c~ Thu Apr 30 13:13:26 1998 --- gcc/p/module.c Thu May 21 13:41:23 1998 *************** *** 669,681 **** *p = 0; strcat (dep_filename, ".d");
gpc_name = "gpc"; ! gpc_args = xmalloc (255); /* calculate this */ if (automake_gpc_options) ! sprintf (gpc_args, "--automake="%s" %s ", ! automake_gpc_options, automake_gpc_options); else ! sprintf (gpc_args, "--automake "); if (automake_temp_filename) sprintf (gpc_args + strlen (gpc_args), "--amtmpfile=%s ", automake_temp_filename); --- 669,687 ---- *p = 0; strcat (dep_filename, ".d");
+ if (getenv("AUTOMAKE_GPC")) + gpc_name = getenv("AUTOMAKE_GPC"); + else gpc_name = "gpc"; ! gpc_args = xmalloc (512); /* calculate this */ ! gpc_args[0] = '\0'; ! if (getenv("AUTOMAKE_EXEC_PREFIX")) ! sprintf (gpc_args, "-B%s ", getenv("AUTOMAKE_EXEC_PREFIX")); if (automake_gpc_options) ! sprintf (gpc_args, "%s--automake="%s" %s ", ! gpc_args, automake_gpc_options, automake_gpc_options); else ! sprintf (gpc_args, "%s--automake ", gpc_args); if (automake_temp_filename) sprintf (gpc_args + strlen (gpc_args), "--amtmpfile=%s ", automake_temp_filename); *** gcc/p/gpc.c~ Tue Apr 7 11:33:31 1998 --- gcc/p/gpc.c Thu May 21 13:36:07 1998 *************** *** 4623,4632 **** --- 4623,4660 ---- struct user_specs *uptr;
#ifdef GPC + char *buf = xmalloc(strlen(argv[0])+30); + sprintf(buf, "AUTOMAKE_GPC=%s", argv[0]); + putenv(buf); + free(buf); + + p = NULL; + for (i=1; i < argc; i++) { + p = argv[i]; + if (p[0] == '-' && p[1] == 'B') { + if (p[2]) + p = &p[2]; + else if (i + 1 < argc) + p = argv[i+1]; + else + p = NULL; + break; + } + } + if (p) { + char *buf = xmalloc(strlen(p)+30); + sprintf(buf, "AUTOMAKE_EXEC_PREFIX=%s", p); + putenv(buf); + free(buf); + } + /* If we're called as gpc (or i386-aout-gpc), link in libgpc as well. */ p = argv[0] + strlen (argv[0]); while (p != argv[0] && p[-1] != '-' && p[-1] != '/' && p[-1] != DIR_SEPARATOR) --p; + /* If called as x??, remove the x */ + if (p[0] == 'x') + p++; dialectname = p;
if (strcmp (dialectname, "gpc") == 0) *** gcc/p/Make-lang.in~ Mon May 11 16:33:55 1998 --- gcc/p/Make-lang.in Fri May 22 01:15:37 1998 *************** *** 57,64 **** --- 57,67 ---- "MAKEINFOFLAGS=$(MAKEINFOFLAGS)" \ "MAYBE_TARGET_DEFAULT=$(MAYBE_TARGET_DEFAULT)" \ "MAYBE_USE_COLLECT2=$(MAYBE_USE_COLLECT2)" \ + "RANLIB=$(RANLIB)" \ + "RANLIB_TEST=$(RANLIB_TEST)" \ "RANLIB_FOR_TARGET=$(RANLIB_FOR_TARGET)" \ "RANLIB_TEST_FOR_TARGET=$(RANLIB_TEST_FOR_TARGET)" \ + "SCHED_CFLAGS=$(SCHED_CFLAGS)" \ "SHELL=$(SHELL)" \ "bindir=$(bindir)" \ "exec_prefix=$(exec_prefix)" \ *************** *** 86,91 **** --- 89,96 ---- CFLAGS="$(CFLAGS)" \ X_CFLAGS="$(X_CFLAGS)" \ LDFLAGS="$(LDFLAGS)" \ + RANLIB="$(RANLIB)" \ + RANLIB_TEST="$(RANLIB_TEST)" \ RANLIB_FOR_TARGET="$(RANLIB_FOR_TARGET)" \ RANLIB_TEST_FOR_TARGET="$(RANLIB_TEST_FOR_TARGET)" \ SHELL="$(SHELL)" *************** *** 191,198 **** $(DRIVER_DEFINES) \ -c `echo $(srcdir)/p/gpc.c | sed 's,^./,,'` -o $@
! p/version.o: $(srcdir)/p/version.c config.status $(CC) -DGPC $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ -DGCC_VERSION=""$(version)"" \ -DGCC_VERSION_STRING=""$(version)"" \ -DGPC_VERSION=""$(gpc_version)"" \ --- 196,211 ---- $(DRIVER_DEFINES) \ -c `echo $(srcdir)/p/gpc.c | sed 's,^./,,'` -o $@
! p/gpc_date: ! date '+%h %e %Y' > $@ ! ! p/gpc_time: ! date '+%H:%M:%S' > $@ ! ! p/version.o: p/gpc_date p/gpc_time $(srcdir)/p/version.c config.status $(CC) -DGPC $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ + -DGPC_TIME=""`cat p/gpc_time`"" \ + -DGPC_DATE=""`cat p/gpc_date`"" \ -DGCC_VERSION=""$(version)"" \ -DGCC_VERSION_STRING=""$(version)"" \ -DGPC_VERSION=""$(gpc_version)"" \ *************** *** 452,457 **** --- 465,471 ---- -rm -f p/config.cache p/config.log p/config.status -rm -f p/testsuite/gpc.log p/testsuite/gpc.sum -rm -f p/parse.output + -rm -f p/gpc_date p/gpc_time # like gcc's extraclean, which does clean p/ for us, but not p/rts. pascal.extraclean: -rm -f p/*/=* p/*/"#"* p/*/*~* *************** *** 471,477 ****
RTSSTAGESTUFF = p/rts/*$(objext) p/rts/config.cache p/rts/config.log \ p/rts/config.status p/rts/Makefile p/rts/math-stamp p/rts/zmath-stamp \ ! p/rts/rts-config.h
pascal.stage1: -if [ -d stage1/p/rts ] ; then true ; else mkdir stage1/p/rts ; fi --- 485,491 ----
RTSSTAGESTUFF = p/rts/*$(objext) p/rts/config.cache p/rts/config.log \ p/rts/config.status p/rts/Makefile p/rts/math-stamp p/rts/zmath-stamp \ ! p/rts/rts-config.h p/rts/emath-stamp
pascal.stage1: -if [ -d stage1/p/rts ] ; then true ; else mkdir stage1/p/rts ; fi *** gcc/p/Makefile.in~ Wed May 20 17:55:50 1998 --- gcc/p/Makefile.in Fri May 22 01:13:15 1998 *************** *** 129,135 **** INTERNAL_CFLAGS = $(CROSS) -DIN_GCC -DGPC
# This is the variable actually used when we compile. ! ALL_CFLAGS = $(INTERNAL_CFLAGS) $(X_CFLAGS) $(T_CFLAGS) $(CFLAGS) $(XCFLAGS)
# Likewise. ALL_CPPFLAGS = $(CPPFLAGS) $(X_CPPFLAGS) $(T_CPPFLAGS) --- 129,136 ---- INTERNAL_CFLAGS = $(CROSS) -DIN_GCC -DGPC
# This is the variable actually used when we compile. ! ALL_CFLAGS = $(INTERNAL_CFLAGS) $(X_CFLAGS) $(T_CFLAGS) $(CFLAGS) $(XCFLAGS) \ ! $(SCHED_CFLAGS)
# Likewise. ALL_CPPFLAGS = $(CPPFLAGS) $(X_CPPFLAGS) $(T_CPPFLAGS) *************** *** 176,181 **** --- 177,183 ---- "MAKEINFOFLAGS=$(MAKEINFOFLAGS)" \ "RANLIB=$(RANLIB)" \ "RANLIB_TEST=$(RANLIB_TEST)" \ + "SCHED_CFLAGS=$(SCHED_CFLAGS)" \ "SHELL=$(SHELL)" \ "exec_prefix=$(exec_prefix)" \ "prefix=$(prefix)" \