Index: src/Common/DebugMalloc.cc
===================================================================
--- src/Common/DebugMalloc.cc	(revision fb114fa1d887767d09a2bcdf85b3046939ea4791)
+++ src/Common/DebugMalloc.cc	(revision fb114fa1d887767d09a2bcdf85b3046939ea4791)
@@ -0,0 +1,71 @@
+#if 0
+#include <dlfcn.h>
+#include <unistd.h>
+#include <stdlib.h>
+
+bool recursion = false;
+
+static char hex[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
+
+static union {
+    void *addr;
+    unsigned char bytes[sizeof(void *)];
+};
+
+struct Mallocmsg {
+    const char start[9];
+    char addr[16];
+    const char sep[3];
+    char size[16];
+    const char end[1];
+} mallocmsg = {
+    'm', 'a', 'l', 'l', 'o', 'c', ' ', '0', 'x',
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    ' ', '0', 'x',
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    '\n'
+};
+
+void * malloc( size_t size ) {
+    if ( recursion ) { write( STDERR_FILENO, "recursion\n", 10 ); abort(); }
+    recursion = true;
+    __typeof__( ::malloc ) *libc_malloc = (__typeof__( ::malloc ) *)dlsym(RTLD_NEXT, "malloc");
+    addr = (void *)size;
+    for ( int i = 0, j = 7; i < 16; i += 2, j -= 1 ) {
+    	mallocmsg.size[i] = hex[bytes[j] >> 4];
+    	mallocmsg.size[i + 1] = hex[bytes[j] & 0x0f];
+    } // for
+    addr = libc_malloc( size );
+    for ( int i = 0, j = 7; i < 16; i += 2, j -= 1 ) {
+	mallocmsg.addr[i] = hex[bytes[j] >> 4];
+	mallocmsg.addr[i + 1] = hex[bytes[j] & 0x0f];
+    } // for
+    write( STDERR_FILENO, &mallocmsg, sizeof(mallocmsg) );
+    recursion = false;
+    return addr;
+}
+
+struct Freemsg {
+    const char start[7];
+    char addr[16];
+    const char end[1];
+} freemsg = {
+    'f', 'r', 'e', 'e', ' ', '0', 'x',
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+    '\n'
+};
+
+void free( void * x ) {
+    if ( recursion ) { write( STDERR_FILENO, "recursion\n", 10 ); abort(); }
+    recursion = true;
+    __typeof__( ::free ) *libc_free = (__typeof__( ::free ) *)dlsym(RTLD_NEXT, "free");
+    addr = x;
+    for ( int i = 0, j = 7; i < 16; i += 2, j -= 1 ) {
+	freemsg.addr[i] = hex[bytes[j] >> 4];
+	freemsg.addr[i + 1] = hex[bytes[j] & 0x0f];
+    } // for
+    write( STDERR_FILENO, &freemsg, sizeof(freemsg) );
+    recursion = false;
+    libc_free( addr );
+}
+#endif // 0
Index: src/Common/SemanticError.h
===================================================================
--- src/Common/SemanticError.h	(revision 2298f728513aa541b29ac43ced6409a7bde8e38c)
+++ src/Common/SemanticError.h	(revision fb114fa1d887767d09a2bcdf85b3046939ea4791)
@@ -10,6 +10,6 @@
 // Created On       : Mon May 18 07:44:20 2015
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Jun  8 14:38:53 2015
-// Update Count     : 4
+// Last Modified On : Sat Sep 24 15:13:42 2016
+// Update Count     : 5
 //
 
@@ -46,5 +46,4 @@
 }
 
-
 #endif // SEMANTICERROR_H
 
Index: src/Common/module.mk
===================================================================
--- src/Common/module.mk	(revision 2298f728513aa541b29ac43ced6409a7bde8e38c)
+++ src/Common/module.mk	(revision fb114fa1d887767d09a2bcdf85b3046939ea4791)
@@ -11,9 +11,10 @@
 ## Created On       : Mon Jun  1 17:49:17 2015
 ## Last Modified By : Peter A. Buhr
-## Last Modified On : Thu Aug 18 13:29:04 2016
-## Update Count     : 2
+## Last Modified On : Tue Sep 27 11:06:38 2016
+## Update Count     : 4
 ###############################################################################
 
 SRC += Common/SemanticError.cc \
        Common/UniqueName.cc \
+       Common/DebugMalloc.cc \
        Common/Assert.cc
