On Wednesday 09 August 2006 20:52 Geir Magnusson Jr wrote: > So - lets start with this - > > what are the aspects of the DRLVM codebase that make it not work on > Win2k, what are the alternatives, and what are the costs to those > alternatives?
Ok going technical from here. The vectored exception handling API (as opposed to older structured exception handling mechanism which exists on w2k) was used when we tried to implement some simple an invocation API implementation to have a separate launcher. The typical launcher scenario looks like this: JavaVM *vm = JNI_CreateJavaVM(...); JNIEnv *jenv = vm->GetEnv(...); jclass clss = jenv->FindClass(...LAUNCHER_CLASS_NAME...); jmethodID mid = jenv->GetStaticMethodID(...LAUNCHER_METHOD_NAME...); jenv->CallVoidMethod(clss, mid); or something similar. When trying to establish hardware exceptions handling for hardware NPEs, AEs, SOEs, etc it is necessary to set up a handler for them right in the call to JNI_CreateJavaVM or GetEnv because all subsequent calls may execute Java code which may cause the exception. It is similar to establishing a signal handler for the process, on Linux there are no problems with signals, but windows implements signals POSIX API in an ugly unusable way. The SEH syntax allows to guard a block of code by __try{} __catch{} (MS C++ syntax exgension) syntax and catch hardware exceptions inside of __catch. But this has a limitation that handling works only on the guarded block. In the above code example using SEH would require to guard every JNI call by SEH block to catch hardware exception in any function which may potentially execute Java code. And if we want a crash handler it is better to guard blocks which execute *any* code. SEH syntax doesn't allow to do this since launcher is generally a user code which uses invocation API. So VEH was really a solution when we found it. I don't really know about alternatives for w2k. Not that I know much about windows API but we did some research to find VEH and I don't remember finding any alternatives except for signals (see above). There may be of course undocumented API functions (Microsoft is known for this kind of stuff) which other Java implementations use. There may be also a possible way of hacking TLS directly since SEH handlers reside on fs:[0] address, but this may also interfere with C++ handlers from the launcher because they are implemented through this address as well and if the calling process uses C++ exceptions (e.g. a web browser) we may crash it. Do any windows gurus know a solution for w2k? -- Gregory Shimansky, Intel Middleware Products Division --------------------------------------------------------------------- Terms of use : http://incubator.apache.org/harmony/mailing.html To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]