|
|
1.1 root 1: /*
2: * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
3: *
4: * @APPLE_LICENSE_HEADER_START@
5: *
6: * The contents of this file constitute Original Code as defined in and
7: * are subject to the Apple Public Source License Version 1.1 (the
8: * "License"). You may not use this file except in compliance with the
9: * License. Please obtain a copy of the License at
10: * http://www.apple.com/publicsource and read it before using this file.
11: *
12: * This Original Code and all software distributed under the License are
13: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
14: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
15: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
16: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
17: * License for the specific language governing rights and limitations
18: * under the License.
19: *
20: * @APPLE_LICENSE_HEADER_END@
21: */
22: /* Copyright (c) 1995 NeXT Computer, Inc. All Rights Reserved */
23: /*-
24: * Copyright (c) 1982, 1986, 1992, 1993
25: * The Regents of the University of California. All rights reserved.
26: *
27: * Redistribution and use in source and binary forms, with or without
28: * modification, are permitted provided that the following conditions
29: * are met:
30: * 1. Redistributions of source code must retain the above copyright
31: * notice, this list of conditions and the following disclaimer.
32: * 2. Redistributions in binary form must reproduce the above copyright
33: * notice, this list of conditions and the following disclaimer in the
34: * documentation and/or other materials provided with the distribution.
35: * 3. All advertising materials mentioning features or use of this software
36: * must display the following acknowledgement:
37: * This product includes software developed by the University of
38: * California, Berkeley and its contributors.
39: * 4. Neither the name of the University nor the names of its contributors
40: * may be used to endorse or promote products derived from this software
41: * without specific prior written permission.
42: *
43: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
44: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
45: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
46: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
47: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
48: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
49: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
50: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
51: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
52: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
53: * SUCH DAMAGE.
54: *
55: * @(#)gmon.h 8.2 (Berkeley) 1/4/94
56: */
57:
58: #ifndef _SYS_GMON_H_
59: #define _SYS_GMON_H_
60:
61: /*
62: * Structure prepended to gmon.out profiling data file.
63: */
64: struct gmonhdr {
65: u_long lpc; /* base pc address of sample buffer */
66: u_long hpc; /* max pc address of sampled buffer */
67: int ncnt; /* size of sample buffer (plus this header) */
68: int version; /* version number */
69: int profrate; /* profiling clock rate */
70: int spare[3]; /* reserved */
71: };
72: #define GMONVERSION 0x00051879
73:
74: /*
75: * histogram counters are unsigned shorts (according to the kernel).
76: */
77: #define HISTCOUNTER unsigned short
78:
79: /*
80: * fraction of text space to allocate for histogram counters here, 1/2
81: */
82: #define HISTFRACTION 2
83:
84: /*
85: * Fraction of text space to allocate for from hash buckets.
86: * The value of HASHFRACTION is based on the minimum number of bytes
87: * of separation between two subroutine call points in the object code.
88: * Given MIN_SUBR_SEPARATION bytes of separation the value of
89: * HASHFRACTION is calculated as:
90: *
91: * HASHFRACTION = MIN_SUBR_SEPARATION / (2 * sizeof(short) - 1);
92: *
93: * For example, on the VAX, the shortest two call sequence is:
94: *
95: * calls $0,(r0)
96: * calls $0,(r0)
97: *
98: * which is separated by only three bytes, thus HASHFRACTION is
99: * calculated as:
100: *
101: * HASHFRACTION = 3 / (2 * 2 - 1) = 1
102: *
103: * Note that the division above rounds down, thus if MIN_SUBR_FRACTION
104: * is less than three, this algorithm will not work!
105: *
106: * In practice, however, call instructions are rarely at a minimal
107: * distance. Hence, we will define HASHFRACTION to be 2 across all
108: * architectures. This saves a reasonable amount of space for
109: * profiling data structures without (in practice) sacrificing
110: * any granularity.
111: */
112: #define HASHFRACTION 2
113:
114: /*
115: * percent of text space to allocate for tostructs with a minimum.
116: */
117: #define ARCDENSITY 2
118: #define MINARCS 50
119: #define MAXARCS ((1 << (8 * sizeof(HISTCOUNTER))) - 2)
120:
121: struct tostruct {
122: u_long selfpc;
123: long count;
124: u_short link;
125: u_short order;
126: };
127:
128: /*
129: * a raw arc, with pointers to the calling site and
130: * the called site and a count.
131: */
132: struct rawarc {
133: u_long raw_frompc;
134: u_long raw_selfpc;
135: long raw_count;
136: };
137:
138: /*
139: * general rounding functions.
140: */
141: #define ROUNDDOWN(x,y) (((x)/(y))*(y))
142: #define ROUNDUP(x,y) ((((x)+(y)-1)/(y))*(y))
143:
144: /*
145: * The profiling data structures are housed in this structure.
146: */
147: struct gmonparam {
148: int state;
149: u_short *kcount;
150: u_long kcountsize;
151: u_short *froms;
152: u_long fromssize;
153: struct tostruct *tos;
154: u_long tossize;
155: long tolimit;
156: u_long lowpc;
157: u_long highpc;
158: u_long textsize;
159: u_long hashfraction;
160: };
161: extern struct gmonparam _gmonparam;
162:
163: /*
164: * Possible states of profiling.
165: */
166: #define GMON_PROF_ON 0
167: #define GMON_PROF_BUSY 1
168: #define GMON_PROF_ERROR 2
169: #define GMON_PROF_OFF 3
170:
171: /*
172: * Sysctl definitions for extracting profiling information from the kernel.
173: */
174: #define GPROF_STATE 0 /* int: profiling enabling variable */
175: #define GPROF_COUNT 1 /* struct: profile tick count buffer */
176: #define GPROF_FROMS 2 /* struct: from location hash bucket */
177: #define GPROF_TOS 3 /* struct: destination/count structure */
178: #define GPROF_GMONPARAM 4 /* struct: profiling parameters (see above) */
179:
180: /*
181: * In order to support more information than in the original mon.out and
182: * gmon.out files there is an alternate gmon.out file format. The alternate
183: * gmon.out file format starts with a magic number then separates the
184: * information with gmon_data structs.
185: */
186: #define GMON_MAGIC 0xbeefbabe
187: struct gmon_data {
188: unsigned long type; /* constant for type of data following this struct */
189: unsigned long size; /* size in bytes of the data following this struct */
190: };
191:
192: /*
193: * The GMONTYPE_SAMPLES gmon_data.type is for the histogram counters described
194: * above and has a struct gmonhdr followed by the counters.
195: */
196: #define GMONTYPE_SAMPLES 1
197: /*
198: * The GMONTYPE_RAWARCS gmon_data.type is for the raw arcs described above.
199: */
200: #define GMONTYPE_RAWARCS 2
201: /*
202: * The GMONTYPE_ARCS_ORDERS gmon_data.type is for the raw arcs with a call
203: * order field. The order is the order is a sequence number for the order each
204: * call site was executed. Raw_order values start at 1 not zero. Other than
205: * the raw_order field this is the same information as in the struct rawarc.
206: */
207: #define GMONTYPE_ARCS_ORDERS 3
208: struct rawarc_order {
209: unsigned long raw_frompc;
210: unsigned long raw_selfpc;
211: unsigned long raw_count;
212: unsigned long raw_order;
213: };
214: /*
215: * The GMONTYPE_DYLD_STATE gmon_data.type is for the dynamic link editor state
216: * of the program.
217: * The informations starts with an unsigned long with the count of states:
218: * image_count
219: * Then each state follows in the file. The state is made up of
220: * image_header (the address where dyld loaded this image)
221: * vmaddr_slide (the amount dyld slid this image from it's vmaddress)
222: * name (the file name dyld loaded this image from)
223: */
224: #define GMONTYPE_DYLD_STATE 4
225: #endif /* !_SYS_GMON_H_ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.