[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [UNIKRAFT PATCH 18/18] lib/nolibc: Enable per-library allocator statistics
Instruments <stdlib.h> so that per-library allocator statistics are possible. We make sure that libraries using `malloc()`, `free()`, and company will resolve `uk_alloc_get_default()` within their scope so that the individual wrapper allocators can be used. Signed-off-by: Simon Kuenzer <simon.kuenzer@xxxxxxxxx> --- lib/nolibc/Makefile.uk | 1 - lib/nolibc/include/stdlib.h | 39 ++++++++++++++++---- lib/nolibc/malloc.c | 72 ------------------------------------- 3 files changed, 33 insertions(+), 79 deletions(-) delete mode 100644 lib/nolibc/malloc.c diff --git a/lib/nolibc/Makefile.uk b/lib/nolibc/Makefile.uk index 9d4a9ec3..c6130e83 100644 --- a/lib/nolibc/Makefile.uk +++ b/lib/nolibc/Makefile.uk @@ -33,7 +33,6 @@ LIBNOLIBC_SRCS-y += $(LIBNOLIBC_BASE)/string.c LIBNOLIBC_SRCS-y += $(LIBNOLIBC_BASE)/getopt.c LIBNOLIBC_SRCS-y += $(LIBNOLIBC_BASE)/sscanf.c LIBNOLIBC_SRCS-y += $(LIBNOLIBC_BASE)/asprintf.c -LIBNOLIBC_SRCS-$(CONFIG_LIBUKALLOC) += $(LIBNOLIBC_BASE)/malloc.c LIBNOLIBC_SRCS-y += $(LIBNOLIBC_BASE)/qsort.c diff --git a/lib/nolibc/include/stdlib.h b/lib/nolibc/include/stdlib.h index 522da824..ba5951c8 100644 --- a/lib/nolibc/include/stdlib.h +++ b/lib/nolibc/include/stdlib.h @@ -29,6 +29,9 @@ #include <uk/config.h> #include <uk/essentials.h> +#if CONFIG_LIBUKALLOC +#include <uk/alloc.h> +#endif #ifdef __cplusplus extern "C" { @@ -62,29 +65,53 @@ int atoi(const char *s); /* Allocate size bytes of memory. Returns pointer to start of allocated memory, * or NULL on failure. */ -void *malloc(size_t size); +static inline void *malloc(size_t size) +{ + return uk_malloc(uk_alloc_get_default(), size); +} + /* Release memory previously allocated by malloc(). ptr must be a pointer * previously returned by malloc(), otherwise undefined behavior will occur. */ -void free(void *ptr); +static inline void free(void *ptr) +{ + return uk_free(uk_alloc_get_default(), ptr); +} + /* Allocate memory for an array of nmemb elements of size bytes. Returns * pointer to start of allocated memory, or NULL on failure. */ -void *calloc(size_t nmemb, size_t size); +static inline void *calloc(size_t nmemb, size_t size) +{ + return uk_calloc(uk_alloc_get_default(), nmemb, size); +} + /* Change the size of the memory block pointed to by ptr to size bytes. * Returns a pointer to the resized memory area. If the area pointed to was * moved, a free(ptr) is done. */ -void *realloc(void *ptr, size_t size); +static inline void *realloc(void *ptr, size_t size) +{ + return uk_realloc(uk_alloc_get_default(), ptr, size); +} + /* Allocate size bytes of memory, aligned to align bytes, and return the * pointer to that area in *memptr. Returns 0 on success, and a non-zero error * value on failure. */ -int posix_memalign(void **memptr, size_t align, size_t size); +static inline int posix_memalign(void **memptr, size_t align, size_t size) +{ + return uk_posix_memalign(uk_alloc_get_default(), + memptr, align, size); +} + /* Allocate size bytes of memory, aligned to align bytes. Returns pointer to * start of allocated memory, or NULL on failure. */ -void *memalign(size_t align, size_t size); +static inline void *memalign(size_t align, size_t size) +{ + return uk_memalign(uk_alloc_get_default(), align, size); +} #endif /* CONFIG_LIBUKALLOC */ void abort(void) __noreturn; diff --git a/lib/nolibc/malloc.c b/lib/nolibc/malloc.c deleted file mode 100644 index faf88052..00000000 --- a/lib/nolibc/malloc.c +++ /dev/null @@ -1,72 +0,0 @@ -/* SPDX-License-Identifier: BSD-3-Clause */ -/* - * Authors: Florian Schmidt <florian.schmidt@xxxxxxxxx> - * - * Copyright (c) 2017, NEC Europe Ltd., NEC Corporation. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the copyright holder nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * THIS HEADER MAY NOT BE EXTRACTED OR MODIFIED IN ANY WAY. - */ - -#include <stddef.h> -#include <stdint.h> -#include <sys/types.h> -#include <errno.h> -#include <uk/alloc.h> -#include <uk/assert.h> -#include <uk/essentials.h> - -void *malloc(size_t size) -{ - return uk_malloc(uk_alloc_get_default(), size); -} - -void *calloc(size_t nmemb, size_t size) -{ - return uk_calloc(uk_alloc_get_default(), nmemb, size); -} - -void *realloc(void *ptr, size_t size) -{ - return uk_realloc(uk_alloc_get_default(), ptr, size); -} - -int posix_memalign(void **memptr, size_t align, size_t size) -{ - return uk_posix_memalign(uk_alloc_get_default(), - memptr, align, size); -} - -void *memalign(size_t align, size_t size) -{ - return uk_memalign(uk_alloc_get_default(), align, size); -} - -void free(void *ptr) -{ - return uk_free(uk_alloc_get_default(), ptr); -} -- 2.20.1
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |