Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/hotspot/src/os/windows/vm/vmError_windows.cpp
32284 views
1
/*
2
* Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation.
8
*
9
* This code is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12
* version 2 for more details (a copy is included in the LICENSE file that
13
* accompanied this code).
14
*
15
* You should have received a copy of the GNU General Public License version
16
* 2 along with this work; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*
23
*/
24
25
#include "precompiled.hpp"
26
#include "runtime/arguments.hpp"
27
#include "runtime/os.hpp"
28
#include "runtime/thread.hpp"
29
#include "utilities/vmError.hpp"
30
31
32
void VMError::show_message_box(char *buf, int buflen) {
33
bool yes;
34
do {
35
error_string(buf, buflen);
36
int len = (int)strlen(buf);
37
char *p = &buf[len];
38
39
jio_snprintf(p, buflen - len,
40
"\n\n"
41
"Do you want to debug the problem?\n\n"
42
"To debug, attach Visual Studio to process %d; then switch to thread 0x%x\n"
43
"Select 'Yes' to launch Visual Studio automatically (PATH must include msdev)\n"
44
"Otherwise, select 'No' to abort...",
45
os::current_process_id(), os::current_thread_id());
46
47
yes = os::message_box("Unexpected Error", buf) != 0;
48
49
if (yes) {
50
// yes, user asked VM to launch debugger
51
//
52
// os::breakpoint() calls DebugBreak(), which causes a breakpoint
53
// exception. If VM is running inside a debugger, the debugger will
54
// catch the exception. Otherwise, the breakpoint exception will reach
55
// the default windows exception handler, which can spawn a debugger and
56
// automatically attach to the dying VM.
57
os::breakpoint();
58
yes = false;
59
}
60
} while (yes);
61
}
62
63
int VMError::get_resetted_sigflags(int sig) {
64
return -1;
65
}
66
67
address VMError::get_resetted_sighandler(int sig) {
68
return NULL;
69
}
70
71
LONG WINAPI crash_handler(struct _EXCEPTION_POINTERS* exceptionInfo) {
72
DWORD exception_code = exceptionInfo->ExceptionRecord->ExceptionCode;
73
VMError err(NULL, exception_code, NULL,
74
exceptionInfo->ExceptionRecord, exceptionInfo->ContextRecord);
75
err.report_and_die();
76
return EXCEPTION_CONTINUE_SEARCH;
77
}
78
79
void VMError::reset_signal_handlers() {
80
SetUnhandledExceptionFilter(crash_handler);
81
}
82
83