blob: 1a5374faa889a9a72167220379eb571581c0561a [file] [log] [blame]
xf.libfc6e712025-02-07 01:54:34 -08001/*
2 * libc/stdlib/malloc/malloc_debug.c -- malloc debugging support
3 *
4 * Copyright (C) 2002 NEC Corporation
5 * Copyright (C) 2002 Miles Bader <miles@gnu.org>
6 *
7 * This file is subject to the terms and conditions of the GNU Lesser
8 * General Public License. See the file COPYING.LIB in the main
9 * directory of this archive for more details.
10 *
11 * Written by Miles Bader <miles@gnu.org>
12 */
13
14#include <stdlib.h>
15#include <stdio.h>
16#include <unistd.h>
17#include <stdarg.h>
18
19
20#include "malloc.h"
21#include "heap.h"
22
23int __malloc_debug = 0, __malloc_check = 0;
24
25#ifdef MALLOC_MMB_DEBUGGING
26int __malloc_mmb_debug = 0;
27#endif
28
29/* Debugging output is indented this may levels. */
30int __malloc_debug_cur_indent = 0;
31
32
33/* Print FMT and args indented at the current debug print level, followed
34 by a newline, and change the level by INDENT. */
35void
36__malloc_debug_printf (int indent, const char *fmt, ...)
37{
38 unsigned spaces = __malloc_debug_cur_indent * MALLOC_DEBUG_INDENT_SIZE;
39 va_list val;
40
41 while (spaces > 0)
42 {
43 putc (' ', stderr);
44 spaces--;
45 }
46
47 va_start (val, fmt);
48 vfprintf (stderr, fmt, val);
49 va_end (val);
50
51 putc ('\n', stderr);
52
53 __malloc_debug_indent (indent);
54}
55
56void
57__malloc_debug_init (void)
58{
59 char *ev = getenv ("MALLOC_DEBUG");
60 if (ev)
61 {
62 int val = atoi (ev);
63
64 if (val & 1)
65 __malloc_check = 1;
66
67 if (val & 2)
68 __malloc_debug = 1;
69
70#ifdef MALLOC_MMB_DEBUGGING
71 if (val & 4)
72 __malloc_mmb_debug = 1;
73#endif
74
75#ifdef HEAP_DEBUGGING
76 if (val & 8)
77 __heap_debug = 1;
78#endif
79
80 if (val)
81 __malloc_debug_printf
82 (0, "malloc_debug: initialized to %d (check = %d, dump = %d, dump_mmb = %d, dump_heap = %d)",
83 val,
84 !!(val & 1), !!(val & 2),
85 !!(val & 4), !!(val & 8));
86 }
87}