OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [uClibc/] [include/] [sys/] [gmon.h] - Blame information for rev 1325

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1325 phoenix
/*-
2
 * Copyright (c) 1982, 1986, 1992, 1993
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
 * 4. 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
 *      @(#)gmon.h      8.2 (Berkeley) 1/4/94
30
 */
31
 
32
#ifndef _SYS_GMON_H
33
#define _SYS_GMON_H     1
34
 
35
#include <features.h>
36
 
37
#include <sys/types.h>
38
 
39
/*
40
 * See gmon_out.h for gmon.out format.
41
 */
42
 
43
/* structure emitted by "gcc -a".  This must match struct bb in
44
   gcc/libgcc2.c.  It is OK for gcc to declare a longer structure as
45
   long as the members below are present.  */
46
struct __bb
47
{
48
  long                  zero_word;
49
  const char            *filename;
50
  long                  *counts;
51
  long                  ncounts;
52
  struct __bb           *next;
53
  const unsigned long   *addresses;
54
};
55
 
56
extern struct __bb *__bb_head;
57
 
58
/*
59
 * histogram counters are unsigned shorts (according to the kernel).
60
 */
61
#define HISTCOUNTER     unsigned short
62
 
63
/*
64
 * fraction of text space to allocate for histogram counters here, 1/2
65
 */
66
#define HISTFRACTION    2
67
 
68
/*
69
 * Fraction of text space to allocate for from hash buckets.
70
 * The value of HASHFRACTION is based on the minimum number of bytes
71
 * of separation between two subroutine call points in the object code.
72
 * Given MIN_SUBR_SEPARATION bytes of separation the value of
73
 * HASHFRACTION is calculated as:
74
 *
75
 *      HASHFRACTION = MIN_SUBR_SEPARATION / (2 * sizeof(short) - 1);
76
 *
77
 * For example, on the VAX, the shortest two call sequence is:
78
 *
79
 *      calls   $0,(r0)
80
 *      calls   $0,(r0)
81
 *
82
 * which is separated by only three bytes, thus HASHFRACTION is
83
 * calculated as:
84
 *
85
 *      HASHFRACTION = 3 / (2 * 2 - 1) = 1
86
 *
87
 * Note that the division above rounds down, thus if MIN_SUBR_FRACTION
88
 * is less than three, this algorithm will not work!
89
 *
90
 * In practice, however, call instructions are rarely at a minimal
91
 * distance.  Hence, we will define HASHFRACTION to be 2 across all
92
 * architectures.  This saves a reasonable amount of space for
93
 * profiling data structures without (in practice) sacrificing
94
 * any granularity.
95
 */
96
#define HASHFRACTION    2
97
 
98
/*
99
 * Percent of text space to allocate for tostructs.
100
 * This is a heuristic; we will fail with a warning when profiling programs
101
 * with a very large number of very small functions, but that's
102
 * normally OK.
103
 * 2 is probably still a good value for normal programs.
104
 * Profiling a test case with 64000 small functions will work if
105
 * you raise this value to 3 and link statically (which bloats the
106
 * text size, thus raising the number of arcs expected by the heuristic).
107
 */
108
#define ARCDENSITY      3
109
 
110
/*
111
 * Always allocate at least this many tostructs.  This
112
 * hides the inadequacy of the ARCDENSITY heuristic, at least
113
 * for small programs.
114
 */
115
#define MINARCS         50
116
 
117
/*
118
 * The type used to represent indices into gmonparam.tos[].
119
 */
120
#define ARCINDEX        u_long
121
 
122
/*
123
 * Maximum number of arcs we want to allow.
124
 * Used to be max representable value of ARCINDEX minus 2, but now
125
 * that ARCINDEX is a long, that's too large; we don't really want
126
 * to allow a 48 gigabyte table.
127
 * The old value of 1<<16 wasn't high enough in practice for large C++
128
 * programs; will 1<<20 be adequate for long?  FIXME
129
 */
130
#define MAXARCS         (1 << 20)
131
 
132
struct tostruct {
133
        u_long          selfpc;
134
        long            count;
135
        ARCINDEX        link;
136
};
137
 
138
/*
139
 * a raw arc, with pointers to the calling site and
140
 * the called site and a count.
141
 */
142
struct rawarc {
143
        u_long  raw_frompc;
144
        u_long  raw_selfpc;
145
        long    raw_count;
146
};
147
 
148
/*
149
 * general rounding functions.
150
 */
151
#define ROUNDDOWN(x,y)  (((x)/(y))*(y))
152
#define ROUNDUP(x,y)    ((((x)+(y)-1)/(y))*(y))
153
 
154
/*
155
 * The profiling data structures are housed in this structure.
156
 */
157
struct gmonparam {
158
        long int        state;
159
        u_short         *kcount;
160
        u_long          kcountsize;
161
        ARCINDEX        *froms;
162
        u_long          fromssize;
163
        struct tostruct *tos;
164
        u_long          tossize;
165
        ARCINDEX        tolimit;
166
        u_long          lowpc;
167
        u_long          highpc;
168
        u_long          textsize;
169
        u_long          hashfraction;
170
        long            log_hashfraction;
171
};
172
 
173
/*
174
 * Possible states of profiling.
175
 */
176
#define GMON_PROF_ON    0
177
#define GMON_PROF_BUSY  1
178
#define GMON_PROF_ERROR 2
179
#define GMON_PROF_OFF   3
180
 
181
/*
182
 * Sysctl definitions for extracting profiling information from the kernel.
183
 */
184
#define GPROF_STATE     0        /* int: profiling enabling variable */
185
#define GPROF_COUNT     1       /* struct: profile tick count buffer */
186
#define GPROF_FROMS     2       /* struct: from location hash bucket */
187
#define GPROF_TOS       3       /* struct: destination/count structure */
188
#define GPROF_GMONPARAM 4       /* struct: profiling parameters (see above) */
189
 
190
__BEGIN_DECLS
191
 
192
/* Set up data structures and start profiling.  */
193
extern void __monstartup (u_long __lowpc, u_long __highpc) __THROW;
194
extern void monstartup (u_long __lowpc, u_long __highpc) __THROW;
195
 
196
/* Clean up profiling and write out gmon.out.  */
197
extern void _mcleanup (void) __THROW;
198
 
199
__END_DECLS
200
 
201
#endif /* sys/gmon.h */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.