mirror of git://sourceware.org/git/glibc.git
GCC 4.9.0 added the alloc_align attribute to say that a function argument specifies the alignment of the returned pointer. Clang supports the attribute too. Using the attribute can allow a compiler to generate better code if it knows the returned pointer has a minimum alignment. See https://gcc.gnu.org/PR60092 for more details. GCC implicitly knows the semantics of aligned_alloc and posix_memalign, but not the obsolete memalign. As a result, GCC generates worse code when memalign is used, compared to aligned_alloc. Clang knows about aligned_alloc and memalign, but not posix_memalign. This change adds a new __attribute_alloc_align__ macro to <sys/cdefs.h> and then uses it on memalign (where it helps GCC) and aligned_alloc (where GCC and Clang already know the semantics, but it doesn't hurt) and xposix_memalign. It can't be used on posix_memalign because that doesn't return a pointer (the allocated pointer is returned via a void** parameter instead). Unlike the alloc_size attribute, alloc_align only allows a single argument. That means the new __attribute_alloc_align__ macro doesn't really need to be used with double parentheses to protect a comma between its arguments. For consistency with __attribute_alloc_size__ this patch defines it the same way, so that double parentheses are required. Signed-off-by: Jonathan Wakely <jwakely@redhat.com> Reviewed-by: Carlos O'Donell <carlos@redhat.com> Tested-by: Carlos O'Donell <carlos@redhat.com> |
||
|---|---|---|
| .. | ||
| Depend | ||
| Makefile | ||
| Versions | ||
| alloc_buffer_alloc_array.c | ||
| alloc_buffer_allocate.c | ||
| alloc_buffer_copy_bytes.c | ||
| alloc_buffer_copy_string.c | ||
| alloc_buffer_create_failure.c | ||
| arena.c | ||
| dynarray-skeleton.c | ||
| dynarray.h | ||
| dynarray_at_failure.c | ||
| dynarray_emplace_enlarge.c | ||
| dynarray_finalize.c | ||
| dynarray_resize.c | ||
| dynarray_resize_clear.c | ||
| hooks.c | ||
| malloc-check.c | ||
| malloc-debug.c | ||
| malloc-internal.h | ||
| malloc.c | ||
| malloc.h | ||
| mallocbug.c | ||
| mcheck-impl.c | ||
| mcheck-init.c | ||
| mcheck.c | ||
| mcheck.h | ||
| memusage.c | ||
| memusage.sh | ||
| memusagestat.c | ||
| morecore.c | ||
| mtrace-impl.c | ||
| mtrace.c | ||
| mtrace.pl | ||
| obstack.c | ||
| obstack.h | ||
| reallocarray.c | ||
| scratch_buffer_dupfree.c | ||
| scratch_buffer_grow.c | ||
| scratch_buffer_grow_preserve.c | ||
| scratch_buffer_set_array_size.c | ||
| set-freeres.c | ||
| thread-freeres.c | ||
| tst-alloc_buffer.c | ||
| tst-calloc.c | ||
| tst-compathooks-off.c | ||
| tst-compathooks-on.c | ||
| tst-dynarray-at-fail.c | ||
| tst-dynarray-fail.c | ||
| tst-dynarray-shared.h | ||
| tst-dynarray.c | ||
| tst-free-errno.c | ||
| tst-interpose-aux-nothread.c | ||
| tst-interpose-aux-thread.c | ||
| tst-interpose-aux.c | ||
| tst-interpose-aux.h | ||
| tst-interpose-nothread.c | ||
| tst-interpose-skeleton.c | ||
| tst-interpose-static-nothread.c | ||
| tst-interpose-static-thread.c | ||
| tst-interpose-thread.c | ||
| tst-mallinfo2.c | ||
| tst-malloc-backtrace.c | ||
| tst-malloc-check.c | ||
| tst-malloc-fork-deadlock.c | ||
| tst-malloc-stats-cancellation.c | ||
| tst-malloc-tcache-leak.c | ||
| tst-malloc-thread-exit.c | ||
| tst-malloc-thread-fail.c | ||
| tst-malloc-too-large.c | ||
| tst-malloc-usable-tunables.c | ||
| tst-malloc-usable.c | ||
| tst-malloc.c | ||
| tst-malloc_info.c | ||
| tst-mallocalign1.c | ||
| tst-mallocfork.c | ||
| tst-mallocfork2.c | ||
| tst-mallocfork3.c | ||
| tst-mallocstate.c | ||
| tst-mallopt.c | ||
| tst-memalign.c | ||
| tst-mtrace.c | ||
| tst-mtrace.sh | ||
| tst-mxfast.c | ||
| tst-obstack.c | ||
| tst-posix_memalign.c | ||
| tst-pvalloc-fortify.c | ||
| tst-pvalloc.c | ||
| tst-realloc.c | ||
| tst-reallocarray.c | ||
| tst-safe-linking.c | ||
| tst-scratch_buffer.c | ||
| tst-tcfree1.c | ||
| tst-tcfree2.c | ||
| tst-tcfree3.c | ||
| tst-trim1.c | ||
| tst-valloc.c | ||