From 05abd25ddc6dd0a9a41c9be8a3dee93f07a4c911 Mon Sep 17 00:00:00 2001 From: mifi Date: Fri, 14 Dec 2007 19:08:03 +0000 Subject: [PATCH] git-svn-id: svn://svn.berlios.de/openocd/trunk@228 b42882b7-edfa-0310-969c-e2dbd0fdcd60 --- src/helper/replacements.c | 36 +++++++++++++++++++++++++++++++++++- src/helper/replacements.h | 34 +++++++++++++++++++++++++++++++++- 2 files changed, 68 insertions(+), 2 deletions(-) diff --git a/src/helper/replacements.c b/src/helper/replacements.c index 769296a01..5804b1973 100644 --- a/src/helper/replacements.c +++ b/src/helper/replacements.c @@ -19,7 +19,41 @@ ***************************************************************************/ #ifdef HAVE_CONFIG_H #include "config.h" -#endif +#endif + +/* DANGER!!!! These must be defined *BEFORE* replacements.h and the malloc() macro!!!! */ + +#include +#include +/* + * clear_malloc + * + * will alloc memory and clear it + */ +void *clear_malloc(size_t size) +{ + void *t = malloc(size); + if (t!=NULL) + { + memset(t, 0x00, size); + } + return t; +} + +void *fill_malloc(size_t size) +{ + void *t = malloc(size); + if (t!=NULL) + { + /* We want to initialize memory to some known bad state. */ + /* 0 and 0xff yields 0 and -1 as integers, which often */ + /* have meaningful values. 0x5555... is not often a valid */ + /* integer and is quite easily spotted in the debugger */ + /* also it is almost certainly an invalid address */ + memset(t, 0x55, size); + } + return t; +} #include "replacements.h" diff --git a/src/helper/replacements.h b/src/helper/replacements.h index 99aaba439..7d48e3c64 100644 --- a/src/helper/replacements.h +++ b/src/helper/replacements.h @@ -67,7 +67,39 @@ struct timezone { }; extern int gettimeofday(struct timeval *tv, struct timezone *tz); -#endif +#endif + +/**** clear_malloc & fill_malloc ****/ +void *clear_malloc(size_t size); +void *fill_malloc(size_t size); + +/* + * Now you have 3 ways for the malloc function: + * + * 1. Do not change anything, use the original malloc + * + * 2. Use the clear_malloc function instead of the original malloc. + * In this case you must use the following define: + * #define malloc((_a)) clear_malloc((_a)) + * + * 3. Use the fill_malloc function instead of the original malloc. + * In this case you must use the following define: + * #define malloc((_a)) fill_malloc((_a)) + * + * We have figured out that there could exist some malloc problems + * where variables are using without to be initialise. To find this + * places, use the fill_malloc function. With this function we want + * to initialize memory to some known bad state. This is quite easily + * spotted in the debugger and will trap to an invalid address. + * + * clear_malloc can be used if you want to set not initialise + * variable to 0. + * + * If you do not want to change the malloc function, to not use one of + * the following macros. Which is the default way. + */ +//#define malloc((_a)) clear_malloc((_a)) +//#define malloc((_a)) fill_malloc((_a)) /* GNU extensions to the C library that may be missing on some systems */ #ifndef HAVE_STRNDUP