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