Mercurial > vba-clojure
comparison src/prof/gmon.h @ 1:f9f4f1b99eed
importing src directory
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Sat, 03 Mar 2012 10:31:27 -0600 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
0:8ced16adf2e1 | 1:f9f4f1b99eed |
---|---|
1 /* | |
2 * Copyright (c) 1983, 1991, 1993, 2001 | |
3 * The Regents of the University of California. All rights reserved. | |
4 * | |
5 * Redistribution and use in source and binary forms, with or without | |
6 * modification, are permitted provided that the following conditions | |
7 * are met: | |
8 * 1. Redistributions of source code must retain the above copyright | |
9 * notice, this list of conditions and the following disclaimer. | |
10 * 2. Redistributions in binary form must reproduce the above copyright | |
11 * notice, this list of conditions and the following disclaimer in the | |
12 * documentation and/or other materials provided with the distribution. | |
13 * 3. Neither the name of the University nor the names of its contributors | |
14 * may be used to endorse or promote products derived from this software | |
15 * without specific prior written permission. | |
16 * | |
17 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND | |
18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | |
19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | |
20 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE | |
21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | |
22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | |
23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | |
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | |
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | |
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |
27 * SUCH DAMAGE. | |
28 */ | |
29 #ifndef gmon_h | |
30 #define gmon_h | |
31 | |
32 #include <stdint.h> | |
33 typedef uint32_t u32; | |
34 | |
35 /* Size of the 4.4BSD gmon header */ | |
36 #define GMON_HDRSIZE_BSD44_32 (4 + 4 + 4 + 4 + 4 + (3 * 4)) | |
37 #define GMON_HDRSIZE_BSD44_64 (8 + 8 + 4 + 4 + 4 + (3 * 4)) | |
38 | |
39 #if 0 /* For documentation purposes only. */ | |
40 struct raw_phdr | |
41 { | |
42 char low_pc[sizeof(void *)]; /* base pc address of sample buffer */ | |
43 char high_pc[sizeof(void *)];/* max pc address of sampled buffer */ | |
44 char ncnt[4]; /* size of sample buffer (plus this | |
45 header) */ | |
46 | |
47 char version[4]; /* version number */ | |
48 char profrate[4]; /* profiling clock rate */ | |
49 char spare[3*4]; /* reserved */ | |
50 }; | |
51 #endif | |
52 | |
53 #define GMONVERSION 0x00051879 | |
54 | |
55 /* Size of the old BSD gmon header */ | |
56 #define GMON_HDRSIZE_OLDBSD_32 (4 + 4 + 4) | |
57 | |
58 /* FIXME: Checking host compiler defines here means that we can't | |
59 use a cross gprof alpha OSF. */ | |
60 #if defined(__alpha__) && defined (__osf__) | |
61 #define GMON_HDRSIZE_OLDBSD_64 (8 + 8 + 4 + 4) | |
62 #else | |
63 #define GMON_HDRSIZE_OLDBSD_64 (8 + 8 + 4) | |
64 #endif | |
65 | |
66 #if 0 /* For documentation purposes only. */ | |
67 struct old_raw_phdr | |
68 { | |
69 char low_pc[sizeof(void *)]; /* base pc address of sample buffer */ | |
70 char high_pc[sizeof(void *)];/* max pc address of sampled buffer */ | |
71 char ncnt[4]; /* size of sample buffer (plus this | |
72 header) */ | |
73 #if defined (__alpha__) && defined (__osf__) | |
74 /* | |
75 * DEC's OSF v3.0 uses 4 bytes of padding to bring the header to | |
76 * a size that is a multiple of 8. | |
77 */ | |
78 char pad[4]; | |
79 #endif | |
80 }; | |
81 #endif | |
82 | |
83 /* | |
84 * Histogram counters are unsigned shorts: | |
85 */ | |
86 #define HISTCOUNTER unsigned short | |
87 | |
88 /* | |
89 * Fraction of text space to allocate for histogram counters here, 1/2: | |
90 */ | |
91 #define HISTFRACTION 2 | |
92 | |
93 /* | |
94 * Fraction of text space to allocate for from hash buckets. The | |
95 * value of HASHFRACTION is based on the minimum number of bytes of | |
96 * separation between two subroutine call points in the object code. | |
97 * Given MIN_SUBR_SEPARATION bytes of separation the value of | |
98 * HASHFRACTION is calculated as: | |
99 * | |
100 * HASHFRACTION = MIN_SUBR_SEPARATION / (2 * sizeof(short) - 1); | |
101 * | |
102 * For the VAX, the shortest two call sequence is: | |
103 * | |
104 * calls $0,(r0) | |
105 * calls $0,(r0) | |
106 * | |
107 * which is separated by only three bytes, thus HASHFRACTION is | |
108 * calculated as: | |
109 * | |
110 * HASHFRACTION = 3 / (2 * 2 - 1) = 1 | |
111 * | |
112 * Note that the division above rounds down, thus if MIN_SUBR_FRACTION | |
113 * is less than three, this algorithm will not work! | |
114 */ | |
115 #define HASHFRACTION 1 | |
116 | |
117 /* | |
118 * Percent of text space to allocate for tostructs with a minimum: | |
119 */ | |
120 #define ARCDENSITY 2 | |
121 #define MINARCS 50 | |
122 | |
123 struct tostruct | |
124 { | |
125 u32 selfpc; | |
126 int count; | |
127 unsigned short link; | |
128 }; | |
129 | |
130 /* | |
131 * A raw arc, with pointers to the calling site and the called site | |
132 * and a count. Everything is defined in terms of characters so | |
133 * as to get a packed representation (otherwise, different compilers | |
134 * might introduce different padding): | |
135 */ | |
136 #if 0 /* For documentation purposes only. */ | |
137 struct raw_arc | |
138 { | |
139 char from_pc[sizeof(void *)]; | |
140 char self_pc[sizeof(void *)]; | |
141 char count[sizeof(long)]; | |
142 }; | |
143 #endif | |
144 | |
145 /* | |
146 * General rounding functions: | |
147 */ | |
148 #define ROUNDDOWN(x,y) (((x)/(y))*(y)) | |
149 #define ROUNDUP(x,y) ((((x)+(y)-1)/(y))*(y)) | |
150 | |
151 #endif /* gmon_h */ |