| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 | /* * libc/stdlib/malloc/malloc_debug.c -- malloc debugging support * *  Copyright (C) 2002  NEC Corporation *  Copyright (C) 2002  Miles Bader <miles@gnu.org> * * This file is subject to the terms and conditions of the GNU Lesser * General Public License.  See the file COPYING.LIB in the main * directory of this archive for more details. * * Written by Miles Bader <miles@gnu.org> */#include <stdlib.h>#include <stdio.h>#include <unistd.h>#include <stdarg.h>libc_hidden_proto(atoi)libc_hidden_proto(vfprintf)libc_hidden_proto(putc)libc_hidden_proto(getenv)#include "malloc.h"#include "heap.h"int __malloc_debug = 0, __malloc_check = 0;#ifdef MALLOC_MMB_DEBUGGINGint __malloc_mmb_debug = 0;#endif/* Debugging output is indented this may levels.  */int __malloc_debug_cur_indent = 0;/* Print FMT and args indented at the current debug print level, followed   by a newline, and change the level by INDENT.  */void__malloc_debug_printf (int indent, const char *fmt, ...){  unsigned spaces = __malloc_debug_cur_indent * MALLOC_DEBUG_INDENT_SIZE;  va_list val;  while (spaces > 0)    {      putc (' ', stderr);      spaces--;    }  va_start (val, fmt);  vfprintf (stderr, fmt, val);  va_end (val);  putc ('\n', stderr);  __malloc_debug_indent (indent);}void__malloc_debug_init (void){  char *ev = getenv ("MALLOC_DEBUG");  if (ev)    {      int val = atoi (ev);      if (val & 1)	__malloc_check = 1;      if (val & 2)	__malloc_debug = 1;#ifdef MALLOC_MMB_DEBUGGING      if (val & 4)	__malloc_mmb_debug = 1;#endif#ifdef HEAP_DEBUGGING      if (val & 8)	__heap_debug = 1;#endif      if (val)	__malloc_debug_printf	  (0, "malloc_debug: initialized to %d (check = %d, dump = %d, dump_mmb = %d, dump_heap = %d)",	   val,	   !!(val & 1), !!(val & 2),	   !!(val & 4), !!(val & 8));    }}
 |