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

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

unix.superglobalmegacorp.com

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