summaryrefslogtreecommitdiff
path: root/usr/src/cmd/sgs/include/monv.h
blob: 1f3831c9f2f47a85e731348b93e7d6ae23593f1a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License, Version 1.0 only
 * (the "License").  You may not use this file except in compliance
 * with the License.
 *
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 * or http://www.opensolaris.org/os/licensing.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information: Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 */
/*
 * Copyright (c) 1998 by Sun Microsystems, Inc.
 * All rights reserved.
 */

#ifndef	_MONV_H
#define	_MONV_H

#pragma ident	"%Z%%M%	%I%	%E% SMI"

/*
 * Versioned monitor file
 *
 * Since this is not really a *shared* file between the compilers and OS
 * (each hold a separate copy), care must be taken to see that it is in
 * in sync with the compiler version.
 */

#ifdef	__cplusplus
extern "C" {
#endif

/*
 *	General object structure
 */
#ifndef	PROF_TYPES_PREDEFINED
typedef unsigned long long Index;
typedef unsigned long long Address;
typedef unsigned long long Size;
#endif

typedef struct _prof_object {
	unsigned int		type;
	unsigned int		version;
	Size			size;
} ProfObject;


#define	PROF_MAGIC		0x50524F46	/* "PROF" */
#define	PROF_MAJOR_VERSION	1
#define	PROF_MINOR_VERSION	0

typedef struct _prof_header {
	unsigned int		h_magic;
	unsigned short		h_major_ver;
	unsigned short		h_minor_ver;
	Size			size;
} ProfHeader;

/*
 *	Object types
 */
#define	PROF_DUMMY_T		-1		/* to be ignored by gprof */
#define	PROF_BUFFER_T		1
#define	PROF_CALLGRAPH_T	2
#define	PROF_MODULES_T		3

/*
 *	Object version numbers
 */
#define	PROF_BUFFER_VER		1
#define	PROF_CALLGRAPH_VER	1
#define	PROF_MODULES_VER	1

/*
 * Actual number of pcsample elements that can be held in 1Mb with
 * the size of (Address) equal to 8
 */
#define	PROF_BUFFER_SIZE	131072		/* 1 Mb */

typedef struct _prof_buffer {
	unsigned int		type;		/* PROF_BUFFER_T */
	unsigned int		version;	/* 1 */
	Size			size;
	Index			buffer;
	Size			bufsize;
} ProfBuffer;

typedef struct _prof_call_graph {
	unsigned int		type;		/* PROF_CALLGRAPH_T */
	unsigned int		version;	/* 1 */
	Size			size;
	Index			functions;
} ProfCallGraph;

typedef struct _prof_module_list {
	unsigned int		type;		/* PROF_MODULES_T */
	unsigned int		version;	/* 1 */
	Size			size;
	Index			modules;
} ProfModuleList;

typedef struct _prof_module {
	Index			next;
	Index			path;
	Address			startaddr;
	Address			endaddr;
} ProfModule;

typedef struct _prof_function {
	Index			next_to;
	Index			next_from;
	Address			frompc;
	Address			topc;
	unsigned long long	count;
	Index			next_hash;
} ProfFunction;

#ifdef	__cplusplus
}
#endif

#endif	/* _MONV_H */