From 05abd25ddc6dd0a9a41c9be8a3dee93f07a4c911 Mon Sep 17 00:00:00 2001
From: mifi <mifi@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
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 <stdlib.h>
+#include <strings.h>
+/* 
+ * 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
-- 
GitLab