[gnu.gcc.bug] Feedback on gcc 1.35 -- Sun 3 and 386i SunOS4.0.1

Beebe@SCIENCE.UTAH.EDU ("Nelson H.F. Beebe") (04/29/89)

I've just installed gcc 1.35 on our Sun 3 and 386i systems under
SunOS4.0.1.  On both architectures, the stage[12] regression
tests passed (but see below).

========================================================================
PROBLEM: "make clean" does not remove gnulib; it should, because
otherwise it breaks multi-architecture makes where e.g. the Sun 386i
source tree is a symbolic link into the Sun 3 tree.

========================================================================
PROBLEM: Unlike gcc 1.34 and earlier versions, which were silent on the
matter, gcc 1.35 now issues a warning message when Sun make generates
the -sun3 compile-time option; note that gnumake doesn't generate the
-sun3 option, which might break CC=cc compilations.

make CC=gcc foo
gcc    -sun3 -o foo foo.c
gcc: unrecognized option `-sun3'

make foo
cc    -sun3 -o foo foo.c

gnumake -v foo
GNU Make version 3.45, by Richard Stallman and Roland
McGrath.
Copyright (C) 1988, 1989 Free Software Foundation, Inc.
This is free software; see the source for copying
conditions.
There is NO warranty; not even for MERCHANTABILITY or
FITNESS FOR A
PARTICULAR PURPOSE.

cc     foo.c   -o foo

========================================================================
SUGGESTION: Since the stage[12] regression test is very reassuring, I
like to run it during installation of each version of gcc (which I've
done about 20 times now).  It would be nice if there were a make target
to do it automatically.  On Sun 386i systems, there appears to be a time
stamp in the .o files which makes all the cmp's fail.  I get around the
problem with this little script (which could be put in the Makefile,
with suitable adjustment of the cmp offsets):

#!/bin/csh
# Run regression tests for GNU gcc installation (e.g. on Sun 386i)
# Note that a change is implemented in the cmp step below

make stage1

make CC=stage1/gcc CFLAGS="-g -O -Bstage1/"

make stage2

make CC=stage2/gcc CFLAGS="-g -O -Bstage2/"

# .o files have uniform difference in bytes at offsets 4,5;
# start comparisons beyond that;  bug-gnu-gcc suggests it may be a 
# timestamp
echo "Begin .o file comparisons -- any output indicates ERRORS"
foreach file (*.o)
	cmp $file stage2/$file 6 6
end
-------

news@sun.Eng.Sun.COM (news) (05/02/89)

In article <12490025278.16.BEEBE@SCIENCE.UTAH.EDU> Beebe@SCIENCE.UTAH.EDU ("Nelson H.F. Beebe") writes:
>========================================================================
>SUGGESTION: Since the stage[12] regression test is very reassuring, I
>like to run it during installation of each version of gcc (which I've
>done about 20 times now).  It would be nice if there were a make target
>to do it automatically.  On Sun 386i systems, there appears to be a time
>stamp in the .o files which makes all the cmp's fail.  I get around the
>problem with this little script (which could be put in the Makefile,
>with suitable adjustment of the cmp offsets):

What you see is in fact a timestamp. The Sun 386i uses COFF format
object files. From /usr/include/filehdr.h:

struct filehdr {
	unsigned short	f_magic;	/* magic number */
	unsigned short	f_nscns;	/* number of sections */
NOTE ->	long		f_timdat;	/* time & date stamp */
	long		f_symptr;	/* file pointer to symtab */
	long		f_nsyms;	/* number of symtab entries */
	unsigned short	f_opthdr;	/* sizeof(optional hdr) */
	unsigned short	f_flags;	/* flags */
};

># .o files have uniform difference in bytes at offsets 4,5;
># start comparisons beyond that;  bug-gnu-gcc suggests it may be a 
># timestamp
>echo "Begin .o file comparisons -- any output indicates ERRORS"
>foreach file (*.o)
>	cmp $file stage2/$file 6 6
>end

Given the structure definition above, you should start the comparisons
at offset 8 rather than 6:
	2 byte short + 2 byte short + 4 byte timestamp == 8 bytes to ignore.

--------------------------------------------
	     James Buster
	Mad Hacker Extraordinaire
	 bitbug@lonewolf.sun.com
--------------------------------------------

ado@elsie.UUCP (Arthur David Olson) (05/07/89)

Here's the shell script I run after receiving each new version of gcc.
-- 
			Space:  Canada, 0 tries ever.
	Arthur David Olson    ado@ncifcrf.gov    ADO is a trademark of Ampex.

unset FLOAT_OPTION
make clean
rm -f -r stage1 stage2 gnulib
make
make stage1
make CC=stage1/gcc CFLAGS="-g -O -Bstage1/"
make stage2
make CC=stage2/gcc CFLAGS="-g -O -Bstage2/"
for file in *.o
do
	cmp -l $file stage2/$file |
		awk '$1 > 6 { print "'"$file stage2/$file differ"'" ; exit }'
done
echo $0 done!