sun386 host/target/native separation
[deliverable/binutils-gdb.git] / gdb / mtrace.c
index a2fb1693e38a2217468fc657013d10de53fb337f..82e7f03d41a4bb0d0818a5114969f7a4ee8e1dc3 100755 (executable)
@@ -26,7 +26,15 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #define ptrdiff_t int
 #define __ONEFILE
 
-#include <stdlib.h>
+/* We can't declare malloc and realloc here because we don't know
+   if they are char * or void *, and the compiler will give an error
+   if we get it wrong and they happen to be defined in some header
+   file e.g. <stdio.h>.  We can't include <stdlib.h> here because
+   it has some incompatability with our own includes, e.g. size_t or 
+   whatever.  So we just punt.  This causes malloc and realloc to
+   default to returning "int", which works for most cases we care
+   about.  FIXME-somehow.  */
+/* #include <stdlib.h> */
 #include "gmalloc.h"
 
 extern char *getenv();
@@ -71,7 +79,7 @@ DEFUN(tr_mallochook, (size), size_t size)
   PTR hdr;
 
   __malloc_hook = old_malloc_hook;
-  hdr = malloc(size);
+  hdr = (PTR) malloc(size);
   __malloc_hook = tr_mallochook;
 
   /* We could be printing a NULL here; that's OK */
@@ -94,7 +102,7 @@ DEFUN(tr_reallochook, (ptr, size), PTR ptr AND size_t size)
   __free_hook = old_free_hook;
   __malloc_hook = old_malloc_hook;
   __realloc_hook = old_realloc_hook;
-  hdr = realloc(ptr, size);
+  hdr = (PTR) realloc(ptr, size);
   __free_hook = tr_freehook;
   __malloc_hook = tr_mallochook;
   __realloc_hook = tr_reallochook;
@@ -110,14 +118,19 @@ DEFUN(tr_reallochook, (ptr, size), PTR ptr AND size_t size)
   return hdr;
 }
 
+/* We enable tracing if either the environment variable MALLOC_TRACE
+   is set, or if the variable mallwatch has been patched to an address
+   that the debugging user wants us to stop on.  When patching mallwatch,
+   don't forget to set a breakpoint on tr_break!  */
+
 void
 mtrace()
 {
   char *mallfile;
 
   mallfile = getenv (mallenv);
-  if (mallfile) {
-    mallstream = fopen (mallfile, "w");
+  if (mallfile || mallwatch) {
+    mallstream = fopen (mallfile? mallfile: "/dev/null", "w");
     if (mallstream) {
       /* Be sure it doesn't malloc its buffer! */
       setbuf (mallstream, mallbuf);
This page took 0.025047 seconds and 4 git commands to generate.