public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* fix libcc1 dependencies in toplevel Makefile
@ 2017-06-13 12:58 Olivier Hainque
  2017-06-14 11:39 ` Nathan Sidwell
  2017-06-22 12:13 ` Alexandre Oliva
  0 siblings, 2 replies; 16+ messages in thread
From: Olivier Hainque @ 2017-06-13 12:58 UTC (permalink / raw)
  To: GCC Patches; +Cc: Nicolas Roche

[-- Attachment #1: Type: text/plain, Size: 2050 bytes --]

Hello,

During highly parallel builds on fast hosts, we have experienced
sporadic bootstrap failures on libquadmath like

  In file included from ../../../src/libquadmath/printf/printf_fp.c:39:0:
  ../../../src/libquadmath/printf/quadmath-printf.h:24:20: fatal error: .../build/./gcc/include-fixed/limits.h: No such file or directory
  #include <limits.h>

A pretty clear sign of a race condition caused by some inaccuracy in the
dependency statements.

Investigation led us to suspect this piece in the toplevel Makefile.in:

  all-libcc1: maybe-all-gcc

which differs from all the other dependencies on maybe-all-gcc in that it's
unconditional whereas the other ones are conditioned on @if gcc-no-bootstrap.

(Thanks to Nico Roche, cc'ed for the worked involved in finding this out)

Our understanding is that it's incorrect to have dependencies on maybe-all-gcc
in the bootstrap case; that this should be a dependency on stage_current
instead.

This patch is a proposal to address this by first removing the following
statement in Makefile.def:

  dependencies = { module=all-libcc1; on=all-gcc; };

(which emits the dependency unconditionally), then refining the expansion
of "all" targets in Makefile.tpl so they include a possible dep conditioned by
gcc-no-bootstrap, on demand for "host_module"s that ask for it by way of a new
"depgcc" parameter.

We have been using this in-house for months now. The sporadic failures
have disappeared since then and we haven't observed any related fallout
so far.

Bootstrapped and regression tested on x86_64-linux.

OK to commit ?

Thanks in advance for your feedback,

With Kind Regards,

Olivier

2017-06-13  Olivier Hainque  <hainque@adacore.com>

	* Makefile.def (host_modules): Set depgcc to true for libcc1,
	meaning need of a dep on stage_current if gcc-bootstrap and on
	maybe-all-gcc otherwise.
	(dependencies) Remove unconditional dependency on all-gcc.
    
	* Makefile.tpl ("all" targets): Handle depgcc.
	* Makefile.in: Regenerate
 

[-- Attachment #2: libcc1-deps.diff --]
[-- Type: application/octet-stream, Size: 17138 bytes --]

diff --git a/Makefile.def b/Makefile.def
index abfa9ef..0bc3ccf 100644
--- a/Makefile.def
+++ b/Makefile.def
@@ -126,7 +126,7 @@ host_modules= { module= gnattools; };
 host_modules= { module= lto-plugin; bootstrap=true;
 		extra_configure_flags='--enable-shared @extra_linker_plugin_flags@ @extra_linker_plugin_configure_flags@';
 		extra_make_flags='@extra_linker_plugin_flags@'; };
-host_modules= { module= libcc1; extra_configure_flags=--enable-shared; };
+host_modules= { module= libcc1; extra_configure_flags=--enable-shared; depgcc=true; };
 host_modules= { module= gotools; };
 
 target_modules = { module= libstdc++-v3;
@@ -373,7 +373,6 @@ dependencies = { module=all-lto-plugin; on=all-libiberty; };
 dependencies = { module=all-lto-plugin; on=all-libiberty-linker-plugin; };
 
 dependencies = { module=configure-libcc1; on=configure-gcc; };
-dependencies = { module=all-libcc1; on=all-gcc; };
 
 dependencies = { module=all-gotools; on=all-target-libgo; };
 
diff --git a/Makefile.in b/Makefile.in
index b824e0a..5007f9d 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -2808,6 +2808,7 @@ maybe-all-build-libiberty:
 @if gcc-bootstrap
 all-build-libiberty: stage_current
 @endif gcc-bootstrap
+
 @if build-libiberty
 TARGET-build-libiberty=all
 maybe-all-build-libiberty: all-build-libiberty
@@ -2865,6 +2866,7 @@ maybe-all-build-bison:
 @if gcc-bootstrap
 all-build-bison: stage_current
 @endif gcc-bootstrap
+
 @if build-bison
 TARGET-build-bison=all
 maybe-all-build-bison: all-build-bison
@@ -2922,6 +2924,7 @@ maybe-all-build-flex:
 @if gcc-bootstrap
 all-build-flex: stage_current
 @endif gcc-bootstrap
+
 @if build-flex
 TARGET-build-flex=all
 maybe-all-build-flex: all-build-flex
@@ -2979,6 +2982,7 @@ maybe-all-build-m4:
 @if gcc-bootstrap
 all-build-m4: stage_current
 @endif gcc-bootstrap
+
 @if build-m4
 TARGET-build-m4=all
 maybe-all-build-m4: all-build-m4
@@ -3036,6 +3040,7 @@ maybe-all-build-texinfo:
 @if gcc-bootstrap
 all-build-texinfo: stage_current
 @endif gcc-bootstrap
+
 @if build-texinfo
 TARGET-build-texinfo=all
 maybe-all-build-texinfo: all-build-texinfo
@@ -3093,6 +3098,7 @@ maybe-all-build-fixincludes:
 @if gcc-bootstrap
 all-build-fixincludes: stage_current
 @endif gcc-bootstrap
+
 @if build-fixincludes
 TARGET-build-fixincludes=all
 maybe-all-build-fixincludes: all-build-fixincludes
@@ -3150,6 +3156,7 @@ maybe-all-build-libcpp:
 @if gcc-bootstrap
 all-build-libcpp: stage_current
 @endif gcc-bootstrap
+
 @if build-libcpp
 TARGET-build-libcpp=all
 maybe-all-build-libcpp: all-build-libcpp
@@ -3475,6 +3482,7 @@ maybe-all-bfd:
 @if gcc-bootstrap
 all-bfd: stage_current
 @endif gcc-bootstrap
+
 @if bfd
 TARGET-bfd=all
 maybe-all-bfd: all-bfd
@@ -4505,6 +4513,7 @@ maybe-all-opcodes:
 @if gcc-bootstrap
 all-opcodes: stage_current
 @endif gcc-bootstrap
+
 @if opcodes
 TARGET-opcodes=all
 maybe-all-opcodes: all-opcodes
@@ -5535,6 +5544,7 @@ maybe-all-binutils:
 @if gcc-bootstrap
 all-binutils: stage_current
 @endif gcc-bootstrap
+
 @if binutils
 TARGET-binutils=all
 maybe-all-binutils: all-binutils
@@ -6301,6 +6311,7 @@ maybe-all-bison:
 @if gcc-bootstrap
 all-bison: stage_current
 @endif gcc-bootstrap
+
 @if bison
 TARGET-bison=all
 maybe-all-bison: all-bison
@@ -6745,6 +6756,7 @@ maybe-all-cgen:
 @if gcc-bootstrap
 all-cgen: stage_current
 @endif gcc-bootstrap
+
 @if cgen
 TARGET-cgen=all
 maybe-all-cgen: all-cgen
@@ -7186,6 +7198,7 @@ maybe-all-dejagnu:
 @if gcc-bootstrap
 all-dejagnu: stage_current
 @endif gcc-bootstrap
+
 @if dejagnu
 TARGET-dejagnu=all
 maybe-all-dejagnu: all-dejagnu
@@ -7627,6 +7640,7 @@ maybe-all-etc:
 @if gcc-bootstrap
 all-etc: stage_current
 @endif gcc-bootstrap
+
 @if etc
 TARGET-etc=all
 maybe-all-etc: all-etc
@@ -8068,6 +8082,7 @@ maybe-all-fastjar:
 @if gcc-bootstrap
 all-fastjar: stage_current
 @endif gcc-bootstrap
+
 @if fastjar
 TARGET-fastjar=all
 maybe-all-fastjar: all-fastjar
@@ -8776,6 +8791,7 @@ maybe-all-fixincludes:
 @if gcc-bootstrap
 all-fixincludes: stage_current
 @endif gcc-bootstrap
+
 @if fixincludes
 TARGET-fixincludes=all
 maybe-all-fixincludes: all-fixincludes
@@ -9527,6 +9543,7 @@ maybe-all-flex:
 @if gcc-bootstrap
 all-flex: stage_current
 @endif gcc-bootstrap
+
 @if flex
 TARGET-flex=all
 maybe-all-flex: all-flex
@@ -10235,6 +10252,7 @@ maybe-all-gas:
 @if gcc-bootstrap
 all-gas: stage_current
 @endif gcc-bootstrap
+
 @if gas
 TARGET-gas=all
 maybe-all-gas: all-gas
@@ -11265,6 +11283,7 @@ maybe-all-gcc:
 @if gcc-bootstrap
 all-gcc: stage_current
 @endif gcc-bootstrap
+
 @if gcc
 TARGET-gcc=all
 maybe-all-gcc: all-gcc
@@ -12303,6 +12322,7 @@ maybe-all-gmp:
 @if gcc-bootstrap
 all-gmp: stage_current
 @endif gcc-bootstrap
+
 @if gmp
 TARGET-gmp=all
 maybe-all-gmp: all-gmp
@@ -13329,6 +13349,7 @@ maybe-all-mpfr:
 @if gcc-bootstrap
 all-mpfr: stage_current
 @endif gcc-bootstrap
+
 @if mpfr
 TARGET-mpfr=all
 maybe-all-mpfr: all-mpfr
@@ -14355,6 +14376,7 @@ maybe-all-mpc:
 @if gcc-bootstrap
 all-mpc: stage_current
 @endif gcc-bootstrap
+
 @if mpc
 TARGET-mpc=all
 maybe-all-mpc: all-mpc
@@ -15381,6 +15403,7 @@ maybe-all-isl:
 @if gcc-bootstrap
 all-isl: stage_current
 @endif gcc-bootstrap
+
 @if isl
 TARGET-isl=all
 maybe-all-isl: all-isl
@@ -16407,6 +16430,7 @@ maybe-all-libelf:
 @if gcc-bootstrap
 all-libelf: stage_current
 @endif gcc-bootstrap
+
 @if libelf
 TARGET-libelf=all
 maybe-all-libelf: all-libelf
@@ -17425,6 +17449,7 @@ maybe-all-gold:
 @if gcc-bootstrap
 all-gold: stage_current
 @endif gcc-bootstrap
+
 @if gold
 TARGET-gold=all
 maybe-all-gold: all-gold
@@ -18191,6 +18216,7 @@ maybe-all-gprof:
 @if gcc-bootstrap
 all-gprof: stage_current
 @endif gcc-bootstrap
+
 @if gprof
 TARGET-gprof=all
 maybe-all-gprof: all-gprof
@@ -18896,6 +18922,7 @@ maybe-all-intl:
 @if gcc-bootstrap
 all-intl: stage_current
 @endif gcc-bootstrap
+
 @if intl
 TARGET-intl=all
 maybe-all-intl: all-intl
@@ -19662,6 +19689,7 @@ maybe-all-tcl:
 @if gcc-bootstrap
 all-tcl: stage_current
 @endif gcc-bootstrap
+
 @if tcl
 TARGET-tcl=all
 maybe-all-tcl: all-tcl
@@ -20088,6 +20116,7 @@ maybe-all-itcl:
 @if gcc-bootstrap
 all-itcl: stage_current
 @endif gcc-bootstrap
+
 @if itcl
 TARGET-itcl=all
 maybe-all-itcl: all-itcl
@@ -20793,6 +20822,7 @@ maybe-all-ld:
 @if gcc-bootstrap
 all-ld: stage_current
 @endif gcc-bootstrap
+
 @if ld
 TARGET-ld=all
 maybe-all-ld: all-ld
@@ -21823,6 +21853,7 @@ maybe-all-libbacktrace:
 @if gcc-bootstrap
 all-libbacktrace: stage_current
 @endif gcc-bootstrap
+
 @if libbacktrace
 TARGET-libbacktrace=all
 maybe-all-libbacktrace: all-libbacktrace
@@ -22853,6 +22884,7 @@ maybe-all-libcpp:
 @if gcc-bootstrap
 all-libcpp: stage_current
 @endif gcc-bootstrap
+
 @if libcpp
 TARGET-libcpp=all
 maybe-all-libcpp: all-libcpp
@@ -23883,6 +23915,7 @@ maybe-all-libdecnumber:
 @if gcc-bootstrap
 all-libdecnumber: stage_current
 @endif gcc-bootstrap
+
 @if libdecnumber
 TARGET-libdecnumber=all
 maybe-all-libdecnumber: all-libdecnumber
@@ -24649,6 +24682,7 @@ maybe-all-libgui:
 @if gcc-bootstrap
 all-libgui: stage_current
 @endif gcc-bootstrap
+
 @if libgui
 TARGET-libgui=all
 maybe-all-libgui: all-libgui
@@ -25362,6 +25396,7 @@ maybe-all-libiberty:
 @if gcc-bootstrap
 all-libiberty: stage_current
 @endif gcc-bootstrap
+
 @if libiberty
 TARGET-libiberty=all
 maybe-all-libiberty: all-libiberty
@@ -26400,6 +26435,7 @@ maybe-all-libiberty-linker-plugin:
 @if gcc-bootstrap
 all-libiberty-linker-plugin: stage_current
 @endif gcc-bootstrap
+
 @if libiberty-linker-plugin
 TARGET-libiberty-linker-plugin=all
 maybe-all-libiberty-linker-plugin: all-libiberty-linker-plugin
@@ -27438,6 +27474,7 @@ maybe-all-libiconv:
 @if gcc-bootstrap
 all-libiconv: stage_current
 @endif gcc-bootstrap
+
 @if libiconv
 TARGET-libiconv=all
 maybe-all-libiconv: all-libiconv
@@ -28099,6 +28136,7 @@ maybe-all-m4:
 @if gcc-bootstrap
 all-m4: stage_current
 @endif gcc-bootstrap
+
 @if m4
 TARGET-m4=all
 maybe-all-m4: all-m4
@@ -28540,6 +28578,7 @@ maybe-all-readline:
 @if gcc-bootstrap
 all-readline: stage_current
 @endif gcc-bootstrap
+
 @if readline
 TARGET-readline=all
 maybe-all-readline: all-readline
@@ -28981,6 +29020,7 @@ maybe-all-sid:
 @if gcc-bootstrap
 all-sid: stage_current
 @endif gcc-bootstrap
+
 @if sid
 TARGET-sid=all
 maybe-all-sid: all-sid
@@ -29422,6 +29462,7 @@ maybe-all-sim:
 @if gcc-bootstrap
 all-sim: stage_current
 @endif gcc-bootstrap
+
 @if sim
 TARGET-sim=all
 maybe-all-sim: all-sim
@@ -29863,6 +29904,7 @@ maybe-all-texinfo:
 @if gcc-bootstrap
 all-texinfo: stage_current
 @endif gcc-bootstrap
+
 @if texinfo
 TARGET-texinfo=all
 maybe-all-texinfo: all-texinfo
@@ -30564,6 +30606,7 @@ maybe-all-zlib:
 @if gcc-bootstrap
 all-zlib: stage_current
 @endif gcc-bootstrap
+
 @if zlib
 TARGET-zlib=all
 maybe-all-zlib: all-zlib
@@ -31312,6 +31355,7 @@ maybe-all-gdb:
 @if gcc-bootstrap
 all-gdb: stage_current
 @endif gcc-bootstrap
+
 @if gdb
 TARGET-gdb=all
 maybe-all-gdb: all-gdb
@@ -31753,6 +31797,7 @@ maybe-all-expect:
 @if gcc-bootstrap
 all-expect: stage_current
 @endif gcc-bootstrap
+
 @if expect
 TARGET-expect=all
 maybe-all-expect: all-expect
@@ -32194,6 +32239,7 @@ maybe-all-guile:
 @if gcc-bootstrap
 all-guile: stage_current
 @endif gcc-bootstrap
+
 @if guile
 TARGET-guile=all
 maybe-all-guile: all-guile
@@ -32635,6 +32681,7 @@ maybe-all-tk:
 @if gcc-bootstrap
 all-tk: stage_current
 @endif gcc-bootstrap
+
 @if tk
 TARGET-tk=all
 maybe-all-tk: all-tk
@@ -33076,6 +33123,7 @@ maybe-all-libtermcap:
 @if gcc-bootstrap
 all-libtermcap: stage_current
 @endif gcc-bootstrap
+
 @if libtermcap
 TARGET-libtermcap=all
 maybe-all-libtermcap: all-libtermcap
@@ -33451,6 +33499,7 @@ maybe-all-utils:
 @if gcc-bootstrap
 all-utils: stage_current
 @endif gcc-bootstrap
+
 @if utils
 TARGET-utils=all
 maybe-all-utils: all-utils
@@ -33886,6 +33935,7 @@ maybe-all-gnattools:
 @if gcc-bootstrap
 all-gnattools: stage_current
 @endif gcc-bootstrap
+
 @if gnattools
 TARGET-gnattools=all
 maybe-all-gnattools: all-gnattools
@@ -34599,6 +34649,7 @@ maybe-all-lto-plugin:
 @if gcc-bootstrap
 all-lto-plugin: stage_current
 @endif gcc-bootstrap
+
 @if lto-plugin
 TARGET-lto-plugin=all
 maybe-all-lto-plugin: all-lto-plugin
@@ -35365,6 +35416,11 @@ maybe-all-libcc1:
 @if gcc-bootstrap
 all-libcc1: stage_current
 @endif gcc-bootstrap
+
+@if gcc-no-bootstrap
+all-libcc1: maybe-all-gcc
+@endif gcc-no-bootstrap
+
 @if libcc1
 TARGET-libcc1=all
 maybe-all-libcc1: all-libcc1
@@ -35806,6 +35862,7 @@ maybe-all-gotools:
 @if gcc-bootstrap
 all-gotools: stage_current
 @endif gcc-bootstrap
+
 @if gotools
 TARGET-gotools=all
 maybe-all-gotools: all-gotools
@@ -36628,6 +36685,7 @@ maybe-all-target-libstdc++-v3:
 @if gcc-bootstrap
 all-target-libstdc++-v3: stage_current
 @endif gcc-bootstrap
+
 @if target-libstdc++-v3
 TARGET-target-libstdc++-v3=all
 maybe-all-target-libstdc++-v3: all-target-libstdc++-v3
@@ -37784,6 +37842,7 @@ maybe-all-target-libsanitizer:
 @if gcc-bootstrap
 all-target-libsanitizer: stage_current
 @endif gcc-bootstrap
+
 @if target-libsanitizer
 TARGET-target-libsanitizer=all
 maybe-all-target-libsanitizer: all-target-libsanitizer
@@ -38940,6 +38999,7 @@ maybe-all-target-libmpx:
 @if gcc-bootstrap
 all-target-libmpx: stage_current
 @endif gcc-bootstrap
+
 @if target-libmpx
 TARGET-target-libmpx=all
 maybe-all-target-libmpx: all-target-libmpx
@@ -40096,6 +40156,7 @@ maybe-all-target-libvtv:
 @if gcc-bootstrap
 all-target-libvtv: stage_current
 @endif gcc-bootstrap
+
 @if target-libvtv
 TARGET-target-libvtv=all
 maybe-all-target-libvtv: all-target-libvtv
@@ -40892,6 +40953,7 @@ maybe-all-target-libcilkrts:
 @if gcc-bootstrap
 all-target-libcilkrts: stage_current
 @endif gcc-bootstrap
+
 @if target-libcilkrts
 TARGET-target-libcilkrts=all
 maybe-all-target-libcilkrts: all-target-libcilkrts
@@ -41350,6 +41412,7 @@ maybe-all-target-liboffloadmic:
 @if gcc-bootstrap
 all-target-liboffloadmic: stage_current
 @endif gcc-bootstrap
+
 @if target-liboffloadmic
 TARGET-target-liboffloadmic=all
 maybe-all-target-liboffloadmic: all-target-liboffloadmic
@@ -41808,6 +41871,7 @@ maybe-all-target-libssp:
 @if gcc-bootstrap
 all-target-libssp: stage_current
 @endif gcc-bootstrap
+
 @if target-libssp
 TARGET-target-libssp=all
 maybe-all-target-libssp: all-target-libssp
@@ -42266,6 +42330,7 @@ maybe-all-target-newlib:
 @if gcc-bootstrap
 all-target-newlib: stage_current
 @endif gcc-bootstrap
+
 @if target-newlib
 TARGET-target-newlib=all
 maybe-all-target-newlib: all-target-newlib
@@ -43084,6 +43149,7 @@ maybe-all-target-libgcc:
 @if gcc-bootstrap
 all-target-libgcc: stage_current
 @endif gcc-bootstrap
+
 @if target-libgcc
 TARGET-target-libgcc=all
 maybe-all-target-libgcc: all-target-libgcc
@@ -43875,6 +43941,7 @@ maybe-all-target-libbacktrace:
 @if gcc-bootstrap
 all-target-libbacktrace: stage_current
 @endif gcc-bootstrap
+
 @if target-libbacktrace
 TARGET-target-libbacktrace=all
 maybe-all-target-libbacktrace: all-target-libbacktrace
@@ -44333,6 +44400,7 @@ maybe-all-target-libquadmath:
 @if gcc-bootstrap
 all-target-libquadmath: stage_current
 @endif gcc-bootstrap
+
 @if target-libquadmath
 TARGET-target-libquadmath=all
 maybe-all-target-libquadmath: all-target-libquadmath
@@ -44791,6 +44859,7 @@ maybe-all-target-libgfortran:
 @if gcc-bootstrap
 all-target-libgfortran: stage_current
 @endif gcc-bootstrap
+
 @if target-libgfortran
 TARGET-target-libgfortran=all
 maybe-all-target-libgfortran: all-target-libgfortran
@@ -45249,6 +45318,7 @@ maybe-all-target-libobjc:
 @if gcc-bootstrap
 all-target-libobjc: stage_current
 @endif gcc-bootstrap
+
 @if target-libobjc
 TARGET-target-libobjc=all
 maybe-all-target-libobjc: all-target-libobjc
@@ -45707,6 +45777,7 @@ maybe-all-target-libgo:
 @if gcc-bootstrap
 all-target-libgo: stage_current
 @endif gcc-bootstrap
+
 @if target-libgo
 TARGET-target-libgo=all
 maybe-all-target-libgo: all-target-libgo
@@ -46165,6 +46236,7 @@ maybe-all-target-libhsail-rt:
 @if gcc-bootstrap
 all-target-libhsail-rt: stage_current
 @endif gcc-bootstrap
+
 @if target-libhsail-rt
 TARGET-target-libhsail-rt=all
 maybe-all-target-libhsail-rt: all-target-libhsail-rt
@@ -46623,6 +46695,7 @@ maybe-all-target-libtermcap:
 @if gcc-bootstrap
 all-target-libtermcap: stage_current
 @endif gcc-bootstrap
+
 @if target-libtermcap
 TARGET-target-libtermcap=all
 maybe-all-target-libtermcap: all-target-libtermcap
@@ -47016,6 +47089,7 @@ maybe-all-target-winsup:
 @if gcc-bootstrap
 all-target-winsup: stage_current
 @endif gcc-bootstrap
+
 @if target-winsup
 TARGET-target-winsup=all
 maybe-all-target-winsup: all-target-winsup
@@ -47474,6 +47548,7 @@ maybe-all-target-libgloss:
 @if gcc-bootstrap
 all-target-libgloss: stage_current
 @endif gcc-bootstrap
+
 @if target-libgloss
 TARGET-target-libgloss=all
 maybe-all-target-libgloss: all-target-libgloss
@@ -47927,6 +48002,7 @@ maybe-all-target-libffi:
 @if gcc-bootstrap
 all-target-libffi: stage_current
 @endif gcc-bootstrap
+
 @if target-libffi
 TARGET-target-libffi=all
 maybe-all-target-libffi: all-target-libffi
@@ -48375,6 +48451,7 @@ maybe-all-target-zlib:
 @if gcc-bootstrap
 all-target-zlib: stage_current
 @endif gcc-bootstrap
+
 @if target-zlib
 TARGET-target-zlib=all
 maybe-all-target-zlib: all-target-zlib
@@ -48833,6 +48910,7 @@ maybe-all-target-rda:
 @if gcc-bootstrap
 all-target-rda: stage_current
 @endif gcc-bootstrap
+
 @if target-rda
 TARGET-target-rda=all
 maybe-all-target-rda: all-target-rda
@@ -49291,6 +49369,7 @@ maybe-all-target-libada:
 @if gcc-bootstrap
 all-target-libada: stage_current
 @endif gcc-bootstrap
+
 @if target-libada
 TARGET-target-libada=all
 maybe-all-target-libada: all-target-libada
@@ -50109,6 +50188,7 @@ maybe-all-target-libgomp:
 @if gcc-bootstrap
 all-target-libgomp: stage_current
 @endif gcc-bootstrap
+
 @if target-libgomp
 TARGET-target-libgomp=all
 maybe-all-target-libgomp: all-target-libgomp
@@ -50905,6 +50985,7 @@ maybe-all-target-libitm:
 @if gcc-bootstrap
 all-target-libitm: stage_current
 @endif gcc-bootstrap
+
 @if target-libitm
 TARGET-target-libitm=all
 maybe-all-target-libitm: all-target-libitm
@@ -51363,6 +51444,7 @@ maybe-all-target-libatomic:
 @if gcc-bootstrap
 all-target-libatomic: stage_current
 @endif gcc-bootstrap
+
 @if target-libatomic
 TARGET-target-libatomic=all
 maybe-all-target-libatomic: all-target-libatomic
@@ -55262,7 +55344,6 @@ all-stagefeedback-lto-plugin: maybe-all-stagefeedback-libiberty-linker-plugin
 all-stageautoprofile-lto-plugin: maybe-all-stageautoprofile-libiberty-linker-plugin
 all-stageautofeedback-lto-plugin: maybe-all-stageautofeedback-libiberty-linker-plugin
 configure-libcc1: maybe-configure-gcc
-all-libcc1: maybe-all-gcc
 all-gotools: maybe-all-target-libgo
 all-utils: maybe-all-libiberty
 configure-intl: maybe-all-libiconv
diff --git a/Makefile.tpl b/Makefile.tpl
index d0fa070..8ea0d69 100644
--- a/Makefile.tpl
+++ b/Makefile.tpl
@@ -1115,6 +1115,11 @@ maybe-all-[+prefix+][+module+]:
 @if gcc-bootstrap
 all-[+prefix+][+module+]: stage_current
 @endif gcc-bootstrap
+[+ IF depgcc +]
+@if gcc-no-bootstrap
+all-[+prefix+][+module+]: maybe-all-gcc
+@endif gcc-no-bootstrap
+[+ ENDIF depgcc +]
 @if [+prefix+][+module+]
 TARGET-[+prefix+][+module+]=[+
   IF all_target +][+all_target+][+ ELSE +]all[+ ENDIF all_target +]

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: fix libcc1 dependencies in toplevel Makefile
  2017-06-13 12:58 fix libcc1 dependencies in toplevel Makefile Olivier Hainque
@ 2017-06-14 11:39 ` Nathan Sidwell
  2017-06-14 21:11   ` Olivier Hainque
  2017-06-22 12:13 ` Alexandre Oliva
  1 sibling, 1 reply; 16+ messages in thread
From: Nathan Sidwell @ 2017-06-14 11:39 UTC (permalink / raw)
  To: gcc-patches

Olivier,
> During highly parallel builds on fast hosts, we have experienced
> sporadic bootstrap failures on libquadmath like

I have encountered such a bootstrap problem too.  I guessed dependency 
race condition, but -j21 was a simpler fix :)

I'm happy to try the patch.

nathan

-- 
Nathan Sidwell

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: fix libcc1 dependencies in toplevel Makefile
  2017-06-14 11:39 ` Nathan Sidwell
@ 2017-06-14 21:11   ` Olivier Hainque
  2017-06-15 12:03     ` Nathan Sidwell
  0 siblings, 1 reply; 16+ messages in thread
From: Olivier Hainque @ 2017-06-14 21:11 UTC (permalink / raw)
  To: Nathan Sidwell; +Cc: Olivier Hainque, gcc-patches


> On Jun 14, 2017, at 13:39 , Nathan Sidwell <nathan@acm.org> wrote:
> 
> Olivier,
>> During highly parallel builds on fast hosts, we have experienced
>> sporadic bootstrap failures on libquadmath like
> 
> I have encountered such a bootstrap problem too.  I guessed dependency race condition, but -j21 was a simpler fix :)

I see :)

> I'm happy to try the patch.

That would bring useful extra datapoints, Thanks!

The patch might be more complex than it needs to be. 

The logic is very simple: I wasn't sure whether I could
add 

 @if gcc-no-bootstrap
 all-[+prefix+][+module+]: maybe-all-gcc
 @endif gcc-no-bootstrap

to all "all" targets after the dependency to stage_current
@if gcc-bootstrap (in Makefile.tpl).

The "depgcc" boolean is simply a mechanism to do that
only for cases where we were adding a extra explicit dependency
to maybe-all-gcc before, that is, only for libcc1.

Olivier



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: fix libcc1 dependencies in toplevel Makefile
  2017-06-14 21:11   ` Olivier Hainque
@ 2017-06-15 12:03     ` Nathan Sidwell
  2017-06-15 12:29       ` Olivier Hainque
  0 siblings, 1 reply; 16+ messages in thread
From: Nathan Sidwell @ 2017-06-15 12:03 UTC (permalink / raw)
  To: Olivier Hainque; +Cc: gcc-patches

On 06/14/2017 01:24 PM, Olivier Hainque wrote:

>> I'm happy to try the patch.
> 
> That would bring useful extra datapoints, Thanks!

I now seem unable to trigger the race with an unpatched source. Sorry


-- 
Nathan Sidwell

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: fix libcc1 dependencies in toplevel Makefile
  2017-06-15 12:03     ` Nathan Sidwell
@ 2017-06-15 12:29       ` Olivier Hainque
  0 siblings, 0 replies; 16+ messages in thread
From: Olivier Hainque @ 2017-06-15 12:29 UTC (permalink / raw)
  To: Nathan Sidwell; +Cc: gcc-patches


> On 15 Jun 2017, at 14:03, Nathan Sidwell <nathan@acm.org> wrote:
> 
> On 06/14/2017 01:24 PM, Olivier Hainque wrote:
> 
>>> I'm happy to try the patch.
>> That would bring useful extra datapoints, Thanks!
> 
> I now seem unable to trigger the race with an unpatched source. Sorry

No pb. Thanks for trying.

We were seeing the failures only in pretty specific circumstances (particular
machine & load conditions etc)

The patch remains worth considering IMO. At least, it would be interesting to
get feedback from a build-system maintainer on the correctness of the current
dependencies.

Our understanding is that it is incorrect to have libcc1 depend on
maybe-all-gcc in a bootstrapping setup because it can trigger rebuilds of gcc/
components in parallel with ongoing processing of target components (with
pre-requisites on stage_current only).



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: fix libcc1 dependencies in toplevel Makefile
  2017-06-13 12:58 fix libcc1 dependencies in toplevel Makefile Olivier Hainque
  2017-06-14 11:39 ` Nathan Sidwell
@ 2017-06-22 12:13 ` Alexandre Oliva
  2017-06-26  7:41   ` Olivier Hainque
  1 sibling, 1 reply; 16+ messages in thread
From: Alexandre Oliva @ 2017-06-22 12:13 UTC (permalink / raw)
  To: Olivier Hainque; +Cc: GCC Patches, Nicolas Roche

On Jun 13, 2017, Olivier Hainque <hainque@adacore.com> wrote:

> 2017-06-13  Olivier Hainque  <hainque@adacore.com>

> 	* Makefile.def (host_modules): Set depgcc to true for libcc1,
> 	meaning need of a dep on stage_current if gcc-bootstrap and on
> 	maybe-all-gcc otherwise.
> 	(dependencies) Remove unconditional dependency on all-gcc.
    
> 	* Makefile.tpl ("all" targets): Handle depgcc.
> 	* Makefile.in: Regenerate
 
This looks reasonable to me.  libcc1 is weird.  It's not a target
library, it doesn't use the current stage tools for building.  It might
as well not have any deps on the current stage's gcc, if it weren't for
the fact that it includes headers from the current stage's gcc and links
with current stage's host libraries, and even its configure reads from
files created in current stage's gcc configuration.

So, it needs to be built after gcc and its host deps are built, and it
needs to be configured after gcc is configured.  However, it is not part
of the bootstrap, and we avoid building it more than once even in a
bootstrap build.  That's what makes it special and tricky.

Your patch takes care of the build dependencies of libcc1, which should
avoid some scenarios that might lead to concurrency between staged and
non-staged builds.  However, I don't see that it ensures libcc1 will be
built after GCC in bootstrap scenarios; it might do so under 'make
bootstrap', but probably not under 'make all-libcc1'.  I think we may
need some additional bootstrap-only explicit dependency for that to work
properly.

Furthermore, the patch does not take care of the configure dependencies
of libcc1, so I think there might still be room for trouble, depending
on what make targets are concurrently requested.  I'm not entirely sure
this is true, though.

I'd like to understand better what the concurrency problem is with the
current build machinery, before we proceed with this change.  If you
manage to trigger the problem again, could you try to further analyze
build logs to check for e.g. concurrent activation of all-gcc in both
the top-level Makefile and the recursed-into-for-stage1 Makefile, or
somesuch?  Something else worth considering is what the make targets
specified in the command line were.

All this said, I do agree that explicit deps on maybe-all-gcc are a
likely source of trouble; AFAICT all other host modules that are to be
built after gcc depend on some target lib too.  Perhaps that brings some
dep that libcc1 should have too...

-- 
Alexandre Oliva, freedom fighter    http://FSFLA.org/~lxoliva/
You must be the change you wish to see in the world. -- Gandhi
Be Free! -- http://FSFLA.org/   FSF Latin America board member
Free Software Evangelist|Red Hat Brasil GNU Toolchain Engineer

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: fix libcc1 dependencies in toplevel Makefile
  2017-06-22 12:13 ` Alexandre Oliva
@ 2017-06-26  7:41   ` Olivier Hainque
  2017-06-27 16:32     ` Olivier Hainque
  2017-06-27 19:53     ` Alexandre Oliva
  0 siblings, 2 replies; 16+ messages in thread
From: Olivier Hainque @ 2017-06-26  7:41 UTC (permalink / raw)
  To: Alexandre Oliva; +Cc: Olivier Hainque, GCC Patches, Nicolas Roche

Hello Alex,

Thanks for the review and for the extensive comments on this,
much appreciated :)

> On Jun 22, 2017, at 14:12 , Alexandre Oliva <aoliva@redhat.com> wrote:
> 
> On Jun 13, 2017, Olivier Hainque <hainque@adacore.com> wrote:
> 
>> 2017-06-13  Olivier Hainque  <hainque@adacore.com>
> 
>> 	* Makefile.def (host_modules): Set depgcc to true for libcc1,
>> 	meaning need of a dep on stage_current if gcc-bootstrap and on
>> 	maybe-all-gcc otherwise.
>> 	(dependencies) Remove unconditional dependency on all-gcc.
> 
>> 	* Makefile.tpl ("all" targets): Handle depgcc.
>> 	* Makefile.in: Regenerate
> 
> This looks reasonable to me.  libcc1 is weird.  It's not a target
> library, it doesn't use the current stage tools for building.  It might
> as well not have any deps on the current stage's gcc, if it weren't for
> the fact that it includes headers from the current stage's gcc and links
> with current stage's host libraries, and even its configure reads from
> files created in current stage's gcc configuration.
> 
> So, it needs to be built after gcc and its host deps are built, and it
> needs to be configured after gcc is configured.  However, it is not part
> of the bootstrap, and we avoid building it more than once even in a
> bootstrap build.  That's what makes it special and tricky.

OK, thanks for summarizing the areas of intricacy.

> Your patch takes care of the build dependencies of libcc1, which should
> avoid some scenarios that might lead to concurrency between staged and
> non-staged builds.  However, I don't see that it ensures libcc1 will be
> built after GCC in bootstrap scenarios; it might do so under 'make
> bootstrap', but probably not under 'make all-libcc1'.  I think we may
> need some additional bootstrap-only explicit dependency for that to work
> properly.

I don't quite understand this: we're using the same prerequisite as target
libraries, e.g. all-target-libstdc++-v3 or all-target-libbacktrace, and I
don't see other deps for these either.

I don't see why the sequencing constraints for libcc1 should be tighter
than those for the target libraries.

I certainly don't grasp all the ramifications of the particularities you
outlined above, though.

> Furthermore, the patch does not take care of the configure dependencies
> of libcc1, so I think there might still be room for trouble, depending
> on what make targets are concurrently requested.  I'm not entirely sure
> this is true, though.

To my knowledge, we have never observed a problem in this area, assuming
our understanding of the problems we saw was correct :)

> I'd like to understand better what the concurrency problem is with the
> current build machinery, before we proceed with this change.  If you
> manage to trigger the problem again, could you try to further analyze
> build logs to check for e.g. concurrent activation of all-gcc in both
> the top-level Makefile and the recursed-into-for-stage1 Makefile, or
> somesuch?  Something else worth considering is what the make targets
> specified in the command line were.

The problems were showing pretty rarely, only on certain hosts, in
certain load conditions. We should still have the logs around and I'll
look into this. They are regular logs, without -d. I can almost for sure
fetch the exact "make" command line involved.

We had performed some analysis of what was happening, to our understanding.
I'll dig this out as well.

> All this said, I do agree that explicit deps on maybe-all-gcc are a
> likely source of trouble;

OK

> AFAICT all other host modules that are to be
> built after gcc depend on some target lib too.  Perhaps that brings some
> dep that libcc1 should have too...

This relates to the comments above. I guess I don't understand
what libcc1 might need that target libs wouldn't need.

Olivier

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: fix libcc1 dependencies in toplevel Makefile
  2017-06-26  7:41   ` Olivier Hainque
@ 2017-06-27 16:32     ` Olivier Hainque
  2017-06-27 19:53     ` Alexandre Oliva
  1 sibling, 0 replies; 16+ messages in thread
From: Olivier Hainque @ 2017-06-27 16:32 UTC (permalink / raw)
  To: Alexandre Oliva; +Cc: Olivier Hainque, GCC Patches, Nicolas Roche

Hi Alex,

> On Jun 26, 2017, at 09:16 , Olivier Hainque <hainque@adacore.com> wrote:
> 
>> I'd like to understand better what the concurrency problem is with the
>> current build machinery, before we proceed with this change.  If you
>> manage to trigger the problem again, could you try to further analyze
>> build logs to check for e.g. concurrent activation of all-gcc in both
>> the top-level Makefile and the recursed-into-for-stage1 Makefile, or
>> somesuch?  Something else worth considering is what the make targets
>> specified in the command line were.
> 
> The problems were showing pretty rarely, only on certain hosts, in
> certain load conditions. We should still have the logs around and I'll
> look into this. They are regular logs, without -d. I can almost for sure
> fetch the exact "make" command line involved.

This was:

make -j 32 BOOT_LDFLAGS=-Wl,--stack=0x2000000 CC=gcc 'ADAFLAGS=-W -Wall -gnatpg -gnata -gnatws -gnatU -gnatyN' CXXFLAGS=-O2 BOOT_CFLAGS=-O2 CFLAGS=-O2 'LN_S=cp -p' 'BOOT_ADAFLAGS=-gnatpgn -gnatU' 'STAGE1_CFLAGS=-O2 -O0 -g' bootstrap

From the logs of discussions we tracked, the understanding
of the dependency issue was that we *had* (before the patch),
possibilities to have stage_current and maybe-all-gcc targets
built concurrently, via

> configure-target-libquadmath: stage_current
> all-target-libquadmath: configure-target-libquadmath
> maybe-all-target-libquadmath: all-target-libquadmath

> all-target: maybe-all-target-libquadmath

on the one hand,

> all-libcc1: maybe-all-gcc

> maybe-all-libcc1: all-libcc1

> all-host: maybe-all-libcc1

on the other hand.

Does that make sense ?

Thanks for your feedback!

(Note that I'll be away from tomorrow to Monday)

Olivier



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: fix libcc1 dependencies in toplevel Makefile
  2017-06-26  7:41   ` Olivier Hainque
  2017-06-27 16:32     ` Olivier Hainque
@ 2017-06-27 19:53     ` Alexandre Oliva
  2017-07-03 21:05       ` Olivier Hainque
  2018-06-03 19:13       ` Alexandre Oliva
  1 sibling, 2 replies; 16+ messages in thread
From: Alexandre Oliva @ 2017-06-27 19:53 UTC (permalink / raw)
  To: Olivier Hainque; +Cc: GCC Patches, Nicolas Roche

On Jun 26, 2017, Olivier Hainque <hainque@adacore.com> wrote:

> On Jun 22, 2017, at 14:12 , Alexandre Oliva <aoliva@redhat.com> wrote:
>> Your patch takes care of the build dependencies of libcc1, which should
>> avoid some scenarios that might lead to concurrency between staged and
>> non-staged builds.  However, I don't see that it ensures libcc1 will be
>> built after GCC in bootstrap scenarios; it might do so under 'make
>> bootstrap', but probably not under 'make all-libcc1'.  I think we may
>> need some additional bootstrap-only explicit dependency for that to work
>> properly.

> I don't quite understand this: we're using the same prerequisite as target
> libraries, e.g. all-target-libstdc++-v3 or all-target-libbacktrace

Not quite.  Target libraries have deps on e.g. target-libgcc, look below
the following comments in Makefile.in:

# Dependencies for target modules on other target modules are
# described by lang_env_dependencies; the defaults apply to anything
# not mentioned there.

plus, maybe-configure*-target-libgcc depend on maybe-all*-gcc (see above
those comments).  The precise deps vary per bootstrap level, or
non-bootstrap.

But after the proposed patch there are no such deps for libcc1 in the
bootstrap case, so we might very well attempt to build libcc1 in
parallel with gcc.  We shouldn't do that.

But then, it all works out because we only build all-host after
bootstrap is complete; all-stage* doesn't depend on libcc1 at all.


> and I don't see other deps for these either.

> I don't see why the sequencing constraints for libcc1 should be tighter
> than those for the target libraries.

It was not about making them tighter, just about making them present.
Right now, in the bootstrap case, they're entirely implicit, by the fact
that we complete bootstrap first, then proceed to build all-host
all-target.  This deserves at least a comment somewhere, perhaps next to
libcc1 in Makefile.def, or next to depgcc.

Something to the effect that depgcc brings in a necessary dependency
that is implicit in the bootstrap case by the fact that we firt
bootstrap, then proceed to build all-host all-target.

Perhaps instead of depgcc=true, we should have a new flag in
dependencies that indicates the dep should be non-bootstrap only.  Or
maybe the code that implements dependencies could figure it out on its
own, when it sees a dep between a non-bootstrap module and a bootstrap
one, and generate the deps within @if gcc-no-bootstrap/@endif.

I think this would get us the behavior we want in both bootstrap and
non-bootstrap cases, including the libcc1 configure dep that, as it is,
might cause GCC to be configured in parallel given the right (or rather
wrong) conditions.


On Jun 27, 2017, Olivier Hainque <hainque@adacore.com> wrote:

>> On Jun 26, 2017, at 09:16 , Olivier Hainque <hainque@adacore.com> wrote:

> make -j 32 BOOT_LDFLAGS=-Wl,--stack=0x2000000 CC=gcc 'ADAFLAGS=-W
> -Wall -gnatpg -gnata -gnatws -gnatU -gnatyN' CXXFLAGS=-O2
> BOOT_CFLAGS=-O2 CFLAGS=-O2 'LN_S=cp -p' 'BOOT_ADAFLAGS=-gnatpgn
> -gnatU' 'STAGE1_CFLAGS=-O2 -O0 -g' bootstrap

Thanks.  Given that 'bootstrap' is the only requested make target, we
can be assured that something iffy took place.  What I can't figure out
is how we even tried to build libcc1 during bootstrap, under that
configuration, because the current Makefile would only do that with
all-host, after bootstrap is complete.

> From the logs of discussions we tracked, the understanding
> of the dependency issue was that we *had* (before the patch),
> possibilities to have stage_current and maybe-all-gcc targets
> built concurrently, via

>> configure-target-libquadmath: stage_current
>> all-target-libquadmath: configure-target-libquadmath
>> maybe-all-target-libquadmath: all-target-libquadmath

>> all-target: maybe-all-target-libquadmath

> on the one hand,

>> all-libcc1: maybe-all-gcc

>> maybe-all-libcc1: all-libcc1

>> all-host: maybe-all-libcc1

> on the other hand.

> Does that make sense ?

Yeah.  Running all-gcc While unstage does its directory-moving dance
can't be good.  We can't have them both.


So, would you like to give the automatic figuring out of
non-bootstrap-on-bootstrap deps in dependencies, and guard them between
@if gcc-no-bootstrap and @endif (then both configure- and all- libcc1
deps would be adjusted this way)?  (I'm not saying it should be trivial
to do or anything like that; I'm not all that familiar with it and I'd
have to figure it out myself if I were to do it, but I think that would
be better than adding yet another means of introducing dependencies,
while leaving another risky dep in place)

Thanks,

-- 
Alexandre Oliva, freedom fighter    http://FSFLA.org/~lxoliva/
You must be the change you wish to see in the world. -- Gandhi
Be Free! -- http://FSFLA.org/   FSF Latin America board member
Free Software Evangelist|Red Hat Brasil GNU Toolchain Engineer

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: fix libcc1 dependencies in toplevel Makefile
  2017-06-27 19:53     ` Alexandre Oliva
@ 2017-07-03 21:05       ` Olivier Hainque
  2018-06-03 19:13       ` Alexandre Oliva
  1 sibling, 0 replies; 16+ messages in thread
From: Olivier Hainque @ 2017-07-03 21:05 UTC (permalink / raw)
  To: Alexandre Oliva; +Cc: GCC Patches, Nicolas Roche

Hi Alex,

(Back from a few days away)

> On 27 Jun 2017, at 21:50, Alexandre Oliva <aoliva@redhat.com> wrote:
> 
>> I don't quite understand this: we're using the same prerequisite as target
>> libraries, e.g. all-target-libstdc++-v3 or all-target-libbacktrace
> 
> Not quite.  Target libraries have deps on e.g. target-libgcc, look below
> the following comments in Makefile.in:
> 
> # Dependencies for target modules on other target modules are
> # described by lang_env_dependencies; the defaults apply to anything
> # not mentioned there.
> 
> plus, maybe-configure*-target-libgcc depend on maybe-all*-gcc (see above
> those comments).  The precise deps vary per bootstrap level, or
> non-bootstrap.
> 
> But after the proposed patch there are no such deps for libcc1 in the
> bootstrap case, so we might very well attempt to build libcc1 in
> parallel with gcc.  We shouldn't do that.
> 
> But then, it all works out because we only build all-host after
> bootstrap is complete; all-stage* doesn't depend on libcc1 at all.

I think I see.

[...]

> So, would you like to give the automatic figuring out of
> non-bootstrap-on-bootstrap deps in dependencies, and guard them between
> @if gcc-no-bootstrap and @endif (then both configure- and all- libcc1
> deps would be adjusted this way)?  (I'm not saying it should be trivial
> to do or anything like that; I'm not all that familiar with it and I'd
> have to figure it out myself if I were to do it, but I think that would
> be better than adding yet another means of introducing dependencies,
> while leaving another risky dep in place)


I'm willing to study this more and see what can be done
to improve things further. There are still a few details I don't
quite grasp so it'll just take a bit of time.

Thanks a lot for the additional set of extensive comments!

With Kind Regards,

Olivier

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: fix libcc1 dependencies in toplevel Makefile
  2017-06-27 19:53     ` Alexandre Oliva
  2017-07-03 21:05       ` Olivier Hainque
@ 2018-06-03 19:13       ` Alexandre Oliva
  2018-06-12  2:50         ` Alexandre Oliva
  1 sibling, 1 reply; 16+ messages in thread
From: Alexandre Oliva @ 2018-06-03 19:13 UTC (permalink / raw)
  To: Olivier Hainque; +Cc: GCC Patches, Nicolas Roche

On Jun 27, 2017, Alexandre Oliva <aoliva@redhat.com> wrote:

> On Jun 26, 2017, Olivier Hainque <hainque@adacore.com> wrote:
>> On Jun 22, 2017, at 14:12 , Alexandre Oliva <aoliva@redhat.com> wrote:
>>> Your patch takes care of the build dependencies of libcc1, which should
>>> avoid some scenarios that might lead to concurrency between staged and
>>> non-staged builds.  However, I don't see that it ensures libcc1 will be
>>> built after GCC in bootstrap scenarios; it might do so under 'make
>>> bootstrap', but probably not under 'make all-libcc1'.  I think we may
>>> need some additional bootstrap-only explicit dependency for that to work
>>> properly.


> On Jun 27, 2017, Olivier Hainque <hainque@adacore.com> wrote:

>>> On Jun 26, 2017, at 09:16 , Olivier Hainque <hainque@adacore.com> wrote:

>> make -j 32 BOOT_LDFLAGS=-Wl,--stack=0x2000000 CC=gcc 'ADAFLAGS=-W
>> -Wall -gnatpg -gnata -gnatws -gnatU -gnatyN' CXXFLAGS=-O2
>> BOOT_CFLAGS=-O2 CFLAGS=-O2 'LN_S=cp -p' 'BOOT_ADAFLAGS=-gnatpgn
>> -gnatU' 'STAGE1_CFLAGS=-O2 -O0 -g' bootstrap

> Thanks.  Given that 'bootstrap' is the only requested make target, we
> can be assured that something iffy took place.  What I can't figure out
> is how we even tried to build libcc1 during bootstrap, under that
> configuration, because the current Makefile would only do that with
> all-host, after bootstrap is complete.

I have extensively studied the dependencies, and I still don't see how
all-libcc1, that is only activated as a target during the post-bootstrap
all-host build, might have been activated concurrently with
staging/unstaging.  By the time we get to all-host, we've sequentially
completed bootstrap, compare, and unstage.

The only possibilities I see of something going wrong as described is a
parallel build that has bootstrap and postbootstrap targets in the
command line, or some patch that changes the dependencies so that such
targets are considered in parallel.

I could definitely use the build logs from back then, if still
available, to try to make sense of the problem.

> Yeah.  Running all-gcc While unstage does its directory-moving dance
> can't be good.  We can't have them both.

But then, again, I don't see anything that would ever attempt to build
these in parallel.

We do have other non-bootstrap targets that depend on bootstrap targets,
and that would presumably trigger the same problem, if there is one
indeed.


> So, would you like to give the automatic figuring out of
> non-bootstrap-on-bootstrap deps in dependencies, and guard them between
> @if gcc-no-bootstrap and @endif (then both configure- and all- libcc1
> deps would be adjusted this way)?

The patch below introduces this, but...  without understanding how the
problem comes about, it's hard to tell whether it would actually fix
anything.  Really, I don't really think it would fix anything: if there
is something that activates all-libcc1 (or any other non-bootstrap
target) in parallel with bootstrap, we will likely get parallel build
errors, with or without the patch.  The patch might make such failures
more visible, which might be a good thing, but I'm not sure it's worth
the trouble: it will annoy maintainers of other tools who use uberbaum
trees, because if they don't --disable-bootstrap at configure time,
their tools (e.g. gdb) will build all of GCC stage1 before starting the
GDB build.

It is a bit fragile, too.  For example, it could be improved (and
perhaps actually reduce the likelihood of triggering parallel builds of
postbootstrap and bootstrap targets) by first detecting all
postbootstrap targets, and then mapping *all* of their dependencies on
non-postbootstrap targets to stage_last.  As it is, there is a
possibility of direct dependencies of postbootstrap on prebootstrap
targets, which makes room for the prebootstrap targets to be activated
in parallel with (rather than just as part of) the bootstrap build.

It wouldn't be hard to do that, and I'd get to it if I thought it would
actually improve something, which would require a better understanding
of the observed failures.  As it is, I'm posting this just for the
record, because I don't think it's really of any use :-(


The sad news is that there really isn't any way (AFAICT) to catch
situations that are known to get us in trouble, namely, when parallel
builds are started with both bootstrap and postbootstrap targets.  I
think we'd need all of the bootstrap logic to be encoded in a
single-level Makefile (i.e., not recursive makes) to avoid problems with
such builds, and that in turn would require postbootstrap targets to
depend on the last stage.  That would require a lot of Makefile
reworking, for very little benefit.



Introduce postbootstrap Makefile targets

This patch turns dependencies of non-bootstrap targets on bootstrap
targets for bootstrap builds into dependencies on stage_last.


for  ChangeLog

	* Makefile.tpl (dep-kind): Return postbootstrap in some cases.
	(make-postboot-dep, postboot-targets): New.
	(dependencies): Do not output postbootstrap dependencies at
	first.  Output them changed to depend on stage_last within
	gcc-bootstrap, and the original deps within gcc-no-bootstrap.
	* Makefile.in: Rebuilt.
---
 Makefile.in  |  189 ++++++++++++++++++----------------------------------------
 Makefile.tpl |   52 +++++++++++++---
 2 files changed, 101 insertions(+), 140 deletions(-)

diff --git a/Makefile.in b/Makefile.in
index 2bf83b722651..2ac62ca7ca45 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -56867,7 +56867,6 @@ all-build-m4: maybe-all-build-texinfo
 all-build-fixincludes: maybe-all-build-libiberty
 all-build-libcpp: maybe-all-build-libiberty
 configure-gcc: maybe-configure-intl
-
 configure-stage1-gcc: maybe-configure-stage1-intl
 configure-stage2-gcc: maybe-configure-stage2-intl
 configure-stage3-gcc: maybe-configure-stage3-intl
@@ -56878,7 +56877,6 @@ configure-stagefeedback-gcc: maybe-configure-stagefeedback-intl
 configure-stageautoprofile-gcc: maybe-configure-stageautoprofile-intl
 configure-stageautofeedback-gcc: maybe-configure-stageautofeedback-intl
 configure-gcc: maybe-all-gmp
-
 configure-stage1-gcc: maybe-all-stage1-gmp
 configure-stage2-gcc: maybe-all-stage2-gmp
 configure-stage3-gcc: maybe-all-stage3-gmp
@@ -56889,7 +56887,6 @@ configure-stagefeedback-gcc: maybe-all-stagefeedback-gmp
 configure-stageautoprofile-gcc: maybe-all-stageautoprofile-gmp
 configure-stageautofeedback-gcc: maybe-all-stageautofeedback-gmp
 configure-gcc: maybe-all-mpfr
-
 configure-stage1-gcc: maybe-all-stage1-mpfr
 configure-stage2-gcc: maybe-all-stage2-mpfr
 configure-stage3-gcc: maybe-all-stage3-mpfr
@@ -56900,7 +56897,6 @@ configure-stagefeedback-gcc: maybe-all-stagefeedback-mpfr
 configure-stageautoprofile-gcc: maybe-all-stageautoprofile-mpfr
 configure-stageautofeedback-gcc: maybe-all-stageautofeedback-mpfr
 configure-gcc: maybe-all-mpc
-
 configure-stage1-gcc: maybe-all-stage1-mpc
 configure-stage2-gcc: maybe-all-stage2-mpc
 configure-stage3-gcc: maybe-all-stage3-mpc
@@ -56911,7 +56907,6 @@ configure-stagefeedback-gcc: maybe-all-stagefeedback-mpc
 configure-stageautoprofile-gcc: maybe-all-stageautoprofile-mpc
 configure-stageautofeedback-gcc: maybe-all-stageautofeedback-mpc
 configure-gcc: maybe-all-isl
-
 configure-stage1-gcc: maybe-all-stage1-isl
 configure-stage2-gcc: maybe-all-stage2-isl
 configure-stage3-gcc: maybe-all-stage3-isl
@@ -56922,7 +56917,6 @@ configure-stagefeedback-gcc: maybe-all-stagefeedback-isl
 configure-stageautoprofile-gcc: maybe-all-stageautoprofile-isl
 configure-stageautofeedback-gcc: maybe-all-stageautofeedback-isl
 configure-gcc: maybe-all-lto-plugin
-
 configure-stage1-gcc: maybe-all-stage1-lto-plugin
 configure-stage2-gcc: maybe-all-stage2-lto-plugin
 configure-stage3-gcc: maybe-all-stage3-lto-plugin
@@ -56933,7 +56927,6 @@ configure-stagefeedback-gcc: maybe-all-stagefeedback-lto-plugin
 configure-stageautoprofile-gcc: maybe-all-stageautoprofile-lto-plugin
 configure-stageautofeedback-gcc: maybe-all-stageautofeedback-lto-plugin
 configure-gcc: maybe-all-binutils
-
 configure-stage1-gcc: maybe-all-stage1-binutils
 configure-stage2-gcc: maybe-all-stage2-binutils
 configure-stage3-gcc: maybe-all-stage3-binutils
@@ -56944,7 +56937,6 @@ configure-stagefeedback-gcc: maybe-all-stagefeedback-binutils
 configure-stageautoprofile-gcc: maybe-all-stageautoprofile-binutils
 configure-stageautofeedback-gcc: maybe-all-stageautofeedback-binutils
 configure-gcc: maybe-all-gas
-
 configure-stage1-gcc: maybe-all-stage1-gas
 configure-stage2-gcc: maybe-all-stage2-gas
 configure-stage3-gcc: maybe-all-stage3-gas
@@ -56955,7 +56947,6 @@ configure-stagefeedback-gcc: maybe-all-stagefeedback-gas
 configure-stageautoprofile-gcc: maybe-all-stageautoprofile-gas
 configure-stageautofeedback-gcc: maybe-all-stageautofeedback-gas
 configure-gcc: maybe-all-ld
-
 configure-stage1-gcc: maybe-all-stage1-ld
 configure-stage2-gcc: maybe-all-stage2-ld
 configure-stage3-gcc: maybe-all-stage3-ld
@@ -56966,7 +56957,6 @@ configure-stagefeedback-gcc: maybe-all-stagefeedback-ld
 configure-stageautoprofile-gcc: maybe-all-stageautoprofile-ld
 configure-stageautofeedback-gcc: maybe-all-stageautofeedback-ld
 configure-gcc: maybe-all-gold
-
 configure-stage1-gcc: maybe-all-stage1-gold
 configure-stage2-gcc: maybe-all-stage2-gold
 configure-stage3-gcc: maybe-all-stage3-gold
@@ -56977,7 +56967,6 @@ configure-stagefeedback-gcc: maybe-all-stagefeedback-gold
 configure-stageautoprofile-gcc: maybe-all-stageautoprofile-gold
 configure-stageautofeedback-gcc: maybe-all-stageautofeedback-gold
 configure-gcc: maybe-all-libelf
-
 configure-stage1-gcc: maybe-all-stage1-libelf
 configure-stage2-gcc: maybe-all-stage2-libelf
 configure-stage3-gcc: maybe-all-stage3-libelf
@@ -56988,7 +56977,6 @@ configure-stagefeedback-gcc: maybe-all-stagefeedback-libelf
 configure-stageautoprofile-gcc: maybe-all-stageautoprofile-libelf
 configure-stageautofeedback-gcc: maybe-all-stageautofeedback-libelf
 configure-gcc: maybe-all-libiconv
-
 configure-stage1-gcc: maybe-all-stage1-libiconv
 configure-stage2-gcc: maybe-all-stage2-libiconv
 configure-stage3-gcc: maybe-all-stage3-libiconv
@@ -56999,7 +56987,6 @@ configure-stagefeedback-gcc: maybe-all-stagefeedback-libiconv
 configure-stageautoprofile-gcc: maybe-all-stageautoprofile-libiconv
 configure-stageautofeedback-gcc: maybe-all-stageautofeedback-libiconv
 all-gcc: all-libiberty
-
 all-stage1-gcc: all-stage1-libiberty
 all-stage2-gcc: all-stage2-libiberty
 all-stage3-gcc: all-stage3-libiberty
@@ -57010,7 +56997,6 @@ all-stagefeedback-gcc: all-stagefeedback-libiberty
 all-stageautoprofile-gcc: all-stageautoprofile-libiberty
 all-stageautofeedback-gcc: all-stageautofeedback-libiberty
 all-gcc: maybe-all-intl
-
 all-stage1-gcc: maybe-all-stage1-intl
 all-stage2-gcc: maybe-all-stage2-intl
 all-stage3-gcc: maybe-all-stage3-intl
@@ -57021,7 +57007,6 @@ all-stagefeedback-gcc: maybe-all-stagefeedback-intl
 all-stageautoprofile-gcc: maybe-all-stageautoprofile-intl
 all-stageautofeedback-gcc: maybe-all-stageautofeedback-intl
 all-gcc: maybe-all-mpfr
-
 all-stage1-gcc: maybe-all-stage1-mpfr
 all-stage2-gcc: maybe-all-stage2-mpfr
 all-stage3-gcc: maybe-all-stage3-mpfr
@@ -57032,7 +57017,6 @@ all-stagefeedback-gcc: maybe-all-stagefeedback-mpfr
 all-stageautoprofile-gcc: maybe-all-stageautoprofile-mpfr
 all-stageautofeedback-gcc: maybe-all-stageautofeedback-mpfr
 all-gcc: maybe-all-mpc
-
 all-stage1-gcc: maybe-all-stage1-mpc
 all-stage2-gcc: maybe-all-stage2-mpc
 all-stage3-gcc: maybe-all-stage3-mpc
@@ -57043,7 +57027,6 @@ all-stagefeedback-gcc: maybe-all-stagefeedback-mpc
 all-stageautoprofile-gcc: maybe-all-stageautoprofile-mpc
 all-stageautofeedback-gcc: maybe-all-stageautofeedback-mpc
 all-gcc: maybe-all-isl
-
 all-stage1-gcc: maybe-all-stage1-isl
 all-stage2-gcc: maybe-all-stage2-isl
 all-stage3-gcc: maybe-all-stage3-isl
@@ -57054,7 +57037,6 @@ all-stagefeedback-gcc: maybe-all-stagefeedback-isl
 all-stageautoprofile-gcc: maybe-all-stageautoprofile-isl
 all-stageautofeedback-gcc: maybe-all-stageautofeedback-isl
 all-gcc: maybe-all-build-texinfo
-
 all-stage1-gcc: maybe-all-build-texinfo
 all-stage2-gcc: maybe-all-build-texinfo
 all-stage3-gcc: maybe-all-build-texinfo
@@ -57065,7 +57047,6 @@ all-stagefeedback-gcc: maybe-all-build-texinfo
 all-stageautoprofile-gcc: maybe-all-build-texinfo
 all-stageautofeedback-gcc: maybe-all-build-texinfo
 all-gcc: maybe-all-build-bison
-
 all-stage1-gcc: maybe-all-build-bison
 all-stage2-gcc: maybe-all-build-bison
 all-stage3-gcc: maybe-all-build-bison
@@ -57076,7 +57057,6 @@ all-stagefeedback-gcc: maybe-all-build-bison
 all-stageautoprofile-gcc: maybe-all-build-bison
 all-stageautofeedback-gcc: maybe-all-build-bison
 all-gcc: maybe-all-build-flex
-
 all-stage1-gcc: maybe-all-build-flex
 all-stage2-gcc: maybe-all-build-flex
 all-stage3-gcc: maybe-all-build-flex
@@ -57087,7 +57067,6 @@ all-stagefeedback-gcc: maybe-all-build-flex
 all-stageautoprofile-gcc: maybe-all-build-flex
 all-stageautofeedback-gcc: maybe-all-build-flex
 all-gcc: maybe-all-build-libiberty
-
 all-stage1-gcc: maybe-all-build-libiberty
 all-stage2-gcc: maybe-all-build-libiberty
 all-stage3-gcc: maybe-all-build-libiberty
@@ -57098,7 +57077,6 @@ all-stagefeedback-gcc: maybe-all-build-libiberty
 all-stageautoprofile-gcc: maybe-all-build-libiberty
 all-stageautofeedback-gcc: maybe-all-build-libiberty
 all-gcc: maybe-all-build-fixincludes
-
 all-stage1-gcc: maybe-all-build-fixincludes
 all-stage2-gcc: maybe-all-build-fixincludes
 all-stage3-gcc: maybe-all-build-fixincludes
@@ -57109,7 +57087,6 @@ all-stagefeedback-gcc: maybe-all-build-fixincludes
 all-stageautoprofile-gcc: maybe-all-build-fixincludes
 all-stageautofeedback-gcc: maybe-all-build-fixincludes
 all-gcc: maybe-all-build-libcpp
-
 all-stage1-gcc: maybe-all-build-libcpp
 all-stage2-gcc: maybe-all-build-libcpp
 all-stage3-gcc: maybe-all-build-libcpp
@@ -57120,7 +57097,6 @@ all-stagefeedback-gcc: maybe-all-build-libcpp
 all-stageautoprofile-gcc: maybe-all-build-libcpp
 all-stageautofeedback-gcc: maybe-all-build-libcpp
 all-gcc: maybe-all-zlib
-
 all-stage1-gcc: maybe-all-stage1-zlib
 all-stage2-gcc: maybe-all-stage2-zlib
 all-stage3-gcc: maybe-all-stage3-zlib
@@ -57131,7 +57107,6 @@ all-stagefeedback-gcc: maybe-all-stagefeedback-zlib
 all-stageautoprofile-gcc: maybe-all-stageautoprofile-zlib
 all-stageautofeedback-gcc: maybe-all-stageautofeedback-zlib
 all-gcc: all-libbacktrace
-
 all-stage1-gcc: all-stage1-libbacktrace
 all-stage2-gcc: all-stage2-libbacktrace
 all-stage3-gcc: all-stage3-libbacktrace
@@ -57142,7 +57117,6 @@ all-stagefeedback-gcc: all-stagefeedback-libbacktrace
 all-stageautoprofile-gcc: all-stageautoprofile-libbacktrace
 all-stageautofeedback-gcc: all-stageautofeedback-libbacktrace
 all-gcc: all-libcpp
-
 all-stage1-gcc: all-stage1-libcpp
 all-stage2-gcc: all-stage2-libcpp
 all-stage3-gcc: all-stage3-libcpp
@@ -57153,7 +57127,6 @@ all-stagefeedback-gcc: all-stagefeedback-libcpp
 all-stageautoprofile-gcc: all-stageautoprofile-libcpp
 all-stageautofeedback-gcc: all-stageautofeedback-libcpp
 all-gcc: all-libdecnumber
-
 all-stage1-gcc: all-stage1-libdecnumber
 all-stage2-gcc: all-stage2-libdecnumber
 all-stage3-gcc: all-stage3-libdecnumber
@@ -57164,7 +57137,6 @@ all-stagefeedback-gcc: all-stagefeedback-libdecnumber
 all-stageautoprofile-gcc: all-stageautoprofile-libdecnumber
 all-stageautofeedback-gcc: all-stageautofeedback-libdecnumber
 all-gcc: maybe-all-libiberty
-
 all-stage1-gcc: maybe-all-stage1-libiberty
 all-stage2-gcc: maybe-all-stage2-libiberty
 all-stage3-gcc: maybe-all-stage3-libiberty
@@ -57175,7 +57147,6 @@ all-stagefeedback-gcc: maybe-all-stagefeedback-libiberty
 all-stageautoprofile-gcc: maybe-all-stageautoprofile-libiberty
 all-stageautofeedback-gcc: maybe-all-stageautofeedback-libiberty
 all-gcc: maybe-all-fixincludes
-
 all-stage1-gcc: maybe-all-stage1-fixincludes
 all-stage2-gcc: maybe-all-stage2-fixincludes
 all-stage3-gcc: maybe-all-stage3-fixincludes
@@ -57186,7 +57157,6 @@ all-stagefeedback-gcc: maybe-all-stagefeedback-fixincludes
 all-stageautoprofile-gcc: maybe-all-stageautoprofile-fixincludes
 all-stageautofeedback-gcc: maybe-all-stageautofeedback-fixincludes
 all-gcc: maybe-all-lto-plugin
-
 all-stage1-gcc: maybe-all-stage1-lto-plugin
 all-stage2-gcc: maybe-all-stage2-lto-plugin
 all-stage3-gcc: maybe-all-stage3-lto-plugin
@@ -57197,7 +57167,6 @@ all-stagefeedback-gcc: maybe-all-stagefeedback-lto-plugin
 all-stageautoprofile-gcc: maybe-all-stageautoprofile-lto-plugin
 all-stageautofeedback-gcc: maybe-all-stageautofeedback-lto-plugin
 all-gcc: maybe-all-libiconv
-
 all-stage1-gcc: maybe-all-stage1-libiconv
 all-stage2-gcc: maybe-all-stage2-libiconv
 all-stage3-gcc: maybe-all-stage3-libiconv
@@ -57208,7 +57177,6 @@ all-stagefeedback-gcc: maybe-all-stagefeedback-libiconv
 all-stageautoprofile-gcc: maybe-all-stageautoprofile-libiconv
 all-stageautofeedback-gcc: maybe-all-stageautofeedback-libiconv
 info-gcc: maybe-all-build-libiberty
-
 info-stage1-gcc: maybe-all-build-libiberty
 info-stage2-gcc: maybe-all-build-libiberty
 info-stage3-gcc: maybe-all-build-libiberty
@@ -57219,7 +57187,6 @@ info-stagefeedback-gcc: maybe-all-build-libiberty
 info-stageautoprofile-gcc: maybe-all-build-libiberty
 info-stageautofeedback-gcc: maybe-all-build-libiberty
 dvi-gcc: maybe-all-build-libiberty
-
 dvi-stage1-gcc: maybe-all-build-libiberty
 dvi-stage2-gcc: maybe-all-build-libiberty
 dvi-stage3-gcc: maybe-all-build-libiberty
@@ -57230,7 +57197,6 @@ dvi-stagefeedback-gcc: maybe-all-build-libiberty
 dvi-stageautoprofile-gcc: maybe-all-build-libiberty
 dvi-stageautofeedback-gcc: maybe-all-build-libiberty
 pdf-gcc: maybe-all-build-libiberty
-
 pdf-stage1-gcc: maybe-all-build-libiberty
 pdf-stage2-gcc: maybe-all-build-libiberty
 pdf-stage3-gcc: maybe-all-build-libiberty
@@ -57241,7 +57207,6 @@ pdf-stagefeedback-gcc: maybe-all-build-libiberty
 pdf-stageautoprofile-gcc: maybe-all-build-libiberty
 pdf-stageautofeedback-gcc: maybe-all-build-libiberty
 html-gcc: maybe-all-build-libiberty
-
 html-stage1-gcc: maybe-all-build-libiberty
 html-stage2-gcc: maybe-all-build-libiberty
 html-stage3-gcc: maybe-all-build-libiberty
@@ -57256,7 +57221,6 @@ install-gcc: maybe-install-lto-plugin
 install-strip-gcc: maybe-install-strip-fixincludes
 install-strip-gcc: maybe-install-strip-lto-plugin
 configure-libcpp: configure-libiberty
-
 configure-stage1-libcpp: configure-stage1-libiberty
 configure-stage2-libcpp: configure-stage2-libiberty
 configure-stage3-libcpp: configure-stage3-libiberty
@@ -57267,7 +57231,6 @@ configure-stagefeedback-libcpp: configure-stagefeedback-libiberty
 configure-stageautoprofile-libcpp: configure-stageautoprofile-libiberty
 configure-stageautofeedback-libcpp: configure-stageautofeedback-libiberty
 configure-libcpp: maybe-configure-intl
-
 configure-stage1-libcpp: maybe-configure-stage1-intl
 configure-stage2-libcpp: maybe-configure-stage2-intl
 configure-stage3-libcpp: maybe-configure-stage3-intl
@@ -57278,7 +57241,6 @@ configure-stagefeedback-libcpp: maybe-configure-stagefeedback-intl
 configure-stageautoprofile-libcpp: maybe-configure-stageautoprofile-intl
 configure-stageautofeedback-libcpp: maybe-configure-stageautofeedback-intl
 configure-libcpp: maybe-all-libiconv
-
 configure-stage1-libcpp: maybe-all-stage1-libiconv
 configure-stage2-libcpp: maybe-all-stage2-libiconv
 configure-stage3-libcpp: maybe-all-stage3-libiconv
@@ -57289,7 +57251,6 @@ configure-stagefeedback-libcpp: maybe-all-stagefeedback-libiconv
 configure-stageautoprofile-libcpp: maybe-all-stageautoprofile-libiconv
 configure-stageautofeedback-libcpp: maybe-all-stageautofeedback-libiconv
 all-libcpp: all-libiberty
-
 all-stage1-libcpp: all-stage1-libiberty
 all-stage2-libcpp: all-stage2-libiberty
 all-stage3-libcpp: all-stage3-libiberty
@@ -57300,7 +57261,6 @@ all-stagefeedback-libcpp: all-stagefeedback-libiberty
 all-stageautoprofile-libcpp: all-stageautoprofile-libiberty
 all-stageautofeedback-libcpp: all-stageautofeedback-libiberty
 all-libcpp: maybe-all-intl
-
 all-stage1-libcpp: maybe-all-stage1-intl
 all-stage2-libcpp: maybe-all-stage2-intl
 all-stage3-libcpp: maybe-all-stage3-intl
@@ -57311,7 +57271,6 @@ all-stagefeedback-libcpp: maybe-all-stagefeedback-intl
 all-stageautoprofile-libcpp: maybe-all-stageautoprofile-intl
 all-stageautofeedback-libcpp: maybe-all-stageautofeedback-intl
 all-libcpp: maybe-all-libiconv
-
 all-stage1-libcpp: maybe-all-stage1-libiconv
 all-stage2-libcpp: maybe-all-stage2-libiconv
 all-stage3-libcpp: maybe-all-stage3-libiconv
@@ -57322,7 +57281,6 @@ all-stagefeedback-libcpp: maybe-all-stagefeedback-libiconv
 all-stageautoprofile-libcpp: maybe-all-stageautoprofile-libiconv
 all-stageautofeedback-libcpp: maybe-all-stageautofeedback-libiconv
 all-fixincludes: maybe-all-libiberty
-
 all-stage1-fixincludes: maybe-all-stage1-libiberty
 all-stage2-fixincludes: maybe-all-stage2-libiberty
 all-stage3-fixincludes: maybe-all-stage3-libiberty
@@ -57333,9 +57291,7 @@ all-stagefeedback-fixincludes: maybe-all-stagefeedback-libiberty
 all-stageautoprofile-fixincludes: maybe-all-stageautoprofile-libiberty
 all-stageautofeedback-fixincludes: maybe-all-stageautofeedback-libiberty
 all-gnattools: maybe-all-target-libada
-all-gnattools: maybe-all-target-libstdc++-v3
 all-lto-plugin: maybe-all-libiberty
-
 all-stage1-lto-plugin: maybe-all-stage1-libiberty
 all-stage2-lto-plugin: maybe-all-stage2-libiberty
 all-stage3-lto-plugin: maybe-all-stage3-libiberty
@@ -57346,7 +57302,6 @@ all-stagefeedback-lto-plugin: maybe-all-stagefeedback-libiberty
 all-stageautoprofile-lto-plugin: maybe-all-stageautoprofile-libiberty
 all-stageautofeedback-lto-plugin: maybe-all-stageautofeedback-libiberty
 all-lto-plugin: maybe-all-libiberty-linker-plugin
-
 all-stage1-lto-plugin: maybe-all-stage1-libiberty-linker-plugin
 all-stage2-lto-plugin: maybe-all-stage2-libiberty-linker-plugin
 all-stage3-lto-plugin: maybe-all-stage3-libiberty-linker-plugin
@@ -57356,12 +57311,8 @@ all-stagetrain-lto-plugin: maybe-all-stagetrain-libiberty-linker-plugin
 all-stagefeedback-lto-plugin: maybe-all-stagefeedback-libiberty-linker-plugin
 all-stageautoprofile-lto-plugin: maybe-all-stageautoprofile-libiberty-linker-plugin
 all-stageautofeedback-lto-plugin: maybe-all-stageautofeedback-libiberty-linker-plugin
-configure-libcc1: maybe-configure-gcc
-all-libcc1: maybe-all-gcc
 all-gotools: maybe-all-target-libgo
-all-utils: maybe-all-libiberty
 configure-intl: maybe-all-libiconv
-
 configure-stage1-intl: maybe-all-stage1-libiconv
 configure-stage2-intl: maybe-all-stage2-libiconv
 configure-stage3-intl: maybe-all-stage3-libiconv
@@ -57372,7 +57323,6 @@ configure-stagefeedback-intl: maybe-all-stagefeedback-libiconv
 configure-stageautoprofile-intl: maybe-all-stageautoprofile-libiconv
 configure-stageautofeedback-intl: maybe-all-stageautofeedback-libiconv
 configure-mpfr: maybe-all-gmp
-
 configure-stage1-mpfr: maybe-all-stage1-gmp
 configure-stage2-mpfr: maybe-all-stage2-gmp
 configure-stage3-mpfr: maybe-all-stage3-gmp
@@ -57383,7 +57333,6 @@ configure-stagefeedback-mpfr: maybe-all-stagefeedback-gmp
 configure-stageautoprofile-mpfr: maybe-all-stageautoprofile-gmp
 configure-stageautofeedback-mpfr: maybe-all-stageautofeedback-gmp
 configure-mpc: maybe-all-mpfr
-
 configure-stage1-mpc: maybe-all-stage1-mpfr
 configure-stage2-mpc: maybe-all-stage2-mpfr
 configure-stage3-mpc: maybe-all-stage3-mpfr
@@ -57394,7 +57343,6 @@ configure-stagefeedback-mpc: maybe-all-stagefeedback-mpfr
 configure-stageautoprofile-mpc: maybe-all-stageautoprofile-mpfr
 configure-stageautofeedback-mpc: maybe-all-stageautofeedback-mpfr
 configure-isl: maybe-all-gmp
-
 configure-stage1-isl: maybe-all-stage1-gmp
 configure-stage2-isl: maybe-all-stage2-gmp
 configure-stage3-isl: maybe-all-stage3-gmp
@@ -57405,7 +57353,6 @@ configure-stagefeedback-isl: maybe-all-stagefeedback-gmp
 configure-stageautoprofile-isl: maybe-all-stageautoprofile-gmp
 configure-stageautofeedback-isl: maybe-all-stageautofeedback-gmp
 all-intl: maybe-all-libiconv
-
 all-stage1-intl: maybe-all-stage1-libiconv
 all-stage2-intl: maybe-all-stage2-libiconv
 all-stage3-intl: maybe-all-stage3-libiconv
@@ -57415,17 +57362,10 @@ all-stagetrain-intl: maybe-all-stagetrain-libiconv
 all-stagefeedback-intl: maybe-all-stagefeedback-libiconv
 all-stageautoprofile-intl: maybe-all-stageautoprofile-libiconv
 all-stageautofeedback-intl: maybe-all-stageautofeedback-libiconv
-configure-gdb: maybe-all-intl
 configure-gdb: maybe-configure-sim
-configure-gdb: maybe-all-bfd
-configure-gdb: maybe-all-libiconv
-all-gdb: maybe-all-libiberty
-all-gdb: maybe-all-libiconv
-all-gdb: maybe-all-opcodes
 all-gdb: maybe-all-readline
 all-gdb: maybe-all-build-bison
 all-gdb: maybe-all-sim
-all-gdb: maybe-all-libdecnumber
 all-gdb: maybe-all-libtermcap
 configure-libgui: maybe-configure-tcl
 configure-libgui: maybe-configure-tk
@@ -57433,7 +57373,6 @@ all-libgui: maybe-all-tcl
 all-libgui: maybe-all-tk
 all-libgui: maybe-all-itcl
 configure-bfd: configure-libiberty
-
 configure-stage1-bfd: configure-stage1-libiberty
 configure-stage2-bfd: configure-stage2-libiberty
 configure-stage3-bfd: configure-stage3-libiberty
@@ -57444,7 +57383,6 @@ configure-stagefeedback-bfd: configure-stagefeedback-libiberty
 configure-stageautoprofile-bfd: configure-stageautoprofile-libiberty
 configure-stageautofeedback-bfd: configure-stageautofeedback-libiberty
 configure-bfd: maybe-configure-intl
-
 configure-stage1-bfd: maybe-configure-stage1-intl
 configure-stage2-bfd: maybe-configure-stage2-intl
 configure-stage3-bfd: maybe-configure-stage3-intl
@@ -57455,7 +57393,6 @@ configure-stagefeedback-bfd: maybe-configure-stagefeedback-intl
 configure-stageautoprofile-bfd: maybe-configure-stageautoprofile-intl
 configure-stageautofeedback-bfd: maybe-configure-stageautofeedback-intl
 all-bfd: maybe-all-libiberty
-
 all-stage1-bfd: maybe-all-stage1-libiberty
 all-stage2-bfd: maybe-all-stage2-libiberty
 all-stage3-bfd: maybe-all-stage3-libiberty
@@ -57466,7 +57403,6 @@ all-stagefeedback-bfd: maybe-all-stagefeedback-libiberty
 all-stageautoprofile-bfd: maybe-all-stageautoprofile-libiberty
 all-stageautofeedback-bfd: maybe-all-stageautofeedback-libiberty
 all-bfd: maybe-all-intl
-
 all-stage1-bfd: maybe-all-stage1-intl
 all-stage2-bfd: maybe-all-stage2-intl
 all-stage3-bfd: maybe-all-stage3-intl
@@ -57477,7 +57413,6 @@ all-stagefeedback-bfd: maybe-all-stagefeedback-intl
 all-stageautoprofile-bfd: maybe-all-stageautoprofile-intl
 all-stageautofeedback-bfd: maybe-all-stageautofeedback-intl
 all-bfd: maybe-all-zlib
-
 all-stage1-bfd: maybe-all-stage1-zlib
 all-stage2-bfd: maybe-all-stage2-zlib
 all-stage3-bfd: maybe-all-stage3-zlib
@@ -57488,7 +57423,6 @@ all-stagefeedback-bfd: maybe-all-stagefeedback-zlib
 all-stageautoprofile-bfd: maybe-all-stageautoprofile-zlib
 all-stageautofeedback-bfd: maybe-all-stageautofeedback-zlib
 configure-opcodes: configure-libiberty
-
 configure-stage1-opcodes: configure-stage1-libiberty
 configure-stage2-opcodes: configure-stage2-libiberty
 configure-stage3-opcodes: configure-stage3-libiberty
@@ -57499,7 +57433,6 @@ configure-stagefeedback-opcodes: configure-stagefeedback-libiberty
 configure-stageautoprofile-opcodes: configure-stageautoprofile-libiberty
 configure-stageautofeedback-opcodes: configure-stageautofeedback-libiberty
 all-opcodes: maybe-all-libiberty
-
 all-stage1-opcodes: maybe-all-stage1-libiberty
 all-stage2-opcodes: maybe-all-stage2-libiberty
 all-stage3-opcodes: maybe-all-stage3-libiberty
@@ -57510,7 +57443,6 @@ all-stagefeedback-opcodes: maybe-all-stagefeedback-libiberty
 all-stageautoprofile-opcodes: maybe-all-stageautoprofile-libiberty
 all-stageautofeedback-opcodes: maybe-all-stageautofeedback-libiberty
 configure-binutils: maybe-configure-intl
-
 configure-stage1-binutils: maybe-configure-stage1-intl
 configure-stage2-binutils: maybe-configure-stage2-intl
 configure-stage3-binutils: maybe-configure-stage3-intl
@@ -57521,7 +57453,6 @@ configure-stagefeedback-binutils: maybe-configure-stagefeedback-intl
 configure-stageautoprofile-binutils: maybe-configure-stageautoprofile-intl
 configure-stageautofeedback-binutils: maybe-configure-stageautofeedback-intl
 all-binutils: maybe-all-libiberty
-
 all-stage1-binutils: maybe-all-stage1-libiberty
 all-stage2-binutils: maybe-all-stage2-libiberty
 all-stage3-binutils: maybe-all-stage3-libiberty
@@ -57532,7 +57463,6 @@ all-stagefeedback-binutils: maybe-all-stagefeedback-libiberty
 all-stageautoprofile-binutils: maybe-all-stageautoprofile-libiberty
 all-stageautofeedback-binutils: maybe-all-stageautofeedback-libiberty
 all-binutils: maybe-all-opcodes
-
 all-stage1-binutils: maybe-all-stage1-opcodes
 all-stage2-binutils: maybe-all-stage2-opcodes
 all-stage3-binutils: maybe-all-stage3-opcodes
@@ -57543,7 +57473,6 @@ all-stagefeedback-binutils: maybe-all-stagefeedback-opcodes
 all-stageautoprofile-binutils: maybe-all-stageautoprofile-opcodes
 all-stageautofeedback-binutils: maybe-all-stageautofeedback-opcodes
 all-binutils: maybe-all-bfd
-
 all-stage1-binutils: maybe-all-stage1-bfd
 all-stage2-binutils: maybe-all-stage2-bfd
 all-stage3-binutils: maybe-all-stage3-bfd
@@ -57554,7 +57483,6 @@ all-stagefeedback-binutils: maybe-all-stagefeedback-bfd
 all-stageautoprofile-binutils: maybe-all-stageautoprofile-bfd
 all-stageautofeedback-binutils: maybe-all-stageautofeedback-bfd
 all-binutils: maybe-all-build-flex
-
 all-stage1-binutils: maybe-all-build-flex
 all-stage2-binutils: maybe-all-build-flex
 all-stage3-binutils: maybe-all-build-flex
@@ -57565,7 +57493,6 @@ all-stagefeedback-binutils: maybe-all-build-flex
 all-stageautoprofile-binutils: maybe-all-build-flex
 all-stageautofeedback-binutils: maybe-all-build-flex
 all-binutils: maybe-all-build-bison
-
 all-stage1-binutils: maybe-all-build-bison
 all-stage2-binutils: maybe-all-build-bison
 all-stage3-binutils: maybe-all-build-bison
@@ -57576,7 +57503,6 @@ all-stagefeedback-binutils: maybe-all-build-bison
 all-stageautoprofile-binutils: maybe-all-build-bison
 all-stageautofeedback-binutils: maybe-all-build-bison
 all-binutils: maybe-all-intl
-
 all-stage1-binutils: maybe-all-stage1-intl
 all-stage2-binutils: maybe-all-stage2-intl
 all-stage3-binutils: maybe-all-stage3-intl
@@ -57587,7 +57513,6 @@ all-stagefeedback-binutils: maybe-all-stagefeedback-intl
 all-stageautoprofile-binutils: maybe-all-stageautoprofile-intl
 all-stageautofeedback-binutils: maybe-all-stageautofeedback-intl
 all-binutils: maybe-all-gas
-
 all-stage1-binutils: maybe-all-stage1-gas
 all-stage2-binutils: maybe-all-stage2-gas
 all-stage3-binutils: maybe-all-stage3-gas
@@ -57602,7 +57527,6 @@ install-strip-binutils: maybe-install-strip-opcodes
 install-opcodes: maybe-install-bfd
 install-strip-opcodes: maybe-install-strip-bfd
 configure-gas: maybe-configure-intl
-
 configure-stage1-gas: maybe-configure-stage1-intl
 configure-stage2-gas: maybe-configure-stage2-intl
 configure-stage3-gas: maybe-configure-stage3-intl
@@ -57613,7 +57537,6 @@ configure-stagefeedback-gas: maybe-configure-stagefeedback-intl
 configure-stageautoprofile-gas: maybe-configure-stageautoprofile-intl
 configure-stageautofeedback-gas: maybe-configure-stageautofeedback-intl
 all-gas: maybe-all-libiberty
-
 all-stage1-gas: maybe-all-stage1-libiberty
 all-stage2-gas: maybe-all-stage2-libiberty
 all-stage3-gas: maybe-all-stage3-libiberty
@@ -57624,7 +57547,6 @@ all-stagefeedback-gas: maybe-all-stagefeedback-libiberty
 all-stageautoprofile-gas: maybe-all-stageautoprofile-libiberty
 all-stageautofeedback-gas: maybe-all-stageautofeedback-libiberty
 all-gas: maybe-all-opcodes
-
 all-stage1-gas: maybe-all-stage1-opcodes
 all-stage2-gas: maybe-all-stage2-opcodes
 all-stage3-gas: maybe-all-stage3-opcodes
@@ -57635,7 +57557,6 @@ all-stagefeedback-gas: maybe-all-stagefeedback-opcodes
 all-stageautoprofile-gas: maybe-all-stageautoprofile-opcodes
 all-stageautofeedback-gas: maybe-all-stageautofeedback-opcodes
 all-gas: maybe-all-bfd
-
 all-stage1-gas: maybe-all-stage1-bfd
 all-stage2-gas: maybe-all-stage2-bfd
 all-stage3-gas: maybe-all-stage3-bfd
@@ -57646,7 +57567,6 @@ all-stagefeedback-gas: maybe-all-stagefeedback-bfd
 all-stageautoprofile-gas: maybe-all-stageautoprofile-bfd
 all-stageautofeedback-gas: maybe-all-stageautofeedback-bfd
 all-gas: maybe-all-intl
-
 all-stage1-gas: maybe-all-stage1-intl
 all-stage2-gas: maybe-all-stage2-intl
 all-stage3-gas: maybe-all-stage3-intl
@@ -57656,14 +57576,7 @@ all-stagetrain-gas: maybe-all-stagetrain-intl
 all-stagefeedback-gas: maybe-all-stagefeedback-intl
 all-stageautoprofile-gas: maybe-all-stageautoprofile-intl
 all-stageautofeedback-gas: maybe-all-stageautofeedback-intl
-configure-gprof: maybe-configure-intl
-all-gprof: maybe-all-libiberty
-all-gprof: maybe-all-bfd
-all-gprof: maybe-all-opcodes
-all-gprof: maybe-all-intl
-all-gprof: maybe-all-gas
 configure-ld: maybe-configure-intl
-
 configure-stage1-ld: maybe-configure-stage1-intl
 configure-stage2-ld: maybe-configure-stage2-intl
 configure-stage3-ld: maybe-configure-stage3-intl
@@ -57674,7 +57587,6 @@ configure-stagefeedback-ld: maybe-configure-stagefeedback-intl
 configure-stageautoprofile-ld: maybe-configure-stageautoprofile-intl
 configure-stageautofeedback-ld: maybe-configure-stageautofeedback-intl
 all-ld: maybe-all-libiberty
-
 all-stage1-ld: maybe-all-stage1-libiberty
 all-stage2-ld: maybe-all-stage2-libiberty
 all-stage3-ld: maybe-all-stage3-libiberty
@@ -57685,7 +57597,6 @@ all-stagefeedback-ld: maybe-all-stagefeedback-libiberty
 all-stageautoprofile-ld: maybe-all-stageautoprofile-libiberty
 all-stageautofeedback-ld: maybe-all-stageautofeedback-libiberty
 all-ld: maybe-all-bfd
-
 all-stage1-ld: maybe-all-stage1-bfd
 all-stage2-ld: maybe-all-stage2-bfd
 all-stage3-ld: maybe-all-stage3-bfd
@@ -57696,7 +57607,6 @@ all-stagefeedback-ld: maybe-all-stagefeedback-bfd
 all-stageautoprofile-ld: maybe-all-stageautoprofile-bfd
 all-stageautofeedback-ld: maybe-all-stageautofeedback-bfd
 all-ld: maybe-all-opcodes
-
 all-stage1-ld: maybe-all-stage1-opcodes
 all-stage2-ld: maybe-all-stage2-opcodes
 all-stage3-ld: maybe-all-stage3-opcodes
@@ -57707,7 +57617,6 @@ all-stagefeedback-ld: maybe-all-stagefeedback-opcodes
 all-stageautoprofile-ld: maybe-all-stageautoprofile-opcodes
 all-stageautofeedback-ld: maybe-all-stageautofeedback-opcodes
 all-ld: maybe-all-build-bison
-
 all-stage1-ld: maybe-all-build-bison
 all-stage2-ld: maybe-all-build-bison
 all-stage3-ld: maybe-all-build-bison
@@ -57718,7 +57627,6 @@ all-stagefeedback-ld: maybe-all-build-bison
 all-stageautoprofile-ld: maybe-all-build-bison
 all-stageautofeedback-ld: maybe-all-build-bison
 all-ld: maybe-all-build-flex
-
 all-stage1-ld: maybe-all-build-flex
 all-stage2-ld: maybe-all-build-flex
 all-stage3-ld: maybe-all-build-flex
@@ -57729,7 +57637,6 @@ all-stagefeedback-ld: maybe-all-build-flex
 all-stageautoprofile-ld: maybe-all-build-flex
 all-stageautofeedback-ld: maybe-all-build-flex
 all-ld: maybe-all-intl
-
 all-stage1-ld: maybe-all-stage1-intl
 all-stage2-ld: maybe-all-stage2-intl
 all-stage3-ld: maybe-all-stage3-intl
@@ -57740,7 +57647,6 @@ all-stagefeedback-ld: maybe-all-stagefeedback-intl
 all-stageautoprofile-ld: maybe-all-stageautoprofile-intl
 all-stageautofeedback-ld: maybe-all-stageautofeedback-intl
 all-ld: maybe-all-gas
-
 all-stage1-ld: maybe-all-stage1-gas
 all-stage2-ld: maybe-all-stage2-gas
 all-stage3-ld: maybe-all-stage3-gas
@@ -57751,7 +57657,6 @@ all-stagefeedback-ld: maybe-all-stagefeedback-gas
 all-stageautoprofile-ld: maybe-all-stageautoprofile-gas
 all-stageautofeedback-ld: maybe-all-stageautofeedback-gas
 all-ld: maybe-all-binutils
-
 all-stage1-ld: maybe-all-stage1-binutils
 all-stage2-ld: maybe-all-stage2-binutils
 all-stage3-ld: maybe-all-stage3-binutils
@@ -57764,7 +57669,6 @@ all-stageautofeedback-ld: maybe-all-stageautofeedback-binutils
 install-ld: maybe-install-gold
 install-strip-ld: maybe-install-strip-gold
 configure-gold: maybe-configure-intl
-
 configure-stage1-gold: maybe-configure-stage1-intl
 configure-stage2-gold: maybe-configure-stage2-intl
 configure-stage3-gold: maybe-configure-stage3-intl
@@ -57775,7 +57679,6 @@ configure-stagefeedback-gold: maybe-configure-stagefeedback-intl
 configure-stageautoprofile-gold: maybe-configure-stageautoprofile-intl
 configure-stageautofeedback-gold: maybe-configure-stageautofeedback-intl
 all-gold: maybe-all-libiberty
-
 all-stage1-gold: maybe-all-stage1-libiberty
 all-stage2-gold: maybe-all-stage2-libiberty
 all-stage3-gold: maybe-all-stage3-libiberty
@@ -57786,7 +57689,6 @@ all-stagefeedback-gold: maybe-all-stagefeedback-libiberty
 all-stageautoprofile-gold: maybe-all-stageautoprofile-libiberty
 all-stageautofeedback-gold: maybe-all-stageautofeedback-libiberty
 all-gold: maybe-all-intl
-
 all-stage1-gold: maybe-all-stage1-intl
 all-stage2-gold: maybe-all-stage2-intl
 all-stage3-gold: maybe-all-stage3-intl
@@ -57797,7 +57699,6 @@ all-stagefeedback-gold: maybe-all-stagefeedback-intl
 all-stageautoprofile-gold: maybe-all-stageautoprofile-intl
 all-stageautofeedback-gold: maybe-all-stageautofeedback-intl
 all-gold: maybe-all-bfd
-
 all-stage1-gold: maybe-all-stage1-bfd
 all-stage2-gold: maybe-all-stage2-bfd
 all-stage3-gold: maybe-all-stage3-bfd
@@ -57808,7 +57709,6 @@ all-stagefeedback-gold: maybe-all-stagefeedback-bfd
 all-stageautoprofile-gold: maybe-all-stageautoprofile-bfd
 all-stageautofeedback-gold: maybe-all-stageautofeedback-bfd
 all-gold: maybe-all-build-bison
-
 all-stage1-gold: maybe-all-build-bison
 all-stage2-gold: maybe-all-build-bison
 all-stage3-gold: maybe-all-build-bison
@@ -57819,7 +57719,6 @@ all-stagefeedback-gold: maybe-all-build-bison
 all-stageautoprofile-gold: maybe-all-build-bison
 all-stageautofeedback-gold: maybe-all-build-bison
 all-gold: maybe-all-gas
-
 all-stage1-gold: maybe-all-stage1-gas
 all-stage2-gold: maybe-all-stage2-gas
 all-stage3-gold: maybe-all-stage3-gas
@@ -57830,7 +57729,6 @@ all-stagefeedback-gold: maybe-all-stagefeedback-gas
 all-stageautoprofile-gold: maybe-all-stageautoprofile-gas
 all-stageautofeedback-gold: maybe-all-stageautofeedback-gas
 check-gold: maybe-all-binutils
-
 check-stage1-gold: maybe-all-stage1-binutils
 check-stage2-gold: maybe-all-stage2-binutils
 check-stage3-gold: maybe-all-stage3-binutils
@@ -57841,7 +57739,6 @@ check-stagefeedback-gold: maybe-all-stagefeedback-binutils
 check-stageautoprofile-gold: maybe-all-stageautoprofile-binutils
 check-stageautofeedback-gold: maybe-all-stageautofeedback-binutils
 check-gold: maybe-all-gas
-
 check-stage1-gold: maybe-all-stage1-gas
 check-stage2-gold: maybe-all-stage2-gas
 check-stage3-gold: maybe-all-stage3-gas
@@ -57852,7 +57749,6 @@ check-stagefeedback-gold: maybe-all-stagefeedback-gas
 check-stageautoprofile-gold: maybe-all-stageautoprofile-gas
 check-stageautofeedback-gold: maybe-all-stageautofeedback-gas
 configure-opcodes: maybe-configure-intl
-
 configure-stage1-opcodes: maybe-configure-stage1-intl
 configure-stage2-opcodes: maybe-configure-stage2-intl
 configure-stage3-opcodes: maybe-configure-stage3-intl
@@ -57863,7 +57759,6 @@ configure-stagefeedback-opcodes: maybe-configure-stagefeedback-intl
 configure-stageautoprofile-opcodes: maybe-configure-stageautoprofile-intl
 configure-stageautofeedback-opcodes: maybe-configure-stageautofeedback-intl
 all-opcodes: maybe-all-bfd
-
 all-stage1-opcodes: maybe-all-stage1-bfd
 all-stage2-opcodes: maybe-all-stage2-bfd
 all-stage3-opcodes: maybe-all-stage3-bfd
@@ -57874,7 +57769,6 @@ all-stagefeedback-opcodes: maybe-all-stagefeedback-bfd
 all-stageautoprofile-opcodes: maybe-all-stageautoprofile-bfd
 all-stageautofeedback-opcodes: maybe-all-stageautofeedback-bfd
 all-opcodes: maybe-all-libiberty
-
 all-stage1-opcodes: maybe-all-stage1-libiberty
 all-stage2-opcodes: maybe-all-stage2-libiberty
 all-stage3-opcodes: maybe-all-stage3-libiberty
@@ -57885,7 +57779,6 @@ all-stagefeedback-opcodes: maybe-all-stagefeedback-libiberty
 all-stageautoprofile-opcodes: maybe-all-stageautoprofile-libiberty
 all-stageautofeedback-opcodes: maybe-all-stageautofeedback-libiberty
 all-opcodes: maybe-all-intl
-
 all-stage1-opcodes: maybe-all-stage1-intl
 all-stage2-opcodes: maybe-all-stage2-intl
 all-stage3-opcodes: maybe-all-stage3-intl
@@ -57910,42 +57803,27 @@ install-itcl: maybe-install-tcl
 install-strip-itcl: maybe-install-strip-tcl
 configure-tk: maybe-configure-tcl
 all-tk: maybe-all-tcl
-all-sid: maybe-all-libiberty
-all-sid: maybe-all-bfd
-all-sid: maybe-all-opcodes
 all-sid: maybe-all-tcl
 all-sid: maybe-all-tk
 install-sid: maybe-install-tcl
 install-strip-sid: maybe-install-strip-tcl
 install-sid: maybe-install-tk
 install-strip-sid: maybe-install-strip-tk
-configure-sim: maybe-configure-intl
-all-sim: maybe-all-intl
-all-sim: maybe-all-libiberty
-all-sim: maybe-all-bfd
-all-sim: maybe-all-opcodes
 all-sim: maybe-all-readline
 all-sim: maybe-configure-gdb
-all-fastjar: maybe-all-zlib
 all-fastjar: maybe-all-build-texinfo
-all-fastjar: maybe-all-libiberty
-all-bison: maybe-all-intl
 all-bison: maybe-all-build-texinfo
 all-flex: maybe-all-build-bison
-all-flex: maybe-all-intl
 all-flex: maybe-all-m4
 all-flex: maybe-all-build-texinfo
-all-m4: maybe-all-intl
 all-m4: maybe-all-build-texinfo
 configure-target-fastjar: maybe-configure-target-zlib
 all-target-fastjar: maybe-all-target-zlib
 configure-target-libgo: maybe-configure-target-libffi
-configure-target-libgo: maybe-all-target-libstdc++-v3
 all-target-libgo: maybe-all-target-libbacktrace
 all-target-libgo: maybe-all-target-libffi
 all-target-libgo: maybe-all-target-libatomic
 configure-target-libstdc++-v3: maybe-configure-target-libgomp
-
 configure-stage1-target-libstdc++-v3: maybe-configure-stage1-target-libgomp
 configure-stage2-target-libstdc++-v3: maybe-configure-stage2-target-libgomp
 configure-stage3-target-libstdc++-v3: maybe-configure-stage3-target-libgomp
@@ -57955,9 +57833,7 @@ configure-stagetrain-target-libstdc++-v3: maybe-configure-stagetrain-target-libg
 configure-stagefeedback-target-libstdc++-v3: maybe-configure-stagefeedback-target-libgomp
 configure-stageautoprofile-target-libstdc++-v3: maybe-configure-stageautoprofile-target-libgomp
 configure-stageautofeedback-target-libstdc++-v3: maybe-configure-stageautofeedback-target-libgomp
-configure-target-liboffloadmic: maybe-configure-target-libgomp
 configure-target-libsanitizer: maybe-all-target-libstdc++-v3
-
 configure-stage1-target-libsanitizer: maybe-all-stage1-target-libstdc++-v3
 configure-stage2-target-libsanitizer: maybe-all-stage2-target-libstdc++-v3
 configure-stage3-target-libsanitizer: maybe-all-stage3-target-libstdc++-v3
@@ -57968,7 +57844,6 @@ configure-stagefeedback-target-libsanitizer: maybe-all-stagefeedback-target-libs
 configure-stageautoprofile-target-libsanitizer: maybe-all-stageautoprofile-target-libstdc++-v3
 configure-stageautofeedback-target-libsanitizer: maybe-all-stageautofeedback-target-libstdc++-v3
 configure-target-libvtv: maybe-all-target-libstdc++-v3
-
 configure-stage1-target-libvtv: maybe-all-stage1-target-libstdc++-v3
 configure-stage2-target-libvtv: maybe-all-stage2-target-libstdc++-v3
 configure-stage3-target-libvtv: maybe-all-stage3-target-libstdc++-v3
@@ -57979,7 +57854,6 @@ configure-stagefeedback-target-libvtv: maybe-all-stagefeedback-target-libstdc++-
 configure-stageautoprofile-target-libvtv: maybe-all-stageautoprofile-target-libstdc++-v3
 configure-stageautofeedback-target-libvtv: maybe-all-stageautofeedback-target-libstdc++-v3
 all-target-libstdc++-v3: maybe-configure-target-libgomp
-
 all-stage1-target-libstdc++-v3: maybe-configure-stage1-target-libgomp
 all-stage2-target-libstdc++-v3: maybe-configure-stage2-target-libgomp
 all-stage3-target-libstdc++-v3: maybe-configure-stage3-target-libgomp
@@ -57989,7 +57863,6 @@ all-stagetrain-target-libstdc++-v3: maybe-configure-stagetrain-target-libgomp
 all-stagefeedback-target-libstdc++-v3: maybe-configure-stagefeedback-target-libgomp
 all-stageautoprofile-target-libstdc++-v3: maybe-configure-stageautoprofile-target-libgomp
 all-stageautofeedback-target-libstdc++-v3: maybe-configure-stageautofeedback-target-libgomp
-all-target-liboffloadmic: maybe-all-target-libgomp
 install-target-libgo: maybe-install-target-libatomic
 install-target-libgfortran: maybe-install-target-libquadmath
 install-target-libgfortran: maybe-install-target-libgcc
@@ -58004,12 +57877,70 @@ install-target-libobjc: maybe-install-target-libgcc
 install-target-libstdc++-v3: maybe-install-target-libgcc
 all-target-libgloss: maybe-all-target-newlib
 all-target-winsup: maybe-all-target-libtermcap
-configure-target-newlib: maybe-all-binutils
-configure-target-newlib: maybe-all-ld
 configure-target-libgfortran: maybe-all-target-libquadmath
 configure-target-libgfortran: maybe-all-target-libbacktrace
 
 
+@if gcc-bootstrap
+all-gnattools: stage_last
+configure-libcc1: stage_last
+all-libcc1: stage_last
+all-utils: stage_last
+configure-gdb: stage_last
+all-gdb: stage_last
+configure-gprof: stage_last
+all-gprof: stage_last
+all-sid: stage_last
+configure-sim: stage_last
+all-sim: stage_last
+all-fastjar: stage_last
+all-bison: stage_last
+all-flex: stage_last
+all-m4: stage_last
+configure-target-libgo: stage_last
+configure-target-liboffloadmic: stage_last
+all-target-liboffloadmic: stage_last
+configure-target-newlib: stage_last
+@endif gcc-bootstrap
+
+@if gcc-no-bootstrap
+all-gnattools: maybe-all-target-libstdc++-v3
+configure-libcc1: maybe-configure-gcc
+all-libcc1: maybe-all-gcc
+all-utils: maybe-all-libiberty
+configure-gdb: maybe-all-intl
+configure-gdb: maybe-all-bfd
+configure-gdb: maybe-all-libiconv
+all-gdb: maybe-all-libiberty
+all-gdb: maybe-all-libiconv
+all-gdb: maybe-all-opcodes
+all-gdb: maybe-all-libdecnumber
+configure-gprof: maybe-configure-intl
+all-gprof: maybe-all-libiberty
+all-gprof: maybe-all-bfd
+all-gprof: maybe-all-opcodes
+all-gprof: maybe-all-intl
+all-gprof: maybe-all-gas
+all-sid: maybe-all-libiberty
+all-sid: maybe-all-bfd
+all-sid: maybe-all-opcodes
+configure-sim: maybe-configure-intl
+all-sim: maybe-all-intl
+all-sim: maybe-all-libiberty
+all-sim: maybe-all-bfd
+all-sim: maybe-all-opcodes
+all-fastjar: maybe-all-zlib
+all-fastjar: maybe-all-libiberty
+all-bison: maybe-all-intl
+all-flex: maybe-all-intl
+all-m4: maybe-all-intl
+configure-target-libgo: maybe-all-target-libstdc++-v3
+configure-target-liboffloadmic: maybe-configure-target-libgomp
+all-target-liboffloadmic: maybe-all-target-libgomp
+configure-target-newlib: maybe-all-binutils
+configure-target-newlib: maybe-all-ld
+@endif gcc-no-bootstrap
+
 # Dependencies for target modules on other target modules are
 # described by lang_env_dependencies; the defaults apply to anything
 # not mentioned there.
diff --git a/Makefile.tpl b/Makefile.tpl
index abd2bc2fb897..476a0586808a 100644
--- a/Makefile.tpl
+++ b/Makefile.tpl
@@ -1824,12 +1824,15 @@ configure-target-[+module+]: maybe-all-gcc[+
    (define dep-maybe (lambda ()
       (if (exist? "hard") "" "maybe-")))
 
-   ;; dep-kind returns "normal" if the dependency is on an "install" target,
-   ;; or if either module is not bootstrapped.  It returns "bootstrap" for
-   ;; configure or build dependencies between bootstrapped modules; it returns
-   ;; "prebootstrap" for configure or build dependencies of bootstrapped
-   ;; modules on a build module (e.g. all-gcc on all-build-bison).  All this
-   ;; is only necessary for host modules.
+   ;; dep-kind returns "normal" if the dependency is on an "install"
+   ;; target, if neither module is bootstrapped, or if the dependence
+   ;; module is not bootstrapped; otherwise, if the dependent module
+   ;; is not bootstrapped but the dependence is, it returns
+   ;; "postbootstrap".  .  It returns "bootstrap" for configure or
+   ;; build dependencies between bootstrapped modules; it returns
+   ;; "prebootstrap" for configure or build dependencies of
+   ;; bootstrapped modules on a build module (e.g. all-gcc on
+   ;; all-build-bison).  All this is only necessary for host modules.
    (define dep-kind (lambda ()
       (if (and (hash-ref boot-modules (dep-module "module"))
 	       (=* (dep-module "on") "build-"))
@@ -1838,11 +1841,24 @@ configure-target-[+module+]: maybe-all-gcc[+
 	  (if (or (= (dep-subtarget "on") "install-")
 		  (not (hash-ref boot-modules (dep-module "module")))
 		  (not (hash-ref boot-modules (dep-module "on"))))
-              "normal"
+
+	      (if (and (not (= (dep-subtarget "on") "install-"))
+		       (not (hash-ref boot-modules (dep-module "module")))
+		       (hash-ref boot-modules (dep-module "on")))
+		  "postbootstrap"
+		  "normal")
+
 	      "bootstrap"))))
 
+   (define make-postboot-dep (lambda (target dep)
+     (if (not (= (hash-ref postboot-targets target) dep))
+         (let ()
+	   (hash-create-handle! postboot-targets target dep)
+           (string-append target ": " dep "\n")))))
+
    ;; We now build the hash table that is used by dep-kind.
    (define boot-modules (make-hash-table 113))
+   (define postboot-targets (make-hash-table 113))
 +]
 
 [+ FOR host_modules +][+
@@ -1859,19 +1875,33 @@ configure-target-[+module+]: maybe-all-gcc[+
 # to check for bootstrap/prebootstrap dependencies.  To resolve
 # prebootstrap dependencies, prebootstrap modules are gathered in
 # a hash table.
-[+ FOR dependencies +][+ (make-dep "" "") +]
-[+ CASE (dep-kind) +]
+[+ FOR dependencies +][+ CASE (dep-kind) +]
 [+ == "prebootstrap"
-     +][+ FOR bootstrap_stage +]
+     +][+ (make-dep "" "") +][+ FOR bootstrap_stage +]
 [+ (make-dep (dep-stage) "") +][+
        ENDFOR bootstrap_stage +]
 [+ == "bootstrap"
-     +][+ FOR bootstrap_stage +]
+     +][+ (make-dep "" "") +][+ FOR bootstrap_stage +]
 [+ (make-dep (dep-stage) (dep-stage)) +][+
        ENDFOR bootstrap_stage +]
+[+ == "normal"
+     +][+ (make-dep "" "") +]
 [+ ESAC +][+
 ENDFOR dependencies +]
 
+@if gcc-bootstrap
+[+ FOR dependencies +][+ CASE (dep-kind) +]
+[+ == "postbootstrap"
+     +][+ (make-postboot-dep (get "module") "stage_last") +][+ ESAC +][+
+ENDFOR dependencies +]@endif gcc-bootstrap
+
+@if gcc-no-bootstrap
+[+ FOR dependencies +][+ CASE (dep-kind) +]
+[+ == "postbootstrap"
+     +][+ (make-dep "" "") +]
+[+ ESAC +][+
+ENDFOR dependencies +]@endif gcc-no-bootstrap
+
 # Dependencies for target modules on other target modules are
 # described by lang_env_dependencies; the defaults apply to anything
 # not mentioned there.


-- 
Alexandre Oliva, freedom fighter   https://FSFLA.org/blogs/lxo
Be the change, be Free!         FSF Latin America board member
GNU Toolchain Engineer                Free Software Evangelist

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: fix libcc1 dependencies in toplevel Makefile
  2018-06-03 19:13       ` Alexandre Oliva
@ 2018-06-12  2:50         ` Alexandre Oliva
  2018-06-12  8:57           ` Olivier Hainque
                             ` (2 more replies)
  0 siblings, 3 replies; 16+ messages in thread
From: Alexandre Oliva @ 2018-06-12  2:50 UTC (permalink / raw)
  To: Olivier Hainque; +Cc: GCC Patches, Nicolas Roche

On Jun  3, 2018, Alexandre Oliva <oliva@gnu.org> wrote:

> On Jun 27, 2017, Alexandre Oliva <aoliva@redhat.com> wrote:

>> configuration, because the current Makefile would only do that with
>> all-host, after bootstrap is complete.

> I have extensively studied the dependencies, and I still don't see how
> all-libcc1, that is only activated as a target during the post-bootstrap
> all-host build, might have been activated concurrently with
> staging/unstaging.  By the time we get to all-host, we've sequentially
> completed bootstrap, compare, and unstage.

> The only possibilities I see of something going wrong as described is a
> parallel build that has bootstrap and postbootstrap targets in the
> command line, or some patch that changes the dependencies so that such
> targets are considered in parallel.

> I could definitely use the build logs from back then, if still
> available, to try to make sense of the problem.

I was missing one possibility: that the problem occurred during the
post-bootstrap all-host all-target build.  As far as I can tell from
Nicolas' analysis, this was indeed the case.  I still don't see how any
staging or unstaging might have taken place, but I can now see that we
do reenter the gcc dir before building all-libcc1.  If that reentering
rebuilds anything, particularly headers, that may be enough to explain
the reported symptoms.

Now, I do vaguely recall build output within the gcc subdir that
possibly recreated the gcc/include subtree, which might explain the
observed errors.

The good news is that the patch I posted the other day actually
addresses this problem: the dep on stage_last is not enough to trigger a
rebuild of gcc, so a post-bootstrap all-host all-target build will not
reenter the bootstrapped dirs, but that dep does trigger an initial
build of gcc if one has not gone through bootstrapping yet.


So I see two possible ways to go from now:

1. address the previously-mentioned fragility in the patch I posted, to
catch all cases of postbootstrap targets and their deps on
non-postbootstrap targets.


2. revamp the bootstrap/non-bootstrap dependencies, using GNU make
conditionals rather than configure-time enable/disable-bootstrap, so
that we can have a different set of dependencies while running the
bootstrap proper, having non-stage dependencies activated by default
when any of the all-* targets are named in the command line, and also
when building post-bootstrap all-host all-target.  This might seem to
bring the problem back, but rather by having the full dependency set,
we'd avoid the race not by refraining from reentering dirs, but rather
by having them entered or reentered according to the full dependencies,
without mixing stage and non-stage dependencies.  I'm not yet sure this
is actually doable, but it seems to me that if it is, it would be more
robust than what we have now.

-- 
Alexandre Oliva, freedom fighter   https://FSFLA.org/blogs/lxo
Be the change, be Free!         FSF Latin America board member
GNU Toolchain Engineer                Free Software Evangelist

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: fix libcc1 dependencies in toplevel Makefile
  2018-06-12  2:50         ` Alexandre Oliva
@ 2018-06-12  8:57           ` Olivier Hainque
  2018-06-12 15:31           ` Jeff Law
  2018-06-26  5:39           ` Alexandre Oliva
  2 siblings, 0 replies; 16+ messages in thread
From: Olivier Hainque @ 2018-06-12  8:57 UTC (permalink / raw)
  To: Alexandre Oliva; +Cc: Olivier Hainque, GCC Patches, Nicolas Roche

Hi Alex,

Thanks for your feedback and help looking into this.

> On 12 Jun 2018, at 04:50, Alexandre Oliva <oliva@gnu.org> wrote:
> 
> I was missing one possibility: that the problem occurred during the
> post-bootstrap all-host all-target build.  As far as I can tell from
> Nicolas' analysis, this was indeed the case.

Yes, indeed. I intended to convey this in the
opening message of this thread by referring to concurrency
between libcc1 and libquadmath. That was admittedly
too implicit :)


> I still don't see how any
> staging or unstaging might have taken place, but I can now see that we
> do reenter the gcc dir before building all-libcc1.  If that reentering
> rebuilds anything, particularly headers, that may be enough to explain
> the reported symptoms.

Right.

> Now, I do vaguely recall build output within the gcc subdir that
> possibly recreated the gcc/include subtree, which might explain the
> observed errors.

That's consistent at least, as the problem we had was the compilation
of a libquadmath source not finding limits.h.
 
> The good news is that the patch I posted the other day actually
> addresses this problem: the dep on stage_last is not enough to trigger a
> rebuild of gcc, so a post-bootstrap all-host all-target build will not
> reenter the bootstrapped dirs,

Nice :-)

> but that dep does trigger an initial
> build of gcc if one has not gone through bootstrapping yet.
> 
> So I see two possible ways to go from now:
> 
> 1. address the previously-mentioned fragility in the patch I posted, to
> catch all cases of postbootstrap targets and their deps on
> non-postbootstrap targets.
> 
> 2. revamp the bootstrap/non-bootstrap dependencies, using GNU make
> conditionals rather than configure-time enable/disable-bootstrap, so
> that we can have a different set of dependencies while running the
> bootstrap proper, having non-stage dependencies activated by default
> when any of the all-* targets are named in the command line, and also
> when building post-bootstrap all-host all-target.  This might seem to
> bring the problem back, but rather by having the full dependency set,
> we'd avoid the race not by refraining from reentering dirs, but rather
> by having them entered or reentered according to the full dependencies,
> without mixing stage and non-stage dependencies.  I'm not yet sure this
> is actually doable, but it seems to me that if it is, it would be more
> robust than what we have now.

I'm really not familiar enough with the dependencies organization
to provide informed input here.

Maybe a reasonable effort on 1 would be good enough in practice and
we can get to 2 only as a second step if we still observe failures.

Or start with a reasonable effort on 2 to evaluate feasibility and 
get a rough guesstimate of the effort it would take to get there, then
reassess.

For sure, I'm happy to try any patch in our development (!production)
builds and see where this leads.

Thanks again for your help on this!

With Kind Regards,

Olivier



^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: fix libcc1 dependencies in toplevel Makefile
  2018-06-12  2:50         ` Alexandre Oliva
  2018-06-12  8:57           ` Olivier Hainque
@ 2018-06-12 15:31           ` Jeff Law
  2018-06-26  5:39           ` Alexandre Oliva
  2 siblings, 0 replies; 16+ messages in thread
From: Jeff Law @ 2018-06-12 15:31 UTC (permalink / raw)
  To: Alexandre Oliva, Olivier Hainque; +Cc: GCC Patches, Nicolas Roche

On 06/11/2018 08:50 PM, Alexandre Oliva wrote:
> So I see two possible ways to go from now:
> 
> 1. address the previously-mentioned fragility in the patch I posted, to
> catch all cases of postbootstrap targets and their deps on
> non-postbootstrap targets.
> 
> 
> 2. revamp the bootstrap/non-bootstrap dependencies, using GNU make
> conditionals rather than configure-time enable/disable-bootstrap, so
> that we can have a different set of dependencies while running the
> bootstrap proper, having non-stage dependencies activated by default
> when any of the all-* targets are named in the command line, and also
> when building post-bootstrap all-host all-target.  This might seem to
> bring the problem back, but rather by having the full dependency set,
> we'd avoid the race not by refraining from reentering dirs, but rather
> by having them entered or reentered according to the full dependencies,
> without mixing stage and non-stage dependencies.  I'm not yet sure this
> is actually doable, but it seems to me that if it is, it would be more
> robust than what we have now.
Your call.  I've wanted the build system revamped for 20+ years, but
it's nontrivial and the most serious problems were addressed as we
continued to pull the runtime bits out of gcc/

Jeff

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: fix libcc1 dependencies in toplevel Makefile
  2018-06-12  2:50         ` Alexandre Oliva
  2018-06-12  8:57           ` Olivier Hainque
  2018-06-12 15:31           ` Jeff Law
@ 2018-06-26  5:39           ` Alexandre Oliva
  2018-06-27 19:53             ` Olivier Hainque
  2 siblings, 1 reply; 16+ messages in thread
From: Alexandre Oliva @ 2018-06-26  5:39 UTC (permalink / raw)
  To: Olivier Hainque; +Cc: GCC Patches, Nicolas Roche, binutils, gdb-patches, newlib

On Jun 11, 2018, Alexandre Oliva <oliva@gnu.org> wrote:

> On Jun  3, 2018, Alexandre Oliva <oliva@gnu.org> wrote:
>> On Jun 27, 2017, Alexandre Oliva <aoliva@redhat.com> wrote:

> 1. address the previously-mentioned fragility in the patch I posted, to
> catch all cases of postbootstrap targets and their deps on
> non-postbootstrap targets.

This turned out to just require some thinking to convince myself it
wouldn't come up.

There was a major problem in the earlier patch, however: @if/@endif
gcc-no-bootstrap wasn't quite what we needed to enclose the preexisting
deps, because that works for cases in which gcc is built but not
bootstrapped, but not cases in which gcc is not built.  I had to
introduce @unless/@endunless to express the desired semantics.


Here's the patch I'll install if nobody objects in the next few days.
Tested on x86_64-linux-gnu with a gcc bootstrap tree, a gcc
non-bootstrap tree, and a binutils+gdb tree.

In the patch below, I've omitted hunks with only whitespace changes to
Makefile.in, so that people can more easily identify how rules are
changing.



Introduce @unless/@endunless and postbootstrap Makefile targets

From: Alexandre Oliva <oliva@adacore.com>

This patch turns dependencies of non-bootstrap targets on bootstrap
targets for bootstrap builds into dependencies on stage_last.  This
arrangement gets stage1-bubble to run from stage_last if we haven't
started a bootstrap yet, and to use the current stage otherwise.  This
was already the case of target libs, just not of non-bootstrapped host
modules.

In order to retain preexisting dependencies in non-bootstrap builds,
or in gcc-less builds, this introduces support for @unless/@endunless
pairs in Makefile.in.

There is a remaining possibility of problem if activating, in a tree
configured for bootstrap, a parallel build of two or more modules, at
least one bootstrapped and one not.  In this case, make might decide
to build stage_current and stage_last in parallel, the latter will
start a submake to build stage1 while the initial make, having
satisfied stage_current, proceeds to build the bootstrapped module in
non-bootstrapped configurations.  The two builds will overlap and will
likely conflict.  This situation does NOT arise in normal settings,
however: a post-bootstrap build of all-host all-target will indeed
activate such targets concurrently, but only after building all
bootstrapped modules successfully, and it will have both stage_last
and stage_current targets already satisfied, so the potential race
between builds will not arise.

Another remaining problem, that is slightly expanded with this patch,
is that of an interrupted build in a tree configured for bootstrap,
continued with a non-bootstrapped target.  Target modules that were
not bootstrapped would already fail to complete the current stage when
activated explicitly in the command line for a retry; host modules,
however, would attempt to build their bootstrapped dependencies, which
is what led to the problem of concurrent builds addressed with this
patch.  An interrupted or failed build might still recover correctly,
if the non-bootstrapped target is activated in both builds, because
then make will remove stage_last when its build command is
interrupted, so that it will attempt to recreate it with stage1-bubble
in the second try.  A bootstrap build, however, will not be attempting
to build stage_last, so the file will remain and the retry won't go
through stage1-bubble.  We have lived with that for target modules, so
we can probably live with that for host modules too.

Another undesirable consequence of this change is that non-boostrapped
host modules, in a tree configured for bootstrap, when activated as
make all-<module>, will build all of stage1 instead of only the
module's usual dependencies.  This is intentional and necessary to fix
the parallel-build problem.  If it's not desirable, disabling the
unnecessary bootstrap configuration will suffice to restore the
original set of dependencies.


for  ChangeLog

	* configure.ac: Introduce support for @unless/@endunless.
	* Makefile.tpl (dep-kind): Rewrite with cond; return
	postbootstrap in some cases.
	(make-postboot-dep, postboot-targets): New.
	(dependencies): Do not output postbootstrap dependencies at
	first.  Output non-target ones changed for configure to depend
	on stage_last @if gcc-bootstrap, and the original deps @unless
	gcc-bootstrap.
	* configure.in, Makefile.in: Rebuilt.
---
 Makefile.in  |  181 +++++++++++++++++-----------------------------------------
 Makefile.tpl |   78 +++++++++++++++++--------
 configure    |   20 +++++-
 configure.ac |   20 +++++-
 4 files changed, 134 insertions(+), 165 deletions(-)

diff --git a/Makefile.in b/Makefile.in
index 32a92a6bcd17..e0dfad337a6c 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -56060,9 +56018,7 @@ all-stagefeedback-fixincludes: maybe-all-stagefeedback-libiberty
 all-stageautoprofile-fixincludes: maybe-all-stageautoprofile-libiberty
 all-stageautofeedback-fixincludes: maybe-all-stageautofeedback-libiberty
 all-gnattools: maybe-all-target-libada
-all-gnattools: maybe-all-target-libstdc++-v3
 all-lto-plugin: maybe-all-libiberty
-
 all-stage1-lto-plugin: maybe-all-stage1-libiberty
 all-stage2-lto-plugin: maybe-all-stage2-libiberty
 all-stage3-lto-plugin: maybe-all-stage3-libiberty
@@ -56083,12 +56038,8 @@ all-stagetrain-lto-plugin: maybe-all-stagetrain-libiberty-linker-plugin
 all-stagefeedback-lto-plugin: maybe-all-stagefeedback-libiberty-linker-plugin
 all-stageautoprofile-lto-plugin: maybe-all-stageautoprofile-libiberty-linker-plugin
 all-stageautofeedback-lto-plugin: maybe-all-stageautofeedback-libiberty-linker-plugin
-configure-libcc1: maybe-configure-gcc
-all-libcc1: maybe-all-gcc
 all-gotools: maybe-all-target-libgo
-all-utils: maybe-all-libiberty
 configure-intl: maybe-all-libiconv
-
 configure-stage1-intl: maybe-all-stage1-libiconv
 configure-stage2-intl: maybe-all-stage2-libiconv
 configure-stage3-intl: maybe-all-stage3-libiconv
@@ -56142,17 +56089,10 @@ all-stagetrain-intl: maybe-all-stagetrain-libiconv
 all-stagefeedback-intl: maybe-all-stagefeedback-libiconv
 all-stageautoprofile-intl: maybe-all-stageautoprofile-libiconv
 all-stageautofeedback-intl: maybe-all-stageautofeedback-libiconv
-configure-gdb: maybe-all-intl
 configure-gdb: maybe-configure-sim
-configure-gdb: maybe-all-bfd
-configure-gdb: maybe-all-libiconv
-all-gdb: maybe-all-libiberty
-all-gdb: maybe-all-libiconv
-all-gdb: maybe-all-opcodes
 all-gdb: maybe-all-readline
 all-gdb: maybe-all-build-bison
 all-gdb: maybe-all-sim
-all-gdb: maybe-all-libdecnumber
 all-gdb: maybe-all-libtermcap
 configure-libgui: maybe-configure-tcl
 configure-libgui: maybe-configure-tk
@@ -56383,14 +56303,7 @@ all-stagetrain-gas: maybe-all-stagetrain-intl
 all-stagefeedback-gas: maybe-all-stagefeedback-intl
 all-stageautoprofile-gas: maybe-all-stageautoprofile-intl
 all-stageautofeedback-gas: maybe-all-stageautofeedback-intl
-configure-gprof: maybe-configure-intl
-all-gprof: maybe-all-libiberty
-all-gprof: maybe-all-bfd
-all-gprof: maybe-all-opcodes
-all-gprof: maybe-all-intl
-all-gprof: maybe-all-gas
 configure-ld: maybe-configure-intl
-
 configure-stage1-ld: maybe-configure-stage1-intl
 configure-stage2-ld: maybe-configure-stage2-intl
 configure-stage3-ld: maybe-configure-stage3-intl
@@ -56637,42 +56530,27 @@ install-itcl: maybe-install-tcl
 install-strip-itcl: maybe-install-strip-tcl
 configure-tk: maybe-configure-tcl
 all-tk: maybe-all-tcl
-all-sid: maybe-all-libiberty
-all-sid: maybe-all-bfd
-all-sid: maybe-all-opcodes
 all-sid: maybe-all-tcl
 all-sid: maybe-all-tk
 install-sid: maybe-install-tcl
 install-strip-sid: maybe-install-strip-tcl
 install-sid: maybe-install-tk
 install-strip-sid: maybe-install-strip-tk
-configure-sim: maybe-configure-intl
-all-sim: maybe-all-intl
-all-sim: maybe-all-libiberty
-all-sim: maybe-all-bfd
-all-sim: maybe-all-opcodes
 all-sim: maybe-all-readline
 all-sim: maybe-configure-gdb
-all-fastjar: maybe-all-zlib
 all-fastjar: maybe-all-build-texinfo
-all-fastjar: maybe-all-libiberty
-all-bison: maybe-all-intl
 all-bison: maybe-all-build-texinfo
 all-flex: maybe-all-build-bison
-all-flex: maybe-all-intl
 all-flex: maybe-all-m4
 all-flex: maybe-all-build-texinfo
-all-m4: maybe-all-intl
 all-m4: maybe-all-build-texinfo
 configure-target-fastjar: maybe-configure-target-zlib
 all-target-fastjar: maybe-all-target-zlib
 configure-target-libgo: maybe-configure-target-libffi
-configure-target-libgo: maybe-all-target-libstdc++-v3
 all-target-libgo: maybe-all-target-libbacktrace
 all-target-libgo: maybe-all-target-libffi
 all-target-libgo: maybe-all-target-libatomic
 configure-target-libstdc++-v3: maybe-configure-target-libgomp
-
 configure-stage1-target-libstdc++-v3: maybe-configure-stage1-target-libgomp
 configure-stage2-target-libstdc++-v3: maybe-configure-stage2-target-libgomp
 configure-stage3-target-libstdc++-v3: maybe-configure-stage3-target-libgomp
@@ -56682,9 +56560,7 @@ configure-stagetrain-target-libstdc++-v3: maybe-configure-stagetrain-target-libg
 configure-stagefeedback-target-libstdc++-v3: maybe-configure-stagefeedback-target-libgomp
 configure-stageautoprofile-target-libstdc++-v3: maybe-configure-stageautoprofile-target-libgomp
 configure-stageautofeedback-target-libstdc++-v3: maybe-configure-stageautofeedback-target-libgomp
-configure-target-liboffloadmic: maybe-configure-target-libgomp
 configure-target-libsanitizer: maybe-all-target-libstdc++-v3
-
 configure-stage1-target-libsanitizer: maybe-all-stage1-target-libstdc++-v3
 configure-stage2-target-libsanitizer: maybe-all-stage2-target-libstdc++-v3
 configure-stage3-target-libsanitizer: maybe-all-stage3-target-libstdc++-v3
@@ -56716,7 +56590,6 @@ all-stagetrain-target-libstdc++-v3: maybe-configure-stagetrain-target-libgomp
 all-stagefeedback-target-libstdc++-v3: maybe-configure-stagefeedback-target-libgomp
 all-stageautoprofile-target-libstdc++-v3: maybe-configure-stageautoprofile-target-libgomp
 all-stageautofeedback-target-libstdc++-v3: maybe-configure-stageautofeedback-target-libgomp
-all-target-liboffloadmic: maybe-all-target-libgomp
 install-target-libgo: maybe-install-target-libatomic
 install-target-libgfortran: maybe-install-target-libquadmath
 install-target-libgfortran: maybe-install-target-libgcc
@@ -56731,12 +56604,62 @@ install-target-libobjc: maybe-install-target-libgcc
 install-target-libstdc++-v3: maybe-install-target-libgcc
 all-target-libgloss: maybe-all-target-newlib
 all-target-winsup: maybe-all-target-libtermcap
-configure-target-newlib: maybe-all-binutils
-configure-target-newlib: maybe-all-ld
 configure-target-libgfortran: maybe-all-target-libquadmath
 configure-target-libgfortran: maybe-all-target-libbacktrace
 
 
+@if gcc-bootstrap
+configure-gnattools: stage_last
+configure-libcc1: stage_last
+configure-utils: stage_last
+configure-gdb: stage_last
+configure-gprof: stage_last
+configure-sid: stage_last
+configure-sim: stage_last
+configure-fastjar: stage_last
+configure-bison: stage_last
+configure-flex: stage_last
+configure-m4: stage_last
+@endif gcc-bootstrap
+
+@unless gcc-bootstrap
+all-gnattools: maybe-all-target-libstdc++-v3
+configure-libcc1: maybe-configure-gcc
+all-libcc1: maybe-all-gcc
+all-utils: maybe-all-libiberty
+configure-gdb: maybe-all-intl
+configure-gdb: maybe-all-bfd
+configure-gdb: maybe-all-libiconv
+all-gdb: maybe-all-libiberty
+all-gdb: maybe-all-libiconv
+all-gdb: maybe-all-opcodes
+all-gdb: maybe-all-libdecnumber
+configure-gprof: maybe-configure-intl
+all-gprof: maybe-all-libiberty
+all-gprof: maybe-all-bfd
+all-gprof: maybe-all-opcodes
+all-gprof: maybe-all-intl
+all-gprof: maybe-all-gas
+all-sid: maybe-all-libiberty
+all-sid: maybe-all-bfd
+all-sid: maybe-all-opcodes
+configure-sim: maybe-configure-intl
+all-sim: maybe-all-intl
+all-sim: maybe-all-libiberty
+all-sim: maybe-all-bfd
+all-sim: maybe-all-opcodes
+all-fastjar: maybe-all-zlib
+all-fastjar: maybe-all-libiberty
+all-bison: maybe-all-intl
+all-flex: maybe-all-intl
+all-m4: maybe-all-intl
+configure-target-libgo: maybe-all-target-libstdc++-v3
+configure-target-liboffloadmic: maybe-configure-target-libgomp
+all-target-liboffloadmic: maybe-all-target-libgomp
+configure-target-newlib: maybe-all-binutils
+configure-target-newlib: maybe-all-ld
+@endunless gcc-bootstrap
+
 # Dependencies for target modules on other target modules are
 # described by lang_env_dependencies; the defaults apply to anything
 # not mentioned there.
diff --git a/Makefile.tpl b/Makefile.tpl
index b6077c9f125c..447d324595fe 100644
--- a/Makefile.tpl
+++ b/Makefile.tpl
@@ -1828,25 +1828,46 @@ configure-target-[+module+]: maybe-all-gcc[+
    (define dep-maybe (lambda ()
       (if (exist? "hard") "" "maybe-")))
 
-   ;; dep-kind returns "normal" if the dependency is on an "install" target,
-   ;; or if either module is not bootstrapped.  It returns "bootstrap" for
-   ;; configure or build dependencies between bootstrapped modules; it returns
-   ;; "prebootstrap" for configure or build dependencies of bootstrapped
-   ;; modules on a build module (e.g. all-gcc on all-build-bison).  All this
-   ;; is only necessary for host modules.
+   ;; dep-kind returns returns "prebootstrap" for configure or build
+   ;; dependencies of bootstrapped modules on a build module
+   ;; (e.g. all-gcc on all-build-bison); "normal" if the dependency is
+   ;; on an "install" target, or if the dependence module is not
+   ;; bootstrapped; otherwise, it returns "bootstrap" or
+   ;; "postbootstrap" depending on whether the dependent module is
+   ;; bootstrapped.  All this is only necessary for host and target
+   ;; modules.  It might seem like, in order to avoid build races, we
+   ;; might need more elaborate detection between prebootstrap and
+   ;; postbootstrap modules, but there are no host prebootstrap
+   ;; modules.  If there were any non-bootstrap host modules that
+   ;; bootstrap modules depended on, we'd get unsatisfied per-stage
+   ;; dependencies on them, which would be immediately noticed.
    (define dep-kind (lambda ()
-      (if (and (hash-ref boot-modules (dep-module "module"))
-	       (=* (dep-module "on") "build-"))
-	  "prebootstrap"
+      (cond
+       ((and (hash-ref boot-modules (dep-module "module"))
+	     (=* (dep-module "on") "build-"))
+	"prebootstrap")
 
-	  (if (or (= (dep-subtarget "on") "install-")
-		  (not (hash-ref boot-modules (dep-module "module")))
-		  (not (hash-ref boot-modules (dep-module "on"))))
-              "normal"
-	      "bootstrap"))))
+       ((or (= (dep-subtarget "on") "install-")
+	    (not (hash-ref boot-modules (dep-module "on"))))
+	"normal")
+
+       ((hash-ref boot-modules (dep-module "module"))
+	"bootstrap")
+
+       (1 "postbootstrap"))))
+
+   (define make-postboot-dep (lambda ()
+     (let ((target (dep-module "module")) (dep "stage_last"))
+       (unless (= (hash-ref postboot-targets target) dep)
+	 (hash-create-handle! postboot-targets target dep)
+	 ;; All non-bootstrap modules' configure target already
+	 ;; depend on dep.
+	 (unless (=* target "target-")
+           (string-append "configure-" target ": " dep "\n"))))))
 
    ;; We now build the hash table that is used by dep-kind.
    (define boot-modules (make-hash-table 113))
+   (define postboot-targets (make-hash-table 113))
 +]
 
 [+ FOR host_modules +][+
@@ -1863,18 +1884,23 @@ configure-target-[+module+]: maybe-all-gcc[+
 # to check for bootstrap/prebootstrap dependencies.  To resolve
 # prebootstrap dependencies, prebootstrap modules are gathered in
 # a hash table.
-[+ FOR dependencies +][+ (make-dep "" "") +]
-[+ CASE (dep-kind) +]
-[+ == "prebootstrap"
-     +][+ FOR bootstrap_stage +]
-[+ (make-dep (dep-stage) "") +][+
-       ENDFOR bootstrap_stage +]
-[+ == "bootstrap"
-     +][+ FOR bootstrap_stage +]
-[+ (make-dep (dep-stage) (dep-stage)) +][+
-       ENDFOR bootstrap_stage +]
-[+ ESAC +][+
-ENDFOR dependencies +]
+[+ FOR dependencies +][+ CASE (dep-kind) +]
+[+ == "prebootstrap" +][+ (make-dep "" "") +][+ FOR bootstrap_stage +]
+[+ (make-dep (dep-stage) "") +][+ ENDFOR bootstrap_stage +]
+[+ == "bootstrap" +][+ (make-dep "" "") +][+ FOR bootstrap_stage +]
+[+ (make-dep (dep-stage) (dep-stage)) +][+ ENDFOR bootstrap_stage +]
+[+ == "normal" +][+ (make-dep "" "") +]
+[+ ESAC +][+ ENDFOR dependencies +]
+
+@if gcc-bootstrap
+[+ FOR dependencies +][+ CASE (dep-kind) +]
+[+ == "postbootstrap" +][+ (make-postboot-dep) +][+ ESAC +][+
+ENDFOR dependencies +]@endif gcc-bootstrap
+
+@unless gcc-bootstrap
+[+ FOR dependencies +][+ CASE (dep-kind) +]
+[+ == "postbootstrap" +][+ (make-dep "" "") +]
+[+ ESAC +][+ ENDFOR dependencies +]@endunless gcc-bootstrap
 
 # Dependencies for target modules on other target modules are
 # described by lang_env_dependencies; the defaults apply to anything
diff --git a/configure b/configure
index fe8e0f63410c..dd9fbe4d3229 100755
--- a/configure
+++ b/configure
@@ -7130,7 +7130,9 @@ INSTALL_GDB_TK=`echo ${GDB_TK} | sed s/-all-/-install-/g`
 # extrasub-{build,host,target} not because there is any reason to split
 # the substitutions up that way, but only to remain below the limit of
 # 99 commands in a script, for HP-UX sed.
-# Do not nest @if/@endif pairs, because configure will not warn you at all.
+
+# Do not nest @if/@endif or @unless/@endunless pairs, because
+# configure will not warn you at all.
 
 case "$enable_bootstrap:$ENABLE_GOLD: $configdirs :,$stage1_languages," in
   yes:yes:*\ gold\ *:*,c++,*) ;;
@@ -7149,8 +7151,10 @@ for module in ${build_configdirs} ; do
   extrasub_build="$extrasub_build
 /^@if build-$module\$/d
 /^@endif build-$module\$/d
+/^@unless build-$module\$/,/^@endunless build-$module\$/d
 /^@if build-$module-$bootstrap_suffix\$/d
-/^@endif build-$module-$bootstrap_suffix\$/d"
+/^@endif build-$module-$bootstrap_suffix\$/d
+/^@unless build-$module-$bootstrap_suffix\$/,/^@endunless build-$module-$bootstrap_suffix\$/d"
 done
 extrasub_host=
 for module in ${configdirs} ; do
@@ -7169,8 +7173,10 @@ for module in ${configdirs} ; do
   extrasub_host="$extrasub_host
 /^@if $module\$/d
 /^@endif $module\$/d
+/^@unless $module\$/,/^@endunless $module\$/d
 /^@if $module-$host_bootstrap_suffix\$/d
-/^@endif $module-$host_bootstrap_suffix\$/d"
+/^@endif $module-$host_bootstrap_suffix\$/d
+/^@unless $module-$host_bootstrap_suffix\$/,/^@endunless $module-$host_bootstrap_suffix\$/d"
 done
 extrasub_target=
 for module in ${target_configdirs} ; do
@@ -7189,13 +7195,17 @@ for module in ${target_configdirs} ; do
   extrasub_target="$extrasub_target
 /^@if target-$module\$/d
 /^@endif target-$module\$/d
+/^@unless target-$module\$/,/^@endunless target-$module\$/d
 /^@if target-$module-$target_bootstrap_suffix\$/d
-/^@endif target-$module-$target_bootstrap_suffix\$/d"
+/^@endif target-$module-$target_bootstrap_suffix\$/d
+/^@unless target-$module-$target_bootstrap_suffix\$/,/^@endunless target-$module-$target_bootstrap_suffix\$/d"
 done
 
 # Do the final fixup along with target modules.
 extrasub_target="$extrasub_target
-/^@if /,/^@endif /d"
+/^@if /,/^@endif /d
+/^@unless /d
+/^@endunless /d"
 
 # Create the serialization dependencies.  This uses a temporary file.
 
diff --git a/configure.ac b/configure.ac
index 28155a0e5938..a0b0917dd556 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2719,7 +2719,9 @@ INSTALL_GDB_TK=`echo ${GDB_TK} | sed s/-all-/-install-/g`
 # extrasub-{build,host,target} not because there is any reason to split
 # the substitutions up that way, but only to remain below the limit of
 # 99 commands in a script, for HP-UX sed.
-# Do not nest @if/@endif pairs, because configure will not warn you at all.
+
+# Do not nest @if/@endif or @unless/@endunless pairs, because
+# configure will not warn you at all.
 
 case "$enable_bootstrap:$ENABLE_GOLD: $configdirs :,$stage1_languages," in
   yes:yes:*\ gold\ *:*,c++,*) ;;
@@ -2738,8 +2740,10 @@ for module in ${build_configdirs} ; do
   extrasub_build="$extrasub_build
 /^@if build-$module\$/d
 /^@endif build-$module\$/d
+/^@unless build-$module\$/,/^@endunless build-$module\$/d
 /^@if build-$module-$bootstrap_suffix\$/d
-/^@endif build-$module-$bootstrap_suffix\$/d"
+/^@endif build-$module-$bootstrap_suffix\$/d
+/^@unless build-$module-$bootstrap_suffix\$/,/^@endunless build-$module-$bootstrap_suffix\$/d"
 done
 extrasub_host=
 for module in ${configdirs} ; do
@@ -2758,8 +2762,10 @@ for module in ${configdirs} ; do
   extrasub_host="$extrasub_host
 /^@if $module\$/d
 /^@endif $module\$/d
+/^@unless $module\$/,/^@endunless $module\$/d
 /^@if $module-$host_bootstrap_suffix\$/d
-/^@endif $module-$host_bootstrap_suffix\$/d"
+/^@endif $module-$host_bootstrap_suffix\$/d
+/^@unless $module-$host_bootstrap_suffix\$/,/^@endunless $module-$host_bootstrap_suffix\$/d"
 done
 extrasub_target=
 for module in ${target_configdirs} ; do
@@ -2778,13 +2784,17 @@ for module in ${target_configdirs} ; do
   extrasub_target="$extrasub_target
 /^@if target-$module\$/d
 /^@endif target-$module\$/d
+/^@unless target-$module\$/,/^@endunless target-$module\$/d
 /^@if target-$module-$target_bootstrap_suffix\$/d
-/^@endif target-$module-$target_bootstrap_suffix\$/d"
+/^@endif target-$module-$target_bootstrap_suffix\$/d
+/^@unless target-$module-$target_bootstrap_suffix\$/,/^@endunless target-$module-$target_bootstrap_suffix\$/d"
 done
 
 # Do the final fixup along with target modules.
 extrasub_target="$extrasub_target
-/^@if /,/^@endif /d"
+/^@if /,/^@endif /d
+/^@unless /d
+/^@endunless /d"
 
 # Create the serialization dependencies.  This uses a temporary file.
 



-- 
Alexandre Oliva, freedom fighter   https://FSFLA.org/blogs/lxo
Be the change, be Free!         FSF Latin America board member
GNU Toolchain Engineer                Free Software Evangelist

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: fix libcc1 dependencies in toplevel Makefile
  2018-06-26  5:39           ` Alexandre Oliva
@ 2018-06-27 19:53             ` Olivier Hainque
  0 siblings, 0 replies; 16+ messages in thread
From: Olivier Hainque @ 2018-06-27 19:53 UTC (permalink / raw)
  To: Alexandre Oliva
  Cc: Olivier Hainque, GCC Patches, Nicolas Roche, binutils,
	gdb-patches, newlib



> On 26 Jun 2018, at 07:38, Alexandre Oliva <oliva@gnu.org> wrote:
> 
> Here's the patch I'll install if nobody objects in the next few days.
> Tested on x86_64-linux-gnu with a gcc bootstrap tree, a gcc
> non-bootstrap tree, and a binutils+gdb tree.

Thanks a lot for this Alex!

^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2018-06-27 19:53 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-06-13 12:58 fix libcc1 dependencies in toplevel Makefile Olivier Hainque
2017-06-14 11:39 ` Nathan Sidwell
2017-06-14 21:11   ` Olivier Hainque
2017-06-15 12:03     ` Nathan Sidwell
2017-06-15 12:29       ` Olivier Hainque
2017-06-22 12:13 ` Alexandre Oliva
2017-06-26  7:41   ` Olivier Hainque
2017-06-27 16:32     ` Olivier Hainque
2017-06-27 19:53     ` Alexandre Oliva
2017-07-03 21:05       ` Olivier Hainque
2018-06-03 19:13       ` Alexandre Oliva
2018-06-12  2:50         ` Alexandre Oliva
2018-06-12  8:57           ` Olivier Hainque
2018-06-12 15:31           ` Jeff Law
2018-06-26  5:39           ` Alexandre Oliva
2018-06-27 19:53             ` Olivier Hainque

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).