I have done a commit that fixes the "irpc-trap" bug. This bug occurs
[dyninst.git] / dyninstAPI_RT / h / dyninstAPI_RT.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  * $Id: dyninstAPI_RT.h,v 1.4 2000/03/17 21:56:05 schendel Exp $
44  * This file contains the standard instrumentation functions that are provided
45  *   by the run-time instrumentation layer.
46  */
47
48 #ifndef _DYNINSTAPI_RT_H
49 #define _DYNINSTAPI_RT_H
50
51 /*
52  * Define the size of the per process data area.
53  *
54  *  This should be a power of two to reduce paging and caching shifts.
55  *  Note that larger sizes may result in requiring longjumps within
56  *  mini-trampolines to reach within this area.
57  */
58
59 #define SYN_INST_BUF_SIZE (1024*1024*4)
60
61 /* We sometimes include this into assembly files, so guard the struct defs. */
62 #if !defined(__ASSEMBLER__)
63
64 #include "util/h/Types.h"
65
66 /* If we must make up a boolean type, we should make it unique */
67 typedef unsigned char RT_Boolean;
68 static const RT_Boolean RT_TRUE=1;
69 static const RT_Boolean RT_FALSE=0;
70
71 struct DYNINST_bootstrapStruct {
72    int event; /* "event" values:
73                  0 --> nothing
74                  1 --> end of DYNINSTinit (normal)
75                  2 --> end of DYNINSTinit (forked process)
76                  3 --> start of DYNINSTexec (before exec) 
77               */
78    int pid;
79    int ppid; /* parent of forked process */
80
81    char path[512]; /* only used in exec */
82 };
83
84 struct endStatsRec {
85     int alarms;
86     int numReported;
87     float instCycles;
88     float instTime;
89     float handlerCost;
90     float totalCpuTime;
91     int samplesReported;
92     float samplingRate;
93     float totalWallTime;
94     int userTicks;
95     int instTicks;
96     int totalTraps;
97 };
98
99 #if defined(i386_unknown_solaris2_5) || defined(i386_unknown_linux2_0) \
100  || defined(i386_unknown_nt4_0)
101 /*
102    The tramp table is used when we need to insert traps in instrumentation
103    points. It is used by the trap handler to lookup the base tramp for
104    an address (point).
105
106    The table is updated by the paradyn daemon.
107 */
108
109 #define TRAMPTABLESZ (4096)
110
111 #define HASH1(x) ((x) % TRAMPTABLESZ)
112 #define HASH2(x) (((x) % TRAMPTABLESZ-1) | 1)
113
114 typedef struct trampTableEntryStruct trampTableEntry;
115 struct trampTableEntryStruct {
116   unsigned key;
117   unsigned val;
118 };
119
120 #endif
121
122 struct rpcInfoStruct {
123   int runningInferiorRPC;  /* 1 running irpc, 0 not running */
124   unsigned begRPCAddr;
125   unsigned endRPCAddr;
126 };
127 typedef struct rpcInfoStruct rpcInfo;
128 extern rpcInfo curRPC;
129 extern unsigned pcAtLastIRPC;
130 extern int trapNotHandled;  /* 1 a trap hasn't been handled, 0 traps handled */
131
132
133 #endif /* !defined(__ASSEMBLER__) */
134
135 #endif /* _DYNINSTAPI_RT_H */