From owner-freebsd-ports@freebsd.org Mon Jan 15 17:00:17 2018 Return-Path: Delivered-To: freebsd-ports@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 297DFEBAC1F; Mon, 15 Jan 2018 17:00:17 +0000 (UTC) (envelope-from jbeich@freebsd.org) Received: from freefall.freebsd.org (freefall.freebsd.org [96.47.72.132]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "freefall.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 0A99F813D1; Mon, 15 Jan 2018 17:00:17 +0000 (UTC) (envelope-from jbeich@freebsd.org) Received: by freefall.freebsd.org (Postfix, from userid 1354) id 587838AEA; Mon, 15 Jan 2018 17:00:16 +0000 (UTC) From: Jan Beich To: Tijl Coosemans Cc: Luca Pizzamiglio , FreeBSD Current , freebsd-ports@freebsd.org Subject: Re: atomic in i386 Current after CLANG 6 upgrade References: <20180115125756.37b803ba@kalimero.tijl.coosemans.org> Date: Mon, 15 Jan 2018 18:00:11 +0100 In-Reply-To: <20180115125756.37b803ba@kalimero.tijl.coosemans.org> (Tijl Coosemans's message of "Mon, 15 Jan 2018 12:57:56 +0100") Message-ID: MIME-Version: 1.0 Content-Type: text/plain X-BeenThere: freebsd-ports@freebsd.org X-Mailman-Version: 2.1.25 Precedence: list List-Id: Porting software to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 15 Jan 2018 17:00:17 -0000 Tijl Coosemans writes: > On Mon, 15 Jan 2018 11:43:44 +0100 Luca Pizzamiglio wrote: > >> I've already received a couple of messages from pkg-fallout about build >> failure on head-i386-default [1] [2] both pointing to the same errors, >> about missing intrinsic symbols related to __atomic_* >> >> The clang documentation about C11 atomic builtins [3] stats that __atomic_* >> are GCC extension and Clang provides them. >> >> It seems to me that this specific GCC-compatible builtin are enabled on >> amd64, but not on i386. >> Is there a way to enable GCC compatible __atomic_ builtin also on i386? >> Or should I provide patches to adopt _c11_atomic_* instead of __atomic_* >> for every ports that need it ? >> >> [1] >> http://beefy11.nyi.freebsd.org/data/head-i386-default/p458948_s327953/logs/librdkafka-0.11.3.log >> [2] >> http://beefy11.nyi.freebsd.org/data/head-i386-default/p458948_s327953/logs/stress-ng-0.09.09.log >> [3] https://clang.llvm.org/docs/LanguageExtensions.html#langext-c11-atomic > > 8 byte atomics requires at least i586. So either find a way to disable > the use of these atomics in these ports or add something like this to > the port Makefile. > > .if ${ARCH} == i386 && ! ${MACHINE_CPU:Mi586} > CFLAGS+= -march=i586 > .endif It wouldn't help (see below). Clang 6 accidentally made __atomic* work enough to satisfy configure check but not for the port to build. I guess, it also confuses configure in net/librdkafka and net-mgmt/netdata. $ cat a.c #include typedef struct { uint64_t val64; } atomic_t; int main() { uint64_t foo; atomic_t bar; #ifdef ATOMIC_STRUCT __atomic_fetch_add(&bar.val64, 1, __ATOMIC_RELAXED); #else __atomic_fetch_add(&foo, 1, __ATOMIC_RELAXED); #endif return 0; } $ cc -m32 -march=i586 a.c $ clang50 -m32 -march=i586 a.c /tmp/a-560ad1.o: In function `main': a.c:(.text+0x46): undefined reference to `__atomic_fetch_add_8' clang-5.0: error: linker command failed with exit code 1 (use -v to see invocation) $ cc -m32 -DATOMIC_STRUCT -march=i586 a.c /usr/bin/ld: error: undefined symbol: __atomic_fetch_add_8 >>> referenced by a.c >>> /tmp/a-ad8c36.o:(main) cc: error: linker command failed with exit code 1 (use -v to see invocation) $ clang50 -m32 -DATOMIC_STRUCT -march=i586 a.c /tmp/a-0fbfd0.o: In function `main': a.c:(.text+0x46): undefined reference to `__atomic_fetch_add_8' clang-5.0: error: linker command failed with exit code 1 (use -v to see invocation)