removed class pdFunction
[dyninst.git] / dyninstAPI_RT / h / trace.h
1 /*
2  * Copyright (c) 1996 Barton P. Miller
3  * 
4  * We provide the Paradyn Parallel Performance Tools (below
5  * described as Paradyn") on an AS IS basis, and do not warrant its
6  * validity or performance.  We reserve the right to update, modify,
7  * or discontinue this software at any time.  We shall have no
8  * obligation to supply such updates or modifications or any other
9  * form of support to you.
10  * 
11  * This license is for research uses.  For such uses, there is no
12  * charge. We define "research use" to mean you may freely use it
13  * inside your organization for whatever purposes you see fit. But you
14  * may not re-distribute Paradyn or parts of Paradyn, in any form
15  * source or binary (including derivatives), electronic or otherwise,
16  * to any other organization or entity without our permission.
17  * 
18  * (for other uses, please contact us at paradyn@cs.wisc.edu)
19  * 
20  * All warranties, including without limitation, any warranty of
21  * merchantability or fitness for a particular purpose, are hereby
22  * excluded.
23  * 
24  * By your use of Paradyn, you understand and agree that we (or any
25  * other person or entity with proprietary rights in Paradyn) are
26  * under no obligation to provide either maintenance services,
27  * update services, notices of latent defects, or correction of
28  * defects for Paradyn.
29  * 
30  * Even if advised of the possibility of such damages, under no
31  * circumstances shall we (or any other person or entity with
32  * proprietary rights in the software licensed hereunder) be liable
33  * to you or any third party for direct, indirect, or consequential
34  * damages of any character regardless of type of action, including,
35  * without limitation, loss of profits, loss of use, loss of good
36  * will, or computer failure or malfunction.  You agree to indemnify
37  * us (and any other person or entity with proprietary rights in the
38  * software licensed hereunder) for any and all liability it may
39  * incur to third parties resulting from your use of Paradyn.
40  */
41
42 /*
43  * Define the trace format that is generated by the system.
44  *
45  */
46
47 #ifndef _TRACE_H
48 #define _TRACE_H
49
50 #include "rtinst/h/rtinst.h"
51 #include "util/h/sys.h"
52 #include <sys/types.h> /* key_t */
53
54 #ifndef False
55 #define False 0
56 #define True 1
57 #endif
58
59 /*
60  * Need to make this double word since we send long longs now and then
61  *
62  */
63 #define WORDSIZE sizeof(long)
64
65 #define ALIGN_TO_WORDSIZE(x)    (((x) + (WORDSIZE-1)) & ~(WORDSIZE-1))
66
67 /* 
68  * configuration notification stream id.
69  *
70  */
71 #define CONFIG_NOTIFY_STREAM    1
72
73 /* header that is at the front of every trace record. */
74 struct _traceHeader {
75     time64      wall;           /* wall time of the event */
76     time64      process;        /* process time of the event */
77     short       type;           /* event type */
78     short       length;         /* length of event specifc data */
79 };
80 typedef struct _traceHeader traceHeader;
81
82 /* 
83  * now define each of the event specific data types.
84  *
85  */
86
87 /*
88  * when a new process/thread is created.
89  *
90  */
91
92 #ifndef SHM_SAMPLING
93 #define TR_SAMPLE               2
94 #endif
95
96 #define TR_NEW_RESOURCE         3
97 #define TR_NEW_ASSOCIATION      4
98 #define TR_EXIT                 6
99 #define TR_COST_UPDATE          9
100 #define TR_CP_SAMPLE            10 /* critical path */
101 #define TR_EXEC_FAILED          12
102
103 #if defined(MT_THREAD)
104 #define TR_THREAD               13
105 #define TR_THRSELF              14
106 #endif
107
108 /* types for resources that may be reported */
109 #define RES_TYPE_INT    0
110 #define RES_TYPE_STRING 1
111
112 #if defined(MT_THREAD)
113 struct _traceThread {
114     int ppid;   /* id of creating thread */
115     int tid;    /* id of new thread */
116     int pos;    /* position of the new thread in the thread table */
117     int ntids;  /* number of new threads */
118     int stride; /* offset to next pid in multi */
119 };
120
121 typedef struct _traceThread traceThread;
122
123 struct _traceThrSelf {
124     int ppid;   /* id of creating thread */
125     int tid;    /* id of new thread */
126     int pos;    /* position in the thread table */
127 };
128
129 typedef struct _traceThrSelf traceThrSelf;
130
131 #endif
132
133 #ifndef SHM_SAMPLING
134 struct _traceSample {
135     sampleId    id;             /* id of the sample */
136     sampleValue value;          /* sample value */
137 };
138 typedef struct _traceSample traceSample;
139 #endif
140
141 /* a map from one name space to another.  
142  *   For example 
143  *        type = "fd-fileName";
144  *        key = "3";
145  *        value = "/tmp/bigFile";
146  *
147  * defines the maping from file descriptior 3 to its file (/tmp/bigFile).
148  *
149  * This is used to generalize the association of values with resources.
150  *
151  */
152 struct _association {
153     char        abstraction[64];
154     char        type[64];
155     char        key[255];
156     char        value[64];
157 };
158
159 struct _newresource {
160     char        name[255];              /* full path name of resource */
161     char        abstraction[64];        /* name of abstraction */
162     unsigned short type;                /* type of leaf resource */
163 };
164
165
166 struct _costUpdate {
167 /*    int       slotsExecuted;  (number of base tramps halves called.) */
168 /*    float     pauseTime;      (total pause time this interval) */
169     float       obsCostIdeal;   /* ideal memory model time */
170
171     /* the following fields are used if profil()'ing: */
172     float       obsCostLow;     /* using profil */
173     float       obsCostHigh;    /* combined */
174 };
175 typedef struct _costUpdate costUpdate;
176
177 /* XXX - should this be a general vector?? (jkh 1/19/95) */
178 struct _cpSample {
179     int   id;
180     float length;
181     float share;
182 };
183 typedef struct _cpSample cpSample;
184
185 struct DYNINST_bootstrapStruct {
186    int event; /* 0 --> nothing; 1 --> end of DYNINSTinit (normal);
187                  2 --> end of DYNINSTinit (forked process);
188                  3 --> start of DYNINSTexec (before exec has actually happened) */
189    int pid;
190    int ppid; /* parent of forked process */
191
192 #ifdef SHM_SAMPLING
193    void *appl_attachedAtPtr;
194 #endif
195
196    char path[512]; /* only used in exec */
197 };
198
199 #endif