aboutsummaryrefslogtreecommitdiff
path: root/src/debug_alloc.h
diff options
context:
space:
mode:
authorMarin Ivanov <[email protected]>2025-07-25 10:17:14 +0300
committerMarin Ivanov <[email protected]>2026-01-18 20:09:26 +0200
commit0168586485e6310c598713c911b1dec5618d61a1 (patch)
tree6aabc2a12ef8fef70683f5389bea00f948015f77 /src/debug_alloc.h
Initial commitHEADmaster
* codec2 cut-down version 1.2.0 * Remove codebook and generation of sources * remove c2dec c2enc binaries * prepare for emscripten
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..37cc686
--- /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