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

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

unix.superglobalmegacorp.com

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