gcc: fix conflicting prototype of posix_memalign for C++

Ref: http://www.openwall.com/lists/musl/2013/11/10/1.

This patch is required for building cups-filters, libvisio, libcdr and
probably many more with musl.
This commit is contained in:
Alessio Sergi 2015-06-07 21:21:21 +02:00
parent 86783f36e8
commit 089625f71f
2 changed files with 31 additions and 1 deletions

View file

@ -0,0 +1,30 @@
diff --git gcc/config/i386/pmm_malloc.h gcc/config/i386/pmm_malloc.h
index 901001b..321fcd3 100644
--- gcc/config/i386/pmm_malloc.h
+++ gcc/config/i386/pmm_malloc.h
@@ -27,12 +27,13 @@
#include <stdlib.h>
/* We can't depend on <stdlib.h> since the prototype of posix_memalign
- may not be visible. */
+ may not be visible and we can't pollute the namespace either. */
#ifndef __cplusplus
-extern int posix_memalign (void **, size_t, size_t);
+extern int __gcc_posix_memalign (void **, size_t, size_t)
#else
-extern "C" int posix_memalign (void **, size_t, size_t) throw ();
+extern "C" int __gcc_posix_memalign (void **, size_t, size_t) throw ()
#endif
+__asm__("posix_memalign");
static __inline void *
_mm_malloc (size_t size, size_t alignment)
@@ -42,7 +43,7 @@ _mm_malloc (size_t size, size_t alignment)
return malloc (size);
if (alignment == 2 || (sizeof (void *) == 8 && alignment == 4))
alignment = sizeof (void *);
- if (posix_memalign (&ptr, alignment, size) == 0)
+ if (__gcc_posix_memalign (&ptr, alignment, size) == 0)
return ptr;
else
return NULL;

View file

@ -2,7 +2,7 @@
pkgname=gcc
_majorver=4.9
version=${_majorver}.2
revision=7
revision=8
short_desc="The GNU C Compiler"
maintainer="Juan RP <xtraeme@voidlinux.eu>"
homepage="http://gcc.gnu.org"