u_debug.h revision 732422f6708199d6655185b1a5daec86efe2f1b7
1a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca/**************************************************************************
2a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca *
3a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
4a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * All Rights Reserved.
5a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca *
6a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * Permission is hereby granted, free of charge, to any person obtaining a
7a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * copy of this software and associated documentation files (the
8a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * "Software"), to deal in the Software without restriction, including
9a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * without limitation the rights to use, copy, modify, merge, publish,
10a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * distribute, sub license, and/or sell copies of the Software, and to
11a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * permit persons to whom the Software is furnished to do so, subject to
12a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * the following conditions:
13a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca *
14a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * The above copyright notice and this permission notice (including the
15a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * next paragraph) shall be included in all copies or substantial portions
16a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * of the Software.
17a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca *
18a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
21a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
22a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca *
26a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca **************************************************************************/
27a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
28a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca/**
29a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * @file
30a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * Cross-platform debugging helpers.
31a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca *
32a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * For now it just has assert and printf replacements, but it might be extended
33a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * with stack trace reports and more advanced logging in the near future.
34a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca *
35a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca * @author Jose Fonseca <jrfonseca@tungstengraphics.com>
36a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca */
37a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
38a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#ifndef P_DEBUG_H_
39a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#define P_DEBUG_H_
40a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
41af6b12cc76b40c86f3b144a7f5cd3ef1278863d0José Fonseca
42af6b12cc76b40c86f3b144a7f5cd3ef1278863d0José Fonseca#include <stdarg.h>
43af6b12cc76b40c86f3b144a7f5cd3ef1278863d0José Fonseca
4445c59895113f997e5f2b7e346f95e46099fa3566José Fonseca#include "p_compiler.h"
4545c59895113f997e5f2b7e346f95e46099fa3566José Fonseca
46af6b12cc76b40c86f3b144a7f5cd3ef1278863d0José Fonseca
47a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#ifdef	__cplusplus
48a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonsecaextern "C" {
49a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#endif
50a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
51a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
52a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#ifdef DBG
53a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#ifndef DEBUG
54a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#define DEBUG 1
55a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#endif
56a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#else
57a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#ifndef NDEBUG
58a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#define NDEBUG 1
59a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#endif
60a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#endif
61a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
62a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
63fc96aec9b7aceb4a0e7471e797abe8a00fc40cf2José Fonseca/**
64fc96aec9b7aceb4a0e7471e797abe8a00fc40cf2José Fonseca * Print debug messages.
65fc96aec9b7aceb4a0e7471e797abe8a00fc40cf2José Fonseca *
66fc96aec9b7aceb4a0e7471e797abe8a00fc40cf2José Fonseca * A debug message will be printed regardless of the DEBUG/NDEBUG macros.
67fc96aec9b7aceb4a0e7471e797abe8a00fc40cf2José Fonseca *
68fc96aec9b7aceb4a0e7471e797abe8a00fc40cf2José Fonseca * The actual channel used to output debug message is platform specific. To
69fc96aec9b7aceb4a0e7471e797abe8a00fc40cf2José Fonseca * avoid misformating or truncation, follow these rules of thumb:
70fc96aec9b7aceb4a0e7471e797abe8a00fc40cf2José Fonseca * - output whole lines
71fc96aec9b7aceb4a0e7471e797abe8a00fc40cf2José Fonseca * - avoid outputing large strings (512 bytes is the current maximum length
72fc96aec9b7aceb4a0e7471e797abe8a00fc40cf2José Fonseca * that is guaranteed to be printed in all platforms)
73fc96aec9b7aceb4a0e7471e797abe8a00fc40cf2José Fonseca */
74a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonsecavoid debug_printf(const char *format, ...);
75af6b12cc76b40c86f3b144a7f5cd3ef1278863d0José Fonseca
76a88202d3b02a24a3bfff95c5e375ead44dae4c5eKeith Whitwell
77a88202d3b02a24a3bfff95c5e375ead44dae4c5eKeith Whitwell/* Dump a blob in hex to the same place that debug_printf sends its
78a88202d3b02a24a3bfff95c5e375ead44dae4c5eKeith Whitwell * messages:
79a88202d3b02a24a3bfff95c5e375ead44dae4c5eKeith Whitwell */
80a88202d3b02a24a3bfff95c5e375ead44dae4c5eKeith Whitwellvoid debug_print_blob( const char *name,
81a88202d3b02a24a3bfff95c5e375ead44dae4c5eKeith Whitwell                       const void *blob,
82a88202d3b02a24a3bfff95c5e375ead44dae4c5eKeith Whitwell                       unsigned size );
83a88202d3b02a24a3bfff95c5e375ead44dae4c5eKeith Whitwell
84fc96aec9b7aceb4a0e7471e797abe8a00fc40cf2José Fonseca/**
85fc96aec9b7aceb4a0e7471e797abe8a00fc40cf2José Fonseca * @sa debug_printf
86fc96aec9b7aceb4a0e7471e797abe8a00fc40cf2José Fonseca */
87af6b12cc76b40c86f3b144a7f5cd3ef1278863d0José Fonsecavoid debug_vprintf(const char *format, va_list ap);
88af6b12cc76b40c86f3b144a7f5cd3ef1278863d0José Fonseca
89a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonsecavoid debug_assert_fail(const char *expr, const char *file, unsigned line);
90a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
91af6b12cc76b40c86f3b144a7f5cd3ef1278863d0José Fonseca
92a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca/** Assert macro */
93a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#ifdef DEBUG
94a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#define debug_assert(expr) ((expr) ? (void)0 : debug_assert_fail(#expr, __FILE__, __LINE__))
95a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#else
96a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#define debug_assert(expr) ((void)0)
97a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#endif
98a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
99a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
100a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#ifdef assert
101a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#undef assert
102a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#endif
103a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#define assert(expr) debug_assert(expr)
104a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
105a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
10645c59895113f997e5f2b7e346f95e46099fa3566José Fonseca/**
10745c59895113f997e5f2b7e346f95e46099fa3566José Fonseca * Set a channel's debug mask.
10845c59895113f997e5f2b7e346f95e46099fa3566José Fonseca *
10945c59895113f997e5f2b7e346f95e46099fa3566José Fonseca * uuid is just a random 32 bit integer that uniquely identifies the debugging
11045c59895113f997e5f2b7e346f95e46099fa3566José Fonseca * channel.
11145c59895113f997e5f2b7e346f95e46099fa3566José Fonseca *
11245c59895113f997e5f2b7e346f95e46099fa3566José Fonseca * @note Due to current implementation issues, make sure the lower 8 bits of
11345c59895113f997e5f2b7e346f95e46099fa3566José Fonseca * UUID are unique.
11445c59895113f997e5f2b7e346f95e46099fa3566José Fonseca */
11545c59895113f997e5f2b7e346f95e46099fa3566José Fonsecavoid debug_mask_set(uint32_t uuid, uint32_t mask);
11645c59895113f997e5f2b7e346f95e46099fa3566José Fonseca
11745c59895113f997e5f2b7e346f95e46099fa3566José Fonseca
11845c59895113f997e5f2b7e346f95e46099fa3566José Fonsecauint32_t debug_mask_get(uint32_t uuid);
11945c59895113f997e5f2b7e346f95e46099fa3566José Fonseca
12045c59895113f997e5f2b7e346f95e46099fa3566José Fonseca
12145c59895113f997e5f2b7e346f95e46099fa3566José Fonseca/**
12245c59895113f997e5f2b7e346f95e46099fa3566José Fonseca * Conditional debug output.
12345c59895113f997e5f2b7e346f95e46099fa3566José Fonseca *
12445c59895113f997e5f2b7e346f95e46099fa3566José Fonseca * This is just a generalization of the debug filtering mechanism used
12545c59895113f997e5f2b7e346f95e46099fa3566José Fonseca * throughout Gallium.
12645c59895113f997e5f2b7e346f95e46099fa3566José Fonseca *
12745c59895113f997e5f2b7e346f95e46099fa3566José Fonseca * You use this function as:
12845c59895113f997e5f2b7e346f95e46099fa3566José Fonseca *
12945c59895113f997e5f2b7e346f95e46099fa3566José Fonseca * @code
13045c59895113f997e5f2b7e346f95e46099fa3566José Fonseca * #define MYDRIVER_UUID 0x12345678 // random 32 bit identifier
13145c59895113f997e5f2b7e346f95e46099fa3566José Fonseca *
1328506e41dc080e20286709ab93b728aa5162f3c87José Fonseca * static void inline
1338506e41dc080e20286709ab93b728aa5162f3c87José Fonseca * mydriver_debug(uint32_t what, const char *format, ...)
13445c59895113f997e5f2b7e346f95e46099fa3566José Fonseca * {
13545c59895113f997e5f2b7e346f95e46099fa3566José Fonseca * #ifdef DEBUG
13645c59895113f997e5f2b7e346f95e46099fa3566José Fonseca *    va_list ap;
13745c59895113f997e5f2b7e346f95e46099fa3566José Fonseca *    va_start(ap, format);
13845c59895113f997e5f2b7e346f95e46099fa3566José Fonseca *    debug_mask_vprintf(MYDRIVER_UUID, what, format, ap);
13945c59895113f997e5f2b7e346f95e46099fa3566José Fonseca *    va_end(ap);
14045c59895113f997e5f2b7e346f95e46099fa3566José Fonseca * #endif
14145c59895113f997e5f2b7e346f95e46099fa3566José Fonseca * }
14245c59895113f997e5f2b7e346f95e46099fa3566José Fonseca *
14345c59895113f997e5f2b7e346f95e46099fa3566José Fonseca * ...
14445c59895113f997e5f2b7e346f95e46099fa3566José Fonseca *
14545c59895113f997e5f2b7e346f95e46099fa3566José Fonseca *    debug_mask_set(MYDRIVER_UUID,
14645c59895113f997e5f2b7e346f95e46099fa3566José Fonseca *                   MYDRIVER_DEBUG_THIS |
14745c59895113f997e5f2b7e346f95e46099fa3566José Fonseca *                   MYDRIVER_DEBUG_THAT |
14845c59895113f997e5f2b7e346f95e46099fa3566José Fonseca *                   ... );
14945c59895113f997e5f2b7e346f95e46099fa3566José Fonseca *
15045c59895113f997e5f2b7e346f95e46099fa3566José Fonseca * ...
15145c59895113f997e5f2b7e346f95e46099fa3566José Fonseca *
15245c59895113f997e5f2b7e346f95e46099fa3566José Fonseca *    mydriver_debug(MYDRIVER_DEBUG_THIS,
15345c59895113f997e5f2b7e346f95e46099fa3566José Fonseca *                   "this and this happened\n");
15445c59895113f997e5f2b7e346f95e46099fa3566José Fonseca *
15545c59895113f997e5f2b7e346f95e46099fa3566José Fonseca *    mydriver_debug(MYDRIVER_DEBUG_THAT,
15645c59895113f997e5f2b7e346f95e46099fa3566José Fonseca *                   "that = %f\n", that);
15745c59895113f997e5f2b7e346f95e46099fa3566José Fonseca * ...
15845c59895113f997e5f2b7e346f95e46099fa3566José Fonseca * @endcode
15945c59895113f997e5f2b7e346f95e46099fa3566José Fonseca *
16045c59895113f997e5f2b7e346f95e46099fa3566José Fonseca * You can also define several variants of mydriver_debug, with hardcoded what.
16145c59895113f997e5f2b7e346f95e46099fa3566José Fonseca * Note that although macros with variable number of arguments would accomplish
16245c59895113f997e5f2b7e346f95e46099fa3566José Fonseca * more in less code, they are not portable.
16345c59895113f997e5f2b7e346f95e46099fa3566José Fonseca */
16445c59895113f997e5f2b7e346f95e46099fa3566José Fonsecavoid debug_mask_vprintf(uint32_t uuid,
16545c59895113f997e5f2b7e346f95e46099fa3566José Fonseca                        uint32_t what,
16645c59895113f997e5f2b7e346f95e46099fa3566José Fonseca                        const char *format,
16745c59895113f997e5f2b7e346f95e46099fa3566José Fonseca                        va_list ap);
16845c59895113f997e5f2b7e346f95e46099fa3566José Fonseca
169d1ca951cc4f3392aeec2817e97fb9ade2c1b7881José Fonseca
170d1ca951cc4f3392aeec2817e97fb9ade2c1b7881José Fonseca#ifdef DEBUG
171d1ca951cc4f3392aeec2817e97fb9ade2c1b7881José Fonseca#define debug_warning(__msg) \
172d1ca951cc4f3392aeec2817e97fb9ade2c1b7881José Fonseca   debug_printf("%s:%i:warning: %s\n", __FILE__, __LINE__, (__msg))
173d1ca951cc4f3392aeec2817e97fb9ade2c1b7881José Fonseca#else
174d1ca951cc4f3392aeec2817e97fb9ade2c1b7881José Fonseca#define debug_warning(__msg) \
175d1ca951cc4f3392aeec2817e97fb9ade2c1b7881José Fonseca   ((void)0)
176d1ca951cc4f3392aeec2817e97fb9ade2c1b7881José Fonseca#endif
177d1ca951cc4f3392aeec2817e97fb9ade2c1b7881José Fonseca
178d1ca951cc4f3392aeec2817e97fb9ade2c1b7881José Fonseca
179e08501b45763cf177f03fb34b737050d23ba4bc0José Fonseca/**
180e08501b45763cf177f03fb34b737050d23ba4bc0José Fonseca * Used by debug_dump_enum and debug_dump_flags to describe symbols.
181e08501b45763cf177f03fb34b737050d23ba4bc0José Fonseca */
182e08501b45763cf177f03fb34b737050d23ba4bc0José Fonsecastruct debug_named_value
183e08501b45763cf177f03fb34b737050d23ba4bc0José Fonseca{
184e08501b45763cf177f03fb34b737050d23ba4bc0José Fonseca   const char *name;
185e08501b45763cf177f03fb34b737050d23ba4bc0José Fonseca   unsigned long value;
186e08501b45763cf177f03fb34b737050d23ba4bc0José Fonseca};
187e08501b45763cf177f03fb34b737050d23ba4bc0José Fonseca
188e08501b45763cf177f03fb34b737050d23ba4bc0José Fonseca
189e08501b45763cf177f03fb34b737050d23ba4bc0José Fonseca/**
190e08501b45763cf177f03fb34b737050d23ba4bc0José Fonseca * Some C pre-processor magic to simplify creating named values.
191e08501b45763cf177f03fb34b737050d23ba4bc0José Fonseca *
192e08501b45763cf177f03fb34b737050d23ba4bc0José Fonseca * Example:
193e08501b45763cf177f03fb34b737050d23ba4bc0José Fonseca * @code
194e08501b45763cf177f03fb34b737050d23ba4bc0José Fonseca * static const debug_named_value my_names[] = {
195e08501b45763cf177f03fb34b737050d23ba4bc0José Fonseca *    DEBUG_NAMED_VALUE(MY_ENUM_VALUE_X),
196e08501b45763cf177f03fb34b737050d23ba4bc0José Fonseca *    DEBUG_NAMED_VALUE(MY_ENUM_VALUE_Y),
197e08501b45763cf177f03fb34b737050d23ba4bc0José Fonseca *    DEBUG_NAMED_VALUE(MY_ENUM_VALUE_Z),
198e08501b45763cf177f03fb34b737050d23ba4bc0José Fonseca *    DEBUG_NAMED_VALUE_END
199e08501b45763cf177f03fb34b737050d23ba4bc0José Fonseca * };
200e08501b45763cf177f03fb34b737050d23ba4bc0José Fonseca *
201e08501b45763cf177f03fb34b737050d23ba4bc0José Fonseca *    ...
202e08501b45763cf177f03fb34b737050d23ba4bc0José Fonseca *    debug_printf("%s = %s\n",
203e08501b45763cf177f03fb34b737050d23ba4bc0José Fonseca *                 name,
204e08501b45763cf177f03fb34b737050d23ba4bc0José Fonseca *                 debug_dump_enum(my_names, my_value));
205e08501b45763cf177f03fb34b737050d23ba4bc0José Fonseca *    ...
206e08501b45763cf177f03fb34b737050d23ba4bc0José Fonseca * @endcode
207e08501b45763cf177f03fb34b737050d23ba4bc0José Fonseca */
208e08501b45763cf177f03fb34b737050d23ba4bc0José Fonseca#define DEBUG_NAMED_VALUE(__symbol) {#__symbol, (unsigned long)__symbol}
209e08501b45763cf177f03fb34b737050d23ba4bc0José Fonseca#define DEBUG_NAMED_VALUE_END {NULL, 0}
210e08501b45763cf177f03fb34b737050d23ba4bc0José Fonseca
211e08501b45763cf177f03fb34b737050d23ba4bc0José Fonseca
212e08501b45763cf177f03fb34b737050d23ba4bc0José Fonseca/**
213e08501b45763cf177f03fb34b737050d23ba4bc0José Fonseca * Convert a enum value to a string.
214e08501b45763cf177f03fb34b737050d23ba4bc0José Fonseca */
215e08501b45763cf177f03fb34b737050d23ba4bc0José Fonsecaconst char *
216e08501b45763cf177f03fb34b737050d23ba4bc0José Fonsecadebug_dump_enum(const struct debug_named_value *names,
217e08501b45763cf177f03fb34b737050d23ba4bc0José Fonseca                unsigned long value);
218e08501b45763cf177f03fb34b737050d23ba4bc0José Fonseca
219e08501b45763cf177f03fb34b737050d23ba4bc0José Fonseca
220e08501b45763cf177f03fb34b737050d23ba4bc0José Fonseca/**
221e08501b45763cf177f03fb34b737050d23ba4bc0José Fonseca * Convert binary flags value to a string.
222e08501b45763cf177f03fb34b737050d23ba4bc0José Fonseca */
223e08501b45763cf177f03fb34b737050d23ba4bc0José Fonsecaconst char *
224e08501b45763cf177f03fb34b737050d23ba4bc0José Fonsecadebug_dump_flags(const struct debug_named_value *names,
225e08501b45763cf177f03fb34b737050d23ba4bc0José Fonseca                 unsigned long value);
226e08501b45763cf177f03fb34b737050d23ba4bc0José Fonseca
227e08501b45763cf177f03fb34b737050d23ba4bc0José Fonseca
228732422f6708199d6655185b1a5daec86efe2f1b7José Fonsecavoid *
229732422f6708199d6655185b1a5daec86efe2f1b7José Fonsecadebug_malloc(const char *file, unsigned line, const char *function,
230732422f6708199d6655185b1a5daec86efe2f1b7José Fonseca             size_t size);
231732422f6708199d6655185b1a5daec86efe2f1b7José Fonseca
232732422f6708199d6655185b1a5daec86efe2f1b7José Fonsecavoid
233732422f6708199d6655185b1a5daec86efe2f1b7José Fonsecadebug_free(const char *file, unsigned line, const char *function,
234732422f6708199d6655185b1a5daec86efe2f1b7José Fonseca           void *ptr);
235732422f6708199d6655185b1a5daec86efe2f1b7José Fonseca
236732422f6708199d6655185b1a5daec86efe2f1b7José Fonsecavoid *
237732422f6708199d6655185b1a5daec86efe2f1b7José Fonsecadebug_calloc(const char *file, unsigned line, const char *function,
238732422f6708199d6655185b1a5daec86efe2f1b7José Fonseca             size_t count, size_t size );
239732422f6708199d6655185b1a5daec86efe2f1b7José Fonseca
240732422f6708199d6655185b1a5daec86efe2f1b7José Fonsecavoid *
241732422f6708199d6655185b1a5daec86efe2f1b7José Fonsecadebug_realloc(const char *file, unsigned line, const char *function,
242732422f6708199d6655185b1a5daec86efe2f1b7José Fonseca              void *old_ptr, size_t old_size, size_t new_size );
243732422f6708199d6655185b1a5daec86efe2f1b7José Fonseca
244732422f6708199d6655185b1a5daec86efe2f1b7José Fonsecavoid
245732422f6708199d6655185b1a5daec86efe2f1b7José Fonsecadebug_memory_reset(void);
246732422f6708199d6655185b1a5daec86efe2f1b7José Fonseca
247732422f6708199d6655185b1a5daec86efe2f1b7José Fonsecavoid
248732422f6708199d6655185b1a5daec86efe2f1b7José Fonsecadebug_memory_report(void);
249732422f6708199d6655185b1a5daec86efe2f1b7José Fonseca
250732422f6708199d6655185b1a5daec86efe2f1b7José Fonseca
251a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#ifdef	__cplusplus
252a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca}
253a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#endif
254a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca
255a31d289de6091987e6b9da6af1b2e56eb79a96fbJosé Fonseca#endif /* P_DEBUG_H_ */
256