diff -u mprof.c.orig mprof.c --- mprof.c.orig Fri Apr 7 13:39:45 2006 +++ mprof.c Fri Apr 7 01:28:45 2006 @@ -186,7 +186,7 @@ }; -#define STHASH_SIZE 2047 +#define STHASH_SIZE (2<<20 -1) struct sthash *sthmem[STHASH_SIZE]; #define STNIL NULL @@ -491,7 +491,7 @@ #define stab_name(x) (stab[(x)].name) #define stab_addr(x) (stab[(x)].addr) -#define ST_SIZE 5000 +#define ST_SIZE 500000 #define ST_NOT_FOUND -1 typedef int stindex; @@ -899,7 +899,8 @@ if (*(colp+2) == '(') { char *commap; commap = index(symp, ','); - *commap = '0'; + if (commap) + *commap = '0'; tnum = atoi((char *) index(symp, '(')+1); } else { tnum = atoi((char *) (colp+2)); @@ -926,7 +927,8 @@ if (*(colp+2) == '(') { char *commap; commap = index(symp, ','); - *commap = '0'; + if (commap) + *commap = '0'; tnum = atoi((char *) index(symp, '(')+1); } else { tnum = atoi((char *) colp+2); @@ -1275,9 +1277,15 @@ if (d5 != 0) { fx = st_locate(d5); fsym = pc_lookup(stab_addr(fx)); - fn_name(fsym) = stab_name(fx); - lte->path[SHORT_CALLSTACK_SIZE - (i + 1)].func = fn_name(fsym); - lte->path[SHORT_CALLSTACK_SIZE - (i + 1)].offset = d5 - stab_addr(fx); + if (stab_name(fx) == NULL) { + fn_name(fsym) = ""; + lte->path[SHORT_CALLSTACK_SIZE - (i + 1)].func = ""; + lte->path[SHORT_CALLSTACK_SIZE - (i + 1)].offset = 0; + } else { + fn_name(fsym) = stab_name(fx); + lte->path[SHORT_CALLSTACK_SIZE - (i + 1)].func = fn_name(fsym); + lte->path[SHORT_CALLSTACK_SIZE - (i + 1)].offset = d5 - stab_addr(fx); + } } else { lte->path[SHORT_CALLSTACK_SIZE - (i + 1)].func = ""; lte->path[SHORT_CALLSTACK_SIZE - (i + 1)].offset = 0; @@ -1403,6 +1411,8 @@ fprintf(outfile, "..."); } for (j = 0; j < SHORT_CALLSTACK_SIZE; j++) { + if (lte.path[j].func == NULL) + lte.path[j].func = ""; if (strcmp(lte.path[j].func, "") != 0) { if (leak_level == LEAK_SHOW) { fprintf(outfile, "> %s ", lte.path[j].func);