NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

re: toolchain/53137: Non-deterministic gcc build (build fails sometimes)



Robert Elz writes:
>     Date:        Wed, 28 Mar 2018 11:08:13 +1100
>     From:        matthew green <mrg%eterna.com.au@localhost>
>     Message-ID:  <17891.1522195693%splode.eterna.com.au@localhost>
> 
>   | i think this is caused by this rule:
> 
> It very well could be.   All the failures I have seen are in files that
> could be related to that - all seem related to instruction generation,
> and are reported as xxx.md file names (though that may come from
> #file or something in the actual file being processed.)
> 
> Assuming that is it, how should the
> 	# XXX fix me
> be done properly?

i've been using this patch, seems to work though i couldn't reproduce
the issue myself.  i *think* it uses well defined semantics, it would
be nice if others would confirm.

this needs to be applied to gcc.old, and netbsd-7/8 too.  netbsd-6's
GCC has no >1 output generators.


.mrg.

Index: external/gpl3/gcc/usr.bin/backend/Makefile
===================================================================
RCS file: /cvsroot/src/external/gpl3/gcc/usr.bin/backend/Makefile,v
retrieving revision 1.43
diff -p -u -r1.43 Makefile
--- external/gpl3/gcc/usr.bin/backend/Makefile	11 Feb 2018 02:12:28 -0000	1.43
+++ external/gpl3/gcc/usr.bin/backend/Makefile	28 Mar 2018 05:38:11 -0000
@@ -398,16 +398,23 @@ CLEANFILES+=	tree-check.h
 BUILDSYMLINKS+= insn-check.h tree-check.h
 
 # genattrtab has three output files
-# XXX fix me
-insn-attrtab.c insn-dfatab.c insn-latencytab.c: genattrtab ${G_md_file} insn-conditions.md 
+insn-dfatab.c insn-latencytab.c: insn-attrtab.c
+	cp -p ${.TARGET}.tmp ${.TARGET}
+insn-attrtab.c: genattrtab ${G_md_file} insn-conditions.md 
 	${_MKTARGET_CREATE}
-	./genattrtab ${G_md_file} insn-conditions.md -Ainsn-attrtab.c -Dinsn-dfatab.c -Linsn-latencytab.c
+	./genattrtab ${G_md_file} insn-conditions.md \
+		-A${.TARGET}.tmp -Dinsn-dfatab.c.tmp -Linsn-latencytab.c.tmp && \
+	mv ${.TARGET}.tmp ${.TARGET}
 CLEANFILES+=	insn-attrtab.c insn-dfatab.c insn-latencytab.c
 
 # genopinit has two output files
-insn-opinit.c insn-opinit.h: genopinit ${G_md_file} insn-conditions.md
+insn-opinit.h: insn-opinit.c
+	cp -p ${.TARGET}.tmp ${.TARGET}
+insn-opinit.c: genopinit ${G_md_file} insn-conditions.md
 	${_MKTARGET_CREATE}
-	./genopinit ${G_md_file} insn-conditions.md -hinsn-opinit.h -cinsn-opinit.c
+	./genopinit ${G_md_file} insn-conditions.md \
+		-hinsn-opinit.h.tmp -c${.TARGET}.tmp && \
+	mv ${.TARGET}.tmp ${.TARGET}
 CLEANFILES+=	insn-opinit.h insn-opinit.c
 
 LDFLAGS.genautomata+=	-lm


Home | Main Index | Thread Index | Old Index