Project

General

Profile

Statistics
| Revision:

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