Author: pfg
Date: Fri May 15 20:43:37 2015
New Revision: 282988
URL: https://svnweb.freebsd.org/changeset/base/282988

Log:
  Make use of GCC alloc_align attribute
  
  This lets the compiler know about the alignment of pointers returned
  by aligned_alloc(3), posix_memalign(3). and contigmalloc(9)
  
  Currently this is only supported in recent gcc but we are ready to
  use it if clang implements it.
  
  Relnotes:     yes

Modified:
  head/include/stdlib.h
  head/sys/sys/malloc.h

Modified: head/include/stdlib.h
==============================================================================
--- head/include/stdlib.h       Fri May 15 19:51:05 2015        (r282987)
+++ head/include/stdlib.h       Fri May 15 20:43:37 2015        (r282988)
@@ -156,7 +156,8 @@ _Noreturn void       _Exit(int);
  * If we're in a mode greater than C99, expose C11 functions.
  */
 #if __ISO_C_VISIBLE >= 2011 || __cplusplus >= 201103L
-void * aligned_alloc(size_t, size_t) __malloc_like __alloc_size(2);
+void * aligned_alloc(size_t, size_t) __malloc_like __alloc_align(1)
+           __alloc_size(2);
 int    at_quick_exit(void (*)(void));
 _Noreturn void
        quick_exit(int);
@@ -171,7 +172,7 @@ char        *realpath(const char * __restrict, 
 int     rand_r(unsigned *);                    /* (TSF) */
 #endif
 #if __POSIX_VISIBLE >= 200112
-int     posix_memalign(void **, size_t, size_t) __nonnull(1)
+int     posix_memalign(void **, size_t, size_t) __nonnull(1) __alloc_align(2)
            __alloc_size(3);                    /* (ADV) */
 int     setenv(const char *, const char *, int);
 int     unsetenv(const char *);

Modified: head/sys/sys/malloc.h
==============================================================================
--- head/sys/sys/malloc.h       Fri May 15 19:51:05 2015        (r282987)
+++ head/sys/sys/malloc.h       Fri May 15 20:43:37 2015        (r282988)
@@ -174,7 +174,7 @@ void        contigfree(void *addr, unsigned lon
 void   *contigmalloc(unsigned long size, struct malloc_type *type, int flags,
            vm_paddr_t low, vm_paddr_t high, unsigned long alignment,
            vm_paddr_t boundary) __malloc_like __result_use_check
-           __alloc_size(1);
+           __alloc_size(1) __alloc_align(6);
 void   free(void *addr, struct malloc_type *type);
 void   *malloc(unsigned long size, struct malloc_type *type, int flags)
            __malloc_like __result_use_check __alloc_size(1);
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to