config/i386/xmmintrin.h: Only #include <mm_malloc.h> if __STDC_HOSTED__

Message ID alpine.LSU.2.21.1712091825580.2983@anthias.pfeifer.com
State New
Headers show
Series
  • config/i386/xmmintrin.h: Only #include <mm_malloc.h> if __STDC_HOSTED__
Related show

Commit Message

Gerald Pfeifer Dec. 9, 2017, 5:41 p.m.
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?

Gerald


2017-12-09  Gerald Pfeifer  <gerald@pfeifer.com>

	* config/i386/xmmintrin.h: Only #include <mm_malloc.h> if
	__STDC_HOSTED__.

Comments

Jakub Jelinek Dec. 9, 2017, 6:45 p.m. | #1
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

Patch

Index: config/i386/xmmintrin.h
===================================================================
--- config/i386/xmmintrin.h	(revision 255523)
+++ config/i386/xmmintrin.h	(working copy)
@@ -31,7 +31,9 @@ 
 #include <mmintrin.h>
 
 /* Get _mm_malloc () and _mm_free ().  */
+#if __STDC_HOSTED__
 #include <mm_malloc.h>
+#endif
 
 /* Constants for use with _mm_prefetch.  */
 enum _mm_hint