|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1980 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: ! 7: #ifndef lint ! 8: static char sccsid[] = "@(#)step.c 5.2 (Berkeley) 4/7/87"; ! 9: #endif not lint ! 10: /* ! 11: * Continue execution up to the next source line. ! 12: * ! 13: * We call "nextaddr" from the machine module to figure out ! 14: * what the object address is that corresponds to the next source line. ! 15: * If nextaddr returns -1, then the end of the program has been reached. ! 16: * ! 17: * There are two ways to define the next source line depending on what ! 18: * is desired when a procedure or function call is encountered. Step ! 19: * stops at the beginning of the procedure or call; next skips over it. ! 20: */ ! 21: ! 22: #include "defs.h" ! 23: #include "process.h" ! 24: #include "machine.h" ! 25: #include "breakpoint.h" ! 26: #include "source.h" ! 27: #include "mappings.h" ! 28: #include "process.rep" ! 29: ! 30: /* ! 31: * Stepc is what is called when the step command is given. ! 32: * It has to play with the "isstopped" information. ! 33: */ ! 34: ! 35: stepc() ! 36: { ! 37: if (!isstopped) { ! 38: error("can't continue execution"); ! 39: } ! 40: isstopped = FALSE; ! 41: dostep(FALSE); ! 42: isstopped = TRUE; ! 43: } ! 44: ! 45: next() ! 46: { ! 47: if (!isstopped) { ! 48: error("can't continue execution"); ! 49: } ! 50: isstopped = FALSE; ! 51: dostep(TRUE); ! 52: isstopped = TRUE; ! 53: } ! 54: ! 55: step() ! 56: { ! 57: dostep(FALSE); ! 58: } ! 59: ! 60: /* ! 61: * Resume execution up to the given address. It is assumed that ! 62: * no breakpoints exist between the current address and the one ! 63: * we're stepping to. This saves us from setting all the breakpoints. ! 64: */ ! 65: ! 66: stepto(addr) ! 67: ADDRESS addr; ! 68: { ! 69: setbp(addr); ! 70: resume(); ! 71: unsetbp(addr); ! 72: if (!isbperr()) { ! 73: printstatus(); ! 74: } ! 75: } ! 76: ! 77: LOCAL dostep(isnext) ! 78: BOOLEAN isnext; ! 79: { ! 80: register ADDRESS addr; ! 81: register LINENO line; ! 82: ! 83: addr = pc; ! 84: do { ! 85: addr = nextaddr(addr, isnext); ! 86: line = linelookup(addr); ! 87: } while (line == 0 && !ss_instructions); ! 88: stepto(addr); ! 89: curline = line; ! 90: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.