if (!defined &_SYS_MALLOC_H_) {
    eval 'sub _SYS_MALLOC_H_ {1;}';
    eval 'sub KMEMSTATS {1;}';
    eval 'sub M_WAITOK {0x0000;}';
    eval 'sub M_NOWAIT {0x0001;}';
    eval 'sub M_FREE {0;}';
    eval 'sub M_MBUF {1;}';
    eval 'sub M_DEVBUF {2;}';
    eval 'sub M_SOCKET {3;}';
    eval 'sub M_PCB {4;}';
    eval 'sub M_RTABLE {5;}';
    eval 'sub M_HTABLE {6;}';
    eval 'sub M_FTABLE {7;}';
    eval 'sub M_ZOMBIE {8;}';
    eval 'sub M_IFADDR {9;}';
    eval 'sub M_SOOPTS {10;}';
    eval 'sub M_SONAME {11;}';
    eval 'sub M_NAMEI {12;}';
    eval 'sub M_GPROF {13;}';
    eval 'sub M_IOCTLOPS {14;}';
    eval 'sub M_MAPMEM {15;}';
    eval 'sub M_CRED {16;}';
    eval 'sub M_PGRP {17;}';
    eval 'sub M_SESSION {18;}';
    eval 'sub M_IOV {19;}';
    eval 'sub M_MOUNT {20;}';
    eval 'sub M_FHANDLE {21;}';
    eval 'sub M_NFSREQ {22;}';
    eval 'sub M_NFSMNT {23;}';
    eval 'sub M_NFSNODE {24;}';
    eval 'sub M_VNODE {25;}';
    eval 'sub M_CACHE {26;}';
    eval 'sub M_DQUOT {27;}';
    eval 'sub M_UFSMNT {28;}';
    eval 'sub M_SHM {29;}';
    eval 'sub M_VMMAP {30;}';
    eval 'sub M_VMMAPENT {31;}';
    eval 'sub M_VMOBJ {32;}';
    eval 'sub M_VMOBJHASH {33;}';
    eval 'sub M_VMPMAP {34;}';
    eval 'sub M_VMPVENT {35;}';
    eval 'sub M_VMPAGER {36;}';
    eval 'sub M_VMPGDATA {37;}';
    eval 'sub M_FILE {38;}';
    eval 'sub M_FILEDESC {39;}';
    eval 'sub M_LOCKF {40;}';
    eval 'sub M_PROC {41;}';
    eval 'sub M_SUBPROC {42;}';
    eval 'sub M_SEGMENT {43;}';
    eval 'sub M_LFSNODE {44;}';
    eval 'sub M_FFSNODE {45;}';
    eval 'sub M_MFSNODE {46;}';
    eval 'sub M_NQLEASE {47;}';
    eval 'sub M_NQMHOST {48;}';
    eval 'sub M_NETADDR {49;}';
    eval 'sub M_NFSSVC {50;}';
    eval 'sub M_NFSUID {51;}';
    eval 'sub M_NFSD {52;}';
    eval 'sub M_IPMOPTS {53;}';
    eval 'sub M_IPMADDR {54;}';
    eval 'sub M_IFMADDR {55;}';
    eval 'sub M_MRTABLE {56;}';
    eval 'sub M_ISOFSMNT {57;}';
    eval 'sub M_ISOFSNODE {58;}';
    eval 'sub M_MSDOSFSMNT {59;}';
    eval 'sub M_MSDOSFSFAT {60;}';
    eval 'sub M_MSDOSFSNODE {61;}';
    eval 'sub M_TTYS {62;}';
    eval 'sub M_EXEC {63;}';
    eval 'sub M_MISCFSMNT {64;}';
    eval 'sub M_MISCFSNODE {65;}';
    eval 'sub M_ADOSFSMNT {66;}';
    eval 'sub M_ADOSFSNODE {67;}';
    eval 'sub M_ANODE {68;}';
    eval 'sub M_TEMP {84;}';
    eval 'sub M_LAST {85;}';
    eval 'sub INITKMEMNAMES {{ "free", "mbuf", "devbuf", "socket", "pcb", "routetbl", "hosttbl", "fragtbl", "zombie", "ifaddr", "soopts", "soname", "namei", "gprof", "ioctlops", "mapmem", "cred", "pgrp", "session", "iov", "mount", "fhandle", "NFS req", "NFS mount", "NFS node", "vnodes", "namecache", "UFS quota", "UFS mount", "shm", "VM map", "VM mapent", "VM object", "VM objhash", "VM pmap", "VM pvmap", "VM pager", "VM pgdata", "file", "file desc", "lockf", "proc", "subproc", "LFS segment", "LFS node", "FFS node", "MFS node", "NQNFS Lease", "NQNFS Host", "Export Host", "NFS srvsock", "NFS uid", "NFS daemon", "ip_moptions", "in_multi", "ether_multi", "mrt", "ISOFS mount", "ISOFS node", "MSDOSFS mount", "MSDOSFS fat", "MSDOSFS node", "ttys", "exec", "miscfs mount", "miscfs node", "adosfs mount", "adosfs node", "adosfs anode",  &NULL,  &NULL,  &NULL,  &NULL,  &NULL,  &NULL,  &NULL,  &NULL,  &NULL,  &NULL,  &NULL,  &NULL,  &NULL,  &NULL,  &NULL, "temp", };}';
    eval 'sub ku_freecnt { &ku_un. &freecnt;}';
    eval 'sub ku_pagecnt { &ku_un. &pagecnt;}';
    if (defined &KERNEL) {
	eval 'sub MINALLOCSIZE {(1 <<  &MINBUCKET);}';
	eval 'sub BUCKETINDX {
	    local($size) = @_;
	    eval "($size) <= ( &MINALLOCSIZE * 128) ? ($size) <= ( &MINALLOCSIZE * 8) ? ($size) <= ( &MINALLOCSIZE * 2) ? ($size) <= ( &MINALLOCSIZE * 1) ? ( &MINBUCKET + 0) : ( &MINBUCKET + 1) : ($size) <= ( &MINALLOCSIZE * 4) ? ( &MINBUCKET + 2) : ( &MINBUCKET + 3) : ($size) <= ( &MINALLOCSIZE* 32) ? ($size) <= ( &MINALLOCSIZE * 16) ? ( &MINBUCKET + 4) : ( &MINBUCKET + 5) : ($size) <= ( &MINALLOCSIZE * 64) ? ( &MINBUCKET + 6) : ( &MINBUCKET + 7) : ($size) <= ( &MINALLOCSIZE * 2048) ? ($size) <= ( &MINALLOCSIZE * 512) ? ($size) <= ( &MINALLOCSIZE * 256) ? ( &MINBUCKET + 8) : ( &MINBUCKET + 9) : ($size) <= ( &MINALLOCSIZE * 1024) ? ( &MINBUCKET + 10) : ( &MINBUCKET + 11) : ($size) <= ( &MINALLOCSIZE * 8192) ? ($size) <= ( &MINALLOCSIZE * 4096) ? ( &MINBUCKET + 12) : ( &MINBUCKET + 13) : ($size) <= ( &MINALLOCSIZE * 16384) ? ( &MINBUCKET + 14) : ( &MINBUCKET + 15)";
	}';
	eval 'sub kmemxtob {
	    local($alloc) = @_;
	    eval "( &kmembase + ($alloc) *  &NBPG)";
	}';
	eval 'sub btokmemx {
	    local($addr) = @_;
	    eval "((( &caddr_t)($addr) -  &kmembase) /  &NBPG)";
	}';
	eval 'sub btokup {
	    local($addr) = @_;
	    eval "(& &kmemusage[(( &caddr_t)($addr) -  &kmembase) >>  &CLSHIFT])";
	}';
	if (defined( &KMEMSTATS) || defined( &DIAGNOSTIC)) {
	    eval 'sub MALLOC {
	        local($space, $cast, $size, $type, $flags) = @_;
	        eval "($space) = ($cast) &malloc(($size), $type, $flags)";
	    }';
	    eval 'sub FREE {
	        local($addr, $type) = @_;
	        eval " &free(( &caddr_t)($addr), $type)";
	    }';
	}
	else {
	    eval 'sub MALLOC {
	        local($space, $cast, $size, $type, $flags) = @_;
	        eval "{  &register struct kmembuckets * &kbp = & &bucket[ &BUCKETINDX($size)]; long  &s =  &splimp();  &if ( &kbp-> &kb_next ==  &NULL) { ($space) = ($cast) &malloc(($size), $type, $flags); }  &else { ($space) = ($cast) &kbp-> &kb_next;  &kbp-> &kb_next = *( &caddr_t *)($space); }  &splx( &s); }";
	    }';
	    eval 'sub FREE {
	        local($addr, $type) = @_;
	        eval "{  &register struct kmembuckets * &kbp;  &register struct kmemusage * &kup =  &btokup($addr); long  &s =  &splimp();  &if (1 <<  &kup-> &ku_indx >  &MAXALLOCSAVE) {  &free(( &caddr_t)($addr), $type); }  &else {  &kbp = & &bucket[ &kup-> &ku_indx];  &if ( &kbp-> &kb_next ==  &NULL)  &kbp-> &kb_next = ( &caddr_t)($addr);  &else *( &caddr_t *)( &kbp-> &kb_last) = ( &caddr_t)($addr); *( &caddr_t *)($addr) =  &NULL;  &kbp-> &kb_last = ( &caddr_t)($addr); }  &splx( &s); }";
	    }';
	}
    }
}
1;
