浏览代码

memlog option introduced

Jiri Kuthan 23 年之前
父节点
当前提交
843b2927d4
共有 5 个文件被更改,包括 40 次插入32 次删除
  1. 2 0
      cfg.lex
  2. 3 0
      cfg.y
  3. 13 12
      mem/f_malloc.c
  4. 12 11
      mem/q_malloc.c
  5. 10 9
      mem/vq_malloc.c

+ 2 - 0
cfg.lex

@@ -100,6 +100,7 @@ MAXBUFFER maxbuffer
 CHILDREN children
 CHECK_VIA	check_via
 SYN_BRANCH syn_branch
+MEMLOG	memlog
 SIP_WARNING sip_warning
 FIFO fifo
 FIFO_MODE fifo_mode
@@ -197,6 +198,7 @@ EAT_ABLE	[\ \t\b\r]
 <INITIAL>{CHILDREN}	{ count(); yylval.strval=yytext; return CHILDREN; }
 <INITIAL>{CHECK_VIA}	{ count(); yylval.strval=yytext; return CHECK_VIA; }
 <INITIAL>{SYN_BRANCH}	{ count(); yylval.strval=yytext; return SYN_BRANCH; }
+<INITIAL>{MEMLOG}	{ count(); yylval.strval=yytext; return MEMLOG; }
 <INITIAL>{SIP_WARNING}	{ count(); yylval.strval=yytext; return SIP_WARNING; }
 <INITIAL>{FIFO}	{ count(); yylval.strval=yytext; return FIFO; }
 <INITIAL>{FIFO_MODE}	{ count(); yylval.strval=yytext; return FIFO_MODE; }

+ 3 - 0
cfg.y

@@ -105,6 +105,7 @@ struct id_list* lst_tmp;
 %token CHILDREN
 %token CHECK_VIA
 %token SYN_BRANCH
+%token MEMLOG
 %token SIP_WARNING
 %token FIFO
 %token FIFO_MODE
@@ -265,6 +266,8 @@ assign_stm:	DEBUG EQUAL NUMBER { debug=$3; }
 		| CHECK_VIA EQUAL error { yyerror("boolean value expected"); }
 		| SYN_BRANCH EQUAL NUMBER { syn_branch=$3; }
 		| SYN_BRANCH EQUAL error { yyerror("boolean value expected"); }
+		| MEMLOG EQUAL NUMBER { memlog=$3; }
+		| MEMLOG EQUAL error { yyerror("int value expected"); }
 		| SIP_WARNING EQUAL NUMBER { sip_warning=$3; }
 		| SIP_WARNING EQUAL error { yyerror("boolean value expected"); }
 		| FIFO EQUAL STRING { fifo=$3; }

+ 13 - 12
mem/f_malloc.c

@@ -8,6 +8,7 @@
 
 #include "f_malloc.h"
 #include "../dprint.h"
+#include "../globals.h"
 
 
 /*useful macros*/
@@ -262,33 +263,33 @@ void fm_status(struct fm_block* qm)
 	int h;
 	int size;
 
-	LOG(L_INFO, "fm_status (%p):\n", qm);
+	LOG(memlog, "fm_status (%p):\n", qm);
 	if (!qm) return;
 
-	LOG(L_INFO, " heap size= %d\n", qm->size);
+	LOG(memlog, " heap size= %d\n", qm->size);
 #ifdef DBG_F_MALLOC
-	LOG(L_INFO, " used= %d, used+overhead=%d, free=%d\n",
+	LOG(memlog, " used= %d, used+overhead=%d, free=%d\n",
 			qm->used, qm->real_used, qm->size-qm->real_used);
-	LOG(L_INFO, " max used (+overhead)= %d\n", qm->max_real_used);
+	LOG(memlog, " max used (+overhead)= %d\n", qm->max_real_used);
 #endif
 	/*
-	LOG(L_INFO, "dumping all fragments:\n");
+	LOG(memlog, "dumping all fragments:\n");
 	for (f=qm->first_frag, i=0;((char*)f<(char*)qm->last_frag) && (i<10);
 			f=FRAG_NEXT(f), i++){
-		LOG(L_INFO, "    %3d. %c  address=%x  size=%d\n", i, 
+		LOG(memlog, "    %3d. %c  address=%x  size=%d\n", i, 
 				(f->u.reserved)?'a':'N',
 				(char*)f+sizeof(struct fm_frag), f->size);
 #ifdef DBG_F_MALLOC
-		LOG(L_INFO, "            %s from %s: %s(%d)\n",
+		LOG(memlog, "            %s from %s: %s(%d)\n",
 				(f->u.is_free)?"freed":"alloc'd", f->file, f->func, f->line);
 #endif
 	}
 */
-	LOG(L_INFO, "dumping free list:\n");
+	LOG(memlog, "dumping free list:\n");
 	for(h=0,i=0,size=0;h<F_HASH_SIZE;h++){
 		
 		for (f=qm->free_hash[h],j=0; f; size+=f->size,f=f->u.nxt_free,i++,j++);
-		if (j) LOG(L_INFO, "hash = %3d fragments no.: %5d,\n\t\t"
+		if (j) LOG(memlog, "hash = %3d fragments no.: %5d,\n\t\t"
 							" bucket size: %9d - %9d (first %9d)\n",
 							h, j, UN_HASH(h),
 							((h<F_MALLOC_OPTIMIZE/ROUNDTO)?1:2)*UN_HASH(h),
@@ -296,7 +297,7 @@ void fm_status(struct fm_block* qm)
 				);
 		/*
 		{
-			LOG(L_INFO, "   %5d.[%3d:%3d] %c  address=%x  size=%d(%x)\n",
+			LOG(memlog, "   %5d.[%3d:%3d] %c  address=%x  size=%d(%x)\n",
 					i, h, j,
 					(f->u.reserved)?'a':'N',
 					(char*)f+sizeof(struct fm_frag), f->size, f->size);
@@ -307,8 +308,8 @@ void fm_status(struct fm_block* qm)
 		}
 	*/
 	}
-	LOG(L_INFO, "TOTAL: %6d free fragments = %6d free bytes\n", i, size);
-	LOG(L_INFO, "-----------------------------\n");
+	LOG(memlog, "TOTAL: %6d free fragments = %6d free bytes\n", i, size);
+	LOG(memlog, "-----------------------------\n");
 }
 
 

+ 12 - 11
mem/q_malloc.c

@@ -10,6 +10,7 @@
 
 #include "q_malloc.h"
 #include "../dprint.h"
+#include "../globals.h"
 
 
 /*useful macros*/
@@ -392,37 +393,37 @@ void qm_status(struct qm_block* qm)
 	int i,j;
 	int h;
 
-	LOG(L_INFO, "qm_status (%p):\n", qm);
+	LOG(memlog, "qm_status (%p):\n", qm);
 	if (!qm) return;
 
-	LOG(L_INFO, " heap size= %d\n", qm->size);
-	LOG(L_INFO, " used= %d, used+overhead=%d, free=%d\n",
+	LOG(memlog, " heap size= %d\n", qm->size);
+	LOG(memlog, " used= %d, used+overhead=%d, free=%d\n",
 			qm->used, qm->real_used, qm->size-qm->real_used);
-	LOG(L_INFO, " max used (+overhead)= %d\n", qm->max_real_used);
+	LOG(memlog, " max used (+overhead)= %d\n", qm->max_real_used);
 	
-	LOG(L_INFO, "dumping all allocked. fragments:\n");
+	LOG(memlog, "dumping all allocked. fragments:\n");
 	for (f=qm->first_frag, i=0;(char*)f<(char*)qm->last_frag_end;f=FRAG_NEXT(f)
 			,i++){
 		if (! f->u.is_free){
-			LOG(L_INFO, "    %3d. %c  address=%p  size=%d\n", i, 
+			LOG(memlog, "    %3d. %c  address=%p  size=%d\n", i, 
 				(f->u.is_free)?'a':'N',
 				(char*)f+sizeof(struct qm_frag), f->size);
 #ifdef DBG_QM_MALLOC
-			LOG(L_INFO, "            %s from %s: %s(%d)\n",
+			LOG(memlog, "            %s from %s: %s(%d)\n",
 				(f->u.is_free)?"freed":"alloc'd", f->file, f->func, f->line);
-			LOG(L_INFO, "        start check=%x, end check= %x, %x\n",
+			LOG(memlog, "        start check=%x, end check= %x, %x\n",
 				f->check, FRAG_END(f)->check1, FRAG_END(f)->check2);
 #endif
 		}
 	}
-	LOG(L_INFO, "dumping free list stats :\n");
+	LOG(memlog, "dumping free list stats :\n");
 	for(h=0,i=0;h<QM_HASH_SIZE;h++){
 		
 		for (f=qm->free_hash[h].head.u.nxt_free,j=0; 
 				f!=&(qm->free_hash[h].head); f=f->u.nxt_free, i++, j++);
-			if (j) LOG(L_INFO, "hash= %3d. fragments no.: %5d\n", h, j);
+			if (j) LOG(memlog, "hash= %3d. fragments no.: %5d\n", h, j);
 	}
-	LOG(L_INFO, "-----------------------------\n");
+	LOG(memlog, "-----------------------------\n");
 }
 
 

+ 10 - 9
mem/vq_malloc.c

@@ -55,6 +55,7 @@
 #include "../globals.h"
 #include "vq_malloc.h"
 #include "../dprint.h"
+#include "../globals.h"
 
 #define BIG_BUCKET(_qm) ((_qm)->max_small_bucket+1)
 #define IS_BIGBUCKET(_qm, _bucket) ((_bucket)==BIG_BUCKET(_qm)) 
@@ -401,13 +402,13 @@ void vqm_free(struct vqm_block* qm, void* p)
 
 void dump_frag( struct vqm_frag* f, int i )
 {
-	LOG(L_INFO, "    %3d. address=%p  real size=%d bucket=%d\n", i, 
+	LOG(memlog, "    %3d. address=%p  real size=%d bucket=%d\n", i, 
 		(char*)f+sizeof(struct vqm_frag), f->size, f->u.inuse.bucket);
 #ifdef DBG_QM_MALLOC
-	LOG(L_INFO, "            demanded size=%d\n", f->demanded_size );
-	LOG(L_INFO, "            alloc'd from %s: %s(%d)\n",
+	LOG(memlog, "            demanded size=%d\n", f->demanded_size );
+	LOG(memlog, "            alloc'd from %s: %s(%d)\n",
 		f->file, f->func, f->line);
-	LOG(L_INFO, "        start check=%x, end check= %.*s\n",
+	LOG(memlog, "        start check=%x, end check= %.*s\n",
 			f->check, END_CHECK_PATTERN_LEN, f->end_check );
 #endif
 }
@@ -417,16 +418,16 @@ void vqm_status(struct vqm_block* qm)
 	struct vqm_frag* f;
 	unsigned int i,on_list;
 
-	LOG(L_INFO, "vqm_status (%p):\n", qm);
+	LOG(memlog, "vqm_status (%p):\n", qm);
 	if (!qm) return;
-	LOG(L_INFO, " heap size= %d, available: %d\n", 
+	LOG(memlog, " heap size= %d, available: %d\n", 
 		qm->core_end-qm->init_core, qm->free_core );
 	
-	LOG(L_INFO, "dumping unfreed fragments:\n");
+	LOG(memlog, "dumping unfreed fragments:\n");
 	for (f=(struct vqm_frag*)qm->init_core, i=0;(char*)f<(char*)qm->core;
 		f=FRAG_NEXT(f) ,i++) if ( FRAG_ISUSED(f) ) dump_frag(f, i);
 
-	LOG(L_INFO, "dumping unfreed big fragments:\n");
+	LOG(memlog, "dumping unfreed big fragments:\n");
     for (f=(struct vqm_frag*)qm->big_chunks,i=0;(char*)f<(char*)qm->core_end;
 		f=FRAG_NEXT(f) ,i++) if ( FRAG_ISUSED(f) ) dump_frag( f, i );
 
@@ -438,7 +439,7 @@ void vqm_status(struct vqm_block* qm)
 			i, qm->usage[i], on_list );
 	}
 #endif
-	LOG(L_INFO, "-----------------------------\n");
+	LOG(memlog, "-----------------------------\n");
 }