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

1.1     ! root        1: static char ID[] = "@(#) specsyms.c: 1.2 3/2/83";
        !             2: 
        !             3: #include <stdio.h>
        !             4: 
        !             5: #include "system.h"
        !             6: #include "structs.h"
        !             7: #include "sgsmacros.h"
        !             8: #include "extrns.h"
        !             9: set_spec_syms()
        !            10: {
        !            11: 
        !            12: /*
        !            13:  * For non-relocatable link edits, set up the special symbols.
        !            14:  *
        !            15:  *     1. _TORIGIN : segment register value for the REGION containing
        !            16:  *                     text
        !            17:  *        _DORIGIN : segment register value for the REGION containing
        !            18:  *                     data
        !            19:  *        _TVORIG  : segment register value for the REGION containing
        !            20:  *                     the tv
        !            21:  *     
        !            22:  *     2. _ETEXT : next available address after the end of the output
        !            23:  *                     section _TEXT
        !            24:  *        _EDATA : next available address after the end of the output
        !            25:  *                     section _DATA
        !            26:  *        _END   : next available address after the end of the output
        !            27:  *                     section _BSS
        !            28:  *
        !            29:  *     3. _SORIGIN : first address at or following _END which is 
        !            30:  *                     aligned to a 16-byte boundary
        !            31:  *
        !            32:  *     4. _TV : special symbol with auxiliary entry giving
        !            33:  *              tvlength and tvrange.
        !            34:  */
        !            35: 
        !            36:        register OUTSECT *osptr;
        !            37:        register long base;
        !            38:        SYMTAB  *sym;
        !            39:        AUXENT aux;
        !            40: 
        !            41:        if ( ! aflag )
        !            42:                return;
        !            43: 
        !            44: 
        !            45:        osptr = (OUTSECT *) outsclst.head;
        !            46:        while (osptr) {
        !            47:                if( equal(osptr->oshdr.s_name,_TEXT, 8))
        !            48:                        creatsym(_ETEXT,
        !            49:                                osptr->oshdr.s_paddr + osptr->oshdr.s_size);
        !            50:                else if( equal(osptr->oshdr.s_name,_DATA, 8))
        !            51:                        creatsym(_EDATA,
        !            52:                                osptr->oshdr.s_paddr + osptr->oshdr.s_size);
        !            53:                else if( equal(osptr->oshdr.s_name,_BSS, 8)) {
        !            54:                        base = osptr->oshdr.s_paddr + osptr->oshdr.s_size;
        !            55:                        creatsym(_END, base);
        !            56:                        }
        !            57: #if TRVEC
        !            58:                else if( equal(osptr->oshdr.s_name,_TV,8) ) {
        !            59:                        creatsym(_TV, ((tvspec.tvbndadr == -1L) ?
        !            60:                                        0L : tvspec.tvbndadr));
        !            61:                        zero(&aux, AUXESZ);
        !            62:                        aux.x_tv.x_tvlen = tvspec.tvlength;
        !            63:                        aux.x_tv.x_tvran[0] = tvspec.tvrange[0];
        !            64:                        aux.x_tv.x_tvran[1] = tvspec.tvrange[1];
        !            65:                        aux.x_tv.x_tvfill = -1L;
        !            66:                        sym = findsym(_TV);
        !            67:                        putaux( makeaux(sym, &aux, 0), 1 );
        !            68:                        putsym(sym, 1);
        !            69:                        }
        !            70: #endif
        !            71:                osptr = osptr->osnext;
        !            72:                }
        !            73: }

unix.superglobalmegacorp.com

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