hotspot/src/share/vm/utilities/debug.hpp
author iignatyev
Mon, 09 May 2016 14:15:39 +0300
changeset 38254 05e46b580b4e
parent 37113 5a33bf5089ac
child 41182 dbd59c1da636
permissions -rw-r--r--
8149591: Prepare hotspot for GTest Reviewed-by: jwilhelm Contributed-by: stefan.karlsson@oracle.com, stefan.sarne@oracle.com, jesper.wilhelmsson@oracle.com, erik.helin@oracle.com, alexandre.iline@oracle.com, igor.ignatyev@oracle.com
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
     1
/*
37113
5a33bf5089ac 8148425: strerror() function is not thread-safe
stuefe
parents: 33142
diff changeset
     2
 * Copyright (c) 1997, 2016, 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: 5403
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 5403
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: 5403
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: 5547
diff changeset
    25
#ifndef SHARE_VM_UTILITIES_DEBUG_HPP
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 5547
diff changeset
    26
#define SHARE_VM_UTILITIES_DEBUG_HPP
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 5547
diff changeset
    27
22827
07d991d45a51 8023033: PPC64 (part 13): basic changes for AIX
goetz
parents: 18683
diff changeset
    28
#include "utilities/globalDefinitions.hpp"
8680
f1c414e16a4c 7014923: G1: code cleanup
tonyp
parents: 8076
diff changeset
    29
#include "prims/jvm.h"
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 5547
diff changeset
    30
5403
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
    31
#include <stdarg.h>
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
    32
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
    33
// Simple class to format the ctor arguments into a fixed-sized buffer.
13393
f0344cc50a90 7187454: stack overflow in C2 compiler thread on Solaris x86
kvn
parents: 11636
diff changeset
    34
class FormatBufferBase {
f0344cc50a90 7187454: stack overflow in C2 compiler thread on Solaris x86
kvn
parents: 11636
diff changeset
    35
 protected:
f0344cc50a90 7187454: stack overflow in C2 compiler thread on Solaris x86
kvn
parents: 11636
diff changeset
    36
  char* _buf;
f0344cc50a90 7187454: stack overflow in C2 compiler thread on Solaris x86
kvn
parents: 11636
diff changeset
    37
  inline FormatBufferBase(char* buf) : _buf(buf) {}
f0344cc50a90 7187454: stack overflow in C2 compiler thread on Solaris x86
kvn
parents: 11636
diff changeset
    38
 public:
33105
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
    39
  static const int BufferSize = 256;
13393
f0344cc50a90 7187454: stack overflow in C2 compiler thread on Solaris x86
kvn
parents: 11636
diff changeset
    40
  operator const char *() const { return _buf; }
f0344cc50a90 7187454: stack overflow in C2 compiler thread on Solaris x86
kvn
parents: 11636
diff changeset
    41
};
f0344cc50a90 7187454: stack overflow in C2 compiler thread on Solaris x86
kvn
parents: 11636
diff changeset
    42
f0344cc50a90 7187454: stack overflow in C2 compiler thread on Solaris x86
kvn
parents: 11636
diff changeset
    43
// Use resource area for buffer
f0344cc50a90 7187454: stack overflow in C2 compiler thread on Solaris x86
kvn
parents: 11636
diff changeset
    44
class FormatBufferResource : public FormatBufferBase {
f0344cc50a90 7187454: stack overflow in C2 compiler thread on Solaris x86
kvn
parents: 11636
diff changeset
    45
 public:
24424
2658d7834c6e 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 23515
diff changeset
    46
  FormatBufferResource(const char * format, ...) ATTRIBUTE_PRINTF(2, 3);
13393
f0344cc50a90 7187454: stack overflow in C2 compiler thread on Solaris x86
kvn
parents: 11636
diff changeset
    47
};
f0344cc50a90 7187454: stack overflow in C2 compiler thread on Solaris x86
kvn
parents: 11636
diff changeset
    48
38254
05e46b580b4e 8149591: Prepare hotspot for GTest
iignatyev
parents: 37113
diff changeset
    49
class FormatBufferDummy {};
05e46b580b4e 8149591: Prepare hotspot for GTest
iignatyev
parents: 37113
diff changeset
    50
13393
f0344cc50a90 7187454: stack overflow in C2 compiler thread on Solaris x86
kvn
parents: 11636
diff changeset
    51
// Use stack for buffer
33105
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
    52
template <size_t bufsz = FormatBufferBase::BufferSize>
13393
f0344cc50a90 7187454: stack overflow in C2 compiler thread on Solaris x86
kvn
parents: 11636
diff changeset
    53
class FormatBuffer : public FormatBufferBase {
11636
3c07b54482a5 7141200: log some interesting information in ring buffers for crashes
never
parents: 8921
diff changeset
    54
 public:
33105
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
    55
  inline FormatBuffer(const char* format, ...) ATTRIBUTE_PRINTF(2, 3);
38254
05e46b580b4e 8149591: Prepare hotspot for GTest
iignatyev
parents: 37113
diff changeset
    56
  // since va_list is unspecified type (can be char*), we use FormatBufferDummy to disambiguate these constructors
05e46b580b4e 8149591: Prepare hotspot for GTest
iignatyev
parents: 37113
diff changeset
    57
  inline FormatBuffer(FormatBufferDummy dummy, const char* format, va_list ap) ATTRIBUTE_PRINTF(3, 0);
24424
2658d7834c6e 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 23515
diff changeset
    58
  inline void append(const char* format, ...)  ATTRIBUTE_PRINTF(2, 3);
2658d7834c6e 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 23515
diff changeset
    59
  inline void print(const char* format, ...)  ATTRIBUTE_PRINTF(2, 3);
2658d7834c6e 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 23515
diff changeset
    60
  inline void printv(const char* format, va_list ap) ATTRIBUTE_PRINTF(2, 0);
5403
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
    61
11636
3c07b54482a5 7141200: log some interesting information in ring buffers for crashes
never
parents: 8921
diff changeset
    62
  char* buffer() { return _buf; }
3c07b54482a5 7141200: log some interesting information in ring buffers for crashes
never
parents: 8921
diff changeset
    63
  int size() { return bufsz; }
3c07b54482a5 7141200: log some interesting information in ring buffers for crashes
never
parents: 8921
diff changeset
    64
3c07b54482a5 7141200: log some interesting information in ring buffers for crashes
never
parents: 8921
diff changeset
    65
 private:
5403
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
    66
  FormatBuffer(const FormatBuffer &); // prevent copies
13393
f0344cc50a90 7187454: stack overflow in C2 compiler thread on Solaris x86
kvn
parents: 11636
diff changeset
    67
  char _buffer[bufsz];
5403
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
    68
11636
3c07b54482a5 7141200: log some interesting information in ring buffers for crashes
never
parents: 8921
diff changeset
    69
 protected:
3c07b54482a5 7141200: log some interesting information in ring buffers for crashes
never
parents: 8921
diff changeset
    70
  inline FormatBuffer();
5403
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
    71
};
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
    72
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
    73
template <size_t bufsz>
13393
f0344cc50a90 7187454: stack overflow in C2 compiler thread on Solaris x86
kvn
parents: 11636
diff changeset
    74
FormatBuffer<bufsz>::FormatBuffer(const char * format, ...) : FormatBufferBase(_buffer) {
5403
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
    75
  va_list argp;
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
    76
  va_start(argp, format);
8680
f1c414e16a4c 7014923: G1: code cleanup
tonyp
parents: 8076
diff changeset
    77
  jio_vsnprintf(_buf, bufsz, format, argp);
5403
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
    78
  va_end(argp);
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
    79
}
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
    80
7923
fc200fcd4e05 6977804: G1: remove the zero-filling thread
tonyp
parents: 7397
diff changeset
    81
template <size_t bufsz>
38254
05e46b580b4e 8149591: Prepare hotspot for GTest
iignatyev
parents: 37113
diff changeset
    82
FormatBuffer<bufsz>::FormatBuffer(FormatBufferDummy dummy, const char * format, va_list ap) : FormatBufferBase(_buffer) {
05e46b580b4e 8149591: Prepare hotspot for GTest
iignatyev
parents: 37113
diff changeset
    83
  jio_vsnprintf(_buf, bufsz, format, ap);
05e46b580b4e 8149591: Prepare hotspot for GTest
iignatyev
parents: 37113
diff changeset
    84
}
05e46b580b4e 8149591: Prepare hotspot for GTest
iignatyev
parents: 37113
diff changeset
    85
05e46b580b4e 8149591: Prepare hotspot for GTest
iignatyev
parents: 37113
diff changeset
    86
template <size_t bufsz>
13393
f0344cc50a90 7187454: stack overflow in C2 compiler thread on Solaris x86
kvn
parents: 11636
diff changeset
    87
FormatBuffer<bufsz>::FormatBuffer() : FormatBufferBase(_buffer) {
11636
3c07b54482a5 7141200: log some interesting information in ring buffers for crashes
never
parents: 8921
diff changeset
    88
  _buf[0] = '\0';
3c07b54482a5 7141200: log some interesting information in ring buffers for crashes
never
parents: 8921
diff changeset
    89
}
3c07b54482a5 7141200: log some interesting information in ring buffers for crashes
never
parents: 8921
diff changeset
    90
3c07b54482a5 7141200: log some interesting information in ring buffers for crashes
never
parents: 8921
diff changeset
    91
template <size_t bufsz>
3c07b54482a5 7141200: log some interesting information in ring buffers for crashes
never
parents: 8921
diff changeset
    92
void FormatBuffer<bufsz>::print(const char * format, ...) {
3c07b54482a5 7141200: log some interesting information in ring buffers for crashes
never
parents: 8921
diff changeset
    93
  va_list argp;
3c07b54482a5 7141200: log some interesting information in ring buffers for crashes
never
parents: 8921
diff changeset
    94
  va_start(argp, format);
3c07b54482a5 7141200: log some interesting information in ring buffers for crashes
never
parents: 8921
diff changeset
    95
  jio_vsnprintf(_buf, bufsz, format, argp);
3c07b54482a5 7141200: log some interesting information in ring buffers for crashes
never
parents: 8921
diff changeset
    96
  va_end(argp);
3c07b54482a5 7141200: log some interesting information in ring buffers for crashes
never
parents: 8921
diff changeset
    97
}
3c07b54482a5 7141200: log some interesting information in ring buffers for crashes
never
parents: 8921
diff changeset
    98
3c07b54482a5 7141200: log some interesting information in ring buffers for crashes
never
parents: 8921
diff changeset
    99
template <size_t bufsz>
3c07b54482a5 7141200: log some interesting information in ring buffers for crashes
never
parents: 8921
diff changeset
   100
void FormatBuffer<bufsz>::printv(const char * format, va_list argp) {
3c07b54482a5 7141200: log some interesting information in ring buffers for crashes
never
parents: 8921
diff changeset
   101
  jio_vsnprintf(_buf, bufsz, format, argp);
3c07b54482a5 7141200: log some interesting information in ring buffers for crashes
never
parents: 8921
diff changeset
   102
}
3c07b54482a5 7141200: log some interesting information in ring buffers for crashes
never
parents: 8921
diff changeset
   103
3c07b54482a5 7141200: log some interesting information in ring buffers for crashes
never
parents: 8921
diff changeset
   104
template <size_t bufsz>
7923
fc200fcd4e05 6977804: G1: remove the zero-filling thread
tonyp
parents: 7397
diff changeset
   105
void FormatBuffer<bufsz>::append(const char* format, ...) {
fc200fcd4e05 6977804: G1: remove the zero-filling thread
tonyp
parents: 7397
diff changeset
   106
  // Given that the constructor does a vsnprintf we can assume that
fc200fcd4e05 6977804: G1: remove the zero-filling thread
tonyp
parents: 7397
diff changeset
   107
  // _buf is already initialized.
fc200fcd4e05 6977804: G1: remove the zero-filling thread
tonyp
parents: 7397
diff changeset
   108
  size_t len = strlen(_buf);
fc200fcd4e05 6977804: G1: remove the zero-filling thread
tonyp
parents: 7397
diff changeset
   109
  char* buf_end = _buf + len;
fc200fcd4e05 6977804: G1: remove the zero-filling thread
tonyp
parents: 7397
diff changeset
   110
fc200fcd4e05 6977804: G1: remove the zero-filling thread
tonyp
parents: 7397
diff changeset
   111
  va_list argp;
fc200fcd4e05 6977804: G1: remove the zero-filling thread
tonyp
parents: 7397
diff changeset
   112
  va_start(argp, format);
8680
f1c414e16a4c 7014923: G1: code cleanup
tonyp
parents: 8076
diff changeset
   113
  jio_vsnprintf(buf_end, bufsz - len, format, argp);
7923
fc200fcd4e05 6977804: G1: remove the zero-filling thread
tonyp
parents: 7397
diff changeset
   114
  va_end(argp);
fc200fcd4e05 6977804: G1: remove the zero-filling thread
tonyp
parents: 7397
diff changeset
   115
}
fc200fcd4e05 6977804: G1: remove the zero-filling thread
tonyp
parents: 7397
diff changeset
   116
33105
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   117
// Used to format messages.
5403
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
   118
typedef FormatBuffer<> err_msg;
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
   119
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   120
// assertions
28477
157314902d78 8068396: Rename assert() to vmassert()
kbarrett
parents: 28476
diff changeset
   121
#ifndef ASSERT
33105
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   122
#define vmassert(p, ...)
28477
157314902d78 8068396: Rename assert() to vmassert()
kbarrett
parents: 28476
diff changeset
   123
#else
157314902d78 8068396: Rename assert() to vmassert()
kbarrett
parents: 28476
diff changeset
   124
// Note: message says "assert" rather than "vmassert" for backward
157314902d78 8068396: Rename assert() to vmassert()
kbarrett
parents: 28476
diff changeset
   125
// compatibility with tools that parse/match the message text.
33105
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   126
// Note: The signature is vmassert(p, format, ...), but the solaris
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   127
// compiler can't handle an empty ellipsis in a macro without a warning.
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   128
#define vmassert(p, ...)                                                       \
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   129
do {                                                                           \
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   130
  if (!(p)) {                                                                  \
38254
05e46b580b4e 8149591: Prepare hotspot for GTest
iignatyev
parents: 37113
diff changeset
   131
    if (is_executing_unit_tests()) {                                           \
05e46b580b4e 8149591: Prepare hotspot for GTest
iignatyev
parents: 37113
diff changeset
   132
      report_assert_msg(__VA_ARGS__);                                          \
05e46b580b4e 8149591: Prepare hotspot for GTest
iignatyev
parents: 37113
diff changeset
   133
    }                                                                          \
33105
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   134
    report_vm_error(__FILE__, __LINE__, "assert(" #p ") failed", __VA_ARGS__); \
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   135
    BREAKPOINT;                                                                \
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   136
  }                                                                            \
5403
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
   137
} while (0)
28477
157314902d78 8068396: Rename assert() to vmassert()
kbarrett
parents: 28476
diff changeset
   138
#endif
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   139
28477
157314902d78 8068396: Rename assert() to vmassert()
kbarrett
parents: 28476
diff changeset
   140
// For backward compatibility.
33105
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   141
#define assert(p, ...) vmassert(p, __VA_ARGS__)
28477
157314902d78 8068396: Rename assert() to vmassert()
kbarrett
parents: 28476
diff changeset
   142
157314902d78 8068396: Rename assert() to vmassert()
kbarrett
parents: 28476
diff changeset
   143
// This version of vmassert is for use with checking return status from
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   144
// library calls that return actual error values eg. EINVAL,
489c9b5090e2 Initial load
duke
parents:
diff changeset
   145
// ENOMEM etc, rather than returning -1 and setting errno.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   146
// When the status is not what is expected it is very useful to know
489c9b5090e2 Initial load
duke
parents:
diff changeset
   147
// what status was actually returned, so we pass the status variable as
489c9b5090e2 Initial load
duke
parents:
diff changeset
   148
// an extra arg and use strerror to convert it to a meaningful string
489c9b5090e2 Initial load
duke
parents:
diff changeset
   149
// like "Invalid argument", "out of memory" etc
28477
157314902d78 8068396: Rename assert() to vmassert()
kbarrett
parents: 28476
diff changeset
   150
#define vmassert_status(p, status, msg) \
37113
5a33bf5089ac 8148425: strerror() function is not thread-safe
stuefe
parents: 33142
diff changeset
   151
do {                                                                           \
5a33bf5089ac 8148425: strerror() function is not thread-safe
stuefe
parents: 33142
diff changeset
   152
  if (!(p)) {                                                                  \
5a33bf5089ac 8148425: strerror() function is not thread-safe
stuefe
parents: 33142
diff changeset
   153
    report_vm_status_error(__FILE__, __LINE__, "assert(" #p ") failed",        \
5a33bf5089ac 8148425: strerror() function is not thread-safe
stuefe
parents: 33142
diff changeset
   154
                           status, msg);                                       \
5a33bf5089ac 8148425: strerror() function is not thread-safe
stuefe
parents: 33142
diff changeset
   155
    BREAKPOINT;                                                                \
5a33bf5089ac 8148425: strerror() function is not thread-safe
stuefe
parents: 33142
diff changeset
   156
  }                                                                            \
5a33bf5089ac 8148425: strerror() function is not thread-safe
stuefe
parents: 33142
diff changeset
   157
} while (0)
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   158
28477
157314902d78 8068396: Rename assert() to vmassert()
kbarrett
parents: 28476
diff changeset
   159
// For backward compatibility.
157314902d78 8068396: Rename assert() to vmassert()
kbarrett
parents: 28476
diff changeset
   160
#define assert_status(p, status, msg) vmassert_status(p, status, msg)
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   161
28477
157314902d78 8068396: Rename assert() to vmassert()
kbarrett
parents: 28476
diff changeset
   162
// guarantee is like vmassert except it's always executed -- use it for
5403
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
   163
// cheap tests that catch errors that would otherwise be hard to find.
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   164
// guarantee is also used for Verify options.
33105
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   165
#define guarantee(p, ...)                                                         \
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   166
do {                                                                              \
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   167
  if (!(p)) {                                                                     \
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   168
    report_vm_error(__FILE__, __LINE__, "guarantee(" #p ") failed", __VA_ARGS__); \
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   169
    BREAKPOINT;                                                                   \
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   170
  }                                                                               \
5403
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
   171
} while (0)
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
   172
33105
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   173
#define fatal(...)                                                                \
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   174
do {                                                                              \
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   175
  report_fatal(__FILE__, __LINE__, __VA_ARGS__);                                  \
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   176
  BREAKPOINT;                                                                     \
5403
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
   177
} while (0)
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
   178
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
   179
// out of memory
33105
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   180
#define vm_exit_out_of_memory(size, vm_err_type, ...)                             \
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   181
do {                                                                              \
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   182
  report_vm_out_of_memory(__FILE__, __LINE__, size, vm_err_type, __VA_ARGS__);    \
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   183
  BREAKPOINT;                                                                     \
5403
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
   184
} while (0)
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   185
33105
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   186
#define ShouldNotCallThis()                                                       \
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   187
do {                                                                              \
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   188
  report_should_not_call(__FILE__, __LINE__);                                     \
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   189
  BREAKPOINT;                                                                     \
5403
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
   190
} while (0)
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
   191
33105
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   192
#define ShouldNotReachHere()                                                      \
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   193
do {                                                                              \
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   194
  report_should_not_reach_here(__FILE__, __LINE__);                               \
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   195
  BREAKPOINT;                                                                     \
5403
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
   196
} while (0)
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
   197
33105
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   198
#define Unimplemented()                                                           \
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   199
do {                                                                              \
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   200
  report_unimplemented(__FILE__, __LINE__);                                       \
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   201
  BREAKPOINT;                                                                     \
5403
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
   202
} while (0)
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
   203
33105
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   204
#define Untested(msg)                                                             \
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   205
do {                                                                              \
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   206
  report_untested(__FILE__, __LINE__, msg);                                       \
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   207
  BREAKPOINT;                                                                     \
5403
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
   208
} while (0);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   209
17087
f0b76c4c93a0 8011661: Insufficient memory message says "malloc" when sometimes it should say "mmap"
ccheung
parents: 16370
diff changeset
   210
f0b76c4c93a0 8011661: Insufficient memory message says "malloc" when sometimes it should say "mmap"
ccheung
parents: 16370
diff changeset
   211
// types of VM error - originally in vmError.hpp
f0b76c4c93a0 8011661: Insufficient memory message says "malloc" when sometimes it should say "mmap"
ccheung
parents: 16370
diff changeset
   212
enum VMErrorType {
f0b76c4c93a0 8011661: Insufficient memory message says "malloc" when sometimes it should say "mmap"
ccheung
parents: 16370
diff changeset
   213
  INTERNAL_ERROR   = 0xe0000000,
f0b76c4c93a0 8011661: Insufficient memory message says "malloc" when sometimes it should say "mmap"
ccheung
parents: 16370
diff changeset
   214
  OOM_MALLOC_ERROR = 0xe0000001,
f0b76c4c93a0 8011661: Insufficient memory message says "malloc" when sometimes it should say "mmap"
ccheung
parents: 16370
diff changeset
   215
  OOM_MMAP_ERROR   = 0xe0000002
f0b76c4c93a0 8011661: Insufficient memory message says "malloc" when sometimes it should say "mmap"
ccheung
parents: 16370
diff changeset
   216
};
f0b76c4c93a0 8011661: Insufficient memory message says "malloc" when sometimes it should say "mmap"
ccheung
parents: 16370
diff changeset
   217
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   218
// error reporting helper functions
33105
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   219
void report_vm_error(const char* file, int line, const char* error_msg);
33142
399fdb935d28 8138733: Fix build: gcc < 4.8 doesn't grok -Wno-format-zero-length added in 8080775
goetz
parents: 33105
diff changeset
   220
#if !defined(__GNUC__) || defined (__clang_major__) || (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 8)) || __GNUC__ > 4)
399fdb935d28 8138733: Fix build: gcc < 4.8 doesn't grok -Wno-format-zero-length added in 8080775
goetz
parents: 33105
diff changeset
   221
// ATTRIBUTE_PRINTF works with gcc >= 4.8 and any other compiler.
5403
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
   222
void report_vm_error(const char* file, int line, const char* error_msg,
33105
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   223
                     const char* detail_fmt, ...) ATTRIBUTE_PRINTF(4, 5);
38254
05e46b580b4e 8149591: Prepare hotspot for GTest
iignatyev
parents: 37113
diff changeset
   224
#ifdef ASSERT
05e46b580b4e 8149591: Prepare hotspot for GTest
iignatyev
parents: 37113
diff changeset
   225
void report_assert_msg(const char* msg, ...) ATTRIBUTE_PRINTF(1, 2);
05e46b580b4e 8149591: Prepare hotspot for GTest
iignatyev
parents: 37113
diff changeset
   226
#endif // ASSERT
33142
399fdb935d28 8138733: Fix build: gcc < 4.8 doesn't grok -Wno-format-zero-length added in 8080775
goetz
parents: 33105
diff changeset
   227
#else
399fdb935d28 8138733: Fix build: gcc < 4.8 doesn't grok -Wno-format-zero-length added in 8080775
goetz
parents: 33105
diff changeset
   228
// GCC < 4.8 warns because of empty format string.  Warning can not be switched off selectively.
399fdb935d28 8138733: Fix build: gcc < 4.8 doesn't grok -Wno-format-zero-length added in 8080775
goetz
parents: 33105
diff changeset
   229
void report_vm_error(const char* file, int line, const char* error_msg,
399fdb935d28 8138733: Fix build: gcc < 4.8 doesn't grok -Wno-format-zero-length added in 8080775
goetz
parents: 33105
diff changeset
   230
                     const char* detail_fmt, ...);
38254
05e46b580b4e 8149591: Prepare hotspot for GTest
iignatyev
parents: 37113
diff changeset
   231
#ifdef ASSERT
05e46b580b4e 8149591: Prepare hotspot for GTest
iignatyev
parents: 37113
diff changeset
   232
void report_assert_msg(const char* msg, ...);
05e46b580b4e 8149591: Prepare hotspot for GTest
iignatyev
parents: 37113
diff changeset
   233
#endif // ASSERT
33142
399fdb935d28 8138733: Fix build: gcc < 4.8 doesn't grok -Wno-format-zero-length added in 8080775
goetz
parents: 33105
diff changeset
   234
#endif
37113
5a33bf5089ac 8148425: strerror() function is not thread-safe
stuefe
parents: 33142
diff changeset
   235
void report_vm_status_error(const char* file, int line, const char* error_msg,
5a33bf5089ac 8148425: strerror() function is not thread-safe
stuefe
parents: 33142
diff changeset
   236
                            int status, const char* detail);
33105
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   237
void report_fatal(const char* file, int line, const char* detail_fmt, ...) ATTRIBUTE_PRINTF(3, 4);
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   238
void report_vm_out_of_memory(const char* file, int line, size_t size, VMErrorType vm_err_type,
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   239
                             const char* detail_fmt, ...) ATTRIBUTE_PRINTF(5, 6);
5403
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
   240
void report_should_not_call(const char* file, int line);
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
   241
void report_should_not_reach_here(const char* file, int line);
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
   242
void report_unimplemented(const char* file, int line);
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
   243
void report_untested(const char* file, int line, const char* message);
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
   244
38254
05e46b580b4e 8149591: Prepare hotspot for GTest
iignatyev
parents: 37113
diff changeset
   245
#ifdef ASSERT
05e46b580b4e 8149591: Prepare hotspot for GTest
iignatyev
parents: 37113
diff changeset
   246
// unit test support
05e46b580b4e 8149591: Prepare hotspot for GTest
iignatyev
parents: 37113
diff changeset
   247
bool is_executing_unit_tests();
05e46b580b4e 8149591: Prepare hotspot for GTest
iignatyev
parents: 37113
diff changeset
   248
#endif // ASSERT
05e46b580b4e 8149591: Prepare hotspot for GTest
iignatyev
parents: 37113
diff changeset
   249
24424
2658d7834c6e 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 23515
diff changeset
   250
void warning(const char* format, ...) ATTRIBUTE_PRINTF(1, 2);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   251
28480
23a93b2e118c 8067306: Improve STATIC_ASSERT
kbarrett
parents: 27404
diff changeset
   252
// Compile-time asserts.  Cond must be a compile-time constant expression that
23a93b2e118c 8067306: Improve STATIC_ASSERT
kbarrett
parents: 27404
diff changeset
   253
// is convertible to bool.  STATIC_ASSERT() can be used anywhere a declaration
23a93b2e118c 8067306: Improve STATIC_ASSERT
kbarrett
parents: 27404
diff changeset
   254
// may appear.
23a93b2e118c 8067306: Improve STATIC_ASSERT
kbarrett
parents: 27404
diff changeset
   255
//
23a93b2e118c 8067306: Improve STATIC_ASSERT
kbarrett
parents: 27404
diff changeset
   256
// Implementation Note: STATIC_ASSERT_FAILURE<true> provides a value member
23a93b2e118c 8067306: Improve STATIC_ASSERT
kbarrett
parents: 27404
diff changeset
   257
// rather than type member that could be used directly in the typedef, because
23a93b2e118c 8067306: Improve STATIC_ASSERT
kbarrett
parents: 27404
diff changeset
   258
// a type member would require conditional use of "typename", depending on
23a93b2e118c 8067306: Improve STATIC_ASSERT
kbarrett
parents: 27404
diff changeset
   259
// whether Cond is dependent or not.  The use of a value member leads to the
23a93b2e118c 8067306: Improve STATIC_ASSERT
kbarrett
parents: 27404
diff changeset
   260
// use of an array type.
19285
0a3b3f115402 8022880: False sharing between PSPromotionManager instances
stefank
parents: 18683
diff changeset
   261
28480
23a93b2e118c 8067306: Improve STATIC_ASSERT
kbarrett
parents: 27404
diff changeset
   262
template<bool x> struct STATIC_ASSERT_FAILURE;
23a93b2e118c 8067306: Improve STATIC_ASSERT
kbarrett
parents: 27404
diff changeset
   263
template<> struct STATIC_ASSERT_FAILURE<true> { enum { value = 1 }; };
23a93b2e118c 8067306: Improve STATIC_ASSERT
kbarrett
parents: 27404
diff changeset
   264
29691
c539e3e94ef1 8073994: STATIC_ASSERT use of __LINE__ is wrong
kbarrett
parents: 28943
diff changeset
   265
#define STATIC_ASSERT(Cond) \
31340
2f9ff278bb13 8086027: Multiple STATIC_ASSERTs at class scope doesn't work
kbarrett
parents: 29691
diff changeset
   266
  typedef char PASTE_TOKENS(STATIC_ASSERT_DUMMY_TYPE_, __LINE__)[ \
2f9ff278bb13 8086027: Multiple STATIC_ASSERTs at class scope doesn't work
kbarrett
parents: 29691
diff changeset
   267
    STATIC_ASSERT_FAILURE< (Cond) >::value ]
19285
0a3b3f115402 8022880: False sharing between PSPromotionManager instances
stefank
parents: 18683
diff changeset
   268
8076
96d498ec7ae1 6990754: Use native memory and reference counting to implement SymbolTable
coleenp
parents: 7923
diff changeset
   269
// out of shared space reporting
96d498ec7ae1 6990754: Use native memory and reference counting to implement SymbolTable
coleenp
parents: 7923
diff changeset
   270
enum SharedSpaceType {
96d498ec7ae1 6990754: Use native memory and reference counting to implement SymbolTable
coleenp
parents: 7923
diff changeset
   271
  SharedReadOnly,
96d498ec7ae1 6990754: Use native memory and reference counting to implement SymbolTable
coleenp
parents: 7923
diff changeset
   272
  SharedReadWrite,
27404
33c0f343cd5c 8038268: VM Crashes in MetaspaceShared::generate_vtable_methods while creating CDS archive with limiting SharedMiscCodeSize
ccheung
parents: 26821
diff changeset
   273
  SharedMiscData,
33c0f343cd5c 8038268: VM Crashes in MetaspaceShared::generate_vtable_methods while creating CDS archive with limiting SharedMiscCodeSize
ccheung
parents: 26821
diff changeset
   274
  SharedMiscCode
8076
96d498ec7ae1 6990754: Use native memory and reference counting to implement SymbolTable
coleenp
parents: 7923
diff changeset
   275
};
96d498ec7ae1 6990754: Use native memory and reference counting to implement SymbolTable
coleenp
parents: 7923
diff changeset
   276
96d498ec7ae1 6990754: Use native memory and reference counting to implement SymbolTable
coleenp
parents: 7923
diff changeset
   277
void report_out_of_shared_space(SharedSpaceType space_type);
96d498ec7ae1 6990754: Use native memory and reference counting to implement SymbolTable
coleenp
parents: 7923
diff changeset
   278
28476
ae1ca3bf45ca 8067187: -XX:MaxMetaspaceSize=20m -Xshare:dump caused JVM to crash
ccheung
parents: 27404
diff changeset
   279
void report_insufficient_metaspace(size_t required_size);
ae1ca3bf45ca 8067187: -XX:MaxMetaspaceSize=20m -Xshare:dump caused JVM to crash
ccheung
parents: 27404
diff changeset
   280
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   281
// out of memory reporting
489c9b5090e2 Initial load
duke
parents:
diff changeset
   282
void report_java_out_of_memory(const char* message);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   283
489c9b5090e2 Initial load
duke
parents:
diff changeset
   284
// Support for self-destruct
489c9b5090e2 Initial load
duke
parents:
diff changeset
   285
bool is_error_reported();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   286
void set_error_reported();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   287
28477
157314902d78 8068396: Rename assert() to vmassert()
kbarrett
parents: 28476
diff changeset
   288
/* Test vmassert(), fatal(), guarantee(), etc. */
18683
a6418e038255 8015884: runThese crashed with SIGSEGV, hs_err has an error instead of stacktrace
dcubed
parents: 17087
diff changeset
   289
NOT_PRODUCT(void test_error_handler();)
5403
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
   290
28943
679546f0cc1f 8065895: Synchronous signals during error reporting may terminate or hang VM process
dholmes
parents: 28485
diff changeset
   291
// crash in a controlled way:
679546f0cc1f 8065895: Synchronous signals during error reporting may terminate or hang VM process
dholmes
parents: 28485
diff changeset
   292
// how can be one of:
679546f0cc1f 8065895: Synchronous signals during error reporting may terminate or hang VM process
dholmes
parents: 28485
diff changeset
   293
// 1,2 - asserts
679546f0cc1f 8065895: Synchronous signals during error reporting may terminate or hang VM process
dholmes
parents: 28485
diff changeset
   294
// 3,4 - guarantee
679546f0cc1f 8065895: Synchronous signals during error reporting may terminate or hang VM process
dholmes
parents: 28485
diff changeset
   295
// 5-7 - fatal
679546f0cc1f 8065895: Synchronous signals during error reporting may terminate or hang VM process
dholmes
parents: 28485
diff changeset
   296
// 8 - vm_exit_out_of_memory
679546f0cc1f 8065895: Synchronous signals during error reporting may terminate or hang VM process
dholmes
parents: 28485
diff changeset
   297
// 9 - ShouldNotCallThis
679546f0cc1f 8065895: Synchronous signals during error reporting may terminate or hang VM process
dholmes
parents: 28485
diff changeset
   298
// 10 - ShouldNotReachHere
679546f0cc1f 8065895: Synchronous signals during error reporting may terminate or hang VM process
dholmes
parents: 28485
diff changeset
   299
// 11 - Unimplemented
679546f0cc1f 8065895: Synchronous signals during error reporting may terminate or hang VM process
dholmes
parents: 28485
diff changeset
   300
// 12,13 - (not guaranteed) crashes
679546f0cc1f 8065895: Synchronous signals during error reporting may terminate or hang VM process
dholmes
parents: 28485
diff changeset
   301
// 14 - SIGSEGV
679546f0cc1f 8065895: Synchronous signals during error reporting may terminate or hang VM process
dholmes
parents: 28485
diff changeset
   302
// 15 - SIGFPE
679546f0cc1f 8065895: Synchronous signals during error reporting may terminate or hang VM process
dholmes
parents: 28485
diff changeset
   303
NOT_PRODUCT(void controlled_crash(int how);)
679546f0cc1f 8065895: Synchronous signals during error reporting may terminate or hang VM process
dholmes
parents: 28485
diff changeset
   304
679546f0cc1f 8065895: Synchronous signals during error reporting may terminate or hang VM process
dholmes
parents: 28485
diff changeset
   305
// returns an address which is guaranteed to generate a SIGSEGV on read,
679546f0cc1f 8065895: Synchronous signals during error reporting may terminate or hang VM process
dholmes
parents: 28485
diff changeset
   306
// for test purposes, which is not NULL and contains bits in every word
679546f0cc1f 8065895: Synchronous signals during error reporting may terminate or hang VM process
dholmes
parents: 28485
diff changeset
   307
NOT_PRODUCT(void* get_segfault_address();)
679546f0cc1f 8065895: Synchronous signals during error reporting may terminate or hang VM process
dholmes
parents: 28485
diff changeset
   308
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   309
void pd_ps(frame f);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   310
void pd_obfuscate_location(char *buf, size_t buflen);
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 5547
diff changeset
   311
26821
ce9f82507dc2 8058345: Refactor native stack printing from vmError.cpp to debug.cpp to make it available in gdb as well
simonis
parents: 24424
diff changeset
   312
class outputStream;
ce9f82507dc2 8058345: Refactor native stack printing from vmError.cpp to debug.cpp to make it available in gdb as well
simonis
parents: 24424
diff changeset
   313
void print_native_stack(outputStream* st, frame fr, Thread* t, char* buf, int buf_size);
ce9f82507dc2 8058345: Refactor native stack printing from vmError.cpp to debug.cpp to make it available in gdb as well
simonis
parents: 24424
diff changeset
   314
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 5547
diff changeset
   315
#endif // SHARE_VM_UTILITIES_DEBUG_HPP