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