Fixed bug #77: Ignore unhandled ThreadDeath exceptions.
The old code in JavaVM>>throwException: was wrong, the method returned instead of
undwinding the whole thread to its run() method. Consequently, control flow returned
to method that actualy thrown that exception and causes stack undeflowbecause this
case is not handled and should not be handled. After an ATHROW method context should be
either unwound or restarted.
This commit introduces a new JavaUnhandledThreadDeathError which is raised in case
there's no handler for an ThreadDeath exception. This JavaUnhandledThreadDeathError is handled
in JavaProcess::Helper>>value and ignored there.
/*
* $Header$
*
* DO NOT EDIT
* automagically generated from the projectDefinition: stx_libjava.
*/
#define __INDIRECTVMINITCALLS__
#include <stc.h>
#ifdef WIN32
# pragma codeseg INITCODE "INITCODE"
#endif
#if defined(INIT_TEXT_SECTION) || defined(DLL_EXPORT)
DLL_EXPORT void _libstx_libjava_Init() INIT_TEXT_SECTION;
DLL_EXPORT void _libstx_libjava_InitDefinition() INIT_TEXT_SECTION;
#endif
void _libstx_libjava_InitDefinition(pass, __pRT__, snd)
OBJ snd; struct __vmData__ *__pRT__; {
__BEGIN_PACKAGE2__("libstx_libjava__DFN", _libstx_libjava_InitDefinition, "stx:libjava");
_stx_137libjava_Init(pass,__pRT__,snd);
__END_PACKAGE__();
}
void _libstx_libjava_Init(pass, __pRT__, snd)
OBJ snd; struct __vmData__ *__pRT__; {
__BEGIN_PACKAGE2__("libstx_libjava", _libstx_libjava_Init, "stx:libjava");
_GroovyCompiler_Init(pass,__pRT__,snd);
_GroovyEvaluator_Init(pass,__pRT__,snd);
_GroovyLanguage_Init(pass,__pRT__,snd);
_GroovySourceFileWriter_Init(pass,__pRT__,snd);
_JavaAnnotation_Init(pass,__pRT__,snd);
_JavaAnnotationContainer_Init(pass,__pRT__,snd);
_JavaAnnotationDefault_Init(pass,__pRT__,snd);
_JavaAnnotationDictionary_Init(pass,__pRT__,snd);
_JavaAnnotationValue_Init(pass,__pRT__,snd);
_JavaArray_Init(pass,__pRT__,snd);
_JavaBooleanArray_Init(pass,__pRT__,snd);
_JavaByte_Init(pass,__pRT__,snd);
_JavaByteCodeProcessor_Init(pass,__pRT__,snd);
_JavaClassAccessor_Init(pass,__pRT__,snd);
_JavaClassEnvironment_Init(pass,__pRT__,snd);
_JavaClassQuery_Init(pass,__pRT__,snd);
_JavaClassReloader_Init(pass,__pRT__,snd);
_JavaCodeLibraryOrBundle_Init(pass,__pRT__,snd);
_JavaCompilerForSmalltalkExtensionsOnly_Init(pass,__pRT__,snd);
_JavaCompiler_137Eclipse_Init(pass,__pRT__,snd);
_JavaConstantPool_Init(pass,__pRT__,snd);
_JavaConstants_Init(pass,__pRT__,snd);
_JavaContext_Init(pass,__pRT__,snd);
_JavaDecompiler_Init(pass,__pRT__,snd);
_JavaDescriptor_Init(pass,__pRT__,snd);
_JavaError_Init(pass,__pRT__,snd);
_JavaExceptionTable_Init(pass,__pRT__,snd);
_JavaField_Init(pass,__pRT__,snd);
_JavaFinalizationRegistry_Init(pass,__pRT__,snd);
_JavaInnerClasses_Init(pass,__pRT__,snd);
_JavaLanguage_Init(pass,__pRT__,snd);
_JavaLibraries_Init(pass,__pRT__,snd);
_JavaLocalVariableTable_Init(pass,__pRT__,snd);
_JavaLocalVariableTableEntry_Init(pass,__pRT__,snd);
_JavaLookup_Init(pass,__pRT__,snd);
_JavaMetaclass_Init(pass,__pRT__,snd);
_JavaMonitor_Init(pass,__pRT__,snd);
_JavaNameAndType2_Init(pass,__pRT__,snd);
_JavaNativeMemory_Init(pass,__pRT__,snd);
_JavaNioSupport_Init(pass,__pRT__,snd);
_JavaObject_Init(pass,__pRT__,snd);
_JavaObjectDictionary_Init(pass,__pRT__,snd);
_JavaPackage_Init(pass,__pRT__,snd);
_JavaPopUpView_Init(pass,__pRT__,snd);
_JavaProcess_Init(pass,__pRT__,snd);
_JavaRef2_Init(pass,__pRT__,snd);
_JavaRelease_Init(pass,__pRT__,snd);
_JavaResolver_Init(pass,__pRT__,snd);
_JavaShort_Init(pass,__pRT__,snd);
_JavaSlotIndexCache_Init(pass,__pRT__,snd);
_JavaSocket_Init(pass,__pRT__,snd);
_JavaSourceCodeCache_Init(pass,__pRT__,snd);
_JavaSourceFileWriter_Init(pass,__pRT__,snd);
_JavaTestsLoader_Init(pass,__pRT__,snd);
_JavaTopView_Init(pass,__pRT__,snd);
_JavaUnresolvedCompilationError_Init(pass,__pRT__,snd);
_JavaUnresolvedConstant_Init(pass,__pRT__,snd);
_JavaUtilities_Init(pass,__pRT__,snd);
_JavaVMData_Init(pass,__pRT__,snd);
_JavaView_Init(pass,__pRT__,snd);
_JavaZipSupport_Init(pass,__pRT__,snd);
_ProxyMethod_Init(pass,__pRT__,snd);
_ProxyMethodCompiler_Init(pass,__pRT__,snd);
_ProxyMethodNode_Init(pass,__pRT__,snd);
_SmalltalkAppletContext_Init(pass,__pRT__,snd);
_SmalltalkAppletStub_Init(pass,__pRT__,snd);
_stx_137libjava_Init(pass,__pRT__,snd);
_GroovyMetaclass_Init(pass,__pRT__,snd);
_Java_Init(pass,__pRT__,snd);
_JavaAnnotationArrayValue_Init(pass,__pRT__,snd);
_JavaAnnotationClassValue_Init(pass,__pRT__,snd);
_JavaAnnotationEnumValue_Init(pass,__pRT__,snd);
_JavaAnnotationNestedAnnotationValue_Init(pass,__pRT__,snd);
_JavaAnnotationPrimitiveValue_Init(pass,__pRT__,snd);
_JavaBehavior_Init(pass,__pRT__,snd);
_JavaByteCodeDisassembler_Init(pass,__pRT__,snd);
_JavaByteCodeEnumerator_Init(pass,__pRT__,snd);
_JavaByteCodeProcessorAdapter_Init(pass,__pRT__,snd);
_JavaClassAnnotationContainer_Init(pass,__pRT__,snd);
_JavaClassMemberRef2_Init(pass,__pRT__,snd);
_JavaClassReader_Init(pass,__pRT__,snd);
_JavaClassRef2_Init(pass,__pRT__,snd);
_JavaClassRegistry_Init(pass,__pRT__,snd);
_JavaCodeBundle_Init(pass,__pRT__,snd);
_JavaCodeLibrary_Init(pass,__pRT__,snd);
_JavaEmbeddedFrameView_Init(pass,__pRT__,snd);
_JavaFieldAnnotationContainer_Init(pass,__pRT__,snd);
_JavaFieldDescriptor_Init(pass,__pRT__,snd);
_JavaFieldDescriptorWithUnionType_Init(pass,__pRT__,snd);
_JavaInvalidRefError_Init(pass,__pRT__,snd);
_JavaInvokeDynamic2_Init(pass,__pRT__,snd);
_JavaMethod_Init(pass,__pRT__,snd);
_JavaMethodAnnotationContainer_Init(pass,__pRT__,snd);
_JavaMethodDescriptor_Init(pass,__pRT__,snd);
_JavaMethodHandle2_Init(pass,__pRT__,snd);
_JavaMethodType2_Init(pass,__pRT__,snd);
_JavaMirror_Init(pass,__pRT__,snd);
_JavaNativeMethodImpl_137OpenJDK6_Init(pass,__pRT__,snd);
_JavaStringRef2_Init(pass,__pRT__,snd);
_JavaUnhandledExceptionError_Init(pass,__pRT__,snd);
_JavaUnhandledThreadDeathError_Init(pass,__pRT__,snd);
_JavaUnresolvedClassConstant_Init(pass,__pRT__,snd);
_JavaUnresolvedStringConstant_Init(pass,__pRT__,snd);
_JavaVM_Init(pass,__pRT__,snd);
_ProxyMethodConditionNode_Init(pass,__pRT__,snd);
_ProxyMethodGuardNode_Init(pass,__pRT__,snd);
_ProxyMethodInvocationNode_Init(pass,__pRT__,snd);
_ProxyMethodJavaFieldAccessor_Init(pass,__pRT__,snd);
_JavaAlienMirror_Init(pass,__pRT__,snd);
_JavaArrayMirror_Init(pass,__pRT__,snd);
_JavaByteCodePreresolver_Init(pass,__pRT__,snd);
_JavaClass_Init(pass,__pRT__,snd);
_JavaClassMirror_Init(pass,__pRT__,snd);
_JavaClassPathBundle_Init(pass,__pRT__,snd);
_JavaFieldRef2_Init(pass,__pRT__,snd);
_JavaMethodAnalyzer_Init(pass,__pRT__,snd);
_JavaMethodRef2_Init(pass,__pRT__,snd);
_JavaMethodWithException_Init(pass,__pRT__,snd);
_JavaNativeMethodImpl_137AppleJDK6_Init(pass,__pRT__,snd);
_JavaNativeMethodImpl_137OpenJDK7_Init(pass,__pRT__,snd);
_JavaNativeMethodImpl_137SunJDK6_Init(pass,__pRT__,snd);
_JavaPrimitiveMirror_Init(pass,__pRT__,snd);
_ProxyMethodAndNode_Init(pass,__pRT__,snd);
_ProxyMethodBlockInvocationNode_Init(pass,__pRT__,snd);
_ProxyMethodJavaFieldGetter_Init(pass,__pRT__,snd);
_ProxyMethodJavaFieldSetter_Init(pass,__pRT__,snd);
_ProxyMethodMethodInvocationNode_Init(pass,__pRT__,snd);
_ProxyMethodTypeCheckNode_Init(pass,__pRT__,snd);
_GroovyClass_Init(pass,__pRT__,snd);
_JavaInterfaceMethodRef2_Init(pass,__pRT__,snd);
_JavaMethodWithHandler_Init(pass,__pRT__,snd);
_JavaNativeMethodImpl_137OpenJDK8_Init(pass,__pRT__,snd);
_JavaNativeMethodImpl_137OracleJDK7_Init(pass,__pRT__,snd);
_ProxyMethodJavaMethodInvocationNode_Init(pass,__pRT__,snd);
_ProxyMethodJavaTypeCheckNode_Init(pass,__pRT__,snd);
_JavaNativeMethod_Init(pass,__pRT__,snd);
_JavaNativeMethodImpl_137OracleJDK8_Init(pass,__pRT__,snd);
_stx_137libjava_extensions_Init(pass,__pRT__,snd);
__END_PACKAGE__();
}