Annotation of researchv9/jerq/sgs/ld/structs.h, revision 1.1.1.1

1.1       root        1: /*
                      2:  * static char ID_structsh[] = "@(#) structs.h: 1.8 12/1/83";
                      3:  */
                      4: 
                      5: #include "filehdr.h"
                      6: #include "scnhdr.h"
                      7: #include "syms.h"
                      8: 
                      9: 
                     10: typedef union act_item ACTITEM;
                     11: typedef struct infile INFILE;
                     12: typedef struct gsym SYMTAB;
                     13: typedef struct gaux AUXTAB;
                     14: typedef struct region REGION;
                     15: typedef struct anode ANODE;
                     16: typedef struct memtype MEMTYPE;
                     17: typedef struct insect INSECT;
                     18: typedef struct outsect OUTSECT;
                     19: typedef union exprnode ENODE;
                     20: typedef struct listown LISTOWN;
                     21: 
                     22: #if pdp11
                     23: typedef long ADDRESS;
                     24: #else
                     25: typedef unsigned long ADDRESS;
                     26: #endif
                     27: 
                     28: #define SYMSIZ sizeof(SYMTAB)
                     29: #define AUXSIZ sizeof(AUXTAB)
                     30: 
                     31: 
                     32: struct listown {
                     33:        char *head;
                     34:        char *tail;
                     35:        };
                     36: 
                     37: #ifndef ITEMID
                     38: #define ITEMID long            /* size of a SDP access id */
                     39: #endif
                     40: 
                     41: 
                     42: 
                     43: /*
                     44:  * The following are the possible types of Action_Items
                     45:  */
                     46: 
                     47: #define AILDFILE 3             /* Load a Input Object File     */
                     48: #define AILDLBRY 4             /* Load a Library               */
                     49: #define AIEVEXPR 5             /* Evaluate an Expression       */
                     50: #define AIDFNSCN 6             /* Define an Output Section     */
                     51: #define AIADDSCN 7             /* Add Input Sect to Output Section  */
                     52: #define AIADFILE 8             /* Add file to Output Section   */
                     53: #define AIBOND 9               /* Bond output section to address */
                     54: #define AIDFOWNR 10            /* Allocate section within owner */
                     55: #define AIOWNATR 11            /* Alloc sect within owner with given attributes*/
                     56: #define AIDFNGRP 12            /* Define a "GROUP" */
                     57: #define AIDFNSYM 13            /* Define or undefine a symbol */
                     58: /*eject*/
                     59: union act_item {
                     60:        /*
                     61:         * This structure is used for types
                     62:         *              AILDFILE and AILDLBRY
                     63:         */
                     64:        struct {
                     65:                ACTITEM  *ainext;       /* ptr to next act_item on list */
                     66:                short aitype;
                     67:                char *aiinflnm;         /* ifile that contained directive */
                     68:                short aiinlnno;         /* line number of directive */
                     69:                char *aifilnam;         /* file name  */
                     70:                } ldlbry;
                     71:        /*
                     72:         * This structure is used for type
                     73:         *              AIADFILE
                     74:         */
                     75:        struct {
                     76:                ACTITEM  *ainext;       /* ptr to next act_item on list */
                     77:                short aitype;
                     78:                char *aiinflnm;         /* ifile that contained directive */
                     79:                short aiinlnno;         /* line number of directive */
                     80:                char *aifilnam;         /* file name  */
                     81:                short ainadscs;         /* no. of ADSCN actions to follow*/
                     82:                short aifill2;          /* fill value to be used for ADSCNs */
                     83:                char aifilflg;          /* flag indicating that fill was set */
                     84:                } adfile;
                     85:        /*
                     86:         * This structure is used for types
                     87:         *              AIDFNSCN and AIDFNGRP
                     88:         */
                     89:        struct {
                     90:                ACTITEM  *ainext;       /* ptr to next act_item on list */
                     91:                short aitype;
                     92:                char *aiinflnm;         /* ifile that contained directive */
                     93:                short aiinlnno;         /* line number of directive */
                     94:                char ainame[8];         /* name of output section  */
                     95:                short aifill;           /* value with which to fill "holes" */
                     96:                char aiowname[8];       /* name of owner, only if specified */
                     97:                ADDRESS aibndadr;       /* bond address, only if specified  */
                     98:                short aiattown;         /* attr. of owner, only if specified */
                     99:                long aialign;           /* no. of bits for alignment */
                    100:                long aiblock;           /* no. of bits for "file" alignment */
                    101:                char aifillfg;          /* flag indicating that fill was set */
                    102:                char aisctype;          /* section type  (see scnhdr.h) */
                    103:                struct listown sectspec;        /* "head" of SECTSPEC List*/
                    104:                } dfnscn;
                    105:        /*
                    106:         * This structure is used for type
                    107:         *              AIADDSCN
                    108:         */
                    109:        struct {
                    110:                ACTITEM  *ainext;       /* ptr to next act_item on list */
                    111:                short aitype;
                    112:                char *aiinflnm;         /* ifile that contained directive */
                    113:                short aiinlnno;         /* line number of directive */
                    114:                char ainame[8];         /* name of input section  */
                    115:                short aifill;           /* value with which to fill if uninitialized */
                    116:                char *aiscfile;         /* file name containing input section */
                    117:                } addscn;
                    118:        /*
                    119:         * This structure is used for type
                    120:         *              AIEVEXPR
                    121:         */
                    122:        struct {
                    123:                ACTITEM  *ainext;       /* ptr to next act_item on list */
                    124:                short aitype;
                    125:                char *aiinflnm;         /* ifile that contained directive */
                    126:                short aiinlnno;         /* line number of directive */
                    127:                ENODE *aiexptr;         /* ptr to expression node */
                    128:                } evexpr;
                    129:        /*
                    130:         * This structure is used for type
                    131:         *              AIDFNSYM
                    132:         */
                    133:        struct {
                    134:                ACTITEM  *ainext;       /* ptr to next act_item on list */
                    135:                short aitype;
                    136:                char *aiinflnm;         /* ifile that contained directive */
                    137:                short aiinlnno;         /* line number of directive */
                    138:                char *aisymbol;         /* symbol name  */
                    139:                short aideflag;         /* symbol def/undef flag */
                    140:                long aidefval;          /* symbol def value */
                    141:                } dfnsym;
                    142:        /*
                    143:         * This structure is used for type
                    144:         *              AIBOND
                    145:         */
                    146:        struct {
                    147:                ACTITEM  *ainext;       /* ptr to next act_item on list */
                    148:                short aitype;
                    149:                char *aiinflnm;         /* ifile that contained directive */
                    150:                short aiinlnno;         /* line number of directive */
                    151:                OUTSECT *aioutsec;      /* ptr to output section */
                    152:                ADDRESS aiadrbnd;
                    153:                } bond;
                    154:        /*
                    155:         * This structure is used for type
                    156:         *              AIDFOWNR
                    157:         */  
                    158:        struct {
                    159:                ACTITEM  *ainext;       /* ptr to next act_item on list */
                    160:                short aitype;
                    161:                char *aiinflnm;         /* ifile that contained directive */
                    162:                short aiinlnno;         /* line number of directive */
                    163:                OUTSECT *aioutsec;      /* ptr to output section */
                    164:                char ainamown[8];
                    165:                } dfownr;
                    166:        /*
                    167:         * This structure is used for type
                    168:         *              AIOWNATR
                    169:         */  
                    170:        struct {
                    171:                ACTITEM  *ainext;       /* ptr to next act_item on list */
                    172:                short aitype;
                    173:                char *aiinflnm;         /* ifile that contained directive */
                    174:                short aiinlnno;         /* line number of directive */
                    175:                OUTSECT *aioutsec;      /* ptr to output section */
                    176:                short aiownatt;
                    177:                } ownatr;
                    178:        };
                    179: /*eject*/
                    180: /*
                    181:  * Structure for REGIONs
                    182:  */
                    183: 
                    184: struct region {
                    185:                REGION *rgnext;         /* ptr to next region on REGLIST */
                    186:                char rgname[8];         /* name of region */
                    187:                ADDRESS rgorig;
                    188:                ADDRESS rglength;
                    189:                ADDRESS rgvaddr;                /* virtual address */
                    190:                ANODE *rgaddrhd;        /* "head" of list of addr nodes */
                    191:                ANODE *rgaddrtl;        /* "tail" of list of addr nodes */
                    192:                };
                    193: 
                    194: 
                    195: 
                    196: 
                    197: /*
                    198:  * Address nodes (ANODEs) are linked off of REGIONs containing
                    199:  * an entry for every configured piece of memory.
                    200:  */
                    201: 
                    202: struct anode {
                    203:        ANODE *adnext;                  /* ptr to next ANODE */
                    204:        ANODE *adprev;                  /* ptr to previous ANODE */
                    205:        int adtype;
                    206:        ADDRESS adpaddr;                /* physical address */
                    207:        ADDRESS adsize;
                    208:        OUTSECT *adscnptr;              /* used only for type == SECT */
                    209:        MEMTYPE *admemp;                /* ptr to owning memory type  */
                    210:        REGION  *adregp;                /* ptr to owning region       */
                    211:        };
                    212: 
                    213: /*
                    214:  * Possible values for adtype
                    215:  *     ADAVAIL : anode represents (a fragment of) unallocated
                    216:  *                     configured virtual memory
                    217:  *     ADSECT  : anode represents an allocated output section
                    218:  *     ADPAD   : anode represents a file-padding output section
                    219:  */
                    220: 
                    221: #define ADAVAIL        1
                    222: #define ADSECT 2
                    223: #define ADPAD  4
                    224: /*eject*/
                    225: /*
                    226:  * Structure for Memory Type
                    227:  */
                    228: 
                    229: struct memtype {
                    230:                MEMTYPE *mtnext;        /* ptr to next memtype on MEMLIST */
                    231:                char mtname[8];         /* name of memtype */
                    232:                ADDRESS mtorig;
                    233:                ADDRESS mtlength;
                    234:                int mtattr;             /* attributes of memory type */
                    235:                ANODE *mtaddrhd,        /* start of owned memory nodes */
                    236:                      *mtaddrtl;        /* end of same                 */
                    237:                };
                    238: /*eject*/
                    239: /*
                    240:  * Input Section Header Structure
                    241:  */
                    242: 
                    243: struct insect {
                    244:        struct  scnhdr ishdr;
                    245:        INSECT *isnext;                 /* next input sect on INSEC List */
                    246:        INFILE *isfilptr;               /* ptr to input file */
                    247:        OUTSECT *isoutsec;              /* ptr to output section */
                    248:        INSECT *isincnxt;               /* ptr to next input sect on INCLUDE List*/
                    249:        long isdispl;                   /* Displacement w.r.t. output section */
                    250:        long isrldisp;                  /* Displacement of reloc entries
                    251:                                           w.r.t. reloc of output section */
                    252:        long islndisp;                  /* Displacement of linno entries
                    253:                                           w.r.t. linno of output section */
                    254:        long isnewvad;                  /* "relocated" virtual addr of sect*/
                    255:        long isnewpad;                  /* "relocated" physical addr of sect*/
                    256:        short isfill;                   /* Fill value, if bss section   */
                    257:        short isecnum;                  /* input section number */
                    258:        char isfillfg;                  /* flag indicating fill was set */
                    259:        };
                    260: 
                    261: 
                    262: 
                    263: 
                    264: /*
                    265:  * Output Section Header Structure
                    266:  */
                    267: 
                    268: struct outsect {
                    269:        struct  scnhdr oshdr;
                    270:        int ossecnum;                   /* Section Number */
                    271:        short osfill;                   /* Fill value for holes in section */
                    272:        INSECT *osinclhd;               /* List of input sects included in
                    273:                                           this output section */
                    274:        INSECT *osincltl; 
                    275:        OUTSECT *osnext;                /* Next section on OUTSEC List */
                    276:        long osalign;                   /* no. of bits for alignment */
                    277:        long osblock;                   /* no. of bits for "file" alignment */
                    278:        OUTSECT *osdsnext;              /* next section on DSECT list */
                    279:        char osflags;                   /* flags */
                    280:        };
                    281: /*
                    282:  * Possible values for osflags
                    283:  *     FILL    : flag indicating fill was set
                    284:  *     OSDSECT : flag indicating at least one input section was a dummy section
                    285:  *     OSREG   : at least one of the input sections was a regular section
                    286:  *     OSINFO  : at least one of the input sections was an info section
                    287:  *     OSCOPY  : at least one of the input sections was a copy section
                    288:  */
                    289: #define FILL   1
                    290: #define OSDSECT        2
                    291: #define OSREG  4
                    292: #define OSINFO 8
                    293: #define OSCOPY 16
                    294: 
                    295: 
                    296: 
                    297: 
                    298: 
                    299: /*
                    300:  * Symbol Table Entry structure for global symbols and auxiliary
                    301:  * entries
                    302:  */
                    303: 
                    304: struct gsym {
                    305:                SYMENT sment;           /* symbol table entry           */
                    306:                INSECT *smscnptr;       /* input section ptr    */
                    307:                ITEMID smmyacid;        /* SDP id of this entry         */
                    308:                ITEMID smchainid;       /* SDP id ptr to collision chain */
                    309:                ITEMID smauxid;         /* SDP id to aux entry list     */
                    310:                long smnewval;          /* symbol value after relocation*/
                    311:                long smoutndx;          /* index of symbol in output sym tab*/
                    312:                long smnewvirt;         /* "new" virtual value or offset */
                    313:                int smnamelength;
                    314:                char smlocflg;          /* flag indicating this entry is to be
                    315:                                           written in the "local" part of table
                    316:                                           (for example, functions)     */
                    317:                char smundmsg;          /* flag for undefined symbols to
                    318:                                           indicate that error msg was printed
                    319:                                           (see plocsyms in output.c)   */
                    320:                };
                    321: 
                    322: 
                    323: 
                    324: struct gaux {
                    325:                AUXENT axent;           /* aux entry for a symbol        */
                    326:                int axord;              /* position of aux entry in the list */
                    327:                ITEMID axmyacid;        /* SDP id of this entry          */
                    328:                ITEMID axchainid;       /* SDP id to next aux entry in list */
                    329:                };
                    330: /*eject*/
                    331: /*
                    332:  * Nodes in the Expression Tree
                    333:  */
                    334: 
                    335: union exprnode {
                    336:        struct {
                    337:                char exop;              /* Operator of the node */
                    338:                ENODE *exleft;          /* left expr ptr for binary operator*/
                    339:                                        /* only left ptr used for unary ops */
                    340:                ENODE *exright;         /* right expr ptr for binary operator*/
                    341:                } gnode;
                    342:        /*
                    343:         * These structures are used for
                    344:         *              op == NAME  and  op == DOT
                    345:         *
                    346:         * The first is generated during PASS 1 (parsing), and converted
                    347:         * into the second form in PASS 2
                    348:         */
                    349:        struct {
                    350:                char exop;              /* Operator of the node */
                    351:                char symbol[9];         /* NAME */
                    352:                } pnnode;
                    353:        struct {
                    354:                char exop;              /* Operator of the node */
                    355:                ITEMID exsymptr;        /* SDP access id of symbol table entry*/
                    356:                } nnode;
                    357:        /*
                    358:         * This structure is used for
                    359:         *              op == INT
                    360:         */
                    361:        struct {
                    362:                char exop;              /* Operator of the node */
                    363:                long exvalue;
                    364:                } vnode;
                    365:        };
                    366: /*eject*/
                    367: /*
                    368:  * Input File structure in INFILIST
                    369:  */
                    370: 
                    371: struct infile {
                    372:        INFILE *flnext;                 /* Next file on INFILIST */
                    373:        char *flname;                   /* pointer to file name */
                    374:        long flnlsyms;                  /* No. local sym entries in input file*/
                    375:        long flsymndx;                  /* index into output symbol table
                    376:                                           for local syms from this file */
                    377:        INSECT *flishead;               /* head of INSEC list for this file */
                    378:        INSECT *flistail;               /* tail of INSEC list for this file */
                    379:        long  flfiloff;                 /* used for archive libraries: offset
                    380:                                           form the beginning of the library
                    381:                                           to this member                    */
                    382: #if FLEXNAMES
                    383:        char    *flstrings;
                    384: #endif
                    385:        int   flfilndx;                 /* used for archive libraries: # of
                    386:                                           files to skip before this file*/
                    387: #if DMERT || XL
                    388:        char flplib;                    /* to indicate the file is DMERT's
                    389:                                           public library                 */
                    390: #endif
                    391:        };

unix.superglobalmegacorp.com

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