The following prototype patch re-uses cc1-checksum.c from the previous stage when compiling stage-final. This eventually allows to compare cc1 from the last two stages to fix the lack of a true comparison when doing LTO bootstrap (it compiles LTO bytecode from the compile-stage there, not the final optimization result).
Bootstrapped on x86_64-unknown-linux-gnu. When stripping gcc/cc1 and prev-gcc/cc1 after the bootstrap they now compare identical (with LTO bootstrap it should not require stripping as that doesn't do a bootstrap-debug AFAIK). Is sth like this acceptable? (consider it also done for cp/Make-lang.in) In theory we can compare all stage1 languages but I guess comparing the required ones for a LTO bootstrap, cc1, cc1plus and lto1 would be sufficient (or even just comparing one binary in which case comparing lto1 would not require any patches). This also gets rid of the annoying warning that cc1-checksum.o differs (obviously). Thanks, Richard. 2016-04-28 Richard Biener <rguent...@suse.de> c/ * Make-lang.in (cc1-checksum.c): For stage-final re-use the checksum from the previous stage. Index: gcc/c/Make-lang.in =================================================================== --- gcc/c/Make-lang.in (revision 235499) +++ gcc/c/Make-lang.in (working copy) @@ -63,9 +63,14 @@ c-warn = $(STRICT_WARN) # compute checksum over all object files and the options cc1-checksum.c : build/genchecksum$(build_exeext) checksum-options \ $(C_OBJS) $(BACKEND) $(LIBDEPS) - build/genchecksum$(build_exeext) $(C_OBJS) $(BACKEND) $(LIBDEPS) \ + if [ -f ../stage_final ] \ + && cmp -s ../stage_current ../stage_final; then \ + cp ../prev-gcc/cc1-checksum.c cc1-checksum.c; \ + else \ + build/genchecksum$(build_exeext) $(C_OBJS) $(BACKEND) $(LIBDEPS) \ checksum-options > cc1-checksum.c.tmp && \ - $(srcdir)/../move-if-change cc1-checksum.c.tmp cc1-checksum.c + $(srcdir)/../move-if-change cc1-checksum.c.tmp cc1-checksum.c; \ + fi cc1$(exeext): $(C_OBJS) cc1-checksum.o $(BACKEND) $(LIBDEPS) +$(LLINKER) $(ALL_LINKERFLAGS) $(LDFLAGS) -o $@ $(C_OBJS) \