aboutsummaryrefslogtreecommitdiff
path: root/src/debug_alloc.h
diff options
context:
space:
mode:
authorAuthor Name <[email protected]>2023-07-07 12:20:59 +0930
committerDavid Rowe <[email protected]>2023-07-07 12:29:06 +0930
commitac7c48b4dee99d4c772f133d70d8d1b38262fcd2 (patch)
treea2d0ace57a9c0e2e5b611c4987f6fed1b38b81e7 /src/debug_alloc.h
shallow zip-file copy from codec2 e9d726bf20
Diffstat (limited to 'src/debug_alloc.h')
-rw-r--r--src/debug_alloc.h71
1 files changed, 71 insertions, 0 deletions
diff --git a/src/debug_alloc.h b/src/debug_alloc.h
new file mode 100644
index 0000000..8612d88
--- /dev/null
+++ b/src/debug_alloc.h
@@ -0,0 +1,71 @@
+/* debug_alloc.h
+ *
+ * Some macros which can report on malloc results.
+ *
+ * Enable with "-D DEBUG_ALLOC"
+ */
+
+#ifndef DEBUG_ALLOC_H
+#define DEBUG_ALLOC_H
+
+#include <stdio.h>
+
+// Debug calls
+
+#ifdef CORTEX_M4
+extern char * __heap_end;
+register char * sp asm ("sp");
+#endif
+
+#if defined(__EMBEDDED__)
+extern void* codec2_malloc(size_t size);
+extern void* codec2_calloc(size_t nmemb, size_t size);
+extern void codec2_free(void* ptr);
+#else
+#define codec2_malloc(size) (malloc(size))
+#define codec2_calloc(nmemb, size) (calloc(nmemb, size))
+#define codec2_free(ptr) (free(ptr))
+#endif // defined(__EMBEDDED__)
+
+ static inline void * DEBUG_MALLOC(const char *func, size_t size) {
+ void *ptr = codec2_malloc(size);
+ fprintf(stderr, "MALLOC: %s %p %d", func, ptr, (int)size);
+#ifdef CORTEX_M4
+
+ fprintf(stderr, " : sp %p ", sp);
+#endif
+ if (!ptr) fprintf(stderr, " ** FAILED **");
+ fprintf(stderr, "\n");
+ return(ptr);
+ }
+
+ static inline void * DEBUG_CALLOC(const char *func, size_t nmemb, size_t size) {
+ void *ptr = codec2_calloc(nmemb, size);
+ fprintf(stderr, "CALLOC: %s %p %d %d", func, ptr, (int)nmemb, (int)size);
+#ifdef CORTEX_M4
+ fprintf(stderr, " : sp %p ", sp);
+#endif
+ if (!ptr) fprintf(stderr, " ** FAILED **");
+ fprintf(stderr, "\n");
+ return(ptr);
+ }
+ static inline void DEBUG_FREE(const char *func, void *ptr) {
+ codec2_free(ptr);
+ fprintf(stderr, "FREE: %s %p\n", func, ptr);
+ }
+
+#ifdef DEBUG_ALLOC
+ #define MALLOC(size) DEBUG_MALLOC(__func__, size)
+ #define CALLOC(nmemb, size) DEBUG_CALLOC(__func__, nmemb, size)
+ #define FREE(ptr) DEBUG_FREE(__func__, ptr)
+#else //DEBUG_ALLOC
+// Default to normal calls
+ #define MALLOC(size) codec2_malloc(size)
+
+ #define CALLOC(nmemb, size) codec2_calloc(nmemb, size)
+
+ #define FREE(ptr) codec2_free(ptr)
+
+#endif //DEBUG_ALLOC
+
+#endif //DEBUG_ALLOC_H