|
|
1.1 ! root 1: # ! 2: /* ! 3: * ! 4: * UNIX debugger ! 5: * ! 6: */ ! 7: ! 8: #include "head.h" ! 9: #include <signal.h> ! 10: #include <stdio.h> ! 11: #include <sys/stat.h> ! 12: ! 13: INT mkfault; ! 14: INT executing; ! 15: CHAR *lp; ! 16: L_INT maxoff; ! 17: L_INT maxpos; ! 18: ADDR sigint; ! 19: ADDR sigqit; ! 20: INT wtflag; ! 21: L_INT maxfile; ! 22: L_INT maxstor; ! 23: L_INT txtsiz; ! 24: L_INT datsiz; ! 25: L_INT datbas; ! 26: L_INT stksiz; ! 27: STRING errflg; ! 28: INT magic; ! 29: L_INT entrypt; ! 30: ! 31: CHAR lastc; ! 32: ! 33: STRING symfil; ! 34: STRING corfil; ! 35: INT argcount; ! 36: int fpe(); ! 37: ! 38: ! 39: ! 40: #ifndef STD ! 41: char *mktemp(), *tfn; ! 42: int tfd; ! 43: #endif ! 44: ! 45: main(argc, argv) ! 46: REG STRING *argv; ! 47: REG INT argc; ! 48: { ! 49: register char *p; ! 50: struct stat stbuf; ! 51: ! 52: maxfile=1L<<24; maxstor=1L<<31; ! 53: ! 54: setbuf(stdout, NULL); ! 55: setbuf(stderr, NULL); ! 56: ! 57: WHILE argc>1 ! 58: DO IF eqstr("-w",argv[1]) ! 59: THEN wtflag=2; argc--; argv++; ! 60: ELSE break; ! 61: FI ! 62: OD ! 63: ! 64: IF argc>1 THEN symfil = argv[1]; FI ! 65: IF argc>2 THEN corfil = argv[2]; FI ! 66: fp = filework; ! 67: if (argc > 3) { ! 68: for (p = argv[3]; *p; *fp++ = *p++) ; ! 69: *fp++ = '/'; ! 70: } ! 71: argcount=argc; ! 72: ! 73: if (stat(symfil, &stbuf) == -1) { ! 74: printf("`%s' does not exist\n", symfil); ! 75: exit(4); ! 76: } ! 77: symtime = stbuf.st_mtime; ! 78: if (stat(corfil, &stbuf) != -1) { ! 79: if (symtime > stbuf.st_mtime) ! 80: printf("Warning: `%s' newer than `%s'\n", ! 81: symfil, corfil); ! 82: } ! 83: ! 84: setsym(); setcor(); ! 85: initfp(); ! 86: ! 87: /* set up variables for user */ ! 88: maxoff=MAXOFF; maxpos=MAXPOS; ! 89: gtty(2, &sdbttym); ! 90: IF (sigint= (ADDR) signal(SIGINT,01))!=01 ! 91: THEN sigint= (ADDR) fault; signal(SIGINT,fault); ! 92: FI ! 93: sigqit= (ADDR) signal(SIGQUIT,1); ! 94: signal(SIGILL, fpe); ! 95: #ifdef VAX135 ! 96: tfn = "/usr/hpk/sdblog/XXXXXX"; ! 97: #endif ! 98: #ifdef UCBVAX ! 99: tfn = "/usr/staff/hpk/sdblog/XXXXXX"; ! 100: #endif ! 101: #ifndef STD ! 102: tfn = mktemp(tfn); ! 103: tfd = open(tfn); ! 104: if (tfd < 0) ! 105: tfd = creat(tfn, 0666); ! 106: lseek(tfd, 0l, 2); ! 107: #endif ! 108: ! 109: setjmp(env); ! 110: if (debug) printf("Sdb restarted\n"); ! 111: gtty(2, &userttym); ! 112: if (sdbttym.sg_flags != userttym.sg_flags) ! 113: stty(2, &sdbttym); ! 114: IF executing THEN delbp(); FI ! 115: executing=FALSE; ! 116: ! 117: for (;;) { ! 118: mkfault = 0; ! 119: printf("*"); ! 120: if (decode(readline(stdin)) == 1) { ! 121: printf("Error; try again\n"); ! 122: continue; ! 123: } ! 124: ! 125: if (debug) { ! 126: printf("cmd %c:\n", cmd); ! 127: printf("%s:%s\n", proc, var); ! 128: printf("args-%s;re-%s;integ-%d\n", args, re, integ); ! 129: printf("scallf-%d;reflg-%d\n\n", scallf, reflag); ! 130: } ! 131: ! 132: #ifndef STD ! 133: write(tfd, &cmd, 1); ! 134: #endif ! 135: ! 136: docommand(); ! 137: } ! 138: } ! 139: ! 140: ! 141: fault(a) ! 142: { ! 143: signal(a,fault); ! 144: mkfault++; ! 145: printf("\n"); ! 146: longjmp(env, 0); ! 147: } ! 148: ! 149: fpe() { ! 150: signal(SIGILL, fpe); ! 151: error("Illegal floating constant"); ! 152: longjmp(env, 0); ! 153: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.