hotspot/src/share/vm/utilities/globalDefinitions_gcc.hpp
author minqi
Mon, 12 Nov 2012 14:03:53 -0800
changeset 14477 95e66ea71f71
parent 11881 9642744ae9a5
child 15228 e92acc84ade3
permissions -rw-r--r--
6830717: replay of compilations would help with debugging Summary: When java process crashed in compiler thread, repeat the compilation process will help finding root cause. This is done with using SA dump application class data and replay data from core dump, then use debug version of jvm to recompile the problematic java method. Reviewed-by: kvn, twisti, sspitsyn Contributed-by: yumin.qi@oracle.com
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
     1
/*
11881
9642744ae9a5 7132070: Use a mach_port_t as the OSThread thread_id rather than pthread_t on BSD/OSX
sla
parents: 10565
diff changeset
     2
 * Copyright (c) 1998, 2012, Oracle and/or its affiliates. All rights reserved.
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
489c9b5090e2 Initial load
duke
parents:
diff changeset
     4
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
489c9b5090e2 Initial load
duke
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
489c9b5090e2 Initial load
duke
parents:
diff changeset
     7
 * published by the Free Software Foundation.
489c9b5090e2 Initial load
duke
parents:
diff changeset
     8
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
489c9b5090e2 Initial load
duke
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
489c9b5090e2 Initial load
duke
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
489c9b5090e2 Initial load
duke
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
489c9b5090e2 Initial load
duke
parents:
diff changeset
    13
 * accompanied this code).
489c9b5090e2 Initial load
duke
parents:
diff changeset
    14
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
489c9b5090e2 Initial load
duke
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
489c9b5090e2 Initial load
duke
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    18
 *
5547
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 2105
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 2105
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 2105
diff changeset
    21
 * questions.
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    22
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
    23
 */
489c9b5090e2 Initial load
duke
parents:
diff changeset
    24
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6176
diff changeset
    25
#ifndef SHARE_VM_UTILITIES_GLOBALDEFINITIONS_GCC_HPP
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6176
diff changeset
    26
#define SHARE_VM_UTILITIES_GLOBALDEFINITIONS_GCC_HPP
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6176
diff changeset
    27
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6176
diff changeset
    28
#include "prims/jni.h"
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6176
diff changeset
    29
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    30
// This file holds compiler-dependent includes,
489c9b5090e2 Initial load
duke
parents:
diff changeset
    31
// globally used constants & types, class (forward)
489c9b5090e2 Initial load
duke
parents:
diff changeset
    32
// declarations and a few frequently used utility functions.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    33
489c9b5090e2 Initial load
duke
parents:
diff changeset
    34
#include <ctype.h>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    35
#include <string.h>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    36
#include <stdarg.h>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    37
#include <stddef.h>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    38
#include <stdio.h>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    39
#include <stdlib.h>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    40
#include <wchar.h>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    41
489c9b5090e2 Initial load
duke
parents:
diff changeset
    42
#ifdef SOLARIS
489c9b5090e2 Initial load
duke
parents:
diff changeset
    43
#include <ieeefp.h>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    44
#endif // SOLARIS
489c9b5090e2 Initial load
duke
parents:
diff changeset
    45
489c9b5090e2 Initial load
duke
parents:
diff changeset
    46
#include <math.h>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    47
#ifndef FP_PZERO
489c9b5090e2 Initial load
duke
parents:
diff changeset
    48
// Linux doesn't have positive/negative zero
489c9b5090e2 Initial load
duke
parents:
diff changeset
    49
#define FP_PZERO FP_ZERO
489c9b5090e2 Initial load
duke
parents:
diff changeset
    50
#endif
489c9b5090e2 Initial load
duke
parents:
diff changeset
    51
#if (!defined fpclass) && ((!defined SPARC) || (!defined SOLARIS))
489c9b5090e2 Initial load
duke
parents:
diff changeset
    52
#define fpclass fpclassify
489c9b5090e2 Initial load
duke
parents:
diff changeset
    53
#endif
489c9b5090e2 Initial load
duke
parents:
diff changeset
    54
489c9b5090e2 Initial load
duke
parents:
diff changeset
    55
#include <time.h>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    56
#include <fcntl.h>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    57
#include <dlfcn.h>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    58
#include <pthread.h>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    59
489c9b5090e2 Initial load
duke
parents:
diff changeset
    60
#ifdef SOLARIS
489c9b5090e2 Initial load
duke
parents:
diff changeset
    61
#include <thread.h>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    62
#endif // SOLARIS
489c9b5090e2 Initial load
duke
parents:
diff changeset
    63
489c9b5090e2 Initial load
duke
parents:
diff changeset
    64
#include <limits.h>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    65
#include <errno.h>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    66
489c9b5090e2 Initial load
duke
parents:
diff changeset
    67
#ifdef SOLARIS
489c9b5090e2 Initial load
duke
parents:
diff changeset
    68
#include <sys/trap.h>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    69
#include <sys/regset.h>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    70
#include <sys/procset.h>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    71
#include <ucontext.h>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    72
#include <setjmp.h>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    73
#endif // SOLARIS
489c9b5090e2 Initial load
duke
parents:
diff changeset
    74
489c9b5090e2 Initial load
duke
parents:
diff changeset
    75
# ifdef SOLARIS_MUTATOR_LIBTHREAD
489c9b5090e2 Initial load
duke
parents:
diff changeset
    76
# include <sys/procfs.h>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    77
# endif
489c9b5090e2 Initial load
duke
parents:
diff changeset
    78
10565
dc90c239f4ec 7089790: integrate bsd-port changes
never
parents: 9124
diff changeset
    79
#if defined(LINUX) || defined(_ALLBSD_SOURCE)
9103
535a93f494f6 7032458: Zero and Shark fixes
twisti
parents: 8481
diff changeset
    80
#ifndef __STDC_LIMIT_MACROS
8481
42a79b703814 6878713: Verifier heap corruption, relating to backward jsrs
kamg
parents: 7397
diff changeset
    81
#define __STDC_LIMIT_MACROS
9103
535a93f494f6 7032458: Zero and Shark fixes
twisti
parents: 8481
diff changeset
    82
#endif // __STDC_LIMIT_MACROS
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    83
#include <inttypes.h>
489c9b5090e2 Initial load
duke
parents:
diff changeset
    84
#include <signal.h>
10565
dc90c239f4ec 7089790: integrate bsd-port changes
never
parents: 9124
diff changeset
    85
#ifndef __OpenBSD__
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    86
#include <ucontext.h>
10565
dc90c239f4ec 7089790: integrate bsd-port changes
never
parents: 9124
diff changeset
    87
#endif
dc90c239f4ec 7089790: integrate bsd-port changes
never
parents: 9124
diff changeset
    88
#ifdef __APPLE__
dc90c239f4ec 7089790: integrate bsd-port changes
never
parents: 9124
diff changeset
    89
  #include <AvailabilityMacros.h>
11881
9642744ae9a5 7132070: Use a mach_port_t as the OSThread thread_id rather than pthread_t on BSD/OSX
sla
parents: 10565
diff changeset
    90
  #include <mach/mach.h>
10565
dc90c239f4ec 7089790: integrate bsd-port changes
never
parents: 9124
diff changeset
    91
#endif
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    92
#include <sys/time.h>
10565
dc90c239f4ec 7089790: integrate bsd-port changes
never
parents: 9124
diff changeset
    93
#endif // LINUX || _ALLBSD_SOURCE
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    94
489c9b5090e2 Initial load
duke
parents:
diff changeset
    95
// 4810578: varargs unsafe on 32-bit integer/64-bit pointer architectures
489c9b5090e2 Initial load
duke
parents:
diff changeset
    96
// When __cplusplus is defined, NULL is defined as 0 (32-bit constant) in
489c9b5090e2 Initial load
duke
parents:
diff changeset
    97
// system header files.  On 32-bit architectures, there is no problem.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    98
// On 64-bit architectures, defining NULL as a 32-bit constant can cause
489c9b5090e2 Initial load
duke
parents:
diff changeset
    99
// problems with varargs functions: C++ integral promotion rules say for
489c9b5090e2 Initial load
duke
parents:
diff changeset
   100
// varargs, we pass the argument 0 as an int.  So, if NULL was passed to a
489c9b5090e2 Initial load
duke
parents:
diff changeset
   101
// varargs function it will remain 32-bits.  Depending on the calling
489c9b5090e2 Initial load
duke
parents:
diff changeset
   102
// convention of the machine, if the argument is passed on the stack then
489c9b5090e2 Initial load
duke
parents:
diff changeset
   103
// only 32-bits of the "NULL" pointer may be initialized to zero.  The
489c9b5090e2 Initial load
duke
parents:
diff changeset
   104
// other 32-bits will be garbage.  If the varargs function is expecting a
489c9b5090e2 Initial load
duke
parents:
diff changeset
   105
// pointer when it extracts the argument, then we have a problem.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   106
//
489c9b5090e2 Initial load
duke
parents:
diff changeset
   107
// Solution: For 64-bit architectures, redefine NULL as 64-bit constant 0.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   108
//
489c9b5090e2 Initial load
duke
parents:
diff changeset
   109
// Note: this fix doesn't work well on Linux because NULL will be overwritten
489c9b5090e2 Initial load
duke
parents:
diff changeset
   110
// whenever a system header file is included. Linux handles NULL correctly
489c9b5090e2 Initial load
duke
parents:
diff changeset
   111
// through a special type '__null'.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   112
#ifdef SOLARIS
489c9b5090e2 Initial load
duke
parents:
diff changeset
   113
  #ifdef _LP64
489c9b5090e2 Initial load
duke
parents:
diff changeset
   114
    #undef NULL
489c9b5090e2 Initial load
duke
parents:
diff changeset
   115
    #define NULL 0L
489c9b5090e2 Initial load
duke
parents:
diff changeset
   116
  #else
489c9b5090e2 Initial load
duke
parents:
diff changeset
   117
    #ifndef NULL
489c9b5090e2 Initial load
duke
parents:
diff changeset
   118
      #define NULL 0
489c9b5090e2 Initial load
duke
parents:
diff changeset
   119
    #endif
489c9b5090e2 Initial load
duke
parents:
diff changeset
   120
  #endif
489c9b5090e2 Initial load
duke
parents:
diff changeset
   121
#endif
489c9b5090e2 Initial load
duke
parents:
diff changeset
   122
489c9b5090e2 Initial load
duke
parents:
diff changeset
   123
// NULL vs NULL_WORD:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   124
// On Linux NULL is defined as a special type '__null'. Assigning __null to
489c9b5090e2 Initial load
duke
parents:
diff changeset
   125
// integer variable will cause gcc warning. Use NULL_WORD in places where a
489c9b5090e2 Initial load
duke
parents:
diff changeset
   126
// pointer is stored as integer value.  On some platforms, sizeof(intptr_t) >
489c9b5090e2 Initial load
duke
parents:
diff changeset
   127
// sizeof(void*), so here we want something which is integer type, but has the
489c9b5090e2 Initial load
duke
parents:
diff changeset
   128
// same size as a pointer.
10565
dc90c239f4ec 7089790: integrate bsd-port changes
never
parents: 9124
diff changeset
   129
#ifdef __GNUC__
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   130
  #ifdef _LP64
489c9b5090e2 Initial load
duke
parents:
diff changeset
   131
    #define NULL_WORD  0L
489c9b5090e2 Initial load
duke
parents:
diff changeset
   132
  #else
1888
bbf498fb4354 6787106: Hotspot 32 bit build fails on platforms having different definitions for intptr_t & int32_t
xlu
parents: 1
diff changeset
   133
    // Cast 0 to intptr_t rather than int32_t since they are not the same type
bbf498fb4354 6787106: Hotspot 32 bit build fails on platforms having different definitions for intptr_t & int32_t
xlu
parents: 1
diff changeset
   134
    // on platforms such as Mac OS X.
bbf498fb4354 6787106: Hotspot 32 bit build fails on platforms having different definitions for intptr_t & int32_t
xlu
parents: 1
diff changeset
   135
    #define NULL_WORD  ((intptr_t)0)
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   136
  #endif
489c9b5090e2 Initial load
duke
parents:
diff changeset
   137
#else
489c9b5090e2 Initial load
duke
parents:
diff changeset
   138
  #define NULL_WORD  NULL
489c9b5090e2 Initial load
duke
parents:
diff changeset
   139
#endif
489c9b5090e2 Initial load
duke
parents:
diff changeset
   140
10565
dc90c239f4ec 7089790: integrate bsd-port changes
never
parents: 9124
diff changeset
   141
#if !defined(LINUX) && !defined(_ALLBSD_SOURCE)
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   142
// Compiler-specific primitive types
489c9b5090e2 Initial load
duke
parents:
diff changeset
   143
typedef unsigned short     uint16_t;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   144
#ifndef _UINT32_T
489c9b5090e2 Initial load
duke
parents:
diff changeset
   145
#define _UINT32_T
489c9b5090e2 Initial load
duke
parents:
diff changeset
   146
typedef unsigned int       uint32_t;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   147
#endif // _UINT32_T
489c9b5090e2 Initial load
duke
parents:
diff changeset
   148
489c9b5090e2 Initial load
duke
parents:
diff changeset
   149
#if !defined(_SYS_INT_TYPES_H)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   150
#ifndef _UINT64_T
489c9b5090e2 Initial load
duke
parents:
diff changeset
   151
#define _UINT64_T
489c9b5090e2 Initial load
duke
parents:
diff changeset
   152
typedef unsigned long long uint64_t;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   153
#endif // _UINT64_T
489c9b5090e2 Initial load
duke
parents:
diff changeset
   154
// %%%% how to access definition of intptr_t portably in 5.5 onward?
489c9b5090e2 Initial load
duke
parents:
diff changeset
   155
typedef int                     intptr_t;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   156
typedef unsigned int            uintptr_t;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   157
// If this gets an error, figure out a symbol XXX that implies the
489c9b5090e2 Initial load
duke
parents:
diff changeset
   158
// prior definition of intptr_t, and add "&& !defined(XXX)" above.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   159
#endif // _SYS_INT_TYPES_H
489c9b5090e2 Initial load
duke
parents:
diff changeset
   160
10565
dc90c239f4ec 7089790: integrate bsd-port changes
never
parents: 9124
diff changeset
   161
#endif // !LINUX && !_ALLBSD_SOURCE
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   162
489c9b5090e2 Initial load
duke
parents:
diff changeset
   163
// Additional Java basic types
489c9b5090e2 Initial load
duke
parents:
diff changeset
   164
489c9b5090e2 Initial load
duke
parents:
diff changeset
   165
typedef uint8_t  jubyte;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   166
typedef uint16_t jushort;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   167
typedef uint32_t juint;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   168
typedef uint64_t julong;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   169
489c9b5090e2 Initial load
duke
parents:
diff changeset
   170
//----------------------------------------------------------------------------------------------------
489c9b5090e2 Initial load
duke
parents:
diff changeset
   171
// Special (possibly not-portable) casts
489c9b5090e2 Initial load
duke
parents:
diff changeset
   172
// Cast floats into same-size integers and vice-versa w/o changing bit-pattern
489c9b5090e2 Initial load
duke
parents:
diff changeset
   173
// %%%%%% These seem like standard C++ to me--how about factoring them out? - Ungar
489c9b5090e2 Initial load
duke
parents:
diff changeset
   174
489c9b5090e2 Initial load
duke
parents:
diff changeset
   175
inline jint    jint_cast   (jfloat  x)           { return *(jint*   )&x; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   176
inline jlong   jlong_cast  (jdouble x)           { return *(jlong*  )&x; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   177
489c9b5090e2 Initial load
duke
parents:
diff changeset
   178
inline jfloat  jfloat_cast (jint    x)           { return *(jfloat* )&x; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   179
inline jdouble jdouble_cast(jlong   x)           { return *(jdouble*)&x; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   180
489c9b5090e2 Initial load
duke
parents:
diff changeset
   181
//----------------------------------------------------------------------------------------------------
489c9b5090e2 Initial load
duke
parents:
diff changeset
   182
// Constant for jlong (specifying an long long canstant is C++ compiler specific)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   183
489c9b5090e2 Initial load
duke
parents:
diff changeset
   184
// Build a 64bit integer constant
489c9b5090e2 Initial load
duke
parents:
diff changeset
   185
#define CONST64(x)  (x ## LL)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   186
#define UCONST64(x) (x ## ULL)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   187
489c9b5090e2 Initial load
duke
parents:
diff changeset
   188
const jlong min_jlong = CONST64(0x8000000000000000);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   189
const jlong max_jlong = CONST64(0x7fffffffffffffff);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   190
489c9b5090e2 Initial load
duke
parents:
diff changeset
   191
489c9b5090e2 Initial load
duke
parents:
diff changeset
   192
#ifdef SOLARIS
489c9b5090e2 Initial load
duke
parents:
diff changeset
   193
//----------------------------------------------------------------------------------------------------
489c9b5090e2 Initial load
duke
parents:
diff changeset
   194
// ANSI C++ fixes
489c9b5090e2 Initial load
duke
parents:
diff changeset
   195
// NOTE:In the ANSI committee's continuing attempt to make each version
489c9b5090e2 Initial load
duke
parents:
diff changeset
   196
// of C++ incompatible with the previous version, you can no longer cast
489c9b5090e2 Initial load
duke
parents:
diff changeset
   197
// pointers to functions without specifying linkage unless you want to get
489c9b5090e2 Initial load
duke
parents:
diff changeset
   198
// warnings.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   199
//
489c9b5090e2 Initial load
duke
parents:
diff changeset
   200
// This also means that pointers to functions can no longer be "hidden"
489c9b5090e2 Initial load
duke
parents:
diff changeset
   201
// in opaque types like void * because at the invokation point warnings
489c9b5090e2 Initial load
duke
parents:
diff changeset
   202
// will be generated. While this makes perfect sense from a type safety
489c9b5090e2 Initial load
duke
parents:
diff changeset
   203
// point of view it causes a lot of warnings on old code using C header
489c9b5090e2 Initial load
duke
parents:
diff changeset
   204
// files. Here are some typedefs to make the job of silencing warnings
489c9b5090e2 Initial load
duke
parents:
diff changeset
   205
// a bit easier.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   206
//
489c9b5090e2 Initial load
duke
parents:
diff changeset
   207
// The final kick in the teeth is that you can only have extern "C" linkage
489c9b5090e2 Initial load
duke
parents:
diff changeset
   208
// specified at file scope. So these typedefs are here rather than in the
489c9b5090e2 Initial load
duke
parents:
diff changeset
   209
// .hpp for the class (os:Solaris usually) that needs them.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   210
489c9b5090e2 Initial load
duke
parents:
diff changeset
   211
extern "C" {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   212
   typedef int (*int_fnP_thread_t_iP_uP_stack_tP_gregset_t)(thread_t, int*, unsigned *, stack_t*, gregset_t);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   213
   typedef int (*int_fnP_thread_t_i_gregset_t)(thread_t, int, gregset_t);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   214
   typedef int (*int_fnP_thread_t_i)(thread_t, int);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   215
   typedef int (*int_fnP_thread_t)(thread_t);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   216
489c9b5090e2 Initial load
duke
parents:
diff changeset
   217
   typedef int (*int_fnP_cond_tP_mutex_tP_timestruc_tP)(cond_t *cv, mutex_t *mx, timestruc_t *abst);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   218
   typedef int (*int_fnP_cond_tP_mutex_tP)(cond_t *cv, mutex_t *mx);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   219
489c9b5090e2 Initial load
duke
parents:
diff changeset
   220
   // typedef for missing API in libc
489c9b5090e2 Initial load
duke
parents:
diff changeset
   221
   typedef int (*int_fnP_mutex_tP_i_vP)(mutex_t *, int, void *);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   222
   typedef int (*int_fnP_mutex_tP)(mutex_t *);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   223
   typedef int (*int_fnP_cond_tP_i_vP)(cond_t *cv, int scope, void *arg);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   224
   typedef int (*int_fnP_cond_tP)(cond_t *cv);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   225
};
489c9b5090e2 Initial load
duke
parents:
diff changeset
   226
#endif // SOLARIS
489c9b5090e2 Initial load
duke
parents:
diff changeset
   227
489c9b5090e2 Initial load
duke
parents:
diff changeset
   228
//----------------------------------------------------------------------------------------------------
489c9b5090e2 Initial load
duke
parents:
diff changeset
   229
// Debugging
489c9b5090e2 Initial load
duke
parents:
diff changeset
   230
489c9b5090e2 Initial load
duke
parents:
diff changeset
   231
#define DEBUG_EXCEPTION ::abort();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   232
6176
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 5547
diff changeset
   233
#ifdef ARM
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 5547
diff changeset
   234
#ifdef SOLARIS
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 5547
diff changeset
   235
#define BREAKPOINT __asm__ volatile (".long 0xe1200070")
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 5547
diff changeset
   236
#else
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 5547
diff changeset
   237
#define BREAKPOINT __asm__ volatile (".long 0xe7f001f0")
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 5547
diff changeset
   238
#endif
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 5547
diff changeset
   239
#else
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   240
extern "C" void breakpoint();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   241
#define BREAKPOINT ::breakpoint()
6176
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 5547
diff changeset
   242
#endif
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   243
489c9b5090e2 Initial load
duke
parents:
diff changeset
   244
// checking for nanness
489c9b5090e2 Initial load
duke
parents:
diff changeset
   245
#ifdef SOLARIS
489c9b5090e2 Initial load
duke
parents:
diff changeset
   246
#ifdef SPARC
489c9b5090e2 Initial load
duke
parents:
diff changeset
   247
inline int g_isnan(float  f) { return isnanf(f); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   248
#else
489c9b5090e2 Initial load
duke
parents:
diff changeset
   249
// isnanf() broken on Intel Solaris use isnand()
489c9b5090e2 Initial load
duke
parents:
diff changeset
   250
inline int g_isnan(float  f) { return isnand(f); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   251
#endif
489c9b5090e2 Initial load
duke
parents:
diff changeset
   252
inline int g_isnan(double f) { return isnand(f); }
10565
dc90c239f4ec 7089790: integrate bsd-port changes
never
parents: 9124
diff changeset
   253
#elif defined(__APPLE__)
dc90c239f4ec 7089790: integrate bsd-port changes
never
parents: 9124
diff changeset
   254
inline int g_isnan(double f) { return isnan(f); }
dc90c239f4ec 7089790: integrate bsd-port changes
never
parents: 9124
diff changeset
   255
#elif defined(LINUX) || defined(_ALLBSD_SOURCE)
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   256
inline int g_isnan(float  f) { return isnanf(f); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   257
inline int g_isnan(double f) { return isnan(f); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   258
#else
489c9b5090e2 Initial load
duke
parents:
diff changeset
   259
#error "missing platform-specific definition here"
489c9b5090e2 Initial load
duke
parents:
diff changeset
   260
#endif
489c9b5090e2 Initial load
duke
parents:
diff changeset
   261
6176
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 5547
diff changeset
   262
// GCC 4.3 does not allow 0.0/0.0 to produce a NAN value
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 5547
diff changeset
   263
#if (__GNUC__ == 4) && (__GNUC_MINOR__ > 2)
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 5547
diff changeset
   264
#define CAN_USE_NAN_DEFINE 1
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 5547
diff changeset
   265
#endif
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 5547
diff changeset
   266
4d9030fe341f 6953477: Increase portability and flexibility of building Hotspot
bobv
parents: 5547
diff changeset
   267
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   268
// Checking for finiteness
489c9b5090e2 Initial load
duke
parents:
diff changeset
   269
489c9b5090e2 Initial load
duke
parents:
diff changeset
   270
inline int g_isfinite(jfloat  f)                 { return finite(f); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   271
inline int g_isfinite(jdouble f)                 { return finite(f); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   272
489c9b5090e2 Initial load
duke
parents:
diff changeset
   273
489c9b5090e2 Initial load
duke
parents:
diff changeset
   274
// Wide characters
489c9b5090e2 Initial load
duke
parents:
diff changeset
   275
489c9b5090e2 Initial load
duke
parents:
diff changeset
   276
inline int wcslen(const jchar* x) { return wcslen((const wchar_t*)x); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   277
489c9b5090e2 Initial load
duke
parents:
diff changeset
   278
489c9b5090e2 Initial load
duke
parents:
diff changeset
   279
// Portability macros
489c9b5090e2 Initial load
duke
parents:
diff changeset
   280
#define PRAGMA_INTERFACE             #pragma interface
489c9b5090e2 Initial load
duke
parents:
diff changeset
   281
#define PRAGMA_IMPLEMENTATION        #pragma implementation
489c9b5090e2 Initial load
duke
parents:
diff changeset
   282
#define VALUE_OBJ_CLASS_SPEC
489c9b5090e2 Initial load
duke
parents:
diff changeset
   283
489c9b5090e2 Initial load
duke
parents:
diff changeset
   284
#if (__GNUC__ == 2) && (__GNUC_MINOR__ < 95)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   285
#define TEMPLATE_TABLE_BUG
489c9b5090e2 Initial load
duke
parents:
diff changeset
   286
#endif
489c9b5090e2 Initial load
duke
parents:
diff changeset
   287
#if (__GNUC__ == 2) && (__GNUC_MINOR__ >= 96)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   288
#define CONST_SDM_BUG
489c9b5090e2 Initial load
duke
parents:
diff changeset
   289
#endif
489c9b5090e2 Initial load
duke
parents:
diff changeset
   290
489c9b5090e2 Initial load
duke
parents:
diff changeset
   291
// Formatting.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   292
#ifdef _LP64
489c9b5090e2 Initial load
duke
parents:
diff changeset
   293
#define FORMAT64_MODIFIER "l"
489c9b5090e2 Initial load
duke
parents:
diff changeset
   294
#else // !_LP64
489c9b5090e2 Initial load
duke
parents:
diff changeset
   295
#define FORMAT64_MODIFIER "ll"
489c9b5090e2 Initial load
duke
parents:
diff changeset
   296
#endif // _LP64
489c9b5090e2 Initial load
duke
parents:
diff changeset
   297
489c9b5090e2 Initial load
duke
parents:
diff changeset
   298
// HACK: gcc warns about applying offsetof() to non-POD object or calculating
489c9b5090e2 Initial load
duke
parents:
diff changeset
   299
//       offset directly when base address is NULL. Use 16 to get around the
489c9b5090e2 Initial load
duke
parents:
diff changeset
   300
//       warning. gcc-3.4 has an option -Wno-invalid-offsetof to suppress
489c9b5090e2 Initial load
duke
parents:
diff changeset
   301
//       this warning.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   302
#define offset_of(klass,field) (size_t)((intx)&(((klass*)16)->field) - 16)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   303
489c9b5090e2 Initial load
duke
parents:
diff changeset
   304
#ifdef offsetof
489c9b5090e2 Initial load
duke
parents:
diff changeset
   305
# undef offsetof
489c9b5090e2 Initial load
duke
parents:
diff changeset
   306
#endif
489c9b5090e2 Initial load
duke
parents:
diff changeset
   307
#define offsetof(klass,field) offset_of(klass,field)
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6176
diff changeset
   308
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6176
diff changeset
   309
#endif // SHARE_VM_UTILITIES_GLOBALDEFINITIONS_GCC_HPP