/* Module used for improved aligned_alloc testing. Copyright (C) 2024 Free Software Foundation, Inc. Copyright The GNU Toolchain Authors. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; see the file COPYING.LIB. If not, see . */ #include #include #include extern void *__libc_malloc (size_t size); extern void *__libc_calloc (size_t n, size_t size); int aligned_alloc_count = 0; int libc_malloc_count = 0; int libc_calloc_count = 0; /* Get a random alignment value. Biased towards the smaller values. Must be a power of 2. */ static size_t get_random_alignment (void) { size_t aligns[] = { 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384 }; return aligns[random () % array_length (aligns)]; } static void *get_random_alloc (size_t size) { void *retval; size_t align; switch (random() % 3) { case 1: align = get_random_alignment (); retval = aligned_alloc (align, size); aligned_alloc_count++; break; case 2: retval = __libc_calloc (1, size); libc_calloc_count++; break; default: retval = __libc_malloc (size); libc_malloc_count++; break; } return retval; } void * __random_malloc (size_t size) { return get_random_alloc (size); } strong_alias (__random_malloc, malloc)