Added TR_SYNC to eliminate a race condition.
[dyninst.git] / rtinst / 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(SHM_SAMPLING) && defined(MT_THREAD)
104 #define TR_THREAD               13
105 #define TR_THRSELF              14
106 #endif
107
108
109 #define TR_NEW_MEMORY           15
110 /* trace data streams */
111 #define TR_DATA                 16
112 #define TR_SYNC                 20
113
114 /* types for resources that may be reported */
115 #define RES_TYPE_INT    0
116 #define RES_TYPE_STRING 1
117
118 #if defined(SHM_SAMPLING) && defined(MT_THREAD)
119 struct _traceThread {
120     int ppid;   /* id of creating thread */
121     int tid;    /* id of new thread */
122     int pos;    /* position of the new thread in the thread table */
123     int ntids;  /* number of new threads */
124     int stride; /* offset to next pid in multi */
125 };
126
127 typedef struct _traceThread traceThread;
128
129 struct _traceThrSelf {
130     int ppid;   /* id of creating thread */
131     int tid;    /* id of new thread */
132     int pos;    /* position in the thread table */
133 };
134
135 typedef struct _traceThrSelf traceThrSelf;
136
137 #endif
138
139 #ifndef SHM_SAMPLING
140 struct _traceSample {
141     sampleId    id;             /* id of the sample */
142     sampleValue value;          /* sample value */
143 };
144 typedef struct _traceSample traceSample;
145 #endif
146
147 /* Shared-memory resource for Blizzard */
148 struct _traceMemory {
149     char        name[32];               /* name of the variable*/
150     int         va ;                    /* va                  */
151     unsigned    memSize ;               /* size of this piece  */
152     unsigned    blkSize ;               /* block size          */
153     /* type of leaf is integer */
154 } ;
155 typedef struct _traceMemory traceMemory ;
156
157
158 /* a map from one name space to another.  
159  *   For example 
160  *        type = "fd-fileName";
161  *        key = "3";
162  *        value = "/tmp/bigFile";
163  *
164  * defines the maping from file descriptior 3 to its file (/tmp/bigFile).
165  *
166  * This is used to generalize the association of values with resources.
167  *
168  */
169 struct _association {
170     char        abstraction[64];
171     char        type[64];
172     char        key[255];
173     char        value[64];
174 };
175
176 struct _newresource {
177     char        name[255];              /* full path name of resource */
178     char        abstraction[64];        /* name of abstraction */
179     unsigned short type;                /* type of leaf resource */
180 };
181
182
183 struct _costUpdate {
184 /*    int       slotsExecuted;  (number of base tramps halves called.) */
185 /*    float     pauseTime;      (total pause time this interval) */
186     float       obsCostIdeal;   /* ideal memory model time */
187
188     /* the following fields are used if profil()'ing: */
189     float       obsCostLow;     /* using profil */
190     float       obsCostHigh;    /* combined */
191 };
192 typedef struct _costUpdate costUpdate;
193
194 /* XXX - should this be a general vector?? (jkh 1/19/95) */
195 struct _cpSample {
196     int   id;
197     float length;
198     float share;
199 };
200 typedef struct _cpSample cpSample;
201
202 struct DYNINST_bootstrapStruct {
203    int event; /* 0 --> nothing; 1 --> end of DYNINSTinit (normal);
204                  2 --> end of DYNINSTinit (forked process);
205                  3 --> start of DYNINSTexec (before exec has actually happened) */
206    int pid;
207    int ppid; /* parent of forked process */
208
209 #ifdef SHM_SAMPLING
210    void *appl_attachedAtPtr;
211 #endif
212
213    char path[512]; /* only used in exec */
214 };
215
216 #endif