Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 5 additions & 4 deletions src/hotspot/share/utilities/debug.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -288,8 +288,7 @@ void report_vm_status_error(const char* file, int line, const char* error_msg,
report_vm_error(file, line, error_msg, "error %s(%d), %s", os::errno_name(status), status, detail);
}

void report_fatal(const char* file, int line, const char* detail_fmt, ...)
{
void report_fatal(VMErrorType error_type, const char* file, int line, const char* detail_fmt, ...) {
if (Debugging || error_is_suppressed(file, line)) return;
va_list detail_args;
va_start(detail_args, detail_fmt);
Expand All @@ -302,7 +301,9 @@ void report_fatal(const char* file, int line, const char* detail_fmt, ...)

print_error_for_unit_test("fatal error", detail_fmt, detail_args);

VMError::report_and_die(Thread::current_or_null(), context, file, line, "fatal error", detail_fmt, detail_args);
VMError::report_and_die(error_type, "fatal error", detail_fmt, detail_args,
Thread::current_or_null(), NULL, NULL, context,
file, line, 0);
va_end(detail_args);
}

Expand Down Expand Up @@ -360,7 +361,7 @@ void report_java_out_of_memory(const char* message) {

if (CrashOnOutOfMemoryError) {
tty->print_cr("Aborting due to java.lang.OutOfMemoryError: %s", message);
fatal("OutOfMemory encountered: %s", message);
report_fatal(OOM_JAVA_HEAP_FATAL, __FILE__, __LINE__, "OutOfMemory encountered: %s", message);
}

if (ExitOnOutOfMemoryError) {
Expand Down
7 changes: 4 additions & 3 deletions src/hotspot/share/utilities/debug.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ do {
#define fatal(...) \
do { \
TOUCH_ASSERT_POISON; \
report_fatal(__FILE__, __LINE__, __VA_ARGS__); \
report_fatal(INTERNAL_ERROR, __FILE__, __LINE__, __VA_ARGS__); \
BREAKPOINT; \
} while (0)

Expand Down Expand Up @@ -150,7 +150,8 @@ enum VMErrorType {
INTERNAL_ERROR = 0xe0000000,
OOM_MALLOC_ERROR = 0xe0000001,
OOM_MMAP_ERROR = 0xe0000002,
OOM_MPROTECT_ERROR = 0xe0000003
OOM_MPROTECT_ERROR = 0xe0000003,
OOM_JAVA_HEAP_FATAL = 0xe0000004
};

// Set to suppress secondary error reporting.
Expand All @@ -163,7 +164,7 @@ void report_vm_error(const char* file, int line, const char* error_msg,
const char* detail_fmt, ...) ATTRIBUTE_PRINTF(4, 5);
void report_vm_status_error(const char* file, int line, const char* error_msg,
int status, const char* detail);
void report_fatal(const char* file, int line, const char* detail_fmt, ...) ATTRIBUTE_PRINTF(3, 4);
void report_fatal(VMErrorType error_type, const char* file, int line, const char* detail_fmt, ...) ATTRIBUTE_PRINTF(4, 5);
void report_vm_out_of_memory(const char* file, int line, size_t size, VMErrorType vm_err_type,
const char* detail_fmt, ...) ATTRIBUTE_PRINTF(5, 6);
void report_should_not_call(const char* file, int line);
Expand Down
4 changes: 2 additions & 2 deletions src/hotspot/share/utilities/vmError.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -636,7 +636,7 @@ void VMError::report(outputStream* st, bool _verbose) {

STEP("printing bug submit message")

if (should_report_bug(_id) && _verbose) {
if (should_submit_bug_report(_id) && _verbose) {
print_bug_submit_message(st, _thread);
}

Expand Down Expand Up @@ -1584,7 +1584,7 @@ void VMError::report_and_die(int id, const char* message, const char* detail_fmt
}
}

static bool skip_bug_url = !should_report_bug(_id);
static bool skip_bug_url = !should_submit_bug_report(_id);
if (!skip_bug_url) {
skip_bug_url = true;

Expand Down
4 changes: 4 additions & 0 deletions src/hotspot/share/utilities/vmError.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,10 @@ class VMError : public AllStatic {
return (id != OOM_MALLOC_ERROR) && (id != OOM_MMAP_ERROR);
}

static bool should_submit_bug_report(unsigned int id) {
return should_report_bug(id) && (id != OOM_JAVA_HEAP_FATAL);
}

// Write a hint to the stream in case siginfo relates to a segv/bus error
// and the offending address points into CDS store.
static void check_failing_cds_access(outputStream* st, const void* siginfo);
Expand Down