]> git.sur5r.net Git - openocd/commitdiff
git-svn-id: svn://svn.berlios.de/openocd/trunk@228 b42882b7-edfa-0310-969c-e2dbd0fdcd60
authormifi <mifi@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Fri, 14 Dec 2007 19:08:03 +0000 (19:08 +0000)
committermifi <mifi@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Fri, 14 Dec 2007 19:08:03 +0000 (19:08 +0000)
src/helper/replacements.c
src/helper/replacements.h

index 769296a016fbdc3deed2bd4495ea873ccce08da4..5804b1973adb2946bf6e3e30e191c92717042ff5 100644 (file)
  ***************************************************************************/
 #ifdef HAVE_CONFIG_H
 #include "config.h"
-#endif
+#endif\r
+\r
+/* DANGER!!!! These must be defined *BEFORE* replacements.h and the malloc() macro!!!! */
+
+#include <stdlib.h>
+#include <strings.h>
+/* \r
+ * clear_malloc\r
+ *\r
+ * will alloc memory and clear it\r
+ */
+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"
 
index 99aaba4396d5b6f34c89065260c574e17f4bc875..7d48e3c64bbc65ba4eb5b3dc96b27f832aebea00 100644 (file)
@@ -67,7 +67,39 @@ struct timezone {
 };
 
 extern int gettimeofday(struct timeval *tv, struct timezone *tz);
-#endif
+#endif\r
+\r
+/**** clear_malloc & fill_malloc ****/
+void *clear_malloc(size_t size);
+void *fill_malloc(size_t size);
+\r
+/*\r
+ * Now you have 3 ways for the malloc function:\r
+ *\r
+ * 1. Do not change anything, use the original malloc\r
+ *\r
+ * 2. Use the clear_malloc function instead of the original malloc.\r
+ *    In this case you must use the following define:\r
+ *    #define malloc((_a)) clear_malloc((_a))\r
+ *\r
+ * 3. Use the fill_malloc function instead of the original malloc.\r
+ *    In this case you must use the following define:\r
+ *    #define malloc((_a)) fill_malloc((_a))\r
+ *\r
+ * We have figured out that there could exist some malloc problems\r
+ * where variables are using without to be initialise. To find this\r
+ * places, use the fill_malloc function. With this function we want \r
+ * to initialize memory to some known bad state. This is quite easily \r
+ * spotted in the debugger and will trap to an invalid address. \r
+ *\r
+ * clear_malloc can be used if you want to set not initialise \r
+ * variable to 0.\r
+ *\r
+ * If you do not want to change the malloc function, to not use one of\r
+ * the following macros. Which is the default way.\r
+ */\r
+//#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