Annotation of 3BSD/cmd/adb/setup.c, revision 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.