Added some more #ifdef BPATCH_LIBRARYs to eliminate some Dyninst API
[dyninst.git] / dyninstAPI / src / util.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  * util.h - support functions.
44  *
45  * $Log: util.h,v $
46  * Revision 1.20  1997/09/28 22:22:36  buck
47  * Added some more #ifdef BPATCH_LIBRARYs to eliminate some Dyninst API
48  * library dependencies on files in rtinst.
49  *
50  * Revision 1.19  1997/08/18 01:34:33  buck
51  * Ported the Dyninst API to Windows NT.
52  *
53  * Revision 1.1.1.3  1997/07/08 20:03:24  buck
54  * Bring latest changes from Wisconsin over to Maryland repository.
55  *
56  * Revision 1.18  1997/06/23 17:13:40  tamches
57  * some additional hash functions
58  *
59  * Revision 1.17  1997/04/29 23:16:35  mjrg
60  * Changes for WindowsNT port
61  * Delayed check for DYNINST symbols to allow linking libdyninst dynamically
62  * Changed way paradyn and paradynd generate resource ids
63  * Changes to instPoint class in inst-x86.C to reduce size of objects
64  * Added initialization for process->threads to fork and attach constructors
65  *
66  * Revision 1.16  1997/02/26 23:43:11  mjrg
67  * First part on WindowsNT port: changes for compiling with Visual C++;
68  * moved unix specific code to unix.C
69  *
70  * Revision 1.15  1997/02/21 20:14:00  naim
71  * Moving files from paradynd to dyninstAPI + moving references to dataReqNode
72  * out of the ast class. The is the first pre-dyninstAPI commit! - naim
73  *
74  * Revision 1.14  1997/01/27 19:41:19  naim
75  * Part of the base instrumentation for supporting multithreaded applications
76  * (vectors of counter/timers) implemented for all current platforms +
77  * different bug fixes - naim
78  *
79  * Revision 1.13  1996/10/31 08:54:04  tamches
80  * added headers for some time routines and vrbles
81  *
82  * Revision 1.12  1996/08/16 21:20:15  tamches
83  * updated copyright for release 1.1
84  *
85  * Revision 1.11  1996/06/01 00:01:18  tamches
86  * addrHash --> addrHash16
87  *
88  * Revision 1.10  1996/05/11 23:16:07  tamches
89  * added addrHash
90  *
91  * Revision 1.9  1996/05/09 22:46:51  karavan
92  * changed uiHash.
93  *
94  * Revision 1.8  1995/02/16  08:54:30  markc
95  * Corrected error in comments -- I put a "star slash" in the comment.
96  *
97  * Revision 1.7  1995/02/16  08:35:05  markc
98  * Changed igen interfaces to use strings/vectors rather than char igen-arrays
99  * Changed igen interfaces to use bool, not Boolean.
100  * Cleaned up symbol table parsing - favor properly labeled symbol table objects
101  * Updated binary search for modules
102  * Moved machine dependnent ptrace code to architecture specific files.
103  * Moved machine dependent code out of class process.
104  * Removed almost all compiler warnings.
105  * Use "posix" like library to remove compiler warnings
106  *
107  */
108
109 #ifndef UTIL_H
110 #define UTIL_H
111
112 #include "util/h/headers.h"
113 #ifdef BPATCH_LIBRARY
114 #include "dyninstAPI_RT/h/rtinst.h" // for time64
115 #else
116 #include "rtinst/h/rtinst.h" // for time64
117 #endif
118 #include "util/h/String.h"
119
120 typedef double timeStamp;
121 timeStamp getCurrentTime(bool firstRecordRelative);
122    // Return the current wall time --
123    //    If firstRecordRelative is true, time starts at the arrival of record 0.
124    //    otherwise it starts at 1/1/1970 0:00 GMT.
125
126 time64 getCurrWallTime();
127 //unsigned long long getCurrWallTimeULL();
128    // Like the above routine but doesn't return # of seconds as a double; instead,
129    // returns # of microseconds as a long long int
130 time64 userAndSysTime2uSecs(const timeval &uTime,
131                                         const timeval &sysTime);
132
133 extern void logLine(const char *line);
134 extern void statusLine(const char *line);
135 extern char errorLine[];
136
137 inline unsigned uiHash(const unsigned &val) {
138   return val;
139 }
140
141 inline unsigned CThash(const unsigned &val) {
142   return val % 1048573;
143 }
144
145 unsigned addrHash4(const unsigned &addr);
146    // use when you know the address is divisible by 4 (lo 2 bits 0)
147 unsigned addrHash16(const unsigned &addr);
148    // use when you know the address is divisible by 16 (lo 4 bits 0)
149 unsigned addrHash(const unsigned &addr);
150    // use when you cannot assume anything about the address
151
152 inline unsigned intHash(const int &val) {
153   return val;
154 }
155
156 void
157 pd_log_perror(const char* msg);
158
159 typedef struct sym_data {
160   string name;
161   bool must_find;
162 } sym_data;
163
164 typedef enum { counter, procTimer, wallTimer } CTelementType;
165
166 // TIMING code
167
168 #if defined(sparc_sun_solaris2_4)
169
170 #define MAX_N_TIMERS 10
171
172 extern hrtime_t TIMINGtime1[MAX_N_TIMERS];
173 extern hrtime_t TIMINGtime2[MAX_N_TIMERS]; 
174 extern hrtime_t TIMINGcur[MAX_N_TIMERS];
175 extern hrtime_t TIMINGtot[MAX_N_TIMERS];
176 extern hrtime_t TIMINGmax[MAX_N_TIMERS];
177 extern hrtime_t TIMINGmin[MAX_N_TIMERS];
178 extern int TIMINGcounter[MAX_N_TIMERS];
179
180 extern void begin_timing(int id);
181 extern void end_timing(int id, char *func);
182
183 #endif
184
185 // TIMING code
186
187 #endif /* UTIL_H */