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