mirror of
git://sourceware.org/git/glibc.git
synced 2024-11-27 03:41:23 +08:00
8a9a593115
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> |
||
---|---|---|
.. | ||
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 | ||
Depend | ||
dynarray_at_failure.c | ||
dynarray_emplace_enlarge.c | ||
dynarray_finalize.c | ||
dynarray_resize_clear.c | ||
dynarray_resize.c | ||
dynarray-skeleton.c | ||
dynarray.h | ||
hooks.c | ||
Makefile | ||
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_preserve.c | ||
scratch_buffer_grow.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_info.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-mallocalign1.c | ||
tst-mallocfork2.c | ||
tst-mallocfork3.c | ||
tst-mallocfork.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 | ||
Versions |