|
|
1.1 ! root 1: #include <stdio.h> ! 2: #include "trace.h" ! 3: #include "trace.d" ! 4: ! 5: extern int *globvars; ! 6: extern int nrprocs, nrrefs, nrvars; ! 7: extern struct PROCSTACK **procstack; ! 8: extern struct VARPARS *procpars; ! 9: ! 10: char *Realloc(), *Emalloc(), *Smalloc(); ! 11: ! 12: struct TEMPLATE **templates; ! 13: int nrtemplates = 0, tbound = 0; ! 14: ! 15: growttable() ! 16: { int nsz = tbound + 32; ! 17: ! 18: if (nsz == 32) ! 19: templates = (struct TEMPLATE **) ! 20: Emalloc(nsz * sizeof(struct TEMPLATE *)); ! 21: else ! 22: templates = (struct TEMPLATE **) ! 23: Realloc(templates, nsz * sizeof(struct TEMPLATE *)); ! 24: ! 25: tbound = nsz; ! 26: ! 27: } ! 28: ! 29: struct TEMPLATE * ! 30: Tinsert() ! 31: { struct TEMPLATE *try; ! 32: register int i; ! 33: ! 34: if (nrtemplates >= tbound) ! 35: growttable(); ! 36: ! 37: try = (struct TEMPLATE *) ! 38: Smalloc(sizeof(struct TEMPLATE)); ! 39: try->l_vars = (struct LOCVARS **) ! 40: Smalloc(nrprocs * sizeof(struct LOCVARS *)); ! 41: try->g_vars = (short *) ! 42: Smalloc(nrvars * sizeof(short)); ! 43: ! 44: for (i = 0; i < nrvars; i++) ! 45: try->g_vars[i] = (short) globvars[i]; ! 46: ! 47: if (nrrefs > 0) ! 48: try->traceback = (struct PROCSTACK **) ! 49: Smalloc(nrprocs * sizeof(struct PROCSTACK *)); ! 50: ! 51: for (i = 0; i < nrprocs; i++) ! 52: { try->l_vars[i] = (struct LOCVARS *) ! 53: Smalloc(sizeof(struct LOCVARS)); ! 54: ! 55: cpylvars(try->l_vars[i], &(procpars[i])); ! 56: ! 57: if (nrrefs > 0) ! 58: { if (procstack[i] == NULL) ! 59: { try->traceback[i] = NULL; ! 60: continue; ! 61: } ! 62: try->traceback[i] = (struct PROCSTACK *) ! 63: Smalloc(sizeof(struct PROCSTACK)); ! 64: cpystacks(try->traceback[i], procstack[i]); ! 65: } } ! 66: ! 67: templates[nrtemplates] = try; ! 68: nrtemplates++; ! 69: ! 70: return try; ! 71: } ! 72: ! 73: struct TEMPLATE * ! 74: inTtable() ! 75: { register int i; ! 76: ! 77: for (i = 0; i < nrtemplates; i++) ! 78: if (sametempl(templates[i])) ! 79: return templates[i]; ! 80: ! 81: return Tinsert(); ! 82: } ! 83: ! 84: sametempl(at) ! 85: struct TEMPLATE *at; ! 86: { register int i; ! 87: ! 88: for (i = 0; i < nrprocs; i++) ! 89: { if (cmplvars(at->l_vars[i], &(procpars[i])) == 0 || ! 90: (nrrefs > 0 && cmpstacks(at->traceback[i], procstack[i]) == 0)) ! 91: return 0; ! 92: } ! 93: ! 94: for (i = 0; i < nrvars; i++) ! 95: if (at->g_vars[i] != (short) globvars[i]) ! 96: return 0; ! 97: ! 98: return 1; ! 99: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.