annotate src/share/vm/utilities/globalDefinitions_gcc.hpp @ 20543:e7d0505c8a30

8059758: Footprint regressions with JDK-8038423 Summary: Changes in JDK-8038423 always initialize (zero out) virtual memory used for auxiliary data structures. This causes a footprint regression for G1 in startup benchmarks. This is because they do not touch that memory at all, so the operating system does not actually commit these pages. The fix is to, if the initialization value of the data structures matches the default value of just committed memory (=0), do not do anything. Reviewed-by: jwilhelm, brutisso
author tschatzl
date Fri, 10 Oct 2014 15:51:58 +0200
parents b6a8cc1e0d92
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1 /*
17937
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 13446
diff changeset
2 * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
a61af66fc99e Initial load
duke
parents:
diff changeset
4 *
a61af66fc99e Initial load
duke
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
a61af66fc99e Initial load
duke
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
a61af66fc99e Initial load
duke
parents:
diff changeset
7 * published by the Free Software Foundation.
a61af66fc99e Initial load
duke
parents:
diff changeset
8 *
a61af66fc99e Initial load
duke
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
a61af66fc99e Initial load
duke
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
a61af66fc99e Initial load
duke
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
a61af66fc99e Initial load
duke
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
a61af66fc99e Initial load
duke
parents:
diff changeset
13 * accompanied this code).
a61af66fc99e Initial load
duke
parents:
diff changeset
14 *
a61af66fc99e Initial load
duke
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
a61af66fc99e Initial load
duke
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
a61af66fc99e Initial load
duke
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
a61af66fc99e Initial load
duke
parents:
diff changeset
18 *
1552
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 579
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 579
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 579
diff changeset
21 * questions.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
22 *
a61af66fc99e Initial load
duke
parents:
diff changeset
23 */
a61af66fc99e Initial load
duke
parents:
diff changeset
24
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1681
diff changeset
25 #ifndef SHARE_VM_UTILITIES_GLOBALDEFINITIONS_GCC_HPP
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1681
diff changeset
26 #define SHARE_VM_UTILITIES_GLOBALDEFINITIONS_GCC_HPP
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1681
diff changeset
27
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1681
diff changeset
28 #include "prims/jni.h"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1681
diff changeset
29
0
a61af66fc99e Initial load
duke
parents:
diff changeset
30 // This file holds compiler-dependent includes,
a61af66fc99e Initial load
duke
parents:
diff changeset
31 // globally used constants & types, class (forward)
a61af66fc99e Initial load
duke
parents:
diff changeset
32 // declarations and a few frequently used utility functions.
a61af66fc99e Initial load
duke
parents:
diff changeset
33
a61af66fc99e Initial load
duke
parents:
diff changeset
34 #include <ctype.h>
a61af66fc99e Initial load
duke
parents:
diff changeset
35 #include <string.h>
a61af66fc99e Initial load
duke
parents:
diff changeset
36 #include <stdarg.h>
a61af66fc99e Initial load
duke
parents:
diff changeset
37 #include <stddef.h>
a61af66fc99e Initial load
duke
parents:
diff changeset
38 #include <stdio.h>
a61af66fc99e Initial load
duke
parents:
diff changeset
39 #include <stdlib.h>
a61af66fc99e Initial load
duke
parents:
diff changeset
40 #include <wchar.h>
a61af66fc99e Initial load
duke
parents:
diff changeset
41
a61af66fc99e Initial load
duke
parents:
diff changeset
42 #ifdef SOLARIS
a61af66fc99e Initial load
duke
parents:
diff changeset
43 #include <ieeefp.h>
a61af66fc99e Initial load
duke
parents:
diff changeset
44 #endif // SOLARIS
a61af66fc99e Initial load
duke
parents:
diff changeset
45
a61af66fc99e Initial load
duke
parents:
diff changeset
46 #include <math.h>
a61af66fc99e Initial load
duke
parents:
diff changeset
47 #ifndef FP_PZERO
a61af66fc99e Initial load
duke
parents:
diff changeset
48 // Linux doesn't have positive/negative zero
a61af66fc99e Initial load
duke
parents:
diff changeset
49 #define FP_PZERO FP_ZERO
a61af66fc99e Initial load
duke
parents:
diff changeset
50 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
51 #if (!defined fpclass) && ((!defined SPARC) || (!defined SOLARIS))
a61af66fc99e Initial load
duke
parents:
diff changeset
52 #define fpclass fpclassify
a61af66fc99e Initial load
duke
parents:
diff changeset
53 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
54
a61af66fc99e Initial load
duke
parents:
diff changeset
55 #include <time.h>
a61af66fc99e Initial load
duke
parents:
diff changeset
56 #include <fcntl.h>
a61af66fc99e Initial load
duke
parents:
diff changeset
57 #include <dlfcn.h>
a61af66fc99e Initial load
duke
parents:
diff changeset
58 #include <pthread.h>
a61af66fc99e Initial load
duke
parents:
diff changeset
59
a61af66fc99e Initial load
duke
parents:
diff changeset
60 #ifdef SOLARIS
a61af66fc99e Initial load
duke
parents:
diff changeset
61 #include <thread.h>
a61af66fc99e Initial load
duke
parents:
diff changeset
62 #endif // SOLARIS
a61af66fc99e Initial load
duke
parents:
diff changeset
63
a61af66fc99e Initial load
duke
parents:
diff changeset
64 #include <limits.h>
a61af66fc99e Initial load
duke
parents:
diff changeset
65 #include <errno.h>
a61af66fc99e Initial load
duke
parents:
diff changeset
66
a61af66fc99e Initial load
duke
parents:
diff changeset
67 #ifdef SOLARIS
a61af66fc99e Initial load
duke
parents:
diff changeset
68 #include <sys/trap.h>
a61af66fc99e Initial load
duke
parents:
diff changeset
69 #include <sys/regset.h>
a61af66fc99e Initial load
duke
parents:
diff changeset
70 #include <sys/procset.h>
a61af66fc99e Initial load
duke
parents:
diff changeset
71 #include <ucontext.h>
a61af66fc99e Initial load
duke
parents:
diff changeset
72 #include <setjmp.h>
a61af66fc99e Initial load
duke
parents:
diff changeset
73 #endif // SOLARIS
a61af66fc99e Initial load
duke
parents:
diff changeset
74
a61af66fc99e Initial load
duke
parents:
diff changeset
75 # ifdef SOLARIS_MUTATOR_LIBTHREAD
a61af66fc99e Initial load
duke
parents:
diff changeset
76 # include <sys/procfs.h>
a61af66fc99e Initial load
duke
parents:
diff changeset
77 # endif
a61af66fc99e Initial load
duke
parents:
diff changeset
78
3960
f08d439fab8c 7089790: integrate bsd-port changes
never
parents: 2468
diff changeset
79 #if defined(LINUX) || defined(_ALLBSD_SOURCE)
2447
e863062e521d 7032458: Zero and Shark fixes
twisti
parents: 2307
diff changeset
80 #ifndef __STDC_LIMIT_MACROS
2307
4a9604cd7c5f 6878713: Verifier heap corruption, relating to backward jsrs
kamg
parents: 1972
diff changeset
81 #define __STDC_LIMIT_MACROS
2447
e863062e521d 7032458: Zero and Shark fixes
twisti
parents: 2307
diff changeset
82 #endif // __STDC_LIMIT_MACROS
0
a61af66fc99e Initial load
duke
parents:
diff changeset
83 #include <inttypes.h>
a61af66fc99e Initial load
duke
parents:
diff changeset
84 #include <signal.h>
3960
f08d439fab8c 7089790: integrate bsd-port changes
never
parents: 2468
diff changeset
85 #ifndef __OpenBSD__
0
a61af66fc99e Initial load
duke
parents:
diff changeset
86 #include <ucontext.h>
3960
f08d439fab8c 7089790: integrate bsd-port changes
never
parents: 2468
diff changeset
87 #endif
f08d439fab8c 7089790: integrate bsd-port changes
never
parents: 2468
diff changeset
88 #ifdef __APPLE__
f08d439fab8c 7089790: integrate bsd-port changes
never
parents: 2468
diff changeset
89 #include <AvailabilityMacros.h>
4961
0368109684cb 7132070: Use a mach_port_t as the OSThread thread_id rather than pthread_t on BSD/OSX
sla
parents: 3960
diff changeset
90 #include <mach/mach.h>
3960
f08d439fab8c 7089790: integrate bsd-port changes
never
parents: 2468
diff changeset
91 #endif
0
a61af66fc99e Initial load
duke
parents:
diff changeset
92 #include <sys/time.h>
3960
f08d439fab8c 7089790: integrate bsd-port changes
never
parents: 2468
diff changeset
93 #endif // LINUX || _ALLBSD_SOURCE
0
a61af66fc99e Initial load
duke
parents:
diff changeset
94
a61af66fc99e Initial load
duke
parents:
diff changeset
95 // 4810578: varargs unsafe on 32-bit integer/64-bit pointer architectures
a61af66fc99e Initial load
duke
parents:
diff changeset
96 // When __cplusplus is defined, NULL is defined as 0 (32-bit constant) in
a61af66fc99e Initial load
duke
parents:
diff changeset
97 // system header files. On 32-bit architectures, there is no problem.
a61af66fc99e Initial load
duke
parents:
diff changeset
98 // On 64-bit architectures, defining NULL as a 32-bit constant can cause
a61af66fc99e Initial load
duke
parents:
diff changeset
99 // problems with varargs functions: C++ integral promotion rules say for
a61af66fc99e Initial load
duke
parents:
diff changeset
100 // varargs, we pass the argument 0 as an int. So, if NULL was passed to a
a61af66fc99e Initial load
duke
parents:
diff changeset
101 // varargs function it will remain 32-bits. Depending on the calling
a61af66fc99e Initial load
duke
parents:
diff changeset
102 // convention of the machine, if the argument is passed on the stack then
a61af66fc99e Initial load
duke
parents:
diff changeset
103 // only 32-bits of the "NULL" pointer may be initialized to zero. The
a61af66fc99e Initial load
duke
parents:
diff changeset
104 // other 32-bits will be garbage. If the varargs function is expecting a
a61af66fc99e Initial load
duke
parents:
diff changeset
105 // pointer when it extracts the argument, then we have a problem.
a61af66fc99e Initial load
duke
parents:
diff changeset
106 //
a61af66fc99e Initial load
duke
parents:
diff changeset
107 // Solution: For 64-bit architectures, redefine NULL as 64-bit constant 0.
a61af66fc99e Initial load
duke
parents:
diff changeset
108 //
a61af66fc99e Initial load
duke
parents:
diff changeset
109 // Note: this fix doesn't work well on Linux because NULL will be overwritten
a61af66fc99e Initial load
duke
parents:
diff changeset
110 // whenever a system header file is included. Linux handles NULL correctly
a61af66fc99e Initial load
duke
parents:
diff changeset
111 // through a special type '__null'.
a61af66fc99e Initial load
duke
parents:
diff changeset
112 #ifdef SOLARIS
a61af66fc99e Initial load
duke
parents:
diff changeset
113 #ifdef _LP64
a61af66fc99e Initial load
duke
parents:
diff changeset
114 #undef NULL
a61af66fc99e Initial load
duke
parents:
diff changeset
115 #define NULL 0L
a61af66fc99e Initial load
duke
parents:
diff changeset
116 #else
a61af66fc99e Initial load
duke
parents:
diff changeset
117 #ifndef NULL
a61af66fc99e Initial load
duke
parents:
diff changeset
118 #define NULL 0
a61af66fc99e Initial load
duke
parents:
diff changeset
119 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
120 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
121 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
122
a61af66fc99e Initial load
duke
parents:
diff changeset
123 // NULL vs NULL_WORD:
a61af66fc99e Initial load
duke
parents:
diff changeset
124 // On Linux NULL is defined as a special type '__null'. Assigning __null to
a61af66fc99e Initial load
duke
parents:
diff changeset
125 // integer variable will cause gcc warning. Use NULL_WORD in places where a
a61af66fc99e Initial load
duke
parents:
diff changeset
126 // pointer is stored as integer value. On some platforms, sizeof(intptr_t) >
a61af66fc99e Initial load
duke
parents:
diff changeset
127 // sizeof(void*), so here we want something which is integer type, but has the
a61af66fc99e Initial load
duke
parents:
diff changeset
128 // same size as a pointer.
3960
f08d439fab8c 7089790: integrate bsd-port changes
never
parents: 2468
diff changeset
129 #ifdef __GNUC__
0
a61af66fc99e Initial load
duke
parents:
diff changeset
130 #ifdef _LP64
a61af66fc99e Initial load
duke
parents:
diff changeset
131 #define NULL_WORD 0L
a61af66fc99e Initial load
duke
parents:
diff changeset
132 #else
512
db4caa99ef11 6787106: Hotspot 32 bit build fails on platforms having different definitions for intptr_t & int32_t
xlu
parents: 0
diff changeset
133 // Cast 0 to intptr_t rather than int32_t since they are not the same type
db4caa99ef11 6787106: Hotspot 32 bit build fails on platforms having different definitions for intptr_t & int32_t
xlu
parents: 0
diff changeset
134 // on platforms such as Mac OS X.
db4caa99ef11 6787106: Hotspot 32 bit build fails on platforms having different definitions for intptr_t & int32_t
xlu
parents: 0
diff changeset
135 #define NULL_WORD ((intptr_t)0)
0
a61af66fc99e Initial load
duke
parents:
diff changeset
136 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
137 #else
a61af66fc99e Initial load
duke
parents:
diff changeset
138 #define NULL_WORD NULL
a61af66fc99e Initial load
duke
parents:
diff changeset
139 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
140
3960
f08d439fab8c 7089790: integrate bsd-port changes
never
parents: 2468
diff changeset
141 #if !defined(LINUX) && !defined(_ALLBSD_SOURCE)
0
a61af66fc99e Initial load
duke
parents:
diff changeset
142 // Compiler-specific primitive types
a61af66fc99e Initial load
duke
parents:
diff changeset
143 typedef unsigned short uint16_t;
a61af66fc99e Initial load
duke
parents:
diff changeset
144 #ifndef _UINT32_T
a61af66fc99e Initial load
duke
parents:
diff changeset
145 #define _UINT32_T
a61af66fc99e Initial load
duke
parents:
diff changeset
146 typedef unsigned int uint32_t;
a61af66fc99e Initial load
duke
parents:
diff changeset
147 #endif // _UINT32_T
a61af66fc99e Initial load
duke
parents:
diff changeset
148
a61af66fc99e Initial load
duke
parents:
diff changeset
149 #if !defined(_SYS_INT_TYPES_H)
a61af66fc99e Initial load
duke
parents:
diff changeset
150 #ifndef _UINT64_T
a61af66fc99e Initial load
duke
parents:
diff changeset
151 #define _UINT64_T
a61af66fc99e Initial load
duke
parents:
diff changeset
152 typedef unsigned long long uint64_t;
a61af66fc99e Initial load
duke
parents:
diff changeset
153 #endif // _UINT64_T
a61af66fc99e Initial load
duke
parents:
diff changeset
154 // %%%% how to access definition of intptr_t portably in 5.5 onward?
a61af66fc99e Initial load
duke
parents:
diff changeset
155 typedef int intptr_t;
a61af66fc99e Initial load
duke
parents:
diff changeset
156 typedef unsigned int uintptr_t;
a61af66fc99e Initial load
duke
parents:
diff changeset
157 // If this gets an error, figure out a symbol XXX that implies the
a61af66fc99e Initial load
duke
parents:
diff changeset
158 // prior definition of intptr_t, and add "&& !defined(XXX)" above.
a61af66fc99e Initial load
duke
parents:
diff changeset
159 #endif // _SYS_INT_TYPES_H
a61af66fc99e Initial load
duke
parents:
diff changeset
160
3960
f08d439fab8c 7089790: integrate bsd-port changes
never
parents: 2468
diff changeset
161 #endif // !LINUX && !_ALLBSD_SOURCE
0
a61af66fc99e Initial load
duke
parents:
diff changeset
162
a61af66fc99e Initial load
duke
parents:
diff changeset
163 // Additional Java basic types
a61af66fc99e Initial load
duke
parents:
diff changeset
164
a61af66fc99e Initial load
duke
parents:
diff changeset
165 typedef uint8_t jubyte;
a61af66fc99e Initial load
duke
parents:
diff changeset
166 typedef uint16_t jushort;
a61af66fc99e Initial load
duke
parents:
diff changeset
167 typedef uint32_t juint;
a61af66fc99e Initial load
duke
parents:
diff changeset
168 typedef uint64_t julong;
a61af66fc99e Initial load
duke
parents:
diff changeset
169
a61af66fc99e Initial load
duke
parents:
diff changeset
170
a61af66fc99e Initial load
duke
parents:
diff changeset
171 //----------------------------------------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
172 // Constant for jlong (specifying an long long canstant is C++ compiler specific)
a61af66fc99e Initial load
duke
parents:
diff changeset
173
a61af66fc99e Initial load
duke
parents:
diff changeset
174 // Build a 64bit integer constant
a61af66fc99e Initial load
duke
parents:
diff changeset
175 #define CONST64(x) (x ## LL)
a61af66fc99e Initial load
duke
parents:
diff changeset
176 #define UCONST64(x) (x ## ULL)
a61af66fc99e Initial load
duke
parents:
diff changeset
177
a61af66fc99e Initial load
duke
parents:
diff changeset
178 const jlong min_jlong = CONST64(0x8000000000000000);
a61af66fc99e Initial load
duke
parents:
diff changeset
179 const jlong max_jlong = CONST64(0x7fffffffffffffff);
a61af66fc99e Initial load
duke
parents:
diff changeset
180
a61af66fc99e Initial load
duke
parents:
diff changeset
181
a61af66fc99e Initial load
duke
parents:
diff changeset
182 #ifdef SOLARIS
a61af66fc99e Initial load
duke
parents:
diff changeset
183 //----------------------------------------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
184 // ANSI C++ fixes
a61af66fc99e Initial load
duke
parents:
diff changeset
185 // NOTE:In the ANSI committee's continuing attempt to make each version
a61af66fc99e Initial load
duke
parents:
diff changeset
186 // of C++ incompatible with the previous version, you can no longer cast
a61af66fc99e Initial load
duke
parents:
diff changeset
187 // pointers to functions without specifying linkage unless you want to get
a61af66fc99e Initial load
duke
parents:
diff changeset
188 // warnings.
a61af66fc99e Initial load
duke
parents:
diff changeset
189 //
a61af66fc99e Initial load
duke
parents:
diff changeset
190 // This also means that pointers to functions can no longer be "hidden"
a61af66fc99e Initial load
duke
parents:
diff changeset
191 // in opaque types like void * because at the invokation point warnings
a61af66fc99e Initial load
duke
parents:
diff changeset
192 // will be generated. While this makes perfect sense from a type safety
a61af66fc99e Initial load
duke
parents:
diff changeset
193 // point of view it causes a lot of warnings on old code using C header
a61af66fc99e Initial load
duke
parents:
diff changeset
194 // files. Here are some typedefs to make the job of silencing warnings
a61af66fc99e Initial load
duke
parents:
diff changeset
195 // a bit easier.
a61af66fc99e Initial load
duke
parents:
diff changeset
196 //
a61af66fc99e Initial load
duke
parents:
diff changeset
197 // The final kick in the teeth is that you can only have extern "C" linkage
a61af66fc99e Initial load
duke
parents:
diff changeset
198 // specified at file scope. So these typedefs are here rather than in the
a61af66fc99e Initial load
duke
parents:
diff changeset
199 // .hpp for the class (os:Solaris usually) that needs them.
a61af66fc99e Initial load
duke
parents:
diff changeset
200
a61af66fc99e Initial load
duke
parents:
diff changeset
201 extern "C" {
a61af66fc99e Initial load
duke
parents:
diff changeset
202 typedef int (*int_fnP_thread_t_iP_uP_stack_tP_gregset_t)(thread_t, int*, unsigned *, stack_t*, gregset_t);
a61af66fc99e Initial load
duke
parents:
diff changeset
203 typedef int (*int_fnP_thread_t_i_gregset_t)(thread_t, int, gregset_t);
a61af66fc99e Initial load
duke
parents:
diff changeset
204 typedef int (*int_fnP_thread_t_i)(thread_t, int);
a61af66fc99e Initial load
duke
parents:
diff changeset
205 typedef int (*int_fnP_thread_t)(thread_t);
a61af66fc99e Initial load
duke
parents:
diff changeset
206
a61af66fc99e Initial load
duke
parents:
diff changeset
207 typedef int (*int_fnP_cond_tP_mutex_tP_timestruc_tP)(cond_t *cv, mutex_t *mx, timestruc_t *abst);
a61af66fc99e Initial load
duke
parents:
diff changeset
208 typedef int (*int_fnP_cond_tP_mutex_tP)(cond_t *cv, mutex_t *mx);
a61af66fc99e Initial load
duke
parents:
diff changeset
209
a61af66fc99e Initial load
duke
parents:
diff changeset
210 // typedef for missing API in libc
a61af66fc99e Initial load
duke
parents:
diff changeset
211 typedef int (*int_fnP_mutex_tP_i_vP)(mutex_t *, int, void *);
a61af66fc99e Initial load
duke
parents:
diff changeset
212 typedef int (*int_fnP_mutex_tP)(mutex_t *);
a61af66fc99e Initial load
duke
parents:
diff changeset
213 typedef int (*int_fnP_cond_tP_i_vP)(cond_t *cv, int scope, void *arg);
a61af66fc99e Initial load
duke
parents:
diff changeset
214 typedef int (*int_fnP_cond_tP)(cond_t *cv);
a61af66fc99e Initial load
duke
parents:
diff changeset
215 };
a61af66fc99e Initial load
duke
parents:
diff changeset
216 #endif // SOLARIS
a61af66fc99e Initial load
duke
parents:
diff changeset
217
a61af66fc99e Initial load
duke
parents:
diff changeset
218 //----------------------------------------------------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
219 // Debugging
a61af66fc99e Initial load
duke
parents:
diff changeset
220
a61af66fc99e Initial load
duke
parents:
diff changeset
221 #define DEBUG_EXCEPTION ::abort();
a61af66fc99e Initial load
duke
parents:
diff changeset
222
1681
126ea7725993 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 1552
diff changeset
223 #ifdef ARM
126ea7725993 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 1552
diff changeset
224 #ifdef SOLARIS
126ea7725993 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 1552
diff changeset
225 #define BREAKPOINT __asm__ volatile (".long 0xe1200070")
126ea7725993 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 1552
diff changeset
226 #else
126ea7725993 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 1552
diff changeset
227 #define BREAKPOINT __asm__ volatile (".long 0xe7f001f0")
126ea7725993 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 1552
diff changeset
228 #endif
126ea7725993 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 1552
diff changeset
229 #else
0
a61af66fc99e Initial load
duke
parents:
diff changeset
230 extern "C" void breakpoint();
a61af66fc99e Initial load
duke
parents:
diff changeset
231 #define BREAKPOINT ::breakpoint()
1681
126ea7725993 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 1552
diff changeset
232 #endif
0
a61af66fc99e Initial load
duke
parents:
diff changeset
233
a61af66fc99e Initial load
duke
parents:
diff changeset
234 // checking for nanness
a61af66fc99e Initial load
duke
parents:
diff changeset
235 #ifdef SOLARIS
a61af66fc99e Initial load
duke
parents:
diff changeset
236 #ifdef SPARC
a61af66fc99e Initial load
duke
parents:
diff changeset
237 inline int g_isnan(float f) { return isnanf(f); }
a61af66fc99e Initial load
duke
parents:
diff changeset
238 #else
a61af66fc99e Initial load
duke
parents:
diff changeset
239 // isnanf() broken on Intel Solaris use isnand()
a61af66fc99e Initial load
duke
parents:
diff changeset
240 inline int g_isnan(float f) { return isnand(f); }
a61af66fc99e Initial load
duke
parents:
diff changeset
241 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
242 inline int g_isnan(double f) { return isnand(f); }
3960
f08d439fab8c 7089790: integrate bsd-port changes
never
parents: 2468
diff changeset
243 #elif defined(__APPLE__)
f08d439fab8c 7089790: integrate bsd-port changes
never
parents: 2468
diff changeset
244 inline int g_isnan(double f) { return isnan(f); }
f08d439fab8c 7089790: integrate bsd-port changes
never
parents: 2468
diff changeset
245 #elif defined(LINUX) || defined(_ALLBSD_SOURCE)
0
a61af66fc99e Initial load
duke
parents:
diff changeset
246 inline int g_isnan(float f) { return isnanf(f); }
a61af66fc99e Initial load
duke
parents:
diff changeset
247 inline int g_isnan(double f) { return isnan(f); }
a61af66fc99e Initial load
duke
parents:
diff changeset
248 #else
a61af66fc99e Initial load
duke
parents:
diff changeset
249 #error "missing platform-specific definition here"
a61af66fc99e Initial load
duke
parents:
diff changeset
250 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
251
1681
126ea7725993 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 1552
diff changeset
252 // GCC 4.3 does not allow 0.0/0.0 to produce a NAN value
126ea7725993 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 1552
diff changeset
253 #if (__GNUC__ == 4) && (__GNUC_MINOR__ > 2)
126ea7725993 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 1552
diff changeset
254 #define CAN_USE_NAN_DEFINE 1
126ea7725993 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 1552
diff changeset
255 #endif
126ea7725993 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 1552
diff changeset
256
126ea7725993 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 1552
diff changeset
257
0
a61af66fc99e Initial load
duke
parents:
diff changeset
258 // Checking for finiteness
a61af66fc99e Initial load
duke
parents:
diff changeset
259
a61af66fc99e Initial load
duke
parents:
diff changeset
260 inline int g_isfinite(jfloat f) { return finite(f); }
a61af66fc99e Initial load
duke
parents:
diff changeset
261 inline int g_isfinite(jdouble f) { return finite(f); }
a61af66fc99e Initial load
duke
parents:
diff changeset
262
a61af66fc99e Initial load
duke
parents:
diff changeset
263
a61af66fc99e Initial load
duke
parents:
diff changeset
264 // Wide characters
a61af66fc99e Initial load
duke
parents:
diff changeset
265
a61af66fc99e Initial load
duke
parents:
diff changeset
266 inline int wcslen(const jchar* x) { return wcslen((const wchar_t*)x); }
a61af66fc99e Initial load
duke
parents:
diff changeset
267
a61af66fc99e Initial load
duke
parents:
diff changeset
268
a61af66fc99e Initial load
duke
parents:
diff changeset
269 // Portability macros
a61af66fc99e Initial load
duke
parents:
diff changeset
270 #define PRAGMA_INTERFACE #pragma interface
a61af66fc99e Initial load
duke
parents:
diff changeset
271 #define PRAGMA_IMPLEMENTATION #pragma implementation
a61af66fc99e Initial load
duke
parents:
diff changeset
272 #define VALUE_OBJ_CLASS_SPEC
a61af66fc99e Initial load
duke
parents:
diff changeset
273
17937
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 13446
diff changeset
274 #ifndef ATTRIBUTE_PRINTF
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 13446
diff changeset
275 // Diagnostic pragmas like the ones defined below in PRAGMA_FORMAT_NONLITERAL_IGNORED
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 13446
diff changeset
276 // were only introduced in GCC 4.2. Because we have no other possibility to ignore
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 13446
diff changeset
277 // these warnings for older versions of GCC, we simply don't decorate our printf-style
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 13446
diff changeset
278 // functions with __attribute__(format) in that case.
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 13446
diff changeset
279 #if ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 2)) || (__GNUC__ > 4)
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 13446
diff changeset
280 #define ATTRIBUTE_PRINTF(fmt,vargs) __attribute__((format(printf, fmt, vargs)))
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 13446
diff changeset
281 #else
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 13446
diff changeset
282 #define ATTRIBUTE_PRINTF(fmt,vargs)
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 13446
diff changeset
283 #endif
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 13446
diff changeset
284 #endif
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 13446
diff changeset
285
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 13446
diff changeset
286 #define PRAGMA_FORMAT_NONLITERAL_IGNORED _Pragma("GCC diagnostic ignored \"-Wformat-nonliteral\"") \
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 13446
diff changeset
287 _Pragma("GCC diagnostic ignored \"-Wformat-security\"")
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 13446
diff changeset
288 #define PRAGMA_FORMAT_IGNORED _Pragma("GCC diagnostic ignored \"-Wformat\"")
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 13446
diff changeset
289
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 13446
diff changeset
290 #if defined(__clang_major__) && \
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 13446
diff changeset
291 (__clang_major__ >= 4 || \
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 13446
diff changeset
292 (__clang_major__ >= 3 && __clang_minor__ >= 1)) || \
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 13446
diff changeset
293 ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 6)) || (__GNUC__ > 4)
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 13446
diff changeset
294 // Tested to work with clang version 3.1 and better.
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 13446
diff changeset
295 #define PRAGMA_DIAG_PUSH _Pragma("GCC diagnostic push")
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 13446
diff changeset
296 #define PRAGMA_DIAG_POP _Pragma("GCC diagnostic pop")
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 13446
diff changeset
297 #define PRAGMA_FORMAT_NONLITERAL_IGNORED_EXTERNAL
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 13446
diff changeset
298 #define PRAGMA_FORMAT_NONLITERAL_IGNORED_INTERNAL PRAGMA_FORMAT_NONLITERAL_IGNORED
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 13446
diff changeset
299
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 13446
diff changeset
300 // Hack to deal with gcc yammering about non-security format stuff
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 13446
diff changeset
301 #else
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 13446
diff changeset
302 // Old versions of gcc don't do push/pop, also do not cope with this pragma within a function
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 13446
diff changeset
303 // One method does so much varied printing that it is decorated with both internal and external
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 13446
diff changeset
304 // versions of the macro-pragma to obtain better checking with newer compilers.
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 13446
diff changeset
305 #define PRAGMA_DIAG_PUSH
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 13446
diff changeset
306 #define PRAGMA_DIAG_POP
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 13446
diff changeset
307 #define PRAGMA_FORMAT_NONLITERAL_IGNORED_EXTERNAL PRAGMA_FORMAT_NONLITERAL_IGNORED
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 13446
diff changeset
308 #define PRAGMA_FORMAT_NONLITERAL_IGNORED_INTERNAL
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 13446
diff changeset
309 #endif
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 13446
diff changeset
310
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 13446
diff changeset
311 #ifndef __clang_major__
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 13446
diff changeset
312 #define PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC _Pragma("GCC diagnostic ignored \"-Wformat\"") _Pragma("GCC diagnostic error \"-Wformat-nonliteral\"") _Pragma("GCC diagnostic error \"-Wformat-security\"")
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 13446
diff changeset
313 #endif
78bbf4d43a14 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 13446
diff changeset
314
0
a61af66fc99e Initial load
duke
parents:
diff changeset
315 #if (__GNUC__ == 2) && (__GNUC_MINOR__ < 95)
a61af66fc99e Initial load
duke
parents:
diff changeset
316 #define TEMPLATE_TABLE_BUG
a61af66fc99e Initial load
duke
parents:
diff changeset
317 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
318 #if (__GNUC__ == 2) && (__GNUC_MINOR__ >= 96)
a61af66fc99e Initial load
duke
parents:
diff changeset
319 #define CONST_SDM_BUG
a61af66fc99e Initial load
duke
parents:
diff changeset
320 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
321
a61af66fc99e Initial load
duke
parents:
diff changeset
322 // Formatting.
a61af66fc99e Initial load
duke
parents:
diff changeset
323 #ifdef _LP64
a61af66fc99e Initial load
duke
parents:
diff changeset
324 #define FORMAT64_MODIFIER "l"
a61af66fc99e Initial load
duke
parents:
diff changeset
325 #else // !_LP64
a61af66fc99e Initial load
duke
parents:
diff changeset
326 #define FORMAT64_MODIFIER "ll"
a61af66fc99e Initial load
duke
parents:
diff changeset
327 #endif // _LP64
a61af66fc99e Initial load
duke
parents:
diff changeset
328
a61af66fc99e Initial load
duke
parents:
diff changeset
329 // HACK: gcc warns about applying offsetof() to non-POD object or calculating
a61af66fc99e Initial load
duke
parents:
diff changeset
330 // offset directly when base address is NULL. Use 16 to get around the
a61af66fc99e Initial load
duke
parents:
diff changeset
331 // warning. gcc-3.4 has an option -Wno-invalid-offsetof to suppress
a61af66fc99e Initial load
duke
parents:
diff changeset
332 // this warning.
a61af66fc99e Initial load
duke
parents:
diff changeset
333 #define offset_of(klass,field) (size_t)((intx)&(((klass*)16)->field) - 16)
a61af66fc99e Initial load
duke
parents:
diff changeset
334
a61af66fc99e Initial load
duke
parents:
diff changeset
335 #ifdef offsetof
a61af66fc99e Initial load
duke
parents:
diff changeset
336 # undef offsetof
a61af66fc99e Initial load
duke
parents:
diff changeset
337 #endif
a61af66fc99e Initial load
duke
parents:
diff changeset
338 #define offsetof(klass,field) offset_of(klass,field)
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1681
diff changeset
339
7623
203f64878aab 7102489: RFE: cleanup jlong typedef on __APPLE__and _LLP64 systems.
hseigel
parents: 4961
diff changeset
340 #if defined(_LP64) && defined(__APPLE__)
203f64878aab 7102489: RFE: cleanup jlong typedef on __APPLE__and _LLP64 systems.
hseigel
parents: 4961
diff changeset
341 #define JLONG_FORMAT "%ld"
203f64878aab 7102489: RFE: cleanup jlong typedef on __APPLE__and _LLP64 systems.
hseigel
parents: 4961
diff changeset
342 #endif // _LP64 && __APPLE__
203f64878aab 7102489: RFE: cleanup jlong typedef on __APPLE__and _LLP64 systems.
hseigel
parents: 4961
diff changeset
343
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1681
diff changeset
344 #endif // SHARE_VM_UTILITIES_GLOBALDEFINITIONS_GCC_HPP