Heads up: OFED build by default
Mark Millard
marklmi at yahoo.com
Tue Aug 7 16:51:37 UTC 2018
OFED in head lead to the following in order for ci.freebsd.org's
FreeBSD-head-amd64-gcc builds to not fail/stop in
all_subdir_lib/ofed :
Author: jhb
Date: Mon Aug 6 23:51:08 2018
New Revision: 337399
URL:
https://svnweb.freebsd.org/changeset/base/337399
Log:
Make the system C11 atomics headers fully compatible with external GCC.
The <sys/cdefs.h> and <stdatomic.h> headers already included support for
C11 atomics via intrinsincs in modern versions of GCC, but these versions
tried to "hide" atomic variables inside a wrapper structure. This wrapper
is not compatible with GCC's internal <stdatomic.h> header, so that if
GCC's <stdatomic.h> was used together with <sys/cdefs.h>, use of C11
atomics would fail to compile. Fix this by not hiding atomic variables
in a structure for modern versions of GCC. The headers already avoid
using a wrapper structure on clang.
Note that this wrapper was only used if C11 was not enabled (e.g.
via -std=c99), so this also fixes compile failures if a modern version
of GCC was used with -std=c11 but with FreeBSD's <stdatomic.h> instead
of GCC's <stdatomic.h> and this change fixes that case as well.
Reported by: Mark Millard
Reviewed by: kib
Differential Revision:
https://reviews.freebsd.org/D16585
Modified:
head/sys/sys/cdefs.h
head/sys/sys/stdatomic.h
Without this FreeBSD-head-amd64-gcc was getting:
--- all_subdir_lib/ofed ---
In file included from /workspace/src/contrib/ofed/librdmacm/cma.h:43:0,
from /workspace/src/contrib/ofed/librdmacm/acm.c:42:
/workspace/src/contrib/ofed/librdmacm/cma.h: In function 'fastlock_init':
/workspace/src/contrib/ofed/librdmacm/cma.h:60:2: error: invalid initializer
atomic_store(&lock->cnt, 0);
^
In file included from /workspace/src/contrib/ofed/librdmacm/acm.c:42:0:
/workspace/src/contrib/ofed/librdmacm/cma.h: In function 'fastlock_acquire':
/workspace/src/contrib/ofed/librdmacm/cma.h:68:2: error: operand type 'struct <anonymous> *' is incompatible with argument 1 of '__atomic_fetch_add'
if (atomic_fetch_add(&lock->cnt, 1) > 0)
^~
/workspace/src/contrib/ofed/librdmacm/cma.h: In function 'fastlock_release':
/workspace/src/contrib/ofed/librdmacm/cma.h:73:2: error: operand type 'struct <anonymous> *' is incompatible with argument 1 of '__atomic_fetch_sub'
if (atomic_fetch_sub(&lock->cnt, 1) > 1)
^~
. . .
--- all_subdir_lib/ofed ---
*** [acm.o] Error code 1
Side notes:
A modern enough /usr/ports avoids the devel/*-gcc
the separate float.h problem: -r476273 fixed
/devel/powerpc64-gcc (the master port for
devel/*-gcc ports) to avoid this.
With both fixes in place I was able to buildworld
buildkernel via amd64's xtoolchain ( so via its
use of devel/amd64-gcc ). (The build servers likely
do not have -r476273 yet.)
===
Mark Millard
marklmi at yahoo.com
( dsl-only.net went
away in early 2018-Mar)
More information about the freebsd-stable
mailing list