diff options
author | Gabe Black <gabeblack@google.com> | 2013-11-23 00:54:40 -0800 |
---|---|---|
committer | Isaac Christensen <isaac.christensen@se-eng.com> | 2014-09-15 17:40:17 +0200 |
commit | fa73875f3c016fb544c4daa8a7053905dbd1a33e (patch) | |
tree | 7822a7bf8a3e092235ef9ed338a0dc129739819d /payloads/libpayload/include | |
parent | d84afd3e61af870e01b5be66530ea5df4469b0c8 (diff) |
libpayload: Add wrappers for malloc which check its return value.
The xmalloc wrapper checks whether the malloc succeeded, and if not stops
execution and prints a message. xmalloc always returns a valid pointer. The
xzalloc wrapper does the same thing, but also zeroes the memory before
returning it.
Old-Change-Id: I00e7de04a5c368ab3603530b98bd3e3596e10632
Signed-off-by: Gabe Black <gabeblack@google.com>
Reviewed-on: https://chromium-review.googlesource.com/178001
Reviewed-by: Julius Werner <jwerner@chromium.org>
Reviewed-by: David Hendricks <dhendrix@chromium.org>
Commit-Queue: Gabe Black <gabeblack@chromium.org>
Tested-by: Gabe Black <gabeblack@chromium.org>
(cherry picked from commit 4029796d4f66601e33ae3038dbfc3299f56baf89)
libpayload: malloc: Fix xmalloc() for zero byte allocations
The C standard considers it legal to return a NULL pointer for zero
length memory allocations, and our malloc implementation does in fact
make use of that. xmalloc() and xzmalloc() should therefore not consider
this case a failure.
Also fixed a minor formatting issue.
Old-Change-Id: Ib9b75df9458ce2ba75fd0bc0af9814a3323298eb
Signed-off-by: Julius Werner <jwerner@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/178725
Reviewed-by: Mike Frysinger <vapier@chromium.org>
Reviewed-by: David Hendricks <dhendrix@chromium.org>
(cherry picked from commit 3033437e9d89c6072464860ea50ea27dcb76fe54)
Squashed 2 libpayload malloc related commits.
Change-Id: I682ef5f4aad58c93ae2be40e2edc1fd29e5d0438
Signed-off-by: Isaac Christensen <isaac.christensen@se-eng.com>
Reviewed-on: http://review.coreboot.org/6890
Tested-by: build bot (Jenkins)
Reviewed-by: David Hendricks <dhendrix@chromium.org>
Diffstat (limited to 'payloads/libpayload/include')
-rw-r--r-- | payloads/libpayload/include/stdlib.h | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/payloads/libpayload/include/stdlib.h b/payloads/libpayload/include/stdlib.h index 1ed92d5cfd..7113b6f7d3 100644 --- a/payloads/libpayload/include/stdlib.h +++ b/payloads/libpayload/include/stdlib.h @@ -2,6 +2,7 @@ * This file is part of the libpayload project. * * Copyright (C) 2008 Advanced Micro Devices, Inc. + * Copyright 2013 Google Inc. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -30,7 +31,9 @@ #ifndef _STDLIB_H #define _STDLIB_H +#include <die.h> #include <stddef.h> +#include <string.h> /** * @defgroup malloc Memory allocation functions @@ -145,6 +148,27 @@ void *dma_memalign(size_t align, size_t size); void init_dma_memory(void *start, u32 size); int dma_initialized(void); int dma_coherent(void *ptr); + +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__, __FUNCTION__, __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__, __FUNCTION__, __LINE__) /** @} */ /** |