GCJ/minGW produced executables and linux/wine

Ranjit Mathew rmathew4lists@hotmail.com
Wed Mar 5 09:19:00 GMT 2003


> > Well honestly, I don't know and I'm surprised that it works
> > on Linux (so signal delivery must be the "last mile" in that
> > the OS doesn't really care if the handler returns or not).
>> The ANS C standard says that signal handlers may return by doing a
> longjmp. But that's what I meant whan I said this is not a signal
> handler and may have other restrictions. And it seems like it does
> indeed have some restrictions.

I found a GCJ document relevant to this discussion at:
 http://gcc.gnu.org/java/port-signals.html
(I had seen it before, but hadn't understood its signficance till now. ;-))
> > I can imagine that there would be problems on Win32 because
> > this handler is supposed to return a value to the OS telling
> > it whether to execute the default handler (abort program)
> > or whether the exception has been handled successfully.

My conjecture seems correct as this simple program hangs on Win32
after printing "Strike 1!", instead of printing "Strike 2!" as well:
------------------------------- 8< --------------------------------
public class Snafu {
 public static void main( String[] args) {
 Object p = null;
 try {
 System.out.println( p.toString( ));
 } catch( NullPointerException e) {
 System.err.println( "Strike 1!");
 }
 try {
 System.out.println( p.toString( ));
 } catch( NullPointerException e) {
 System.err.println( "Strike 2!");
 }
 }
}
------------------------------- 8< --------------------------------
I guess instead of blindly throwing NullPointerException from within
win32_exception_handler( ) in win32.cc, we will have to modify
the return address a la MAKE_THROW_FRAME in posix.cc, and return
EXCEPTION_CONTINUE_EXECUTION as explicitly allowed by Windows:
http://msdn.microsoft.com/library/en-us/debug/base/setunhandledexceptionfilter.asp
Ranjit.


More information about the Java mailing list

AltStyle によって変換されたページ (->オリジナル) /