Annotation of sys/sys/gmon.h, Revision 1.1
1.1 ! nbrk 1: /* $OpenBSD: gmon.h,v 1.4 2003/06/02 23:28:21 millert Exp $ */
! 2: /* $NetBSD: gmon.h,v 1.5 1996/04/09 20:55:30 cgd Exp $ */
! 3:
! 4: /*-
! 5: * Copyright (c) 1982, 1986, 1992, 1993
! 6: * The Regents of the University of California. All rights reserved.
! 7: *
! 8: * Redistribution and use in source and binary forms, with or without
! 9: * modification, are permitted provided that the following conditions
! 10: * are met:
! 11: * 1. Redistributions of source code must retain the above copyright
! 12: * notice, this list of conditions and the following disclaimer.
! 13: * 2. Redistributions in binary form must reproduce the above copyright
! 14: * notice, this list of conditions and the following disclaimer in the
! 15: * documentation and/or other materials provided with the distribution.
! 16: * 3. Neither the name of the University nor the names of its contributors
! 17: * may be used to endorse or promote products derived from this software
! 18: * without specific prior written permission.
! 19: *
! 20: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
! 21: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
! 22: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
! 23: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
! 24: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
! 25: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
! 26: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
! 27: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
! 28: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
! 29: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
! 30: * SUCH DAMAGE.
! 31: *
! 32: * @(#)gmon.h 8.2 (Berkeley) 1/4/94
! 33: */
! 34:
! 35: #ifndef _SYS_GMON_H_
! 36: #define _SYS_GMON_H_
! 37:
! 38: #include <machine/profile.h>
! 39:
! 40: /*
! 41: * Structure prepended to gmon.out profiling data file.
! 42: */
! 43: struct gmonhdr {
! 44: u_long lpc; /* base pc address of sample buffer */
! 45: u_long hpc; /* max pc address of sampled buffer */
! 46: int ncnt; /* size of sample buffer (plus this header) */
! 47: int version; /* version number */
! 48: int profrate; /* profiling clock rate */
! 49: int spare[3]; /* reserved */
! 50: };
! 51: #define GMONVERSION 0x00051879
! 52:
! 53: /*
! 54: * histogram counters are unsigned shorts (according to the kernel).
! 55: */
! 56: #define HISTCOUNTER unsigned short
! 57:
! 58: /*
! 59: * fraction of text space to allocate for histogram counters here, 1/2
! 60: */
! 61: #define HISTFRACTION 2
! 62:
! 63: /*
! 64: * Fraction of text space to allocate for from hash buckets.
! 65: * The value of HASHFRACTION is based on the minimum number of bytes
! 66: * of separation between two subroutine call points in the object code.
! 67: * Given MIN_SUBR_SEPARATION bytes of separation the value of
! 68: * HASHFRACTION is calculated as:
! 69: *
! 70: * HASHFRACTION = MIN_SUBR_SEPARATION / (2 * sizeof(short) - 1);
! 71: *
! 72: * For example, on the VAX, the shortest two call sequence is:
! 73: *
! 74: * calls $0,(r0)
! 75: * calls $0,(r0)
! 76: *
! 77: * which is separated by only three bytes, thus HASHFRACTION is
! 78: * calculated as:
! 79: *
! 80: * HASHFRACTION = 3 / (2 * 2 - 1) = 1
! 81: *
! 82: * Note that the division above rounds down, thus if MIN_SUBR_FRACTION
! 83: * is less than three, this algorithm will not work!
! 84: *
! 85: * In practice, however, call instructions are rarely at a minimal
! 86: * distance. Hence, we will define HASHFRACTION to be 2 across all
! 87: * architectures. This saves a reasonable amount of space for
! 88: * profiling data structures without (in practice) sacrificing
! 89: * any granularity.
! 90: */
! 91: #define HASHFRACTION 2
! 92:
! 93: /*
! 94: * percent of text space to allocate for tostructs with a minimum.
! 95: */
! 96: #define ARCDENSITY 2
! 97: #define MINARCS 50
! 98: #define MAXARCS ((1 << (8 * sizeof(HISTCOUNTER))) - 2)
! 99:
! 100: struct tostruct {
! 101: u_long selfpc;
! 102: long count;
! 103: u_short link;
! 104: u_short pad;
! 105: };
! 106:
! 107: /*
! 108: * a raw arc, with pointers to the calling site and
! 109: * the called site and a count.
! 110: */
! 111: struct rawarc {
! 112: u_long raw_frompc;
! 113: u_long raw_selfpc;
! 114: long raw_count;
! 115: };
! 116:
! 117: /*
! 118: * general rounding functions.
! 119: */
! 120: #define ROUNDDOWN(x,y) (((x)/(y))*(y))
! 121: #define ROUNDUP(x,y) ((((x)+(y)-1)/(y))*(y))
! 122:
! 123: /*
! 124: * The profiling data structures are housed in this structure.
! 125: */
! 126: struct gmonparam {
! 127: int state;
! 128: u_short *kcount;
! 129: u_long kcountsize;
! 130: u_short *froms;
! 131: u_long fromssize;
! 132: struct tostruct *tos;
! 133: u_long tossize;
! 134: long tolimit;
! 135: u_long lowpc;
! 136: u_long highpc;
! 137: u_long textsize;
! 138: u_long hashfraction;
! 139: };
! 140: extern struct gmonparam _gmonparam;
! 141:
! 142: /*
! 143: * Possible states of profiling.
! 144: */
! 145: #define GMON_PROF_ON 0
! 146: #define GMON_PROF_BUSY 1
! 147: #define GMON_PROF_ERROR 2
! 148: #define GMON_PROF_OFF 3
! 149:
! 150: /*
! 151: * Sysctl definitions for extracting profiling information from the kernel.
! 152: */
! 153: #define GPROF_STATE 0 /* int: profiling enabling variable */
! 154: #define GPROF_COUNT 1 /* struct: profile tick count buffer */
! 155: #define GPROF_FROMS 2 /* struct: from location hash bucket */
! 156: #define GPROF_TOS 3 /* struct: destination/count structure */
! 157: #define GPROF_GMONPARAM 4 /* struct: profiling parameters (see above) */
! 158: #endif /* !_SYS_GMON_H_ */
CVSweb