1 /* 2 * Copyright (c) 1986 Regents of the University of California. 3 * All rights reserved. The Berkeley software License Agreement 4 * specifies the terms and conditions for redistribution. 5 * 6 * @(#)kdb_pcs.c 7.2 (Berkeley) 12/15/86 7 */ 8 9 #include "../kdb/defs.h" 10 11 char *NOBKPT; 12 char *SZBKPT; 13 char *EXBKPT; 14 char *BADMOD; 15 16 /* breakpoints */ 17 BKPTR bkpthead; 18 19 char *lp; 20 char lastc; 21 extern char *kdbmalloc(); 22 long loopcnt; 23 24 /* sub process control */ 25 26 subpcs(modif) 27 { 28 register check, runmode; 29 register BKPTR bkptr; 30 register char *comptr; 31 32 loopcnt=cntval; 33 switch (modif) { 34 35 /* delete breakpoint */ 36 case 'd': case 'D': 37 if (bkptr=scanbkpt((ADDR)dot)) { 38 bkptr->flag=0; 39 return; 40 } 41 error(NOBKPT); 42 43 /* set breakpoint */ 44 case 'b': case 'B': 45 if (bkptr=scanbkpt((ADDR)dot)) 46 bkptr->flag=0; 47 for (bkptr=bkpthead; bkptr; bkptr=bkptr->nxtbkpt) 48 if (bkptr->flag == 0) 49 break; 50 if (bkptr==0) { 51 bkptr=(BKPTR)kdbmalloc(sizeof *bkptr); 52 if (bkptr == (BKPTR)-1) 53 error(SZBKPT); 54 bkptr->nxtbkpt=bkpthead; 55 bkpthead=bkptr; 56 } 57 bkptr->loc = dot; 58 bkptr->initcnt = bkptr->count = cntval; 59 bkptr->flag = BKPTSET; 60 check=MAXCOM-1; comptr=bkptr->comm; (void) rdc(); lp--; 61 do 62 *comptr++ = readchar(); 63 while (check-- && lastc!=EOR); 64 *comptr=0; lp--; 65 if (check) 66 return; 67 error(EXBKPT); 68 69 /* single step */ 70 case 's': case 'S': 71 runmode=SINGLE; 72 break; 73 74 /* continue */ 75 case 'c': case 'C': 76 runmode=CONTIN; 77 break; 78 79 default: 80 error(BADMOD); 81 } 82 if (loopcnt>0) 83 runpcs(runmode, 0); 84 } 85