UGS (ISV) encounters a problem with using Structured Exception Handling on Windows x 64 after the JVM has started. This is their code:
int ff() {
__try {
AA* b = 0;
b->y = 16;
}
__except(1) {
printf("Caught SEH exception\n");
}
return 0;
}
static void start_jvm();
int main(int argc, char *argv[]) {
ff();
if ( argc >= 2 )
start_jvm();
ff();
return 0;
}
start_jvm() calls JNI_CreateJavaVM()to start the JVM. The line “b->y =16” causes a Microsoft “Win32” exception to be thrown. The exception is supposed to be caught in the __except block. Before starting the JVM, the code works as expected, but after starting the JVM, the program crashes at the line “b->y = 16” with a HotSpot virtual machine dump.
I’ve attached the complete code for the program that demonstrates the problem. Instructions for running the program:
set JAVA_HOME=<java 1.5 home>
set PATH=%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin\server;%path%
nmake –f Makefile
test_seh_java.exe
# This verifies that the SEH exception is caught both times if the JVM is not started
test_seh_java.exe a
# The program crashes.
They are using Microsoft Windows Server 2003, Standard x64 Edition, Service Pack 1 on a machine with a Dual Core AMD Opteron Processor 875. The java version is
java version "1.5.0_04"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_04-b05)
Java HotSpot(TM) 64-Bit Server VM (build 1.5.0_04-b05, mixed mode)
Note: this problem does not occur when running Windows with a 32-bit processor.
int ff() {
__try {
AA* b = 0;
b->y = 16;
}
__except(1) {
printf("Caught SEH exception\n");
}
return 0;
}
static void start_jvm();
int main(int argc, char *argv[]) {
ff();
if ( argc >= 2 )
start_jvm();
ff();
return 0;
}
start_jvm() calls JNI_CreateJavaVM()to start the JVM. The line “b->y =16” causes a Microsoft “Win32” exception to be thrown. The exception is supposed to be caught in the __except block. Before starting the JVM, the code works as expected, but after starting the JVM, the program crashes at the line “b->y = 16” with a HotSpot virtual machine dump.
I’ve attached the complete code for the program that demonstrates the problem. Instructions for running the program:
set JAVA_HOME=<java 1.5 home>
set PATH=%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin\server;%path%
nmake –f Makefile
test_seh_java.exe
# This verifies that the SEH exception is caught both times if the JVM is not started
test_seh_java.exe a
# The program crashes.
They are using Microsoft Windows Server 2003, Standard x64 Edition, Service Pack 1 on a machine with a Dual Core AMD Opteron Processor 875. The java version is
java version "1.5.0_04"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_04-b05)
Java HotSpot(TM) 64-Bit Server VM (build 1.5.0_04-b05, mixed mode)
Note: this problem does not occur when running Windows with a 32-bit processor.
- duplicates
-
JDK-5062728 WIN64: VM should not use Vectored Exceptions
- Closed