Annotation of researchv9/jerq/sgs/ld/display.c, revision 1.1

1.1     ! root        1: static char ID[] = "@(#) display.c: 1.1 1/9/82";
        !             2: 
        !             3: #include <stdio.h>
        !             4: #include "structs.h"
        !             5: #include "extrns.h"
        !             6: #include "tv.h"
        !             7: #include "ldtv.h"
        !             8: #include "y.tab.h"
        !             9: 
        !            10: char *DS[] = {
        !            11:        "** BAD 0 **",
        !            12:        "** BAD 1 **",
        !            13:        "** BAD 2 **",
        !            14:        "AILDFILE",
        !            15:        "AILDLBRY",     
        !            16:        "AIEVEXPR",     
        !            17:        "AIDFNSCN",     
        !            18:        "AIADDSCN",     
        !            19:        "AIADFILE",     
        !            20:        "AIBOND",       
        !            21:        "AIDFOWNR",
        !            22:        "AIOWNATR",     
        !            23:        "AIDFNGRP",     
        !            24:        "AIDFNSYM"      
        !            25:        };
        !            26: char *OP[] = {
        !            27:        "** BAD OP 0 **",
        !            28:        "** BAD OP 1 **",
        !            29:        "NAME",
        !            30:        "LONGINT",
        !            31:        "INT",
        !            32:        "ALIGN",
        !            33:        "DOT",
        !            34:        "LEN",
        !            35:        "MEMORY",
        !            36:        "ORG",
        !            37:        "REGIONS",
        !            38:        "SECTIONS",
        !            39:        "PHY",
        !            40:        "AND",
        !            41:        "ANDAND",
        !            42:        "BNOT",
        !            43:        "COLON",
        !            44:        "COMMA",
        !            45:        "DIV",
        !            46:        "EQ",
        !            47:        "EQEQ",
        !            48:        "GE",
        !            49:        "** BAD OP 22 **",
        !            50:        "GT",
        !            51:        "LBRACE",
        !            52:        "** BAD OP 25 **",
        !            53:        "LE",
        !            54:        "LPAREN",
        !            55:        "LSHIFT",
        !            56:        "LT",
        !            57:        "MINUS",
        !            58:        "MULT",
        !            59:        "NE",
        !            60:        "NOT",
        !            61:        "OR",
        !            62:        "OROR",
        !            63:        "PC",
        !            64:        "PLUS",
        !            65:        "RBRACE",
        !            66:        "RPAREN",
        !            67:        "RSHIFT",
        !            68:        "SEMICOL",
        !            69:        "DIVEQ",
        !            70:        "MINUSEQ",
        !            71:        "MULTEQ",
        !            72:        "PLUSEQ",
        !            73:        "FILENAME",
        !            74:        "TV",
        !            75:        "SPARE",
        !            76:        "DSECT",
        !            77:        "NOLOAD",
        !            78:        "BLOCK",
        !            79:        "UMINUS",
        !            80:        "GROUP"
        !            81:        };
        !            82: /*eject*/
        !            83: main(argc,argv)
        !            84: int argc;
        !            85: char *argv[];
        !            86: {
        !            87: 
        !            88: /*
        !            89:  * List a ld "intermediate file"
        !            90:  */
        !            91: 
        !            92: /*
        !            93:  * Open the "transfer file"
        !            94:  */
        !            95: 
        !            96:        if( (trnfdes = fopen( argv[1], "r" )) == NULL ) {
        !            97:                printf( "\nFailure in opening the transfer file %s\n",
        !            98:                        argv[1] );
        !            99:                exit( 1 );
        !           100:                }
        !           101:        printf( "\nStart of ld lister program for file %s\n", argv[1] );
        !           102: 
        !           103: /*
        !           104:  * List the file
        !           105:  */
        !           106: 
        !           107:        lst_tf_hdr();
        !           108:        lst_tf();
        !           109: 
        !           110:        printf( "\nEnd of ld lister program\n" );
        !           111: }
        !           112: /*eject*/
        !           113: lst_tf_hdr()
        !           114: {
        !           115: 
        !           116: /*
        !           117:  * Read and print control and descriptor information
        !           118:  */
        !           119: 
        !           120:        fseek( trnfdes, 0L, 0 );
        !           121: 
        !           122: /*
        !           123:  * Print the sizes of the lists built during PASS 1
        !           124:  *
        !           125:  *     1. define symbol directives
        !           126:  *     2. MEMORY directives
        !           127:  *     3. REGIONS directives
        !           128:  *     4. input *.o and archive library files
        !           129:  *     5. output sections
        !           130:  *     6. assignment directives
        !           131:  */
        !           132: 
        !           133:        fread( &symcnt, sizeof(int), 1, trnfdes );
        !           134:        fread( &memcnt, sizeof(int), 1, trnfdes );
        !           135:        fread( &regcnt, sizeof(int), 1, trnfdes );
        !           136:        fread( &ldfcnt, sizeof(int), 1, trnfdes );
        !           137:        fread( &bldcnt, sizeof(int), 1, trnfdes );
        !           138:        fread( &expcnt, sizeof(int), 1, trnfdes );
        !           139:        fread( &tvslotcnt, sizeof(int), 1, trnfdes );
        !           140: 
        !           141:        printf( "\nList sizes:\n\tSYM: %d   MEM: %d   REG: %d   LDF : %d   BLD: %d   EXP : %d   TV : %d\n",
        !           142:                symcnt, memcnt, regcnt, ldfcnt, bldcnt, expcnt, tvslotcnt );
        !           143: 
        !           144: /*
        !           145:  * Print the ld control flags
        !           146:  */
        !           147: 
        !           148:        fread( &aflag, sizeof(char), 1, trnfdes );
        !           149:        fread( &cflag, sizeof(char), 1, trnfdes );
        !           150:        fread( &dflag, sizeof(char), 1, trnfdes );
        !           151:        fread( &iflag, sizeof(char), 1, trnfdes );
        !           152:        fread( &mflag, sizeof(char), 1, trnfdes );
        !           153:        fread( &rflag, sizeof(char), 1, trnfdes );
        !           154:        fread( &sflag, sizeof(char), 1, trnfdes );
        !           155:        fread( &tvflag, sizeof(char), 1, trnfdes );
        !           156:        fread( &Hflag, sizeof(char), 1, trnfdes );
        !           157:        fread( &Sflag, sizeof(char), 1, trnfdes );
        !           158:        fread( &Vflag, sizeof(char), 1, trnfdes );
        !           159:        fread( &Xflag, sizeof(char), 1, trnfdes );
        !           160:        fread( &hflag, sizeof(int), 1, trnfdes );
        !           161:        fread( &pflag, sizeof(int), 1, trnfdes );
        !           162:        fread( &Bflag, sizeof(int), 1, trnfdes );
        !           163: #if U3B
        !           164:        fread( &xflag, sizeof(char), 1, trnfdes );
        !           165: 
        !           166:        printf( "\nFlag values:\n\ta   c   d   i   m   p   r   s   x   tv   H   O   S   V      h      B" );
        !           167:        printf( "\n\t%d   %d   %d   %d   %d   %d   %d   %d   %d    %d   %d   %d   %d   %d   %04x   %04x\n",
        !           168:                aflag,cflag,dflag,iflag,mflag,pflag,rflag,sflag,xflag,tvflag,Hflag,
        !           169:                Xflag,Sflag,Vflag,hflag,Bflag);
        !           170: #else
        !           171:        printf( "\nFlag values:\n\ta   c   d   i   m   p   r   s   tv   H   S   V   X      h      B" );
        !           172:        printf( "\n\t%d   %d   %d   %d   %d   %d   %d   %d    %d   %d   %d   %d   %d   %04x   %04x\n",
        !           173:                aflag,cflag,dflag,iflag,mflag,pflag,rflag,sflag,tvflag,Hflag,
        !           174:                Sflag,Vflag,Xflag,hflag,Bflag);
        !           175: #endif
        !           176: 
        !           177: /*
        !           178:  * Print various values extracted from the parse
        !           179:  */
        !           180: 
        !           181:        fread( &globfill, sizeof(short), 1, trnfdes );
        !           182:        fread( &magic, sizeof(unsigned short), 1, trnfdes );
        !           183:        fread( outfilnm, 128, 1, trnfdes );
        !           184:        fread( epsymbol, 8, 1, trnfdes );
        !           185:        fread( &tvspec, sizeof(TVINFO), 1, trnfdes );
        !           186: 
        !           187:        printf( "\nControl values:\n\tglobal fill: %04x     magic: %04x     a.out: (%.128s)     ep: (%.8s)",
        !           188:                globfill, magic, outfilnm, epsymbol );
        !           189: #if B16 || X86
        !           190:        printf( "\n\ttv: %04x (%8.8s) (%04x,%04x) (%04x) %d %d %08lx (%04x,%04x)\n",
        !           191:                tvspec.tvosptr, tvspec.tvfnfill, tvspec.tvfill.tv_ip,
        !           192:                tvspec.tvfill.tv_cs, tvspec.tvinflnm, tvspec.tvinlnno,
        !           193:                tvspec.tvlength, tvspec.tvbndadr, tvspec.tvrange[0],
        !           194:                tvspec.tvrange[1] );
        !           195: #else
        !           196:        printf( "\n\ttv: %04x (%8.8s) (%08lx) (%04x) %d %d %08lx (%04x,%04x)\n",
        !           197:                tvspec.tvosptr, tvspec.tvfnfill, tvspec.tvfill.tv_addr,
        !           198:                tvspec.tvinflnm, tvspec.tvinlnno,
        !           199:                tvspec.tvlength, tvspec.tvbndadr, tvspec.tvrange[0],
        !           200:                tvspec.tvrange[1] );
        !           201: #endif
        !           202: 
        !           203: 
        !           204: /*
        !           205:  * Print the siza of the saved strings
        !           206:  */
        !           207: 
        !           208:        fread( &strleng, sizeof(int), 1, trnfdes );
        !           209: 
        !           210:        printf( "\nString area length: %d\n", strleng );
        !           211: }
        !           212: /*eject*/
        !           213: lst_tf()
        !           214: {
        !           215: 
        !           216: /*
        !           217:  * Print the bulk of the information extracted from PASS 1:
        !           218:  *
        !           219:  *     1. The names of input ifiles, input *.o and archive files, and
        !           220:  *             output sections
        !           221:  *     2. The data structures describing the ld directives
        !           222:  */
        !           223: 
        !           224:        extern char *calloc();
        !           225: /*
        !           226:  * 1. Read and print saved strings
        !           227:  */
        !           228: 
        !           229:        strbase = calloc(1,strleng);
        !           230:        fread( strbase, 1, strleng, trnfdes );
        !           231: 
        !           232:        strnext = strbase;
        !           233:        strlimit = strbase + strleng;
        !           234:        printf( "\nSaved strings:" );
        !           235:        while( strnext < strlimit ) {
        !           236:                printf( "\n\t%5d : (%s)", (strnext-strbase), strnext );
        !           237:                while( *strnext++ )
        !           238:                        ;
        !           239:                }
        !           240:        printf( "\n" );
        !           241: 
        !           242: /*
        !           243:  * 2a. Read and print DFNSYM data structures
        !           244:  */
        !           245: 
        !           246:        printf( "\nDFNSYM data structures:" );
        !           247:        while( symcnt-- )
        !           248:                prtds1();
        !           249:        printf( "\n" );
        !           250: 
        !           251: /*
        !           252:  * 2b. Read and print MEMTYPE data structures
        !           253:  */
        !           254: 
        !           255:        printf( "\nMEMTYPE data structures:" );
        !           256:        while( memcnt-- )
        !           257:                prtds2();
        !           258:        printf( "\n" );
        !           259: 
        !           260: /*
        !           261:  * 2c. Read and print REGION data structures
        !           262:  */
        !           263: 
        !           264:        printf( "\nREGION data structures:" );
        !           265:        while( regcnt-- )
        !           266:                prtds3();
        !           267:        printf( "\n" );
        !           268: 
        !           269: /*
        !           270:  * 2d. Read and print information on input *.o and archive library files
        !           271:  */
        !           272: 
        !           273:        printf( "\nLDFILE data structures:" );
        !           274:        while( ldfcnt-- )
        !           275:                prtds4();
        !           276:        printf( "\n" );
        !           277:        
        !           278: 
        !           279: /*
        !           280:  * 2e. Read and print information on output sections
        !           281:  */
        !           282: 
        !           283:        printf( "\nBLDOSCN data structures:" );
        !           284:        while( bldcnt-- )
        !           285:                prtds5();
        !           286: 
        !           287:        printf( "\n" );
        !           288: 
        !           289: /*
        !           290:  * 2e. Read and print information on assignments
        !           291:  */
        !           292: 
        !           293:        printf( "\nEVEXPR data structures:" );
        !           294:        while( expcnt-- )
        !           295:                prtds10();
        !           296:        printf( "\n" );
        !           297: 
        !           298: /*
        !           299:  * 2f. Read and print information on tv slot assignments
        !           300:  */
        !           301: 
        !           302:        printf( "\nTVASSIGN data structures:" );
        !           303:        while( tvslotcnt-- )
        !           304:                prtds11();
        !           305:        printf( "\n" );
        !           306: }
        !           307: /*eject*/
        !           308: prtds1()
        !           309: {
        !           310: /*
        !           311:  * Read and print one DFNSYM data structure
        !           312:  */
        !           313: 
        !           314:        ACTITEM a;
        !           315: 
        !           316:        fread( &a, 1, sizeof(ACTITEM), trnfdes );
        !           317: 
        !           318:        printf( "\n\t%04x %s (%s) %d (%s) %s %08lx",
        !           319:                a.dfnsym.ainext, DS[a.dfnsym.aitype], (strbase+a.dfnsym.aiinflnm),
        !           320:                a.dfnsym.aiinlnno, (strbase+a.dfnsym.aisymbol),
        !           321:                (a.dfnsym.aideflag ? "DEF" : "UNDEF"), a.dfnsym.aidefval );
        !           322: }
        !           323: prtds2()
        !           324: {
        !           325: /*
        !           326:  * Read and print one MEMTYPE data structure
        !           327:  */
        !           328: 
        !           329:        MEMTYPE m;
        !           330: 
        !           331:        fread( &m, 1, sizeof(MEMTYPE), trnfdes );
        !           332: 
        !           333:        printf( "\n\t%04x (%8.8s) %08lx %08lx %d %04x %04x",
        !           334:                m.mtnext, m.mtname, m.mtorig, m.mtlength, m.mtattr,
        !           335:                m.mtaddrhd, m.mtaddrtl );
        !           336: }
        !           337: prtds3()
        !           338: {
        !           339: /*
        !           340:  * Read and print one REGION data structure
        !           341:  */
        !           342: 
        !           343:        REGION r;
        !           344: 
        !           345:        fread( &r, 1, sizeof(REGION), trnfdes );
        !           346: 
        !           347:        printf( "\n\t%04x (%8.8s) %08lx %08lx %08lx %04x %04x",
        !           348:                r.rgnext, r.rgname, r.rgorig, r.rglength, r.rgvaddr,
        !           349:                r.rgaddrhd, r.rgaddrtl );
        !           350: }
        !           351: prtds4()
        !           352: {
        !           353: /*
        !           354:  * Read and print one AILDFILE or AILDLBRY data structure
        !           355:  */
        !           356: 
        !           357:        ACTITEM a;
        !           358: 
        !           359:        fread( &a, 1, sizeof(ACTITEM), trnfdes );
        !           360: 
        !           361:        printf( "\n\t%04x %s (%s) %d (%s)",
        !           362:                a.ldlbry.ainext, DS[a.ldlbry.aitype], (strbase+a.ldlbry.aiinflnm),
        !           363:                a.ldlbry.aiinlnno, (strbase+a.ldlbry.aifilnam) );
        !           364: }
        !           365: prtds5()
        !           366: {
        !           367: /*
        !           368:  * Read and print one AIDFNSCN or AIDFNGRP data structure
        !           369:  */
        !           370: 
        !           371:        ACTITEM a, b;
        !           372: 
        !           373:        fread( &a, 1, sizeof(ACTITEM), trnfdes );
        !           374: 
        !           375:        printf( "\n\t%s%04x %s (%s) %d (%s) %04x (%s)\n\t\t\t%08lx %d %08lx %08lx %d %d (%04x,%04x)",
        !           376:                (a.dfnscn.aitype == AIDFNSCN) ? "    " : "",
        !           377:                a.dfnscn.ainext, DS[a.dfnscn.aitype], (strbase+a.dfnscn.aiinflnm),
        !           378:                 a.dfnscn.aiinlnno, a.dfnscn.ainame, a.dfnscn.aifill,
        !           379:                a.dfnscn.aiowname, a.dfnscn.aibndadr, a.dfnscn.aiattown,
        !           380:                a.dfnscn.aialign, a.dfnscn.aiblock, (unsigned) a.dfnscn.aifillfg,
        !           381:                (unsigned) a.dfnscn.aisctype, a.dfnscn.sectspec.head, a.dfnscn.sectspec.tail );
        !           382: 
        !           383:        switch( a.dfnscn.aitype ) {
        !           384:        case AIDFNSCN:
        !           385:                if( ! a.dfnscn.sectspec.head )
        !           386:                        return;
        !           387:                do {
        !           388:                        fread( &b, 1, sizeof(ACTITEM), trnfdes );
        !           389:                        switch( b.adfile.aitype ) {
        !           390:                        case AIADDSCN:
        !           391:                                prtds6(&b);
        !           392:                                if( b.addscn.ainext )
        !           393:                                        break;
        !           394:                                return;
        !           395:                        case AIADFILE:
        !           396:                                prtds7(&b);
        !           397:                                if( b.adfile.ainext  ||  b.adfile.ainadscs )
        !           398:                                        break;
        !           399:                                return;
        !           400:                        case AIEVEXPR:
        !           401:                                prtds8(&b, 1);
        !           402:                                if( b.evexpr.ainext )
        !           403:                                        break;
        !           404:                                return;
        !           405:                        default:
        !           406:                                printf( "\n***** failure listing an AIDFNSCN data structure\n");
        !           407:                                return;
        !           408:                        }
        !           409:                        }
        !           410:                while( 1 );
        !           411:                break;
        !           412:        case AIDFNGRP:
        !           413:                do {
        !           414:                        fread( &b, 1, sizeof(ACTITEM), trnfdes );
        !           415:                        switch( b.dfnscn.aitype ) {
        !           416:                        case AIDFNSCN:
        !           417:                                fseek( trnfdes, (long) -sizeof(ACTITEM), 1 );
        !           418:                                prtds5();
        !           419:                                if( b.dfnscn.ainext )
        !           420:                                        break;
        !           421:                                return;
        !           422:                        default:
        !           423:                                printf( "\n***** failure listing an AIDFNGRP data structure\n");
        !           424:                                return;
        !           425:                        }
        !           426:                        }
        !           427:                while( 1 );
        !           428:                break;
        !           429:        default:
        !           430:                printf( "\n***** failure listing an AIDFNxxx data structure\n");
        !           431:        }
        !           432: 
        !           433: }
        !           434: /*eject*/
        !           435: prtds6(a)
        !           436: ACTITEM *a;
        !           437: {
        !           438: /*
        !           439:  * Print one AIADDSCN data structure
        !           440:  */
        !           441: 
        !           442:        printf( "\n\t\t    %04x %s (%s) %d (%s) %04x (%s)",
        !           443:                a->addscn.ainext, DS[a->addscn.aitype], (strbase+a->addscn.aiinflnm),
        !           444:                a->addscn.aiinlnno, a->addscn.ainame, a->addscn.aifill,
        !           445:                (strbase+a->addscn.aiscfile) );
        !           446: }
        !           447: prtds7(a)
        !           448: ACTITEM *a;
        !           449: {
        !           450: /*
        !           451:  * Print one AIADFILE data structure
        !           452:  */
        !           453: 
        !           454:        printf( "\n\t\t%04x %s (%s) %d (%s) %d %d %d",
        !           455:                a->adfile.ainext, DS[a->adfile.aitype], (strbase+a->adfile.aiinflnm),
        !           456:                a->adfile.aiinlnno, (strbase+a->adfile.aifilnam), a->adfile.ainadscs,
        !           457:                a->adfile.aifill2, (unsigned) a->adfile.aifilflg );
        !           458: }
        !           459: prtds8(a, type)
        !           460: ACTITEM *a;
        !           461: int type;
        !           462: {
        !           463: /*
        !           464:  * Print one AIEVEXPR data structure
        !           465:  */
        !           466:        ENODE e;
        !           467: 
        !           468:        printf( "\n\t%s%04x %s (%s) %d %04x\n\n\t\tROOT:",
        !           469:                (type == 1) ? "        " : "",
        !           470:                a->evexpr.ainext, DS[a->evexpr.aitype], (strbase+a->evexpr.aiinflnm),
        !           471:                a->evexpr.aiinlnno, a->evexpr.aiexptr );
        !           472:        
        !           473:        fread( &e, 1, sizeof(ENODE), trnfdes );
        !           474: 
        !           475:        prtds9(&e);
        !           476:        printf( "\n" );
        !           477: }
        !           478: prtds9(e)
        !           479: ENODE *e;
        !           480: {
        !           481: /*
        !           482:  * Print one ENODE data structure
        !           483:  */
        !           484:        ENODE f;
        !           485: 
        !           486:        switch( (unsigned) e->gnode.exop ) {
        !           487:        case INT:
        !           488:                printf( "\n\t\t\tINT %08lx", e->vnode.exvalue );
        !           489:                break;
        !           490:        case DOT:
        !           491:                printf( "\n\t\t\tDOT ()" );
        !           492:                break;
        !           493:        case NAME:
        !           494:                printf( "\n\t\t\tNAME (%s)", e->pnnode.symbol );
        !           495:                break;
        !           496:        default:
        !           497:                printf( "\n\t\t\t%s %04x %04x", OP[(unsigned) e->gnode.exop],
        !           498:                        e->gnode.exleft, e->gnode.exright );
        !           499:                if( e->gnode.exleft ) {
        !           500:                        fread( &f, 1, sizeof(ENODE), trnfdes );
        !           501:                        printf( "\n\t\tLEFT DESENT:" );
        !           502:                        prtds9(&f);
        !           503:                        }
        !           504:                if( e->gnode.exright ) {
        !           505:                        fread( &f, 1, sizeof(ENODE), trnfdes );
        !           506:                        printf( "\n\t\tRIGHT DESENT:" );
        !           507:                        prtds9(&f);
        !           508:                        }
        !           509:        }
        !           510: 
        !           511: }
        !           512: /*eject*/
        !           513: prtds10()
        !           514: {
        !           515: /*
        !           516:  * Read and print one EVEXPR data structure
        !           517:  */
        !           518: 
        !           519:        ACTITEM a;
        !           520: 
        !           521:        fread( &a, 1, sizeof(ACTITEM), trnfdes );
        !           522: 
        !           523:        prtds8(&a, 0);
        !           524: }
        !           525: prtds11()
        !           526: {
        !           527: /*
        !           528:  * Read and print one TVASSIGN data structure
        !           529:  */
        !           530: 
        !           531:        TVASSIGN tv;
        !           532: 
        !           533:        fread( &tv, 1, sizeof(TVASSIGN), trnfdes );
        !           534: 
        !           535:        printf( "\n\t%04x %8.8s %d",
        !           536:                tv.nxtslot, tv.funname, tv.slot );
        !           537: }

unix.superglobalmegacorp.com

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