diff options
author | Stefan Reinauer <stepan@coresystems.de> | 2010-03-25 22:15:19 +0000 |
---|---|---|
committer | Stefan Reinauer <stepan@openbios.org> | 2010-03-25 22:15:19 +0000 |
commit | e5d30b78b7720ba3e511819b7fc51c11d642153b (patch) | |
tree | 16e7be335542de064aef267c7c6095f5c8cd3496 /payloads/libpayload/include | |
parent | 516a2a7bfaee5d4aa4d1e7e5ff52d3038513c82f (diff) |
libpayload update
* rework Config.in
* add string_to_args function to actually make getopt usable.
* add strchr
* add strlcat
* some malloc fixes (exposed by the USB stack)
* add malloc debugging (thanks to Matthias Krause from Secunet!)
* make LAR support optional, it's not really used anymore
* (define htoX macros for ppc)
Signed-off-by: Stefan Reinauer <stepan@coresystems.de>
Acked-by: Joseph Smith <joe@settoplinux.org>
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@5298 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
Diffstat (limited to 'payloads/libpayload/include')
-rw-r--r-- | payloads/libpayload/include/getopt.h | 5 | ||||
-rw-r--r-- | payloads/libpayload/include/libpayload.h | 80 | ||||
-rw-r--r-- | payloads/libpayload/include/powerpc/arch/endian.h | 4 |
3 files changed, 88 insertions, 1 deletions
diff --git a/payloads/libpayload/include/getopt.h b/payloads/libpayload/include/getopt.h index d5038c8e0f..d4d8135aff 100644 --- a/payloads/libpayload/include/getopt.h +++ b/payloads/libpayload/include/getopt.h @@ -75,4 +75,9 @@ extern char *suboptarg; /* getsubopt(3) external variable */ #endif //__END_DECLS +#define MAX_ARGS 16 +extern char *string_argv[MAX_ARGS]; +extern int string_argc; +int string_to_args(char *caller, char *string); + #endif /* !_GETOPT_H_ */ diff --git a/payloads/libpayload/include/libpayload.h b/payloads/libpayload/include/libpayload.h index 4e96c6690a..12897872c9 100644 --- a/payloads/libpayload/include/libpayload.h +++ b/payloads/libpayload/include/libpayload.h @@ -43,14 +43,17 @@ #ifndef _LIBPAYLOAD_H #define _LIBPAYLOAD_H +#include <libpayload-config.h> #include <stddef.h> #include <arch/types.h> #include <arch/io.h> #include <arch/virtual.h> #include <sysinfo.h> #include <stdarg.h> -#include <lar.h> #include <pci.h> +#ifdef CONFIG_LAR +#include <lar.h> +#endif #define MIN(a,b) ((a) < (b) ? (a) : (b)) #define MAX(a,b) ((a) > (b) ? (a) : (b)) @@ -253,11 +256,82 @@ unsigned short ipchksum(const void *ptr, unsigned long nbytes); * @defgroup malloc Memory allocation functions * @{ */ +#if defined(CONFIG_DEBUG_MALLOC) && !defined(IN_MALLOC_C) +#define free(p) \ + ({ \ + extern void print_malloc_map(void); \ + extern void free(void *); \ + printf("free(%p) called from %s:%s:%d...\n", p, __FILE__, __func__, \ + __LINE__);\ + printf("PRE free()\n"); \ + print_malloc_map(); \ + free(p); \ + printf("POST free()\n"); \ + print_malloc_map(); \ + }) +#define malloc(s) \ + ({ \ + extern void print_malloc_map(void); \ + extern void *malloc(size_t); \ + void *ptr; \ + printf("malloc(%u) called from %s:%s:%d...\n", s, __FILE__, __func__, \ + __LINE__);\ + printf("PRE malloc\n"); \ + print_malloc_map(); \ + ptr = malloc(s); \ + printf("POST malloc (ptr = %p)\n", ptr); \ + print_malloc_map(); \ + ptr; \ + }) +#define calloc(n,s) \ + ({ \ + extern void print_malloc_map(void); \ + extern void *calloc(size_t,size_t); \ + void *ptr; \ + printf("calloc(%u, %u) called from %s:%s:%d...\n", n, s, __FILE__, \ + __func__, __LINE__);\ + printf("PRE calloc\n"); \ + print_malloc_map(); \ + ptr = calloc(n,s); \ + printf("POST calloc (ptr = %p)\n", ptr); \ + print_malloc_map(); \ + ptr; \ + }) +#define realloc(p,s) \ + ({ \ + extern void print_malloc_map(void); \ + extern void *realloc(void*,size_t); \ + void *ptr; \ + printf("realloc(%p, %u) called from %s:%s:%d...\n", p, s, __FILE__, \ + __func__, __LINE__);\ + printf("PRE realloc\n"); \ + print_malloc_map(); \ + ptr = realloc(p,s); \ + printf("POST realloc (ptr = %p)\n", ptr); \ + print_malloc_map(); \ + ptr; \ + }) +#define memalign(a,s) \ + ({ \ + extern void print_malloc_map(void); \ + extern void *memalign(size_t, size_t); \ + void *ptr; \ + printf("memalign(%u, %u) called from %s:%s:%d...\n", a, s, __FILE__, \ + __func__, __LINE__);\ + printf("PRE memalign\n"); \ + print_malloc_map(); \ + ptr = memalign(a,s); \ + printf("POST realloc (ptr = %p)\n", ptr); \ + print_malloc_map(); \ + ptr; \ + }) +#else 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); +#endif /** @} */ /** @@ -341,7 +415,9 @@ int strncmp(const char *s1, const char *s2, size_t maxlen); char *strncpy(char *d, const char *s, size_t n); char *strcpy(char *d, const char *s); char *strncat(char *d, const char *s, size_t n); +size_t strlcat(char *d, const char *s, size_t n); char *strchr(const char *s, int c); +char *strrchr(const char *s, int c); char *strdup(const char *s); char *strstr(const char *h, const char *n); char *strsep(char **stringp, const char *delim); @@ -363,6 +439,7 @@ struct timeval { int gettimeofday(struct timeval *tv, void *tz); /** @} */ +#ifdef CONFIG_LAR /** * @defgroup lar LAR functions * @{ @@ -421,6 +498,7 @@ int lfread(void *ptr, size_t size, size_t nmemb, struct LFILE *stream); int lfseek(struct LFILE *stream, long offset, int whence); int lfclose(struct LFILE *file); /** @} */ +#endif /** * @defgroup info System information functions diff --git a/payloads/libpayload/include/powerpc/arch/endian.h b/payloads/libpayload/include/powerpc/arch/endian.h index 8ffad70f0b..1b8ff8a808 100644 --- a/payloads/libpayload/include/powerpc/arch/endian.h +++ b/payloads/libpayload/include/powerpc/arch/endian.h @@ -38,4 +38,8 @@ #define ntohll(in) (in) +#define htonw(in) ntohw(in) +#define htonl(in) ntohw(in) +#define htonll(in) ntohll(in) + #endif |