On Sat, Dec 09, 2017 at 06:41:14PM +0100, Gerald Pfeifer wrote: > Some users on FreeBSD noticed a problem when trying to use GCC to > build things in a standalone environment that manifests itself as > > /usr/local/lib/gcc/x86_64-unknown-freebsd11.0/6.3.0/include/xmmintrin.h:34 > from > /usr/local/lib/gcc/x86_64-unknown-freebsd11.0/6.3.0/include/immintrin.h:29 > from > /workspace/src/sys/crypto/aesni/intel_sha256.c:62 > In function '_mm_malloc': > /usr/local/lib/gcc/x86_64-unknown-freebsd11.0/6.3.0/include/mm_malloc.h:39: > error: 'errno' undeclared (first use in this function) > > It turns out the clang version of xmmintrin.h does not include mm_malloc.h > if !__STDC_HOSTED__ whereas ours unconditionally does so. > > Andreas and Alexander have tested the simple patch below that essentially > mirrors what clang does. > > Okay?
Wouldn't it be better to just ifdef out parts of gmm_malloc.h (pmm_malloc.h should be ok)? #include <errno.h> and /* Error if align is not a power of two. */ if (__align & (__align - 1)) { errno = EINVAL; return ((void *) 0); } I don't see why the rest wouldn't work in a freestanding environment. Or perhaps just the errno = EINVAL; and #include <errno.h> lines. Jakub