Annotation of 40BSD/cmd/pc0/stab.c, revision 1.1

1.1     ! root        1: /* Copyright (c) 1980 Regents of the University of California */
        !             2: 
        !             3: static char sccsid[] = "@(#)stab.c 1.3 9/4/80";
        !             4: 
        !             5:     /*
        !             6:      * procedures to put out sdb symbol table information.
        !             7:      * and stabs for separate compilation type checking.
        !             8:      * these use the new .stabs, .stabn, and .stabd directives
        !             9:      */
        !            10: 
        !            11: #include       "whoami.h"
        !            12: #ifdef PC
        !            13:     /* and the rest of the file */
        !            14: #   include    "0.h"
        !            15: #   include    <stab.h>
        !            16: 
        !            17:     /*
        !            18:      *  additional symbol definition for <stab.h>
        !            19:      * that is used by the separate compilation facility --
        !            20:      * eventually, <stab.h> should be updated to include this 
        !            21:      */
        !            22: 
        !            23: #   include    "pstab.h"
        !            24: #   include    "pc.h"
        !            25: 
        !            26:     /*
        !            27:      * absolute value: line numbers are negative if error recovery.
        !            28:      */
        !            29: #define        ABS( x )        ( x < 0 ? -x : x )
        !            30: 
        !            31:     /*
        !            32:      * variables
        !            33:      */
        !            34: stabvar( name , type , level , offset , length , line )
        !            35:     char       *name;
        !            36:     int                type;
        !            37:     int                level;
        !            38:     int                offset;
        !            39:     int                length;
        !            40:     int                line;
        !            41:     {
        !            42: 
        !            43:            /*
        !            44:             *  for separate compilation
        !            45:             */
        !            46:        if ( level == 1 ) {
        !            47:            putprintf( "        .stabs  \"%s\",0x%x,0,0x%x,0x%x" , 0 
        !            48:                        , name , N_PC , N_PGVAR , ABS( line ) );
        !            49:        }
        !            50:            /*
        !            51:             *  for sdb
        !            52:             */
        !            53:        if ( ! opt('g') ) {
        !            54:                return;
        !            55:        }
        !            56:        putprintf( "    .stabs  \"" , 1 );
        !            57:        putprintf( NAMEFORMAT , 1 , name );
        !            58:        if ( level == 1 ) {
        !            59:                putprintf( "\",0x%x,0,0x%x,0" , 0 , N_GSYM , type );
        !            60:        } else {
        !            61:                putprintf( "\",0x%x,0,0x%x,0x%x" , 0 , N_LSYM , type , offset );
        !            62:        }
        !            63:        putprintf( "    .stabs  \"" , 1 );
        !            64:        putprintf( NAMEFORMAT , 1 , name );
        !            65:        putprintf( "\",0x%x,0,0,0x%x" , 0 , N_LENG , length );
        !            66: 
        !            67: }
        !            68: 
        !            69: 
        !            70:     /*
        !            71:      * parameters
        !            72:      */
        !            73: stabparam( name , type , offset , length )
        !            74:     char       *name;
        !            75:     int                type;
        !            76:     int                offset;
        !            77:     int                length;
        !            78:     {
        !            79:        
        !            80:        if ( ! opt('g') ) {
        !            81:                return;
        !            82:        }
        !            83:        putprintf( "    .stabs  \"" , 1 );
        !            84:        putprintf( NAMEFORMAT , 1 , name );
        !            85:        putprintf( "\",0x%x,0,0x%x,0x%x" , 0 , N_PSYM , type , offset );
        !            86:        putprintf( "    .stabs  \"" , 1 );
        !            87:        putprintf( NAMEFORMAT , 1 , name );
        !            88:        putprintf( "\",0x%x,0,0,0x%x" , 0 , N_LENG , length );
        !            89:     }
        !            90: 
        !            91:     /*
        !            92:      * fields
        !            93:      */
        !            94: stabfield( name , type , offset , length )
        !            95:     char       *name;
        !            96:     int                type;
        !            97:     int                offset;
        !            98:     int                length;
        !            99:     {
        !           100:        
        !           101:        if ( ! opt('g') ) {
        !           102:                return;
        !           103:        }
        !           104:        putprintf( "    .stabs  \"" , 1 );
        !           105:        putprintf( NAMEFORMAT , 1 , name );
        !           106:        putprintf( "\",0x%x,0,0x%x,0x%x" , 0 , N_SSYM , type , offset );
        !           107:        putprintf( "    .stabs  \"" , 1 );
        !           108:        putprintf( NAMEFORMAT , 1 , name );
        !           109:        putprintf( "\",0x%x,0,0,0x%x" , 0 , N_LENG , length );
        !           110:     }
        !           111: 
        !           112:     /*
        !           113:      * left brackets
        !           114:      */
        !           115: stablbrac( level )
        !           116:     int        level;
        !           117:     {
        !           118: 
        !           119:        if ( ! opt('g') ) {
        !           120:                return;
        !           121:        }
        !           122:        putprintf( "    .stabd  0x%x,0,0x%x" , 0 , N_LBRAC , level );
        !           123:     }
        !           124: 
        !           125:     /*
        !           126:      * right brackets
        !           127:      */
        !           128: stabrbrac( level )
        !           129:     int        level;
        !           130:     {
        !           131: 
        !           132:        if ( ! opt('g') ) {
        !           133:                return;
        !           134:        }
        !           135:        putprintf( "    .stabd  0x%x,0,0x%x" , 0 , N_RBRAC , level );
        !           136:     }
        !           137: 
        !           138:     /*
        !           139:      * functions
        !           140:      */
        !           141: stabfunc( name , class , line , level )
        !           142:     char       *name;
        !           143:     int                class;
        !           144:     int                line;
        !           145:     long       level;
        !           146:     {
        !           147:        int     type;
        !           148:        long    i;
        !           149: 
        !           150:            /*
        !           151:             *  for separate compilation
        !           152:             */
        !           153:        if ( level == 1 ) {
        !           154:            if ( class == FUNC ) {
        !           155:                putprintf( "    .stabs  \"%s\",0x%x,0,0x%x,0x%x" , 0 
        !           156:                            , name , N_PC , N_PGFUNC , ABS( line ) );
        !           157:            } else if ( class == PROC ) {
        !           158:                putprintf( "    .stabs  \"%s\",0x%x,0,0x%x,0x%x" , 0 
        !           159:                            , name , N_PC , N_PGPROC , ABS( line ) );
        !           160:            }
        !           161:        }
        !           162:            /*
        !           163:             *  for sdb
        !           164:             */
        !           165:        if ( ! opt('g') ) {
        !           166:                return;
        !           167:        }
        !           168:        putprintf( "    .stabs  \"" , 1 );
        !           169:        putprintf( NAMEFORMAT , 1 , name );
        !           170:        putprintf( "\",0x%x,0,0x%x," , 1 , N_FUN , line );
        !           171:        for ( i = 1 ; i < level ; i++ ) {
        !           172:            putprintf( EXTFORMAT , 1 , enclosing[ i ] );
        !           173:        }
        !           174:        putprintf( EXTFORMAT , 0 , name );
        !           175:     }
        !           176: 
        !           177:     /*
        !           178:      * source line numbers
        !           179:      */
        !           180: stabline( line )
        !           181:     int        line;
        !           182:     {
        !           183:        if ( ! opt('g') ) {
        !           184:                return;
        !           185:        }
        !           186:        putprintf( "    .stabd  0x%x,0,0x%x" , 0 , N_SLINE , ABS( line ) );
        !           187:     }
        !           188: 
        !           189:     /*
        !           190:      * source files
        !           191:      */
        !           192: stabsource( filename )
        !           193:     char       *filename;
        !           194:     {
        !           195:        int     label;
        !           196:        
        !           197:            /*
        !           198:             *  for separate compilation
        !           199:             */
        !           200:        putprintf( "    .stabs  \"%s\",0x%x,0,0x%x,0" , 0 
        !           201:                    , filename , N_PC , N_PSO );
        !           202:            /*
        !           203:             *  for sdb
        !           204:             */
        !           205:        if ( ! opt('g') ) {
        !           206:                return;
        !           207:        }
        !           208:        label = getlab();
        !           209:        putprintf( "    .stabs  \"" , 1 );
        !           210:        putprintf( NAMEFORMAT , 1 , filename );
        !           211:        putprintf( "\",0x%x,0,0," , 1 , N_SO );
        !           212:        putprintf( PREFIXFORMAT , 0 , LLABELPREFIX , label );
        !           213:        putprintf( PREFIXFORMAT , 1 , LLABELPREFIX , label );
        !           214:        putprintf( ":" , 0 );
        !           215:     }
        !           216: 
        !           217:     /*
        !           218:      * included files get one or more of these:
        !           219:      * one as they are entered by a #include,
        !           220:      * and one every time they are returned to by nested #includes
        !           221:      */
        !           222: stabinclude( filename )
        !           223:     char       *filename;
        !           224:     {
        !           225:        int     label;
        !           226:        
        !           227:            /*
        !           228:             *  for separate compilation
        !           229:             */
        !           230:        putprintf( "    .stabs  \"%s\",0x%x,0,0x%x,0" , 0 
        !           231:                    , filename , N_PC , N_PSOL );
        !           232:            /*
        !           233:             *  for sdb
        !           234:             */
        !           235:        if ( ! opt('g') ) {
        !           236:                return;
        !           237:        }
        !           238:        label = getlab();
        !           239:        putprintf( "    .stabs  \"" , 1 );
        !           240:        putprintf( NAMEFORMAT , 1 , filename );
        !           241:        putprintf( "\",0x%x,0,0," , 1 , N_SOL );
        !           242:        putprintf( PREFIXFORMAT , 0 , LLABELPREFIX , label );
        !           243:        putprintf( PREFIXFORMAT , 1 , LLABELPREFIX , label );
        !           244:        putprintf( ":" , 0 );
        !           245:     }
        !           246: 
        !           247: 
        !           248: /*
        !           249:  * global Pascal symbols :
        !           250:  *   labels, types, constants, and external procedure and function names:
        !           251:  *   These are used by the separate compilation facility
        !           252:  *   to be able to check for disjoint header files.
        !           253:  */
        !           254: 
        !           255:     /*
        !           256:      * global labels
        !           257:      */
        !           258: stabglabel( label , line )
        !           259:     char       *label;
        !           260:     int                line;
        !           261:     {
        !           262: 
        !           263:        putprintf( "    .stabs  \"%s\",0x%x,0,0x%x,0x%x" , 0 
        !           264:                    , label , N_PC , N_PGLABEL , ABS( line ) );
        !           265:     }
        !           266: 
        !           267:     /*
        !           268:      * global constants
        !           269:      */
        !           270: stabgconst( const , line )
        !           271:     char       *const;
        !           272:     int                line;
        !           273:     {
        !           274: 
        !           275:            putprintf( "        .stabs  \"%s\",0x%x,0,0x%x,0x%x" , 0 
        !           276:                        , const , N_PC , N_PGCONST , ABS( line ) );
        !           277:     }
        !           278: 
        !           279:     /*
        !           280:      * global types
        !           281:      */
        !           282: stabgtype( type , line )
        !           283:     char       *type;
        !           284:     int                line;
        !           285:     {
        !           286: 
        !           287:            putprintf( "        .stabs  \"%s\",0x%x,0,0x%x,0x%x" , 0 
        !           288:                        , type , N_PC , N_PGTYPE , ABS( line ) );
        !           289:     }
        !           290: 
        !           291: 
        !           292:     /*
        !           293:      * external functions and procedures
        !           294:      */        
        !           295: stabefunc( name , class , line )
        !           296:     char       *name;
        !           297:     int                class;
        !           298:     int                line;
        !           299:     {
        !           300:        int     type;
        !           301: 
        !           302:        if ( class == FUNC ) {
        !           303:            type = N_PEFUNC;
        !           304:        } else if ( class == PROC ) {
        !           305:            type = N_PEPROC;
        !           306:        } else {
        !           307:            return;
        !           308:        }
        !           309:        putprintf( "    .stabs  \"%s\",0x%x,0,0x%x,0x%x" , 0 
        !           310:                    , name , N_PC , type , ABS( line ) );
        !           311:     }
        !           312: 
        !           313: #endif PC

unix.superglobalmegacorp.com

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