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

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

unix.superglobalmegacorp.com

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