fa3bfd
This patch adds a definition of max_align_t to the internal
fa3bfd
<sys/cdefs.h> header, for use in support/ functionality and elsewhere.
fa3bfd
fa3bfd
The definition must support being compiled in C11 or C++11 mode and
fa3bfd
must check both __STDC_VERSION__ and __cplusplus versions.
fa3bfd
fa3bfd
Upstream does not need this because all files are compiled in C11
fa3bfd
mode, making available the GCC definition in <stddef.h>
fa3bfd
fa3bfd
Also change malloc/tst-malloc-thread-fail.c to use the new definition.
fa3bfd
fa3bfd
Index: glibc-2.17-c758a686/include/sys/cdefs.h
fa3bfd
===================================================================
fa3bfd
--- glibc-2.17-c758a686.orig/include/sys/cdefs.h
fa3bfd
+++ glibc-2.17-c758a686/include/sys/cdefs.h
fa3bfd
@@ -15,6 +15,18 @@ rtld_hidden_proto (__chk_fail)
fa3bfd
 
fa3bfd
 
fa3bfd
 # define __attribute_alloc_size(...) __attribute__ ((alloc_size (__VA_ARGS__)))
fa3bfd
+
fa3bfd
+/* This mirrors the C11/C++11 max_align_t type provided by GCC, but it
fa3bfd
+   is also available in C99 mode.  The aligned attributes are required
fa3bfd
+   because some ABIs have reduced alignment requirements for struct and
fa3bfd
+   union members.  */
fa3bfd
+#if __STDC_VERSION__ < 201112L && __cplusplus < 201103L
fa3bfd
+typedef struct {
fa3bfd
+  long long ll __attribute__ ((__aligned__ (__alignof__ (long long))));
fa3bfd
+  long double ld __attribute__ ((__aligned__ (__alignof__ (long double))));
fa3bfd
+} max_align_t;
fa3bfd
+#endif /* __STDC_VERSION__ < 201112 && __cplusplus < 201103L */
fa3bfd
+
fa3bfd
 #endif
fa3bfd
 
fa3bfd
 #endif
fa3bfd
Index: glibc-2.17-c758a686/malloc/tst-malloc-thread-fail.c
fa3bfd
===================================================================
fa3bfd
--- glibc-2.17-c758a686.orig/malloc/tst-malloc-thread-fail.c
fa3bfd
+++ glibc-2.17-c758a686/malloc/tst-malloc-thread-fail.c
fa3bfd
@@ -30,16 +30,6 @@
fa3bfd
 #include <sys/resource.h>
fa3bfd
 #include <sys/wait.h>
fa3bfd
 #include <unistd.h>
fa3bfd
-#include <stddef.h>
fa3bfd
-
fa3bfd
-/* This mirrors the C11 max_align_t type provided by GCC, but it is
fa3bfd
-   also available in C99 mode.  The aligned attributes are required
fa3bfd
-   because some ABIs have reduced alignment requirements for struct
fa3bfd
-   and union members.  */
fa3bfd
-typedef struct {
fa3bfd
-  long long ll __attribute__ ((__aligned__ (__alignof__ (long long))));
fa3bfd
-  long double ld __attribute__ ((__aligned__ (__alignof__ (long double))));
fa3bfd
-} libc_max_align_t;
fa3bfd
 
fa3bfd
 /* Wrapper for calloc with an optimization barrier.  */
fa3bfd
 static void *
fa3bfd
@@ -93,7 +83,7 @@ allocate_1 (void)
fa3bfd
     {
fa3bfd
     case with_malloc:
fa3bfd
       return (struct allocate_result)
fa3bfd
-        {malloc (allocation_size), __alignof__ (libc_max_align_t)};
fa3bfd
+        {malloc (allocation_size), _Alignof (max_align_t)};
fa3bfd
     case with_realloc:
fa3bfd
       {
fa3bfd
         void *p = realloc (NULL, 16);
fa3bfd
@@ -106,7 +96,7 @@ allocate_1 (void)
fa3bfd
             if (q == NULL)
fa3bfd
               free (p);
fa3bfd
           }
fa3bfd
-        return (struct allocate_result) {q, __alignof__ (libc_max_align_t)};
fa3bfd
+        return (struct allocate_result) {q, _Alignof (max_align_t)};
fa3bfd
       }
fa3bfd
     case with_aligned_alloc:
fa3bfd
       {
fa3bfd
@@ -155,7 +145,7 @@ allocate_1 (void)
fa3bfd
                 printf ("error: non-zero byte at offset %zu\n", i);
fa3bfd
                 abort ();
fa3bfd
               }
fa3bfd
-        return (struct allocate_result) {p, __alignof__ (libc_max_align_t)};
fa3bfd
+        return (struct allocate_result) {p, _Alignof (max_align_t)};
fa3bfd
       }
fa3bfd
     }
fa3bfd
   abort ();