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