src/hotspot/share/utilities/debug.hpp
author coleenp
Thu, 10 Jan 2019 15:13:51 -0500
changeset 53244 9807daeb47c4
parent 49653 a569cb4425f3
child 53757 e31f39e088b7
permissions -rw-r--r--
8216167: Update include guards to reflect correct directories Summary: Use script and some manual fixup to fix directores names in include guards. Reviewed-by: lfoltan, eosterlund, kbarrett
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
     1
/*
53244
9807daeb47c4 8216167: Update include guards to reflect correct directories
coleenp
parents: 49653
diff changeset
     2
 * Copyright (c) 1997, 2019, 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
53244
9807daeb47c4 8216167: Update include guards to reflect correct directories
coleenp
parents: 49653
diff changeset
    25
#ifndef SHARE_UTILITIES_DEBUG_HPP
9807daeb47c4 8216167: Update include guards to reflect correct directories
coleenp
parents: 49653
diff changeset
    26
#define SHARE_UTILITIES_DEBUG_HPP
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 5547
diff changeset
    27
46560
388aa8d67c80 8181449: Fix debug.hpp / globalDefinitions.hpp dependency inversion
kbarrett
parents: 44408
diff changeset
    28
#include "utilities/breakpoint.hpp"
388aa8d67c80 8181449: Fix debug.hpp / globalDefinitions.hpp dependency inversion
kbarrett
parents: 44408
diff changeset
    29
#include "utilities/compilerWarnings.hpp"
388aa8d67c80 8181449: Fix debug.hpp / globalDefinitions.hpp dependency inversion
kbarrett
parents: 44408
diff changeset
    30
#include "utilities/macros.hpp"
5403
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
    31
46560
388aa8d67c80 8181449: Fix debug.hpp / globalDefinitions.hpp dependency inversion
kbarrett
parents: 44408
diff changeset
    32
#include <stddef.h>
5403
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
    33
49653
a569cb4425f3 8191101: Show register content in hs-err file on assert
stuefe
parents: 47216
diff changeset
    34
// ShowRegistersOnAssert support (for now Linux only)
a569cb4425f3 8191101: Show register content in hs-err file on assert
stuefe
parents: 47216
diff changeset
    35
#if defined(LINUX) && !defined(ZERO)
a569cb4425f3 8191101: Show register content in hs-err file on assert
stuefe
parents: 47216
diff changeset
    36
#define CAN_SHOW_REGISTERS_ON_ASSERT
a569cb4425f3 8191101: Show register content in hs-err file on assert
stuefe
parents: 47216
diff changeset
    37
extern char* g_assert_poison;
a569cb4425f3 8191101: Show register content in hs-err file on assert
stuefe
parents: 47216
diff changeset
    38
#define TOUCH_ASSERT_POISON (*g_assert_poison) = 'X';
a569cb4425f3 8191101: Show register content in hs-err file on assert
stuefe
parents: 47216
diff changeset
    39
void initialize_assert_poison();
a569cb4425f3 8191101: Show register content in hs-err file on assert
stuefe
parents: 47216
diff changeset
    40
bool handle_assert_poison_fault(const void* ucVoid, const void* faulting_address);
a569cb4425f3 8191101: Show register content in hs-err file on assert
stuefe
parents: 47216
diff changeset
    41
#else
a569cb4425f3 8191101: Show register content in hs-err file on assert
stuefe
parents: 47216
diff changeset
    42
#define TOUCH_ASSERT_POISON
a569cb4425f3 8191101: Show register content in hs-err file on assert
stuefe
parents: 47216
diff changeset
    43
#endif // CAN_SHOW_REGISTERS_ON_ASSERT
a569cb4425f3 8191101: Show register content in hs-err file on assert
stuefe
parents: 47216
diff changeset
    44
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    45
// assertions
28477
157314902d78 8068396: Rename assert() to vmassert()
kbarrett
parents: 28476
diff changeset
    46
#ifndef ASSERT
33105
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
    47
#define vmassert(p, ...)
28477
157314902d78 8068396: Rename assert() to vmassert()
kbarrett
parents: 28476
diff changeset
    48
#else
157314902d78 8068396: Rename assert() to vmassert()
kbarrett
parents: 28476
diff changeset
    49
// Note: message says "assert" rather than "vmassert" for backward
157314902d78 8068396: Rename assert() to vmassert()
kbarrett
parents: 28476
diff changeset
    50
// compatibility with tools that parse/match the message text.
33105
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
    51
// Note: The signature is vmassert(p, format, ...), but the solaris
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
    52
// 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
    53
#define vmassert(p, ...)                                                       \
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
    54
do {                                                                           \
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
    55
  if (!(p)) {                                                                  \
49653
a569cb4425f3 8191101: Show register content in hs-err file on assert
stuefe
parents: 47216
diff changeset
    56
    TOUCH_ASSERT_POISON;                                                       \
38254
05e46b580b4e 8149591: Prepare hotspot for GTest
iignatyev
parents: 37113
diff changeset
    57
    if (is_executing_unit_tests()) {                                           \
05e46b580b4e 8149591: Prepare hotspot for GTest
iignatyev
parents: 37113
diff changeset
    58
      report_assert_msg(__VA_ARGS__);                                          \
05e46b580b4e 8149591: Prepare hotspot for GTest
iignatyev
parents: 37113
diff changeset
    59
    }                                                                          \
33105
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
    60
    report_vm_error(__FILE__, __LINE__, "assert(" #p ") failed", __VA_ARGS__); \
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
    61
    BREAKPOINT;                                                                \
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
    62
  }                                                                            \
5403
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
    63
} while (0)
28477
157314902d78 8068396: Rename assert() to vmassert()
kbarrett
parents: 28476
diff changeset
    64
#endif
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    65
28477
157314902d78 8068396: Rename assert() to vmassert()
kbarrett
parents: 28476
diff changeset
    66
// For backward compatibility.
33105
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
    67
#define assert(p, ...) vmassert(p, __VA_ARGS__)
28477
157314902d78 8068396: Rename assert() to vmassert()
kbarrett
parents: 28476
diff changeset
    68
44408
82811053701b 8165358: vmassert_status is not debug-only
dholmes
parents: 41182
diff changeset
    69
#ifndef ASSERT
82811053701b 8165358: vmassert_status is not debug-only
dholmes
parents: 41182
diff changeset
    70
#define vmassert_status(p, status, msg)
82811053701b 8165358: vmassert_status is not debug-only
dholmes
parents: 41182
diff changeset
    71
#else
28477
157314902d78 8068396: Rename assert() to vmassert()
kbarrett
parents: 28476
diff changeset
    72
// This version of vmassert is for use with checking return status from
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    73
// library calls that return actual error values eg. EINVAL,
489c9b5090e2 Initial load
duke
parents:
diff changeset
    74
// ENOMEM etc, rather than returning -1 and setting errno.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    75
// When the status is not what is expected it is very useful to know
489c9b5090e2 Initial load
duke
parents:
diff changeset
    76
// what status was actually returned, so we pass the status variable as
489c9b5090e2 Initial load
duke
parents:
diff changeset
    77
// an extra arg and use strerror to convert it to a meaningful string
489c9b5090e2 Initial load
duke
parents:
diff changeset
    78
// like "Invalid argument", "out of memory" etc
28477
157314902d78 8068396: Rename assert() to vmassert()
kbarrett
parents: 28476
diff changeset
    79
#define vmassert_status(p, status, msg) \
37113
5a33bf5089ac 8148425: strerror() function is not thread-safe
stuefe
parents: 33142
diff changeset
    80
do {                                                                           \
5a33bf5089ac 8148425: strerror() function is not thread-safe
stuefe
parents: 33142
diff changeset
    81
  if (!(p)) {                                                                  \
49653
a569cb4425f3 8191101: Show register content in hs-err file on assert
stuefe
parents: 47216
diff changeset
    82
    TOUCH_ASSERT_POISON;                                                       \
37113
5a33bf5089ac 8148425: strerror() function is not thread-safe
stuefe
parents: 33142
diff changeset
    83
    report_vm_status_error(__FILE__, __LINE__, "assert(" #p ") failed",        \
5a33bf5089ac 8148425: strerror() function is not thread-safe
stuefe
parents: 33142
diff changeset
    84
                           status, msg);                                       \
5a33bf5089ac 8148425: strerror() function is not thread-safe
stuefe
parents: 33142
diff changeset
    85
    BREAKPOINT;                                                                \
5a33bf5089ac 8148425: strerror() function is not thread-safe
stuefe
parents: 33142
diff changeset
    86
  }                                                                            \
5a33bf5089ac 8148425: strerror() function is not thread-safe
stuefe
parents: 33142
diff changeset
    87
} while (0)
44408
82811053701b 8165358: vmassert_status is not debug-only
dholmes
parents: 41182
diff changeset
    88
#endif
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    89
28477
157314902d78 8068396: Rename assert() to vmassert()
kbarrett
parents: 28476
diff changeset
    90
// For backward compatibility.
157314902d78 8068396: Rename assert() to vmassert()
kbarrett
parents: 28476
diff changeset
    91
#define assert_status(p, status, msg) vmassert_status(p, status, msg)
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    92
28477
157314902d78 8068396: Rename assert() to vmassert()
kbarrett
parents: 28476
diff changeset
    93
// 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
    94
// cheap tests that catch errors that would otherwise be hard to find.
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    95
// guarantee is also used for Verify options.
33105
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
    96
#define guarantee(p, ...)                                                         \
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
    97
do {                                                                              \
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
    98
  if (!(p)) {                                                                     \
49653
a569cb4425f3 8191101: Show register content in hs-err file on assert
stuefe
parents: 47216
diff changeset
    99
    TOUCH_ASSERT_POISON;                                                          \
33105
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   100
    report_vm_error(__FILE__, __LINE__, "guarantee(" #p ") failed", __VA_ARGS__); \
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   101
    BREAKPOINT;                                                                   \
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   102
  }                                                                               \
5403
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
   103
} while (0)
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
   104
33105
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   105
#define fatal(...)                                                                \
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   106
do {                                                                              \
49653
a569cb4425f3 8191101: Show register content in hs-err file on assert
stuefe
parents: 47216
diff changeset
   107
  TOUCH_ASSERT_POISON;                                                            \
33105
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   108
  report_fatal(__FILE__, __LINE__, __VA_ARGS__);                                  \
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   109
  BREAKPOINT;                                                                     \
5403
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
   110
} while (0)
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
   111
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
   112
// out of memory
33105
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   113
#define vm_exit_out_of_memory(size, vm_err_type, ...)                             \
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   114
do {                                                                              \
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   115
  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
   116
  BREAKPOINT;                                                                     \
5403
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
   117
} while (0)
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   118
33105
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   119
#define ShouldNotCallThis()                                                       \
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   120
do {                                                                              \
49653
a569cb4425f3 8191101: Show register content in hs-err file on assert
stuefe
parents: 47216
diff changeset
   121
  TOUCH_ASSERT_POISON;                                                            \
33105
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   122
  report_should_not_call(__FILE__, __LINE__);                                     \
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   123
  BREAKPOINT;                                                                     \
5403
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
   124
} while (0)
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
   125
33105
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   126
#define ShouldNotReachHere()                                                      \
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   127
do {                                                                              \
49653
a569cb4425f3 8191101: Show register content in hs-err file on assert
stuefe
parents: 47216
diff changeset
   128
  TOUCH_ASSERT_POISON;                                                            \
33105
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   129
  report_should_not_reach_here(__FILE__, __LINE__);                               \
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   130
  BREAKPOINT;                                                                     \
5403
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
   131
} while (0)
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
   132
33105
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   133
#define Unimplemented()                                                           \
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   134
do {                                                                              \
49653
a569cb4425f3 8191101: Show register content in hs-err file on assert
stuefe
parents: 47216
diff changeset
   135
  TOUCH_ASSERT_POISON;                                                            \
33105
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   136
  report_unimplemented(__FILE__, __LINE__);                                       \
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   137
  BREAKPOINT;                                                                     \
5403
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
   138
} while (0)
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
   139
33105
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   140
#define Untested(msg)                                                             \
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   141
do {                                                                              \
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   142
  report_untested(__FILE__, __LINE__, msg);                                       \
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   143
  BREAKPOINT;                                                                     \
5403
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
   144
} while (0);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   145
17087
f0b76c4c93a0 8011661: Insufficient memory message says "malloc" when sometimes it should say "mmap"
ccheung
parents: 16370
diff changeset
   146
f0b76c4c93a0 8011661: Insufficient memory message says "malloc" when sometimes it should say "mmap"
ccheung
parents: 16370
diff changeset
   147
// 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
   148
enum VMErrorType {
f0b76c4c93a0 8011661: Insufficient memory message says "malloc" when sometimes it should say "mmap"
ccheung
parents: 16370
diff changeset
   149
  INTERNAL_ERROR   = 0xe0000000,
f0b76c4c93a0 8011661: Insufficient memory message says "malloc" when sometimes it should say "mmap"
ccheung
parents: 16370
diff changeset
   150
  OOM_MALLOC_ERROR = 0xe0000001,
f0b76c4c93a0 8011661: Insufficient memory message says "malloc" when sometimes it should say "mmap"
ccheung
parents: 16370
diff changeset
   151
  OOM_MMAP_ERROR   = 0xe0000002
f0b76c4c93a0 8011661: Insufficient memory message says "malloc" when sometimes it should say "mmap"
ccheung
parents: 16370
diff changeset
   152
};
f0b76c4c93a0 8011661: Insufficient memory message says "malloc" when sometimes it should say "mmap"
ccheung
parents: 16370
diff changeset
   153
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   154
// error reporting helper functions
33105
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   155
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
   156
#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
   157
// 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
   158
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
   159
                     const char* detail_fmt, ...) ATTRIBUTE_PRINTF(4, 5);
38254
05e46b580b4e 8149591: Prepare hotspot for GTest
iignatyev
parents: 37113
diff changeset
   160
#ifdef ASSERT
05e46b580b4e 8149591: Prepare hotspot for GTest
iignatyev
parents: 37113
diff changeset
   161
void report_assert_msg(const char* msg, ...) ATTRIBUTE_PRINTF(1, 2);
05e46b580b4e 8149591: Prepare hotspot for GTest
iignatyev
parents: 37113
diff changeset
   162
#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
   163
#else
399fdb935d28 8138733: Fix build: gcc < 4.8 doesn't grok -Wno-format-zero-length added in 8080775
goetz
parents: 33105
diff changeset
   164
// 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
   165
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
   166
                     const char* detail_fmt, ...);
38254
05e46b580b4e 8149591: Prepare hotspot for GTest
iignatyev
parents: 37113
diff changeset
   167
#ifdef ASSERT
05e46b580b4e 8149591: Prepare hotspot for GTest
iignatyev
parents: 37113
diff changeset
   168
void report_assert_msg(const char* msg, ...);
05e46b580b4e 8149591: Prepare hotspot for GTest
iignatyev
parents: 37113
diff changeset
   169
#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
   170
#endif
37113
5a33bf5089ac 8148425: strerror() function is not thread-safe
stuefe
parents: 33142
diff changeset
   171
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
   172
                            int status, const char* detail);
33105
294e48b4f704 8080775: Better argument formatting for assert() and friends
david
parents: 31340
diff changeset
   173
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
   174
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
   175
                             const char* detail_fmt, ...) ATTRIBUTE_PRINTF(5, 6);
5403
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
   176
void report_should_not_call(const char* file, int line);
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
   177
void report_should_not_reach_here(const char* file, int line);
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
   178
void report_unimplemented(const char* file, int line);
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
   179
void report_untested(const char* file, int line, const char* message);
6b0dd9c75dde 6888954: argument formatting for assert() and friends
jcoomes
parents: 1
diff changeset
   180
38254
05e46b580b4e 8149591: Prepare hotspot for GTest
iignatyev
parents: 37113
diff changeset
   181
#ifdef ASSERT
05e46b580b4e 8149591: Prepare hotspot for GTest
iignatyev
parents: 37113
diff changeset
   182
// unit test support
05e46b580b4e 8149591: Prepare hotspot for GTest
iignatyev
parents: 37113
diff changeset
   183
bool is_executing_unit_tests();
05e46b580b4e 8149591: Prepare hotspot for GTest
iignatyev
parents: 37113
diff changeset
   184
#endif // ASSERT
05e46b580b4e 8149591: Prepare hotspot for GTest
iignatyev
parents: 37113
diff changeset
   185
24424
2658d7834c6e 8037816: Fix for 8036122 breaks build with Xcode5/clang
drchase
parents: 23515
diff changeset
   186
void warning(const char* format, ...) ATTRIBUTE_PRINTF(1, 2);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   187
28480
23a93b2e118c 8067306: Improve STATIC_ASSERT
kbarrett
parents: 27404
diff changeset
   188
// Compile-time asserts.  Cond must be a compile-time constant expression that
23a93b2e118c 8067306: Improve STATIC_ASSERT
kbarrett
parents: 27404
diff changeset
   189
// is convertible to bool.  STATIC_ASSERT() can be used anywhere a declaration
23a93b2e118c 8067306: Improve STATIC_ASSERT
kbarrett
parents: 27404
diff changeset
   190
// may appear.
23a93b2e118c 8067306: Improve STATIC_ASSERT
kbarrett
parents: 27404
diff changeset
   191
//
23a93b2e118c 8067306: Improve STATIC_ASSERT
kbarrett
parents: 27404
diff changeset
   192
// Implementation Note: STATIC_ASSERT_FAILURE<true> provides a value member
23a93b2e118c 8067306: Improve STATIC_ASSERT
kbarrett
parents: 27404
diff changeset
   193
// rather than type member that could be used directly in the typedef, because
23a93b2e118c 8067306: Improve STATIC_ASSERT
kbarrett
parents: 27404
diff changeset
   194
// a type member would require conditional use of "typename", depending on
23a93b2e118c 8067306: Improve STATIC_ASSERT
kbarrett
parents: 27404
diff changeset
   195
// 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
   196
// use of an array type.
19285
0a3b3f115402 8022880: False sharing between PSPromotionManager instances
stefank
parents: 18683
diff changeset
   197
28480
23a93b2e118c 8067306: Improve STATIC_ASSERT
kbarrett
parents: 27404
diff changeset
   198
template<bool x> struct STATIC_ASSERT_FAILURE;
23a93b2e118c 8067306: Improve STATIC_ASSERT
kbarrett
parents: 27404
diff changeset
   199
template<> struct STATIC_ASSERT_FAILURE<true> { enum { value = 1 }; };
23a93b2e118c 8067306: Improve STATIC_ASSERT
kbarrett
parents: 27404
diff changeset
   200
29691
c539e3e94ef1 8073994: STATIC_ASSERT use of __LINE__ is wrong
kbarrett
parents: 28943
diff changeset
   201
#define STATIC_ASSERT(Cond) \
31340
2f9ff278bb13 8086027: Multiple STATIC_ASSERTs at class scope doesn't work
kbarrett
parents: 29691
diff changeset
   202
  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
   203
    STATIC_ASSERT_FAILURE< (Cond) >::value ]
19285
0a3b3f115402 8022880: False sharing between PSPromotionManager instances
stefank
parents: 18683
diff changeset
   204
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   205
// out of memory reporting
489c9b5090e2 Initial load
duke
parents:
diff changeset
   206
void report_java_out_of_memory(const char* message);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   207
53244
9807daeb47c4 8216167: Update include guards to reflect correct directories
coleenp
parents: 49653
diff changeset
   208
#endif // SHARE_UTILITIES_DEBUG_HPP