From owner-freebsd-stable@FreeBSD.ORG Fri May 23 06:52:28 2014 Return-Path: Delivered-To: stable@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 919F79B7; Fri, 23 May 2014 06:52:28 +0000 (UTC) Received: from onelab2.iet.unipi.it (onelab2.iet.unipi.it [131.114.59.238]) by mx1.freebsd.org (Postfix) with ESMTP id 56AEC2952; Fri, 23 May 2014 06:52:27 +0000 (UTC) Received: by onelab2.iet.unipi.it (Postfix, from userid 275) id 84CE67300A; Fri, 23 May 2014 08:56:53 +0200 (CEST) Date: Fri, 23 May 2014 08:56:53 +0200 From: Luigi Rizzo To: stable@freebsd.org Subject: build order race after SUBDIR_PARALLEL (264303) Message-ID: <20140523065653.GA86035@onelab2.iet.unipi.it> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.20 (2009-06-14) Cc: dim@freebsd.org X-BeenThere: freebsd-stable@freebsd.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Production branch of FreeBSD source code List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 23 May 2014 06:52:28 -0000 Hi, I have recently hit a problem when building stable/10 with "make -j 8" which i tracked down to svn 264303, the MFC of the SUBDIR_PARALLEL build feature. With a large number of parallel tasks (and GCC; it is a race condition so timing matters), the build fails during the toolchain target with this: --- sig_party.o --- cc -O2 -pipe -I/usr/home/luigi/FreeBSD/R10/lib/libngatm/../../sys/contrib/ngatm -I/usr/home/luigi/FreeBSD/R10/../usr/obj-pico-amd64/usr/home/luigi/FreeBSD/R10/lib/libngatm -I/usr/home/luigi/FreeBSD/R10/lib/libngatm/../../contrib/ngatm/libngatm -std=gnu99 -fstack-protector -Wsystem-headers -Werror -Wall -Wno-format-y2k -W -Wno-unused-parameter - Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Wreturn-type -Wcast-qual -Wwrite-strings -Wswitch -Wshadow -Wunused-parameter -Wcast-align -Wchar-subscripts -Winline -Wnested-externs -Wredundant-decls -Wold-style-definition -Wno-pointer-sign -c /usr/home/luigi/FreeBSD/R10/lib/libngatm/../../sys/contrib/ngatm/netnatm/sig/sig_party.c -o sig_ party.o --- all_subdir_libproc --- /usr/home/luigi/FreeBSD/R10/../usr/obj-pico-amd64/usr/home/luigi/FreeBSD/R10/tmp/usr/bin/ld: cannot find -lsupc++ *** [libproc.so.2] Error code 1 make[5]: stopped in /usr/home/luigi/FreeBSD/R10/lib/libproc 1 error ... Turns out that before SUBDIR_PARALLEL, libsupc++ was built before libproc thus satisfying the dependency; but with -j XXX we cannot guarantee the ordering and there is no explicit constraint or .ORDER in the makefiles to build things in the correct order. This is a race condition so you may or may not see the problem depending on what you are building and where. I am seeing the problem consistently on stable/10 after 264303 when building toolchain with GCC (not clang) on an 8-core machine and make -j 8 Building the above with -j 4 seem to work fine, as it works building HEAD with -j 8 cheers luigi