5 // #include "swf_define.h" no include
9 // #define MALLOC_DEBUG_TABLE_NUM 0x20000
10 #define MALLOC_DEBUG_TABLE_NUM 0x40000
12 static struct malloc_debug_ {
16 } malloc_debug_table[MALLOC_DEBUG_TABLE_NUM];
18 static int malloc_debug_stack = 0;
21 malloc_debug_start(void) {
23 malloc_debug_stack ++;
24 if (malloc_debug_stack > 1) {
25 fprintf(stderr, "malloc_debug_start: malloc_debug_stack=%d\n", malloc_debug_stack);
28 for (i=0 ; i < MALLOC_DEBUG_TABLE_NUM ; i++) {
29 malloc_debug_table[i].ptr = NULL;
31 fprintf(stderr, "malloc_debug_start: 0/n=0/%d\n", MALLOC_DEBUG_TABLE_NUM);
35 malloc_debug_end(void) {
37 malloc_debug_stack --;
38 if (malloc_debug_stack > 0) {
39 fprintf(stderr, "malloc_debug_end: malloc_debug_stack=%d\n", malloc_debug_stack);
42 for (i=0 ; i < MALLOC_DEBUG_TABLE_NUM ; i++) {
43 if (malloc_debug_table[i].ptr) {
44 fprintf(stderr, "XXX (%d) ptr=%p (%s, %d)\n",
45 i, malloc_debug_table[i].ptr,
46 malloc_debug_table[i].filename,
47 malloc_debug_table[i].linenum);
51 fprintf(stderr, "malloc_debug_end: j/n=%d/%d\n", j, MALLOC_DEBUG_TABLE_NUM);
55 calloc_debug(size_t nmemb, size_t size, char *filename, int linenum) {
58 ptr = calloc(nmemb, size);
59 // fprintf(stderr, "calloc_debug: ptr=%p (%s,%d)\n", ptr, filename, linenum);
60 for (i=0 ; i < MALLOC_DEBUG_TABLE_NUM ; i++) {
61 if (malloc_debug_table[i].ptr == NULL) {
62 malloc_debug_table[i].ptr = ptr;
63 malloc_debug_table[i].filename = filename;
64 malloc_debug_table[i].linenum = linenum;
72 malloc_debug(size_t size, char *filename, int linenum) {
76 // fprintf(stderr, "malloc_debug: ptr=%p (%s,%d)\n", ptr, filename, linenum);
77 for (i=0 ; i < MALLOC_DEBUG_TABLE_NUM ; i++) {
78 if (malloc_debug_table[i].ptr == NULL) {
79 malloc_debug_table[i].ptr = ptr;
80 malloc_debug_table[i].filename = filename;
81 malloc_debug_table[i].linenum = linenum;
82 // fprintf(stderr, "(%d)\n", i);
86 fprintf(stderr, "malloc: table full... ;_;\n");
91 free_debug(void *ptr, char *filename, int linenum) {
93 // fprintf(stderr, "free_debug: ptr=%p (%s,%d)\n", ptr, filename, linenum);
94 for (i=0 ; i < MALLOC_DEBUG_TABLE_NUM ; i++) {
95 if (malloc_debug_table[i].ptr == ptr) {
96 malloc_debug_table[i].ptr = NULL;
100 if (i == MALLOC_DEBUG_TABLE_NUM) {
101 fprintf(stderr, "free non-allocated memory: ptr=%p (%s,%d)\n", ptr,
111 realloc_debug(void *ptr, size_t size, char *filename, int linenum) {
114 new_ptr = realloc(ptr, size);
115 if (new_ptr == ptr) {
118 // fprintf(stderr, "realloc_debug: ptr=%p => new_ptr=%p (%s,%d)\n",
119 // ptr, new_ptr, filename, linenum);
120 for (i=0 ; i < MALLOC_DEBUG_TABLE_NUM ; i++) {
121 if (malloc_debug_table[i].ptr == ptr) {
122 malloc_debug_table[i].ptr = new_ptr;
123 malloc_debug_table[i].filename = filename;
124 malloc_debug_table[i].linenum = linenum;
131 #define HEXBIN_DISP_UNIT 0x10
134 print_hexbin(unsigned char *data, int data_len) {
137 for (i=0 ; i < data_len ; i++) {
138 if ((i%HEXBIN_DISP_UNIT) == 0) {
139 printf("0x%08x: ", i);
142 printf("%02x ", data[i] & 0xff);
143 if ((i%HEXBIN_DISP_UNIT) == HEXBIN_DISP_UNIT-1) {
148 unsigned char c = data[i];
150 if ((i%HEXBIN_DISP_UNIT) == 0) {
153 for (j=7 ; j >= 0 ; j--) {
154 printf("%d", (c >> j) & 1);