Annotation of 43BSD/ucb/lisp/franz/lamgc.c, revision 1.1

1.1     ! root        1: #ifndef lint
        !             2: static char *rcsid =
        !             3:    "$Header: lamgc.c,v 1.5 84/03/31 22:34:28 layer Exp $";
        !             4: #endif
        !             5: 
        !             6: /*                                     -[Sat Jan 29 13:07:37 1983 by jkf]-
        !             7:  *     lamgc.c                         $Locker:  $
        !             8:  * file used to meter gc, not always loaded
        !             9:  *
        !            10:  * (c) copyright 1982, Regents of the University of California
        !            11:  */
        !            12: 
        !            13: #include "global.h"
        !            14: #include "gc.h"
        !            15: #include <sys/types.h>
        !            16: #ifdef METER
        !            17: #include <sys/vtimes.h>
        !            18: #endif
        !            19: 
        !            20: /* 
        !            21:   this file  is temporary and will contain routines to meter 
        !            22:   the garbage collector
        !            23:  */
        !            24: 
        !            25: /* gcstat - temporary routine used to report on gc statistics.
        !            26:    if this causes variables to be undefined,then it should be removed
        !            27: */
        !            28: 
        !            29: extern int *beginsweep,gensymcounter;
        !            30: int gcstat;
        !            31: int mrkdpcnt;
        !            32: int gccount;
        !            33: int conssame;
        !            34: int consdiff;
        !            35: int consnil;
        !            36: 
        !            37: 
        !            38: /*
        !            39:  *     gcstat  - initiate and record gc statistics
        !            40:  * calls:
        !            41:  *     (gcstat 0) -- initiate gc statistics by creating gc.out
        !            42:  *                   and writing header.
        !            43:  *     (gcstat 1) -- finish off gc statistics file by writing typetable
        !            44:  *                   and closing file.
        !            45:  */
        !            46: lispval
        !            47: Lgcstat()
        !            48: {
        !            49:        register lispval handy;
        !            50:        int nbytes;
        !            51:        struct gchead hhh;
        !            52: 
        !            53:        chkarg(1,"gcstat");
        !            54: 
        !            55:        if(TYPE(handy=lbot->val) != INT)
        !            56:        {       error("gcstat: non integer arg ",FALSE);
        !            57:        }
        !            58: 
        !            59:        switch(handy->i)
        !            60:        {
        !            61:            case 0:  if((gcstat = creat("gc.out",0644)) < 0)
        !            62:                       error("cant open gc.out",FALSE);
        !            63:                     hhh.version = 5;
        !            64:                     hhh.lowdata = (int)beginsweep;
        !            65:                     printf("writing %d bytes \n",sizeof(hhh));
        !            66:                     write(gcstat,(char *)&hhh,sizeof(hhh));
        !            67:                     gccount = 0;
        !            68:                     return(tatom);
        !            69: 
        !            70:            case 1:
        !            71:                     /* first write out the type table */ 
        !            72:                     nbytes = 0;
        !            73:                     /* 0 means type table follows */
        !            74:                     printf("gc's %d, writing %d bytes \n",gccount,
        !            75:                                  sizeof(nbytes));
        !            76:                     write(gcstat,(char *)&nbytes,sizeof(nbytes));
        !            77:                     write(gcstat,(char *)&typetable[ATOX(beginsweep)+1],
        !            78:                                nbytes = ((int)datalim - (int)beginsweep)>>9);
        !            79:                     printf("writing %d bytes \n",nbytes+sizeof(nbytes));
        !            80:                     write(gcstat,(char *)&nbytes,sizeof(nbytes));
        !            81:                     close(gcstat);
        !            82:                     gcstat = 0;
        !            83:                     return(inewint(nbytes));
        !            84:            default:
        !            85:                     error("Bad value to gcstat ",TRUE);
        !            86:        }
        !            87:        /* NOTREACHED */
        !            88: }
        !            89: extern int bitmapi[];          /* a bit of a lie it is really a double array*/
        !            90: char *bitmapc = (char *)bitmapi;
        !            91: /* called in the garbage collector after the bit maps have been made 
        !            92:    only if gcstat is non zero */
        !            93: gcdump()
        !            94: {
        !            95: #ifdef
        !            96:        extern struct vtimes premark,presweep,alldone;
        !            97:        int nbytes, recsize;
        !            98:        /* 16 bytes/page in the bitmap */
        !            99:        nbytes = (((int) datalim - (int) beginsweep) >> 9) * 16;
        !           100:        recsize = nbytes + 6*sizeof(int) + 3*sizeof(struct vtimes);
        !           101:        write(gcstat,(char *)&recsize,sizeof(recsize)); /* whole record size */
        !           102:        write(gcstat,(char *)&premark,sizeof(premark));
        !           103:        write(gcstat,(char *)&presweep,sizeof(presweep));
        !           104:        write(gcstat,(char *)&alldone,sizeof(alldone));
        !           105:        write(gcstat,(char *)&gensymcounter,sizeof(int));
        !           106:        write(gcstat,(char *)&conssame,sizeof(int));
        !           107:        write(gcstat,(char *)&consdiff,sizeof(int));
        !           108:        write(gcstat,(char *)&consnil,sizeof(int));
        !           109:        write(gcstat,(char *)&mrkdpcnt,sizeof(int));
        !           110:        write(gcstat,(char *)&nbytes,sizeof(nbytes));   /* bit table size */
        !           111:        write(gcstat,(char *)&bitmapc[ATOX(beginsweep) * 16],nbytes);
        !           112:        printf("gc: %d, written %d bytes\n",++gccount,nbytes);
        !           113: #endif
        !           114: }

unix.superglobalmegacorp.com

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