X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/blobdiff_plain/f644bb554879656667daae3c617a1db6f8778fe6..refs/tags/BSD-4_3_Net_2:/usr/src/usr.bin/pascal/pdx/process/resume.c diff --git a/usr/src/usr.bin/pascal/pdx/process/resume.c b/usr/src/usr.bin/pascal/pdx/process/resume.c index 6865b04c04..3f170c371f 100644 --- a/usr/src/usr.bin/pascal/pdx/process/resume.c +++ b/usr/src/usr.bin/pascal/pdx/process/resume.c @@ -1,12 +1,40 @@ -/* - * Copyright (c) 1980 Regents of the University of California. - * All rights reserved. The Berkeley software License Agreement - * specifies the terms and conditions for redistribution. +/*- + * Copyright (c) 1980 The Regents of the University of California. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. */ #ifndef lint -static char sccsid[] = "@(#)resume.c 5.1 (Berkeley) %G%"; -#endif not lint +static char sccsid[] = "@(#)resume.c 5.4 (Berkeley) 4/16/91"; +#endif /* not lint */ + /* * Resume execution, first setting appropriate registers. */ @@ -22,12 +50,6 @@ static char sccsid[] = "@(#)resume.c 5.1 (Berkeley) %G%"; #include "machine/pxerrors.h" #include "pxinfo.h" -#ifdef vax - LOCAL ADDRESS fetchpc(); -#endif - -LOCAL ADDRESS *pcaddr; - /* * Resume execution, set (get) pcode location counter before (after) resuming. */ @@ -35,7 +57,6 @@ LOCAL ADDRESS *pcaddr; resume() { register PROCESS *p; - int oldsigno; p = process; do { @@ -44,31 +65,12 @@ resume() fflush(stdout); } pcont(p); -# ifdef sun - if (pcaddr == 0) { - dread(&pcaddr, PCADDRP, sizeof(pcaddr)); - } - dread(&pc, pcaddr, sizeof(pc)); -# else ifdef vax - if (p->status == STOPPED) { - if (isbperr()) { - pc = p->reg[11]; - } else { - dread(&pcframe, PCADDRP, sizeof(pcframe)); - pcframe++; - pc = fetchpc(pcframe); - } - pc -= (sizeof(char) + ENDOFF); - } -# endif + dread(&pc, PCADDR, sizeof(pc)); /* Get pcode pc */ if (option('e')) { printf("execution stops at pc 0x%x, lc %d on sig %d\n", process->pc, pc, p->signo); fflush(stdout); } - if (p->status == STOPPED) { - errnum = 0; - } } while (p->signo == SIGCONT); if (option('r') && p->signo != 0) { choose(); @@ -86,66 +88,6 @@ resume() */ } -#ifdef vax - -/* - * Find the location in the Pascal object where execution was suspended. - * - * We basically walk back through the frames looking for saved - * register 11's. Each time we find one, we remember it. When we reach - * the frame associated with the interpreter procedure, the most recently - * saved register 11 is the one we want. - */ - -typedef struct { - int fr_handler; - unsigned int fr_psw : 16; /* saved psw */ - unsigned int fr_mask : 12; /* register save mask */ - unsigned int fr_unused : 1; - unsigned int fr_s : 1; /* call was a calls, not callg */ - unsigned int fr_spa : 2; /* stack pointer alignment */ - unsigned int fr_savap; /* saved arg pointer */ - unsigned int fr_savfp; /* saved frame pointer */ - int fr_savpc; /* saved program counter */ -} Vaxframe; - -#define regsaved(frame, n) ((frame.fr_mask&(1 << n)) != 0) - -LOCAL ADDRESS fetchpc(framep) -ADDRESS *framep; -{ - register PROCESS *p; - Vaxframe vframe; - ADDRESS *savfp; - ADDRESS r; - - p = process; - r = p->reg[11]; - if (p->fp == (ADDRESS) framep) { - return r; - } - savfp = (ADDRESS *) p->fp; - dread(&vframe, savfp, sizeof(vframe)); - while (vframe.fr_savfp != (int) framep && vframe.fr_savfp != 0) { - if (regsaved(vframe, 11)) { - dread(&r, savfp + 5, sizeof(r)); - r -= sizeof(char); - } - savfp = (ADDRESS *) vframe.fr_savfp; - dread(&vframe, savfp, sizeof(vframe)); - } - if (vframe.fr_savfp == 0) { - panic("resume: can't find interpreter frame 0x%x", framep); - } - if (regsaved(vframe, 11)) { - dread(&r, savfp + 5, sizeof(r)); - r -= sizeof(char); - } - return(r); -} - -#endif - /* * Under the -r option, we offer the opportunity to just get * the px traceback and not actually enter the debugger. @@ -167,9 +109,6 @@ LOCAL choose() } } fprintf(stderr, "\nProgram error"); - if (errnum != 0) { - fprintf(stderr, " -- %s", pxerrmsg[errnum]); - } fprintf(stderr, "\nDo you wish to enter the debugger? "); c = getchar(); if (c == 'n') {