Fix warnings from compiling with gcc 4.3.0
[dyninst.git] / common / h / Types.h
1 /*
2  * Copyright (c) 1996-2007 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  * By your use of Paradyn, you understand and agree that we (or any
12  * other person or entity with proprietary rights in Paradyn) are
13  * under no obligation to provide either maintenance services,
14  * update services, notices of latent defects, or correction of
15  * defects for Paradyn.
16  * 
17  * This library is free software; you can redistribute it and/or
18  * modify it under the terms of the GNU Lesser General Public
19  * License as published by the Free Software Foundation; either
20  * version 2.1 of the License, or (at your option) any later version.
21  * 
22  * This library is distributed in the hope that it will be useful,
23  * but WITHOUT ANY WARRANTY; without even the implied warranty of
24  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
25  * Lesser General Public License for more details.
26  * 
27  * You should have received a copy of the GNU Lesser General Public
28  * License along with this library; if not, write to the Free Software
29  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
30  */
31
32 /************************************************************************
33  * $Id: Types.h,v 1.38 2008/08/29 21:45:10 legendre Exp $
34  * Types.h: commonly used types (used by runtime libs and other modules)
35 ************************************************************************/
36
37 #if !defined(_Types_h_)
38 #define _Types_h_
39
40 /* Sets up 64 and 32 bit
41    types:
42       int64_t      uint64_t      int32_t       uint32_t
43    constant macros:
44       I64_C(x)     UI64_C(x)
45    limits:
46       I64_MAX      I64_MIN       UI64_MAX
47       I32_MAX      I32_MIN       UI32_MAX
48
49    note: needs to be included before anything that includes inttypes.h
50          (eg. stdio on some systems)
51 */
52
53 /* Set up the 32 AND 64 BIT TYPES ===================================== */
54 /*
55    --- inttypes.h ---
56              int32_t  uint32_t  int64_t uint64_t 32B lmts 64Blmts 64BlitMacros#
57 Sol5.6       yes      yes       yes     yes      yes      no*     yes   
58 Sol5.7       yes      yes       yes     yes      yes      no*     yes   
59 Linux        yes      yes       yes     yes      yes      yes     yes
60 Irix         yes      yes       yes     yes      yes      yes     yes
61 Osf4.0       nonexistant
62 Osf5.0       ?
63 Aix4.2       nonexistant
64 Aix4.3       yes      yes       yes     yes      yes      no*     yes
65 WindowsNT    nonexistant
66
67   * the 64bit limits on solaris and aix are defined, but they are not defined
68     properly to include the numeric literal postfix (eg. LL), so we need to
69     explicitly define these
70   # we rename all of the 64 bit literal macros to our shortened name
71 */
72
73 #if defined(os_windows)
74    typedef __int64 int64_t;
75    typedef __int32 int32_t;
76    typedef __int16 int16_t;
77    typedef unsigned __int64 uint64_t;
78    typedef unsigned __int32 uint32_t;
79    typedef unsigned __int16 uint16_t;
80 #elif defined(os_aix)  
81 #if defined (arch_power)
82 #  if defined(rs6000_ibm_aix64)
83 #       define TYPE64BIT
84 #  endif
85 #  ifndef _ALL_SOURCE
86 #     define _ALL_SOURCE
87 #  endif
88 #  include <sys/types.h>     /* if aix4.3, this will include inttypes.h */
89 #  ifndef _H_INTTYPES        /* for aix4.2 */
90      typedef int int32_t;
91      typedef unsigned int uint32_t;
92 #    if defined(rs6000_ibm_aix64)
93         typedef long int64_t;
94         typedef unsigned long uint64_t;
95 #    else
96         typedef long long int64_t;
97         typedef unsigned long long uint64_t;
98 #    endif
99 #  endif // defined (arch_power)
100 #  endif
101
102 #elif defined(arch_alpha)
103 #define TYPE64BIT
104 #  ifndef _H_INTTYPES
105    typedef int int32_t;
106    typedef long int64_t;
107    typedef unsigned int uint32_t;
108    typedef unsigned long uint64_t;
109 #  endif
110
111 #elif defined(os_linux)
112 #include <stdint.h>
113 #if defined(arch_x86_64) || defined(arch_ia64) || defined(arch_64bit)
114 #define TYPE64BIT
115 #endif
116
117 #elif defined(os_bluegene)
118 #include <stdint.h>
119
120 #elif defined(os_irix)
121 #define TYPE64BIT
122 #include <inttypes.h>
123 #elif defined(os_solaris)
124 #include <inttypes.h>
125 #else
126 #error Unknown architecture
127 #endif
128
129
130 /* Set up the 64 BIT LITERAL MACROS =================================== */
131 #if defined(os_aix) && !defined(_H_INTTYPES)  /* aix4.2 ---- */
132 #define I64_C(x)  (x##ll)
133 #define UI64_C(x) (x##ull)
134 #elif defined(os_osf)     /* osf ---------------------------- */
135 #define I64_C(x)  (x##l)
136 #define UI64_C(x) (x##ul)
137 #elif defined(os_windows)
138                                    /* nt ----------------------------- */
139 #define I64_C(x)  (x##i64)
140 #define UI64_C(x) (x##ui64)
141 #else                               /* linux, solaris, irix, aix4.3 --- */
142 #define I64_C(x)  INT64_C(x)
143 #define UI64_C(x) UINT64_C(x)
144 #endif
145
146 /* Set up the 32 and 64 BIT LIMITS for those not already set up ======= */
147 #if defined(os_osf)  || (defined(os_aix) && !defined(_H_INTTYPES))
148 #define INT32_MAX  (2147483647)
149 #define UINT32_MAX (4294967295U)
150 #define INT32_MIN  (-2147483647-1)
151 #endif
152
153                                    /* solaris, aix4.{23}, osf -------- */
154 #if defined(os_solaris) || defined(os_aix) || defined(os_osf)
155 /* see note (*) above */
156 #define I32_MAX    INT32_MAX
157 #define UI32_MAX   UINT32_MAX
158 #define I32_MIN    INT32_MIN
159 #define I64_MAX    I64_C(9223372036854775807)
160 #define UI64_MAX   UI64_C(18446744073709551615)
161 /* The GNU compilers on solaris and aix have what seems like a bug where a
162    warning is printed when the ...808 int64 minimum is used, so we'll get the
163    value with some trickery */
164 #define I64_MIN    (-I64_MAX-1)
165 #elif defined(os_windows)
166                          /* nt ----------------------------- */
167 #include <limits.h>
168 #define I64_MAX  _I64_MAX
169 #define UI64_MAX _UI64_MAX
170 #define I64_MIN  _I64_MIN
171 #define I32_MAX  _I32_MAX
172 #define I32_MIN  _I32_MIN
173 #define UI32_MAX  _UI32_MAX
174 #else                              /* linux, irix -------------------- */
175 #define I64_MAX  INT64_MAX
176 #define UI64_MAX UINT64_MAX
177 #define I64_MIN  INT64_MIN
178 #define I32_MAX  INT32_MAX
179 #define I32_MIN  INT32_MIN
180 #define UI32_MAX UINT32_MAX
181 #endif
182
183 //typedef int64_t time64;
184
185 #if defined(__cplusplus)
186 #include "dynutil/h/dyntypes.h"
187 using namespace Dyninst;
188 static const Address ADDR_NULL = (Address)(0);
189 #else
190 #define ADDR_NULL (0)
191 typedef unsigned long Address;
192 #endif
193 /* Note the inherent assumption that the size of a "long" integer matches
194    that of an address (void*) on every supported Paradyn/Dyninst system!
195    (This can be checked with Address_chk().)
196 */
197
198 typedef unsigned int Word;
199
200 typedef long int RegValue;      /* register content */
201 /* This needs to be an int since it is sometimes used to pass offsets
202    to the code generator (i.e. if-statement) - jkh 5/24/99 */
203 typedef unsigned int Register;  /* a register number, e.g., [0..31]  */
204 static const Register Null_Register = (Register)(-1);   /* '255' */
205 /* Easily noticeable name... */
206 static const Register REG_NULL = (Register)(-1);
207
208 /* This file is now included by the rtinst library also, so all
209    C++ constructs need to be in #ifdef _cplusplus... 7/9/99 -bhs */
210 #if !defined(DLLEXPORT)
211 #if defined (_MSC_VER)
212 /* If we're on Windows, we need to explicetely export these functions: */
213         #if defined(DLL_BUILD)
214                 #define DLLEXPORT __declspec(dllexport)
215         #else
216                 #define DLLEXPORT __declspec(dllimport) 
217         #endif
218 #else
219         #define DLLEXPORT
220 #endif
221 #endif
222
223
224 #ifdef __cplusplus
225
226 DLLEXPORT void Address_chk ();
227 DLLEXPORT char *Address_str (Address addr);
228
229 // NB: this is probably inappropriate for 64-bit addresses!
230 inline unsigned hash_address(const Address& addr) {
231    return (unsigned) ((addr >> 2) & 0xffffffff);
232 }
233 #endif /* __cplusplus */
234
235 #endif /* !defined(_Types_h_) */
236
237