| 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_ */ |