Annotation of 3BSD/cmd/sdb/setup.c, revision 1.1.1.1

1.1       root        1: #
                      2: /*
                      3:  *
                      4:  *     UNIX debugger
                      5:  *
                      6:  */
                      7: 
                      8: #include "head.h"
                      9: 
                     10: MSG            BADMAG;
                     11: 
                     12: INT            wtflag;
                     13: INT            fcor;
                     14: INT            fsym;
                     15: L_INT          maxfile;
                     16: L_INT          maxstor;
                     17: L_INT          txtsiz;
                     18: L_INT          datsiz;
                     19: L_INT          datbas;
                     20: L_INT          stksiz;
                     21: STRING         errflg;
                     22: INT            magic;
                     23: L_INT          symbas;
                     24: L_INT          symnum;
                     25: L_INT          entrypt;
                     26: 
                     27: INT            argcount;
                     28: INT            signo;
                     29: struct user u;
                     30: 
                     31: STRING         symfil  = "a.out";
                     32: STRING         corfil  = "core";
                     33: 
                     34: #define TXTHDRSIZ      (sizeof(txthdr))
                     35: 
                     36: #ifndef EDDT
                     37: readl(f,p,n) int f,n; long * p;{
                     38: #ifndef vax
                     39:        int t=0;
                     40:        do {t += read(f,&(p->loword),2); t += read(f,&(p->hiword),2); p++;} while (--n);
                     41:        return(t);
                     42: #else
                     43:        return(read(f,p,n*sizeof(long)));
                     44: #endif
                     45: }
                     46: #endif
                     47: 
                     48: setsym()
                     49: {
                     50: #ifndef EDDT
                     51:        TXTHDR          txthdr;
                     52: 
                     53:        fsym=getfile(symfil,1);
                     54:        txtmap.ufd=fsym;
                     55:        IF readl(fsym, txthdr, TXTHDRSIZ/sizeof(txthdr[0]))==TXTHDRSIZ
                     56:        THEN    magic=txthdr[0];
                     57:                IF magic!=0410 ANDF magic!=0407 ANDF magic!=0412 ANDF magic!=0413
                     58:                THEN    magic=0;
                     59:                ELSE
                     60:                        symnum=txthdr[4]/SYMTABSIZ;
                     61:                        txtsiz=txthdr[1];
                     62:                        datsiz=txthdr[2];
                     63:                        symbas=txtsiz+datsiz;
                     64:                        txtmap.f1=txtmap.f2=TXTHDRSIZ;
                     65:                        switch (magic) {
                     66: 
                     67:                        case 0412:
                     68:                                txtmap.f1=txtmap.f2=(CLSIZE*NBPG);
                     69:                        case 0407:
                     70:                                txtmap.b1=0;
                     71:                                txtmap.e1=symbas;
                     72:                                txtmap.b2=datbas=0;
                     73:                                txtmap.e2=symbas;
                     74:                                break;
                     75: 
                     76:                        case 0413:
                     77:                                txtmap.f1=txtmap.f2=(CLSIZE*NBPG);
                     78:                        case 0410:
                     79:                                txtmap.b1=0;
                     80:                                txtmap.e1=txtsiz;
                     81:                                txtmap.b2=datbas=round(txtsiz,TXTRNDSIZ);
                     82:                                txtmap.e2=datbas+datsiz;
                     83:                                txtmap.f2+=txtmap.e1;
                     84:                        }
                     85:                        entrypt=txthdr[5];
                     86:                        symbas += txthdr[6]+txthdr[7];
                     87:                        symbas += magic==0412||magic==0413 ? (CLSIZE*NBPG) : TXTHDRSIZ;
                     88:                        ststart = symbas;
                     89:                        /* set up symvec */
                     90:                FI
                     91:        FI
                     92:        IF magic==0 THEN txtmap.e1=maxfile; FI
                     93: #endif
                     94: }
                     95: 
                     96: setcor()
                     97: {
                     98: #ifndef EDDT
                     99:        fcor=getfile(corfil,2);
                    100:        datmap.ufd=fcor;
                    101:        IF read(fcor, &u, ctob(UPAGES))==ctob(UPAGES)
                    102: #ifdef VAX135
                    103:           ANDF (u.u_pcb.pcb_ksp & 0xF0000000L)==0x70000000L
                    104: #else
                    105:           ANDF (u.u_pcb.pcb_ksp & 0xF0000000L)==0x80000000L
                    106: #endif
                    107:           ANDF (u.u_pcb.pcb_usp & 0xF0000000L)==0x70000000L
                    108:        THEN    
                    109:                signo = u.u_arg[0]&017;
                    110:                txtsiz = ctob(u.u_tsize);
                    111:                datsiz = ctob(u.u_dsize);
                    112:                stksiz = ctob(u.u_ssize);
                    113:                datmap.b1 = datbas = (magic==0410?round(txtsiz,TXTRNDSIZ):0);
                    114:                if (magic == 0413)
                    115:                        datmap.b1 = datbas = txtsiz;
                    116:                datmap.e1=(magic==0407?txtsiz:datmap.b1)+datsiz;
                    117: #ifdef STD
                    118:                datmap.f1 = ctob(USIZE);
                    119: #else
                    120:                datmap.f1 = ctob(UPAGES);
                    121: #endif
                    122:                datmap.b2 = maxstor-stksiz;
                    123:                datmap.e2 = maxstor;
                    124: #ifdef STD
                    125:                datmap.f2 = ctob(USIZE)+(magic==0410?datsiz:datmap.e1);
                    126: #else
                    127:                datmap.f2 = ctob(UPAGES)+((magic==0410 || magic == 0413)
                    128:                                             ? datsiz : datmap.e1);
                    129: #endif
                    130:                signo = *(ADDR *)(((ADDR)&u)+ctob(UPAGES)-4*sizeof(int));
                    131:                IF magic ANDF magic!=u.u_exdata.ux_mag
                    132:                THEN    printf("%s\n",BADMAG);
                    133:                FI
                    134:        ELSE    datmap.e1 = maxfile;
                    135:        FI
                    136: #endif
                    137: }
                    138: 
                    139: #ifndef EDDT
                    140: create(f)
                    141: STRING f;
                    142: {      int fd;
                    143:        IF (fd=creat(f,0644))>=0
                    144:        THEN close(fd); return(open(f,wtflag));
                    145:        ELSE return(-1);
                    146:        FI
                    147: }
                    148: 
                    149: getfile(filnam,cnt)
                    150: STRING filnam;
                    151: {
                    152:        REG INT         fsym;
                    153: 
                    154:        IF !eqstr("-",filnam)
                    155:        THEN    fsym=open(filnam,wtflag);
                    156:                IF fsym<0 ANDF argcount>cnt
                    157:                THEN    IF wtflag
                    158:                        THEN    fsym=create(filnam);
                    159:                        FI
                    160:                        IF fsym<0
                    161:                        THEN printf("cannot open `%s'\n", filnam);
                    162:                        FI
                    163:                FI
                    164:        ELSE    fsym = -1;
                    165:        FI
                    166:        return(fsym);
                    167: }
                    168: #endif

unix.superglobalmegacorp.com

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