Annotation of researchv9/jerq/sgs/ld/maps.c, revision 1.1.1.1

1.1       root        1: static char ID[] = "@(#) maps.c: 1.4 3/2/83";
                      2: 
                      3: #include "system.h"
                      4: #include <stdio.h>
                      5: #include "structs.h"
                      6: #include "attributes.h"
                      7: #include "extrns.h"
                      8: #include "sgsmacros.h"
                      9: 
                     10: 
                     11: /*
                     12:  * This version of maps.c, for m80ld, does NOT have:
                     13:  *     1. REGION directives
                     14:  *     2. physical addresses
                     15:  */
                     16: /*eject*/
                     17: ldmap()
                     18: {
                     19: 
                     20: /*
                     21:  * Generate the output map requested through the "-m" flag
                     22:  */
                     23: 
                     24:        register ANODE *a;
                     25: 
                     26: /*
                     27:  * Step 1: Output any non-default description of memory
                     28:  */
                     29: 
                     30:        if (memlist.head != memlist.tail) {
                     31:                register MEMTYPE *p;
                     32:                printf("\n\n\n\t\t\tMEMORY CONFIGURATION\n");
                     33:                printf("\nname\t\torigin\t\tlength\t\tattributes\n\n");
                     34:                for( p = (MEMTYPE *) memlist.head; p; p = p->mtnext ) {
                     35:                        printf("%-8.8s\t%08.2lx\t%08.2lx\t  ",
                     36:                                p->mtname, p->mtorig, p->mtlength);
                     37:                        if (p->mtattr & att_R) printf("R");
                     38:                        if (p->mtattr & att_W) printf("W");
                     39:                        if (p->mtattr & att_I) printf("I");
                     40:                        if (p->mtattr & att_X) printf("X");
                     41:                        printf("\n");
                     42:                        }
                     43:                printf("\n\n");
                     44:                }
                     45: 
                     46: /*
                     47:  * Step 2: Output the virtual memory map
                     48:  */
                     49: 
                     50:        printf("\t\tLINK EDITOR MEMORY MAP\n\n");
                     51:        printf("\noutput\t\tinput\t\tvirtual");
                     52:        printf("\nsection\t\tsection\t\taddress\t\tsize\n");
                     53: 
                     54:        for (a = (ANODE *) avlist.head; a; a = a->adnext) {
                     55:                long disp, ndx, vaddr;
                     56:                unsigned fill;
                     57:                register INSECT *isp;
                     58:                register OUTSECT *osp;
                     59: 
                     60:                if (a->adtype == ADPAD)
                     61:                        continue;
                     62: 
                     63:                vaddr = a->adpaddr;
                     64: 
                     65:                if (a->adtype == ADAVAIL) {
                     66:                        printf("\n*avail*\t\t\t\t%08.2lx\t%08.2lx\n",
                     67:                                vaddr, a->adsize);
                     68:                        continue;
                     69:                        }
                     70: 
                     71:                osp = a->adscnptr;
                     72:                printf("\n%-8.8s\t\t\t%08.2lx\t%08.2lx",
                     73:                        osp->oshdr.s_name, vaddr, a->adsize);
                     74:                if (osp->oshdr.s_flags & STYP_DSECT)
                     75:                        printf("\tDSECT");
                     76:                else if (osp->oshdr.s_flags & STYP_NOLOAD)
                     77:                        printf("\tNOLOAD");
                     78:                else if (osp->oshdr.s_scnptr == 0L)
                     79:                        printf("\tuninitialized");
                     80:                printf("\n");
                     81: 
                     82:                ndx = 0;
                     83:                isp = osp->osinclhd;
                     84:                if( (osp->oshdr.s_scnptr != 0L || isp)  &&
                     85:                    (! equal(_TV,osp->oshdr.s_name,8)) )
                     86:                        while (ndx < osp->oshdr.s_size) {
                     87:                                if (isp)
                     88:                                        disp = isp->isdispl;
                     89:                                else
                     90:                                        disp = osp->oshdr.s_size;
                     91:                                if (ndx < disp) {
                     92:                                        if (osp->osflags & FILL)
                     93:                                                fill = osp->osfill;
                     94:                                        else
                     95:                                                fill = globfill;
                     96:                                        printf("\t\t*fill*\t\t%08.2lx\t%08.2lx\t%06.2x\n",
                     97:                                                vaddr + ndx,
                     98:                                                disp - ndx, fill);
                     99:                                        ndx = disp;
                    100:                                        }
                    101:                                if (isp) {
                    102:                                        if (isp->ishdr.s_size > 0) {
                    103:                                                printf( "\t\t%-8.8s\t%08.2lx\t%08.2lx %s",
                    104:                                                        isp->ishdr.s_name,
                    105:                                                        vaddr + ndx,
                    106:                                                        isp->ishdr.s_size,
                    107:                                                        sname(isp->isfilptr->flname));
                    108:                                                if( isp->isfilptr->flfilndx != -1 )
                    109:                                                        printf( " (%d)", isp->isfilptr->flfilndx);
                    110:                                                printf( "\n" );
                    111:                                                ndx += isp->ishdr.s_size;
                    112:                                                }
                    113:                                        isp = isp->isincnxt;
                    114:                                        }
                    115:                                }
                    116:                }
                    117: }

unix.superglobalmegacorp.com

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