1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- /*
- * 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>
- #include "malloc.h"
- #include "heap.h"
- int __malloc_debug = 0, __malloc_check = 0;
- #ifdef MALLOC_MMB_DEBUGGING
- int __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));
- }
- }
|