diff options
author | Maximilian Brune <maximilian.brune@9elements.com> | 2023-09-16 19:49:39 +0200 |
---|---|---|
committer | Lean Sheng Tan <sheng.tan@9elements.com> | 2024-03-15 10:09:43 +0000 |
commit | b3e336c51d02c678a4d15573f4edb5834f39bb36 (patch) | |
tree | ce9cfaa161472fa337f9ed46d1e701cb15692fb2 /payloads | |
parent | 8627112424796e37f4b20e176cc7524c0db828bc (diff) |
treewide: Move stdlib.h to commonlib
This patch moves commonlib/stdlib.h -> commonlib/bsd/stdlib.h, since
all code is BSD licensed anyway.
It also moves some code from libpayloads stdlib.h to
commonlib/bsd/stdlib.h so that it can be shared with coreboot. This is
useful for a subsequent commit that adds devicetree.c into commonlib.
Also we don't support DMA on arm platforms in coreboot (only libpayload)
therefore `dma_malloc()` has been removed and `dma_coherent()` has been
moved to architecture specific functions. Any architecture that tries to
use `dma_coherent()` now will get a compile time error. In order to not
break current platforms like mb/google/herobrine which make use of the
commonlib/storage/sdhci.c controller which in turn uses `dma_coherent` a
stub has been added to arch/arm64/dma.c.
Signed-off-by: Maximilian Brune <maximilian.brune@9elements.com>
Change-Id: I3a7ab0d1ddcc7ce9af121a61b4d4eafc9e563a8a
Reviewed-on: https://review.coreboot.org/c/coreboot/+/77969
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Julius Werner <jwerner@chromium.org>
Diffstat (limited to 'payloads')
-rw-r--r-- | payloads/external/BOOTBOOT/Makefile | 3 | ||||
-rw-r--r-- | payloads/libpayload/include/die.h | 11 | ||||
-rw-r--r-- | payloads/libpayload/include/libpayload.h | 11 | ||||
-rw-r--r-- | payloads/libpayload/include/stdlib.h | 58 | ||||
-rw-r--r-- | payloads/libpayload/libc/Makefile.mk | 1 | ||||
-rw-r--r-- | payloads/libpayload/libc/die.c | 41 | ||||
-rw-r--r-- | payloads/libpayload/libc/lib.c | 5 | ||||
-rw-r--r-- | payloads/libpayload/tests/mocks/die.c | 16 |
8 files changed, 25 insertions, 121 deletions
diff --git a/payloads/external/BOOTBOOT/Makefile b/payloads/external/BOOTBOOT/Makefile index 2460c183bb..3bf5b5441c 100644 --- a/payloads/external/BOOTBOOT/Makefile +++ b/payloads/external/BOOTBOOT/Makefile @@ -1,8 +1,5 @@ project_git_repo=https://gitlab.com/bztsrc/bootboot.git project_dir=bootboot -ifeq ($(CONFIG_COREBOOT_BUILD),) -include ../../../.config -endif ifeq ($(CONFIG_ARCH_ARM64),y) loader_dir=$(project_dir)/aarch64-cb else diff --git a/payloads/libpayload/include/die.h b/payloads/libpayload/include/die.h index 01469de17a..fb61d4a8fc 100644 --- a/payloads/libpayload/include/die.h +++ b/payloads/libpayload/include/die.h @@ -29,13 +29,14 @@ #ifndef __DIE_H__ #define __DIE_H__ -void die_work(const char *file, const char *func, const int line, - const char *fmt, ...) - __attribute__((format (printf, 4, 5))) - __attribute__((noreturn)); +#include <stdio.h> +#include <stdlib.h> #define die(fmt, args...) \ - do { die_work(__FILE__, __func__, __LINE__, fmt, ##args); } \ + do { \ + printf("%s:%d %s(): " fmt, __FILE__, __LINE__, __func__, ##args); \ + abort(); \ + } \ while (0) #define die_if(condition, fmt, args...) \ diff --git a/payloads/libpayload/include/libpayload.h b/payloads/libpayload/include/libpayload.h index 05164e5da9..c6d2fc629b 100644 --- a/payloads/libpayload/include/libpayload.h +++ b/payloads/libpayload/include/libpayload.h @@ -525,4 +525,15 @@ int getline(char *buffer, int len); /* Defined in arch/${ARCH}/selfboot.c */ void selfboot(void *entry); +/* Enter remote GDB mode. Will initialize connection if not already up. */ +void gdb_enter(void); +/* Disconnect existing GDB connection if one exists. */ +void gdb_exit(s8 exit_status); + +void __noreturn halt(void); +#if CONFIG(LP_REMOTEGDB) +/* Override abort()/halt() to trap into GDB if it is enabled. */ +#define halt() do { gdb_enter(); halt(); } while (0) +#endif + #endif diff --git a/payloads/libpayload/include/stdlib.h b/payloads/libpayload/include/stdlib.h index cb9addfbde..319e5a4229 100644 --- a/payloads/libpayload/include/stdlib.h +++ b/payloads/libpayload/include/stdlib.h @@ -30,6 +30,7 @@ #ifndef _STDLIB_H #define _STDLIB_H +#include <commonlib/bsd/stdlib.h> #include <die.h> #include <stddef.h> #include <string.h> @@ -38,11 +39,7 @@ * @defgroup malloc Memory allocation functions * @{ */ -void free(void *ptr); -void *malloc(size_t size); -void *calloc(size_t nmemb, size_t size); void *realloc(void *ptr, size_t size); -void *memalign(size_t align, size_t size); void *dma_malloc(size_t size); void *dma_memalign(size_t align, size_t size); @@ -136,43 +133,8 @@ void print_malloc_map(void); void init_dma_memory(void *start, u32 size); int dma_initialized(void); -int dma_coherent(const void *ptr); void dma_allocator_range(void **start_out, size_t *size_out); -static inline void *xmalloc_work(size_t size, const char *file, - const char *func, int line) -{ - void *ret = malloc(size); - if (!ret && size) { - die_work(file, func, line, "Failed to malloc %zu bytes.\n", - size); - } - return ret; -} -#define xmalloc(size) xmalloc_work((size), __FILE__, __func__, __LINE__) - -static inline void *xzalloc_work(size_t size, const char *file, - const char *func, int line) -{ - void *ret = xmalloc_work(size, file, func, line); - memset(ret, 0, size); - return ret; -} -#define xzalloc(size) xzalloc_work((size), __FILE__, __func__, __LINE__) - -static inline void *xmemalign_work(size_t align, size_t size, const char *file, - const char *func, int line) -{ - void *ret = memalign(align, size); - if (!ret && size) { - die_work(file, func, line, - "Failed to memalign %zu bytes with %zu alignment.\n", - size, align); - } - return ret; -} -#define xmemalign(align, size) \ - xmemalign_work((align), (size), __FILE__, __func__, __LINE__) /** @} */ /** @@ -205,22 +167,6 @@ long int labs(long int j); long long int llabs(long long int j); /** @} */ -/* Enter remote GDB mode. Will initialize connection if not already up. */ -void gdb_enter(void); -/* Disconnect existing GDB connection if one exists. */ -void gdb_exit(s8 exit_status); - -/** - * Stop execution and halt the processor (this function does not return). - */ -void halt(void) __attribute__((noreturn)); -void exit(int status) __attribute__((noreturn)); -#define abort() halt() /**< Alias for the halt() function */ -#if CONFIG(LP_REMOTEGDB) -/* Override abort()/halt() to trap into GDB if it is enabled. */ -#define halt() do { gdb_enter(); halt(); } while (0) -#endif - void qsort(void *aa, size_t n, size_t es, int (*cmp)(const void *, const void *)); char *getenv(const char*); uint64_t __umoddi3(uint64_t num, uint64_t den); @@ -228,4 +174,6 @@ uint64_t __udivdi3(uint64_t num, uint64_t den); uint64_t __ashldi3(uint64_t num, unsigned shift); uint64_t __lshrdi3(uint64_t num, unsigned shift); +void __noreturn exit(int status); + #endif diff --git a/payloads/libpayload/libc/Makefile.mk b/payloads/libpayload/libc/Makefile.mk index 6ff1eb8182..2840476619 100644 --- a/payloads/libpayload/libc/Makefile.mk +++ b/payloads/libpayload/libc/Makefile.mk @@ -35,7 +35,6 @@ libc-$(CONFIG_LP_LIBC) += args.c libc-$(CONFIG_LP_LIBC) += strlcpy.c libc-$(CONFIG_LP_LIBC) += qsort.c libc-$(CONFIG_LP_LIBC) += hexdump.c -libc-$(CONFIG_LP_LIBC) += die.c libc-$(CONFIG_LP_LIBC) += coreboot.c libc-$(CONFIG_LP_LIBC) += fmap.c libc-$(CONFIG_LP_LIBC) += fpmath.c diff --git a/payloads/libpayload/libc/die.c b/payloads/libpayload/libc/die.c deleted file mode 100644 index 0a5b97beda..0000000000 --- a/payloads/libpayload/libc/die.c +++ /dev/null @@ -1,41 +0,0 @@ -/* - * - * Copyright 2013 Google Inc. - * - * 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. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. - */ - -#include <libpayload.h> - -void die_work(const char *file, const char *func, const int line, - const char *fmt, ...) -{ - va_list args; - - printf("%s:%d %s(): ", file, line, func); - va_start(args, fmt); - vprintf(fmt, args); - va_end(args); - abort(); -} diff --git a/payloads/libpayload/libc/lib.c b/payloads/libpayload/libc/lib.c index dc212e71a1..f1d85745ad 100644 --- a/payloads/libpayload/libc/lib.c +++ b/payloads/libpayload/libc/lib.c @@ -119,6 +119,11 @@ void exit(int status) halt(); } +void __noreturn abort(void) +{ + halt(); +} + int errno; char *getenv(const char *name) diff --git a/payloads/libpayload/tests/mocks/die.c b/payloads/libpayload/tests/mocks/die.c deleted file mode 100644 index a67105a12b..0000000000 --- a/payloads/libpayload/tests/mocks/die.c +++ /dev/null @@ -1,16 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0-only */ - -#include <tests/test.h> -#include <stdbool.h> - -void die_work(const char *file, const char *func, int line, const char *fmt, ...) -{ - /* Failing asserts are jumping to the user code (test) if expect_assert_failed() was - previously called. Otherwise it jumps to the cmocka code and fails the test. */ - mock_assert(false, "Mock assetion called", file, line); - - /* Should never be reached */ - print_error("%s() called...\n", __func__); - while (1) - ; -} |