Annotation of 43BSD/ucb/pascal/pdx/process/start.c, revision 1.1.1.1

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[] = "@(#)start.c    5.1 (Berkeley) 6/6/85";
                      9: #endif not lint
                     10: /*
                     11:  * Begin execution.
                     12:  *
                     13:  * For px, pstart does a traced exec to read in px and then stop.  But we
                     14:  * want control after px has read in the obj file and before it starts
                     15:  * executing.  The zeroth argument to px tells it to give us control
                     16:  * by sending itself a signal just prior to interpreting.
                     17:  *
                     18:  * We set a "END_BP" breakpoint at the end of the code so that the
                     19:  * process data doesn't disappear after the program terminates.
                     20:  */
                     21: 
                     22: #include "defs.h"
                     23: #include <signal.h>
                     24: #include "process.h"
                     25: #include "machine.h"
                     26: #include "main.h"
                     27: #include "breakpoint.h"
                     28: #include "source.h"
                     29: #include "object.h"
                     30: #include "mappings.h"
                     31: #include "sym.h"
                     32: #include "process.rep"
                     33: 
                     34: #   if (isvaxpx)
                     35: #       include "pxinfo.h"
                     36: #   endif
                     37: 
                     38: start(argv, infile, outfile)
                     39: char **argv;
                     40: char *infile, *outfile;
                     41: {
                     42:     char *cmd;
                     43: 
                     44:     setsigtrace();
                     45: #   if (isvaxpx)
                     46:        cmd = "px";
                     47: #   else
                     48:        cmd = argv[0];
                     49: #   endif
                     50:     pstart(process, cmd, argv, infile, outfile);
                     51:     if (process->status == STOPPED) {
                     52: #       if (isvaxpx)
                     53:            TRAPARGS *ap, t;
                     54: 
                     55:            pcont(process);
                     56:            if (process->status != STOPPED) {
                     57:                if (option('t')) {
                     58:                    quit(process->exitval);
                     59:                } else {
                     60:                    panic("px exited with %d", process->exitval);
                     61:                }
                     62:            }
                     63:            dread(&ap, process->fp + 2*sizeof(int), sizeof(ap));
                     64:            dread(&t, ap, sizeof(TRAPARGS));
                     65:            if (t.nargs != 5) {
                     66:                if (option('t')) {
                     67:                    unsetsigtraces(process);
                     68:                    pcont(process);
                     69:                    quit(process->exitval);
                     70:                } else {
                     71:                    panic("start: args out of sync");
                     72:                }
                     73:            }
                     74:            DISPLAY = t.disp;
                     75:            DP = t.dp;
                     76:            ENDOFF = t.objstart;
                     77:            PCADDRP = t.pcaddrp;
                     78:            LOOPADDR = t.loopaddr;
                     79: #       endif
                     80:        pc = 0;
                     81:        curfunc = program;
                     82:        if (objsize != 0) {
                     83:            addbp(lastaddr(), END_BP, NIL, NIL, NIL, 0);
                     84:        }
                     85:     }
                     86: }
                     87: 
                     88: /*
                     89:  * Note the termination of the program.  We do this so as to avoid
                     90:  * having the process exit, which would make the values of variables
                     91:  * inaccessible.
                     92:  *
                     93:  * Although the END_BP should really be deleted, it is taken
                     94:  * care of by fixbps the next time the program runs.
                     95:  */
                     96: 
                     97: endprogram()
                     98: {
                     99:     if (ss_variables) {
                    100:        prvarnews();
                    101:     }
                    102:     printf("\nexecution completed\n");
                    103:     curfunc = program;
                    104:     skimsource(srcfilename(pc));
                    105:     curline = lastlinenum;
                    106:     erecover();
                    107: }
                    108: 
                    109: /*
                    110:  * set up what signals we want to trace
                    111:  */
                    112: 
                    113: LOCAL setsigtrace()
                    114: {
                    115:     register int i;
                    116:     register PROCESS *p;
                    117: 
                    118:     p = process;
                    119:     psigtrace(p, SIGINT, TRUE);
                    120:     psigtrace(p, SIGTRAP, TRUE);
                    121:     psigtrace(p, SIGIOT, TRUE);
                    122:     psigtrace(p, SIGILL, TRUE);
                    123:     psigtrace(p, SIGBUS, TRUE);
                    124: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.