A specific group of exceptions that may be thrown by JVM execution (spec section 2.16.4 unless specified otherwise) are not typically checked by the Java program and stop thread execution unless caught by a Java catch block
.
A suite of errors may also be thrown that Java programs normally to not attempt to catch and
which terminate JVM execution:
public
).
java.lang.Error or
its subclass.
Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
Licensed under the Apache License, Version 2.0 ("the License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and limitations under the License.
Definition in file opcode.c.
#include "arch.h"
#include "jvmcfg.h"
#include "cfmacros.h"
#include "classfile.h"
#include "exit.h"
#include "gc.h"
#include "jvm.h"
#include "jvmclass.h"
#include "linkage.h"
#include "method.h"
#include "native.h"
#include "opcode.h"
#include "utf.h"
#include "util.h"
Go to the source code of this file.
Validate a constant_pool entry | |
#define | CHECK_CP_TAG(u2var, cptag1) |
Check that a constant_pool entry contains a specific of tag for this operation. | |
#define | CHECK_CP_TAG2(u2var, cptag1, cptag2) |
Check that a constant_pool entry contains the right kind of tag for this operation, from a choice of two. | |
#define | CHECK_CP_TAG3(u2var, cptag1, cptag2, cptag3) |
Check that a constant_pool entry contains the right kind of tag for this operation, from a choice of three. | |
Macro support for inner loop opcodes. | |
Common operations that are used in numerous opcodes are gathered here so as to improve accuracy of implementation and simplify the code. | |
#define | GET_U2_OPERAND(u2var) |
Retrieve a two-byte operand that the PC points to. | |
Defines | |
#define | CALCULATE_CLASS_INFO_FROM_CLASS_REFERENCE(clsnameidx) |
Calculate ClassFile pointer from a class reference. | |
#define | CALCULATE_FIELD_INFO_FROM_FIELD_REFERENCE(Fieldref) |
Calculate field_info pointer from a field reference. | |
#define | CALCULATE_METHOD_INFO_FROM_METHOD_REFERENCE(Methodref) |
Calculate method_info pointer from a method reference. | |
#define | CALCULATE_METHOD_INFO_FROM_PC |
Calculate method_info pointer from program counter. | |
#define | CHECK_FINAL_FIELD_CURRENT_CLASS |
Check if this field is a final field in the current class. | |
#define | CHECK_INSTANCE_FIELD |
Check if this field is an object instance field. | |
#define | CHECK_INSTANCE_METHOD |
Check if this method is an object instance method. | |
#define | CHECK_NOT_ABSTRACT_CLASS |
Check if this object is from a concrete class, that is, not from an abstract class . | |
#define | CHECK_NOT_ABSTRACT_METHOD |
Check if this method is a concrete method, that is, not abstract . | |
#define | CHECK_NOT_ARRAY_OBJECT |
Check if this object is a scalar, that is, not an array. | |
#define | CHECK_NOT_INTERFACE_CLASS |
Check if this object is from a normal class, that is, not from an interface class. | |
#define | CHECK_STATIC_FIELD |
Check if this field is a static field. | |
#define | CHECK_STATIC_METHOD |
Check if this method is a static method. | |
#define | CHECK_TWO_ACCESSES |
Check if this field requires two jint accesses or just one. | |
#define | CHECK_VALID_CODEATRIDX(codeatridx) |
Check for code attribute index in local method binding. | |
#define | CHECK_VALID_FIELDLOOKUPIDX(fluidx) |
Check for field lookup index in local field binding. | |
#define | FORCE_JFLOAT(var_sizeofjint) (*((jfloat *) ((jvoid *) &var_sizeofjint))) |
Force conversion of any Java type variable of sizeof(jint) into a jfloat variable, but without conversion of contents. | |
#define | FORCE_JINT(var_sizeofjint) (*((jint *) ((jvoid *) &var_sizeofjint))) |
Force conversion of any Java type variable of sizeof(jint) into a jint variable, but without conversion of contents. | |
#define | GETDATA(data_array) |
Retrieve value by data type from either class static field or object instance field. | |
#define | GETFIELD |
Retrieve value by data type from object instance field. | |
#define | GETSTATIC |
Retrieve value by data type from class static field. | |
#define | LATE_CLASS_LOAD(clsnameidx) |
Attempt to load a class that is not currently loaded. | |
#define | PUTDATA(data_array) |
Store out value by data type into either class static field or object instance field. | |
#define | PUTFIELD |
Store out value by data type into object instance field. | |
#define | PUTSTATIC |
Store out value by data type into class static field. | |
#define | STUB { dummy1(); } |
Functions | |
static void | opcode_c_dummy (void) |
static int | opcode_end_thread_setup (rvoid) |
JVM inner loop setup for end of thread detection-- implements setjmp(3) . | |
static rvoid | opcode_end_thread_test (jvm_thread_index thridx) |
Detect end of thread when stack frame is empty at return time and perform non-local return-- implements longjmp(3) . | |
rvoid | opcode_load_run_throwable (rchar *pThrowableEvent, jvm_thread_index thridx) |
Load a java.lang.Throwable event , typically an Error or Exception and run its <clinit> method followed by its <init> method with default parameters. | |
rboolean | opcode_run (jvm_thread_index thridx, rboolean check_timeslice) |
Inner loop of JVM virtual instruction execution engine. | |
Variables | |
static char * | opcode_c_copyright = "\0" "$URL: https://svn.apache.org/path/name/opcode.c $ $Id: opcode.c 0 09/28/2005 dlydick $" " " "Copyright 2005 The Apache Software Foundation or its licensors, as applicable." |
rboolean | opcode_calling_java_lang_linkageerror |
Double-fault error state variable for throwable event. Permit boolean "false" manifest constant for initializing static and global storage. | |
static jmp_buf | opcode_end_thread_return |
|
Value: Retrieve a two-byte operand that the PC points to.Store thw two-byte operand into the requested u2 variable, then increment the program counter to the next byte code following it.
Definition at line 232 of file opcode.c. Referenced by opcode_run(). |
|
Value: if (cptag1 != CP_TAG(pcfs, u2var)) \ { \ /* Somebody is confused */ \ thread_throw_exception(thridx, \ THREAD_STATUS_THREW_ERROR, \ JVMCLASS_JAVA_LANG_VERIFYERROR); \ /*NOTREACHED*/ \ }
Definition at line 265 of file opcode.c. Referenced by opcode_run(). |
|
Value: if ((cptag1 != CP_TAG(pcfs, u2var)) && \ (cptag2 != CP_TAG(pcfs, u2var))) \ { \ /* Somebody is confused */ \ thread_throw_exception(thridx, \ THREAD_STATUS_THREW_ERROR, \ JVMCLASS_JAVA_LANG_VERIFYERROR); \ /*NOTREACHED*/ \ }
|
|
Value: if ((cptag1 != CP_TAG(pcfs, u2var)) && \ (cptag2 != CP_TAG(pcfs, u2var)) && \ (cptag3 != CP_TAG(pcfs, u2var))) \ { \ /* Somebody is confused */ \ thread_throw_exception(thridx, \ THREAD_STATUS_THREW_ERROR, \ JVMCLASS_JAVA_LANG_VERIFYERROR); \ /*NOTREACHED*/ \ }
|
|
Force conversion of any Java type variable of This macro is typically used to move a jobject reference or a jfloat into a jint word, but suppress type conversion between the source and destination variables. It derives the address of the 32-bit source value, casts it as a pointer to the destination data type, then extracts that type.
Definition at line 388 of file opcode.c. Referenced by opcode_run(). |
|
Force conversion of any Java type variable of This macro is typically used to move a jint into a jint word, but suppress type conversion between the source and destination variables.
|
|
Value: clsidxmisc = GET_PC_FIELD_IMMEDIATE(thridx, clsidx); \ mthidxmisc = GET_PC_FIELD_IMMEDIATE(thridx, mthidx); \ pcfsmisc = CLASS_OBJECT_LINKAGE(clsidxmisc)->pcfs; \ pmth = METHOD(clsidxmisc, mthidxmisc) During the calculation, various scratch variables are loaded and used to simplify the code. The final result is a (method_info *) stored the local variable pmth Parameters: rvoid
Definition at line 434 of file opcode.c. Referenced by opcode_run(). |
|
Value: pcpd = pcfs->constant_pool[clsnameidx]; \ pcpd_Class = PTR_THIS_CP_Class(pcpd); \ clsidxmisc = pcpd_Class->LOCAL_Class_binding.clsidxJVM; \ if (jvm_class_index_null == clsidxmisc) \ { \ /* Need local variable to avoid possible expansion confusion */\ jvm_constant_pool_index cpidxOLD = clsnameidx; \ \ /* If class is not loaded, go retrieve it by UTF8 class name */\ LATE_CLASS_LOAD(cpidxOLD); \ } \ pcfsmisc = CLASS_OBJECT_LINKAGE(clsidxmisc)->pcfs; During the calculation, various scratch variables are loaded and used to simplify the code. Two final results include a (CONSTANT_Class_info *) stored in the local variable pcpd_Class stored the local variable pcfsmisc and a (CONSTANT_Class_info *) stored in the local variable pcpd_Class
Definition at line 460 of file opcode.c. Referenced by opcode_run(). |
|
Value: \ pcpd = pcfs->constant_pool[clsnameidx]; /* Class name */ \ pcpd_Class = PTR_THIS_CP_Class(pcpd); \ /* UTF8 string */ \ pcpd = pcfs->constant_pool[pcpd_Class->name_index]; \ pcpd_Utf8 = PTR_THIS_CP_Utf8(pcpd); \ \ prchar_clsname = utf_utf2prchar(pcpd_Utf8); \ \ /* Try again to load class */ \ clsidxmisc = class_load_resolve_clinit(prchar_clsname, \ CURRENT_THREAD, \ rfalse, \ rfalse); \ \ HEAP_FREE_DATA(prchar_clsname); \ \ /* If class is irretrievable, abort */ \ if (jvm_class_index_null == clsidxmisc) \ { \ thread_throw_exception(thridx, \ THREAD_STATUS_THREW_ERROR, \ JVMCLASS_JAVA_LANG_NOCLASSDEFFOUNDERROR); \ /*NOTREACHED*/ \ }
Definition at line 490 of file opcode.c. Referenced by opcode_run(). |
|
Value: pcpd = pcfs->constant_pool[Methodref]; \ pcpd_Methodref = PTR_THIS_CP_Methodref(pcpd); \ clsidxmisc = pcpd_Methodref->LOCAL_Methodref_binding.clsidxJVM;\ if (jvm_class_index_null == clsidxmisc) \ { \ /* If class is not loaded, go retrieve it by UTF8 class name */\ LATE_CLASS_LOAD(pcpd_Methodref->class_index); \ \ /* Check if method exists in loaded class */ \ clsidxmisc = pcpd_Methodref->LOCAL_Methodref_binding.clsidxJVM;\ if (jvm_class_index_null == clsidxmisc) \ { \ thread_throw_exception(thridx, \ THREAD_STATUS_THREW_ERROR, \ JVMCLASS_JAVA_LANG_NOSUCHMETHODERROR); \ /*NOTREACHED*/ \ } \ } \ \ mthidxmisc = pcpd_Methodref->LOCAL_Methodref_binding.mthidxJVM; \ if (jvm_method_index_bad == mthidxmisc) \ { \ thread_throw_exception(thridx, \ THREAD_STATUS_THREW_ERROR, \ JVMCLASS_JAVA_LANG_NOSUCHMETHODERROR); \ /*NOTREACHED*/ \ } \ \ pcfsmisc = CLASS_OBJECT_LINKAGE(clsidxmisc)->pcfs; \ pmth = pcfsmisc->methods[mthidxmisc] During the calculation, various scratch variables are loaded and used to simplify the code. Two final results include a (method_info *) stored the local variable pmth and a (CONSTANT_Methodref_info *) stored in the local variable pcpd_Methodref
Definition at line 543 of file opcode.c. Referenced by opcode_run(). |
|
Value: if (jvm_attribute_index_bad == codeatridx) \ { \ thread_throw_exception(thridx, \ THREAD_STATUS_THREW_ERROR, \ JVMCLASS_JAVA_LANG_NOSUCHMETHODERROR); \ /*NOTREACHED*/ \ }
Definition at line 591 of file opcode.c. Referenced by opcode_run(). |
|
Value: \ /* Must be a static method */ \ if (!(ACC_STATIC & pmth->access_flags)) \ { \ thread_throw_exception(thridx, \ THREAD_STATUS_THREW_ERROR, \ JVMCLASS_JAVA_LANG_VERIFYERROR); \ /*NOTREACHED*/ \ } Parameters: rvoid
Definition at line 616 of file opcode.c. Referenced by opcode_run(). |
|
Value: \ /* Must be an instance method */ \ if (ACC_STATIC & pmth->access_flags) \ { \ thread_throw_exception(thridx, \ THREAD_STATUS_THREW_ERROR, \ JVMCLASS_JAVA_LANG_VERIFYERROR); \ /*NOTREACHED*/ \ } Parameters: rvoid
|
|
Value: \ /* Must not be an abstract method */ \ if (ACC_ABSTRACT & pmth->access_flags) \ { \ thread_throw_exception(thridx, \ THREAD_STATUS_THREW_ERROR, \ JVMCLASS_JAVA_LANG_INSTANTIATIONERROR); \ /*NOTREACHED*/ \ } abstract .
Parameters: rvoid
Definition at line 704 of file opcode.c. Referenced by opcode_run(). |
|
Value: \ /* Must not be from an abstract class */ \ if (ACC_ABSTRACT & \ OBJECT_CLASS_LINKAGE(objhashmisc)->pcfs->access_flags) \ { \ thread_throw_exception(thridx, \ THREAD_STATUS_THREW_ERROR, \ JVMCLASS_JAVA_LANG_INSTANTIATIONERROR); \ /*NOTREACHED*/ \ } abstract class .
Parameters: rvoid
Definition at line 732 of file opcode.c. Referenced by opcode_run(). |
|
Value: \ /* Must not be an array object */ \ if (OBJECT_STATUS_ARRAY & \ CLASS(OBJECT_CLASS_LINKAGE(objhashmisc)->clsidx).status) \ { \ thread_throw_exception(thridx, \ THREAD_STATUS_THREW_ERROR, \ JVMCLASS_JAVA_LANG_INSTANTIATIONERROR); \ /*NOTREACHED*/ \ } Parameters: rvoid
Definition at line 760 of file opcode.c. Referenced by opcode_run(). |
|
Value: \ /* Must not be from an interface class */ \ if (ACC_INTERFACE & \ OBJECT_CLASS_LINKAGE(objhashmisc)->pcfs->access_flags) \ { \ thread_throw_exception(thridx, \ THREAD_STATUS_THREW_ERROR, \ JVMCLASS_JAVA_LANG_INSTANTIATIONERROR); \ /*NOTREACHED*/ \ } Parameters: rvoid
Definition at line 789 of file opcode.c. Referenced by opcode_run(). |
|
Calculate field_info pointer from a field reference. During the calculation, various scratch variables are loaded and used to simplify the code. Two final results include a (field_info *) stored the local variable pfld and a (CONSTANT_Fieldref_info *) stored in the local variable pcpd_Fieldref
Definition at line 824 of file opcode.c. Referenced by opcode_run(). |
|
Value: if (jvm_field_lookup_index_bad == fluidx) \ { \ thread_throw_exception(thridx, \ THREAD_STATUS_THREW_ERROR, \ JVMCLASS_JAVA_LANG_NOSUCHFIELDERROR); \ /*NOTREACHED*/ \ }
Definition at line 875 of file opcode.c. Referenced by opcode_run(). |
|
Value: \ /* Must be a static field */ \ if (!(ACC_STATIC & pfld->access_flags)) \ { \ thread_throw_exception(thridx, \ THREAD_STATUS_THREW_ERROR, \ JVMCLASS_JAVA_LANG_INCOMPATIBLECLASSCHANGEERROR); \ /*NOTREACHED*/ \ } Parameters: rvoid
Definition at line 900 of file opcode.c. Referenced by opcode_run(). |
|
Value: \ /* Must be an instance field */ \ if (ACC_STATIC & pfld->access_flags) \ { \ thread_throw_exception(thridx, \ THREAD_STATUS_THREW_ERROR, \ JVMCLASS_JAVA_LANG_INCOMPATIBLECLASSCHANGEERROR); \ /*NOTREACHED*/ \ } Parameters: rvoid
|
|
Value: \ { \ jvm_class_index clsidxTMP; \ \ GET_PC_FIELD(thridx, clsidxTMP, clsidx); \ \ /* A final field must _not_ be found in a superclass */ \ if ((ACC_FINAL & pfld->access_flags) && \ (clsidxTMP != pcpd_Fieldref \ ->LOCAL_Fieldref_binding.clsidxJVM)) \ { \ thread_throw_exception(thridx, \ THREAD_STATUS_THREW_ERROR, \ JVMCLASS_JAVA_LANG_ILLEGALACCESSERROR); \ /*NOTREACHED*/ \ } \ } Determine if a final field is in the current class. If so, fine, but otherwise it is in a superclass. This is an error. Parameters: rvoid
Definition at line 957 of file opcode.c. Referenced by opcode_run(). |
|
Value: \ (((pcpd_Fieldref->LOCAL_Fieldref_binding.jvaluetypeJVM == \ BASETYPE_CHAR_J) || \ (pcpd_Fieldref->LOCAL_Fieldref_binding.jvaluetypeJVM == \ BASETYPE_CHAR_D)) \ ? rtrue \ : rfalse) JVM stack operations and local variable accesses need to know if the datum to be moved takes one jint slot or two. Items of types jlong and jdouble take two such accesses, all others take just one. Parameters: rvoid
|
|
Store out value by data type into either class static field or object instance field.
|
|
Value: PUTDATA(CLASS(pcpd_Fieldref->LOCAL_Fieldref_binding.clsidxJVM) \ .class_static_field_data[fluidxmisc])
Definition at line 1113 of file opcode.c. Referenced by opcode_run(). |
|
Value: PUTDATA(OBJECT(pcpd_Fieldref->LOCAL_Fieldref_binding.clsidxJVM) \ .object_instance_field_data[fluidxmisc])
|
|
Retrieve value by data type from either class static field or object instance field.
|
|
Value: GETDATA(CLASS(pcpd_Fieldref->LOCAL_Fieldref_binding.clsidxJVM) \ .class_static_field_data[fluidxmisc])
Definition at line 1230 of file opcode.c. Referenced by opcode_run(). |
|
Value: GETDATA(OBJECT(pcpd_Fieldref->LOCAL_Fieldref_binding.clsidxJVM) \ .object_instance_field_data[fluidxmisc])
|
|
Referenced by opcode_run(). |
|
|
|
JVM inner loop setup for end of thread detection-- implements
Use this function to arm handler for non-local exit from the inner Parameters: rvoid
Definition at line 1273 of file opcode.c. Referenced by opcode_run(). |
|
Detect end of thread when stack frame is empty at return time and perform non-local return-- implements
Use this function to test for end of thread execution and to perform a non-local return from the inner This function is invoked from within each of the Java return family of opcodes to detect if the stack frame is empty after a POP_FRAME(). If this test passes, then the stack frame is empty and the thread has nothing else to do. It is therefore moved into the COMPLETE state and a non-local return exits the while loop.
<clinit> or <init> was loaded on top of a running program.
Definition at line 1312 of file opcode.c. Referenced by opcode_run(). |
|
Load a
This function must not be called until There is no attempt to enforce which classes may be invoked by this handler. It is assumed that the caller will only pass in subclasses of JVMCLASS_JAVA_LANG_ERROR. Anything else will produce undefined results.
Details: When this function is first called due to a thrown error, it attempts to load and run that error class. If all is well, that class runs and everyone lives happily ever after. If that class throws an error, however, this handler, having been re-armed, is activated semi-recursively via exit_throw_exception(), (that is, not entering at the top of function, but at the return from exit_throw_exception() with a non-zero return value), entering this code at exit_exception_setup(), choosing the conditional branch != EXIT_MAIN_OKAY and attempts to recursively load and run JVMCLASS_JAVA_LANG_LINKAGEERROR. If this is successful, fine, call exit_jvm() and be done. However, if even this fails and throws an error, the handler, having been rearmed again by the attempt to invoke JVMCLASS_JAVA_LANG_LINKAGEERROR, it again semi-recursively is activated via exit_throw_exception() and again enters the code at exit_exception_setup(). This time, the global opcode_calling_java_lang_linkageerror is rtrue, so no more recursive invocations are performed. Instead, exit_jvm() with the most recent EXIT_xxx code from exit_throw_exception() and be done.
For internal use only. This call to exit_exception_setup() and the following if (EXIT_MAIN_OKAY) statement constitute the ugly part of this code as described above. See also other recursive calls and their control via opcode_calling_java_lang_linkageerror:
Load error class and run its If an error is thrown by class_load_resolve_clinit(), re-enter this error function recursively at exit_exception_setup(). Both mark (here) and unmark (below) class so it gets garbage collected.
Instantiate error class object and run its default If an error is thrown in objec_instance_new(), re-enter this error function recursively at exit_exception_setup().
< This slot is available for use. DO NOT CHANGE since this is also the normal < Not stated in spec, but implied Both mark and unmark object so it gets garbage collected Unmarked from above-- since JVM is going down, this may be irrelevant, but be consistent. Definition at line 1430 of file opcode.c. References class_load_resolve_clinit(), CLASS_OBJECT_LINKAGE, exit_exception_setup(), exit_get_name(), exit_jvm(), exit_LinkageError_subclass, EXIT_MAIN_OKAY, fprintfLocalStderr(), GC_CLASS_MKREF_FROM_CLASS, GC_CLASS_RMREF_FROM_CLASS, GC_OBJECT_MKREF_FROM_OBJECT, GC_OBJECT_RMREF_FROM_OBJECT, jvm_class_index_null, jvm_object_hash_null, jvm_thread_index_null, JVMCLASS_JAVA_LANG_LINKAGEERROR, jvmutil_print_stack(), LOCAL_CONSTANT_NO_ARRAY_DIMS, object_instance_new(), opcode_calling_java_lang_linkageerror, opcode_load_run_throwable(), rfalse, rnull, rtrue, sysErrMsg(), and THREAD_STATUS_EMPTY. Referenced by opcode_load_run_throwable(), and opcode_run(). |
|
Inner loop of JVM virtual instruction execution engine. Only run the inner loop until:
Any remaining time on this time slice will go against the next thread, which may only have a small amount of time, even none at all. This is a natural effect of any time-slicing algorithm. Logic similar to the uncaught exception handler of this function may be found in object_run_method() as far as initiating execution of a JVM method.
setjmp(3) return code from thread_exception_setup()
< thread threw a
< thread threw a
< thread threw a
< A
< thread threw a
< thread threw a
< thread threw a
< A
< thread threw a
java.lang.Error (but NOT a java.lang.Exception) . The object type is found in pThrowableEvent and is not rnull.
java.lang.Throwable of unknowable type. The object type is found in pThrowableEvent and is not rnull.
java.lang.Throwable of some type was thrown, but not handled by the Java code itself. Instead, it will be handled by the default java.lang.ThreadGroup.uncaughtException method . The value of pThrowableEvent will be rnull.
< null-terminated string form of BASETYPE_CHAR_ARRAY < null-terminated string form of BASETYPE_CHAR_L < null-terminated string form of BASETYPE_CHAR_L_TERM < null-terminated string form of BASETYPE_CHAR_ARRAY < null-terminated string form of BASETYPE_CHAR_L < null-terminated string form of BASETYPE_CHAR_L_TERM < null-terminated string form of METHOD_CHAR_OPEN_PARM < null-terminated string form of METHOD_CHAR_VOID alias < Start PC location < null-terminated string form of METHOD_CHAR_OPEN_PARM < null-terminated string form of BASETYPE_CHAR_ARRAY < null-terminated string form of BASETYPE_CHAR_L < null-terminated string form of BASETYPE_CHAR_L_TERM < null-terminated string form of BASETYPE_CHAR_ARRAY < null-terminated string form of BASETYPE_CHAR_L < null-terminated string form of BASETYPE_CHAR_L_TERM < null-terminated string form of METHOD_CHAR_OPEN_PARM < null-terminated string form of METHOD_CHAR_VOID < Place a thread into requested thread state, see link threadstate_request_new() threadstate_request_XXX()endlink for specifics. < Request that an arbitrary thread move into a certain thread state, see link threadstate_request_new() threadstate_request_XXX()endlink for specifics.
java.lang.Exception (but NOT a java.lang.Error) . The object type is found in pThrowableEvent and is not rnull.
< thread threw a
< thread threw a
< thread threw a < Place a thread into requested thread state, see link threadstate_request_new() threadstate_request_XXX()endlink for specifics. < Request that an arbitrary thread move into a certain thread state, see link threadstate_request_new() threadstate_request_XXX()endlink for specifics. For internal use only. For best runtime efficiency, place tests in order of most to least frequent occurrence. < 00 (0x00) nop < 01 (0x01) aconst_null
< 03 (0x03) iconst_0 < 04 (0x04) iconst_1 < 05 (0x05) iconst_2 < 06 (0x06) iconst_3 < 07 (0x07) iconst_4 < 08 (0x08) iconst_5 < 03 (0x03) iconst_0 < 09 (0x09) lconst_0 < 10 (0x0a) lconst_1
< 11 (0x0b) fconst_0 < 12 (0x0c) fconst_1 < 13 (0x0d) fconst_2
< 14 (0x0e) dconst_0 < 15 (0x0f) dconst_1
< 16 (0x10) bipush
< 27 (0x1b) iload_1 < 28 (0x1c) iload_2 < 29 (0x1d) iload_3
< 31 (0x1f) lload_1 < 32 (0x20) lload_2 < 33 (0x21) lload_3
< 35 (0x23) fload_1 < 36 (0x24) fload_2 < 37 (0x25) fload_3
< 39 (0x27) dload_1 < 40 (0x28) dload_2 < 41 (0x29) dload_3
< 43 (0x2b) aload_1 < 44 (0x2c) aload_2 < 45 (0x2d) aload_3
< 60 (0x3c) istore_1 < 61 (0x3d) istore_2 < 62 (0x3e) istore_3
< 64 (0x40) lstore_1 < 65 (0x41) lstore_2 < 66 (0x42) lstore_3
< 68 (0x44) fstore_1 < 69 (0x45) fstore_2 < 70 (0x46) fstore_3
< 72 (0x48) dstore_1 < 73 (0x49) dstore_2 < 74 (0x4a) dstore_3
< 76 (0x4c) astore_1 < 77 (0x4d) astore_2 < 78 (0x4e) astore_3
< 171 (0xab) lookupswitch
< Declared < Access structures of the thread now running in the JVM.
< 178 (0xb2) getstatic
< thread threw a < Access structures of the thread now running in the JVM.
< thread threw a
< thread threw a
< thread threw a
< thread threw a
< Declared
< thread threw a < Declared final;no subclasses allowed
< thread threw a < Signed byte < Unicode character < Double-precision floating-point value < Single-precision floating-point value < Integer < Long integer < an instance of class '/class/name' < Signed short < Boolean, true or false < Reference to one array dimension
< Invalid basetype due to malformed
< thread threw a < 179 (0xb3) putstatic
< thread threw a < Access structures of the thread now running in the JVM.
< thread threw a
< thread threw a
< thread threw a
< thread threw a
< Declared
< thread threw a < Declared final;no subclasses allowed
< thread threw a < Signed byte < Unicode character < Double-precision floating-point value < Single-precision floating-point value < Integer < Long integer < an instance of class '/class/name' < Signed short < Boolean, true or false < Reference to one array dimension
< Invalid basetype due to malformed
< thread threw a < 180 (0xb4) getfield
< thread threw a < Access structures of the thread now running in the JVM.
< thread threw a
< thread threw a
< thread threw a
< thread threw a
< Declared
< thread threw a
< Declared
< thread threw a
< Declared < Access structures of the thread now running in the JVM.
< Declared < Access structures of the thread now running in the JVM. < 185 (0xb9)invokeinterface
< 187 (0xbb) new
< thread threw a
< Declared
< thread threw a < Object is an array instead of an object instance
< thread threw a < Is an interface, not a class.
< thread threw a < Access structures of the thread now running in the JVM.
< thread threw a < This slot is available for use
< Object is a
java.lang.Error (but NOT a java.lang.Exception) . The object type is found in pThrowableEvent and is not rnull.< Access structures of the thread now running in the JVM.
< thread threw a
< thread threw a < Object is an array instead of an object instance
< Object is a
< 204 (0xcc) unused < 205 (0xcd) unused < 206 (0xce) unused < 207 (0xcf) unused < 208 (0xd0) unused < 209 (0xd1) unused < 210 (0xd2) unused < 211 (0xd3) unused < 212 (0xd4) unused < 213 (0xd5) unused < 214 (0xd6) unused < 215 (0xd7) unused < 216 (0xd8) unused < 217 (0xd9) unused < 218 (0xda) unused < 219 (0xdb) unused < 220 (0xdc) unused < 221 (0xdd) unused < 222 (0xde) unused < 223 (0xdf) unused < 224 (0xe0) unused < 225 (0xe1) unused < 226 (0xe2) unused < 227 (0xe3) unused < 228 (0xe4) unused < 229 (0xe5) unused < 230 (0xe6) unused < 231 (0xe7) unused < 232 (0xe8) unused < 233 (0xe9) unused < 234 (0xea) unused < 234 (0xeb) unused < 235 (0xec) unused < 237 (0xed) unused < 238 (0xee) unused < 239 (0xef) unused < 240 (0xf0) unused < 241 (0xf1) unused < 242 (0xf2) unused < 243 (0xf3) unused < 244 (0xf4) unused < 245 (0xf5) unused < 246 (0xf6) unused < 247 (0xf7) unused < 248 (0xf8) unused < 249 (0xf9) unused < 250 (0xfa) unused < 251 (0xfb) unused < 252 (0xfc) unused < 253 (0xfd) unused < 254 (0xfe) impdep1
< Request that an arbitrary thread move into a certain thread state, see link threadstate_request_new() threadstate_request_XXX()endlink for specifics. If a thread completed running, and a proper request to the COMPLETE state was issued, then it finished normally.
setjmp(3) return code from thread_exception_setup()< Place a thread into requested thread state, see link threadstate_request_new() threadstate_request_XXX()endlink for specifics. < Request that an arbitrary thread move into a certain thread state, see link threadstate_request_new() threadstate_request_XXX()endlink for specifics. Definition at line 1610 of file opcode.c. References ACC_NATIVE, ACC_SYNCHRONIZED, method_info::access_flags, method_info::attributes, bytegames_split_jdouble(), bytegames_split_jlong(), CALCULATE_CLASS_INFO_FROM_CLASS_REFERENCE, CALCULATE_FIELD_INFO_FROM_FIELD_REFERENCE, CALCULATE_METHOD_INFO_FROM_METHOD_REFERENCE, CALCULATE_METHOD_INFO_FROM_PC, CHECK_CP_TAG, CHECK_FINAL_FIELD_CURRENT_CLASS, CHECK_FINAL_STACK_FRAME_ULTIMATE, CHECK_NOT_ABSTRACT_CLASS, CHECK_NOT_ABSTRACT_METHOD, CHECK_NOT_ARRAY_OBJECT, CHECK_NOT_INTERFACE_CLASS, CHECK_STATIC_FIELD, CHECK_STATIC_METHOD, CHECK_VALID_CODEATRIDX, CHECK_VALID_FIELDLOOKUPIDX, CLASS, class_find_by_prchar(), class_load_resolve_clinit(), CLASS_OBJECT_LINKAGE, CLASS_STATUS_ARRAY, CONSTANT_Class_info::LOCAL_Class_binding::clsidxJVM, CODE_CONSTRAINT_START_PC, method_info::LOCAL_method_binding::codeatridxJVM, CONSTANT_Class, CONSTANT_Fieldref, CONSTANT_Methodref, ClassFile::constant_pool, CURRENT_THREAD, DEREFERENCE_PC_CODE_BASE, method_info::descriptor_index, CONSTANT_NameAndType_info::descriptor_index, method_info::LOCAL_method_binding::excpatridxJVM, exit_jvm(), EXIT_JVM_ATTRIBUTE, EXIT_JVM_CLASS, EXIT_JVM_INTERNAL, EXIT_JVM_METHOD, EXIT_JVM_THREAD, EXIT_MAIN_OKAY, exit_throw_exception(), FORCE_JINT, GET_U2_OPERAND, GETSTATIC, HEAP_FREE_DATA, jvm_attribute_index_bad, jvm_attribute_index_native, jvm_class_index_null, jvm_method_index_bad, jvm_object_hash_null, JVMCFG_UNCAUGHT_EXCEPTION_METHOD, JVMCFG_UNCAUGHT_EXCEPTION_PARMS, JVMCLASS_JAVA_LANG_NEGATIVEARRAYSIZEEXCEPTION, JVMCLASS_JAVA_LANG_NOCLASSDEFFOUNDERROR, JVMCLASS_JAVA_LANG_NOSUCHMETHODERROR, JVMCLASS_JAVA_LANG_THREAD, JVMCLASS_JAVA_LANG_THREADGROUP, jvmutil_print_stack(), LATE_CLASS_LOAD, CONSTANT_Class_info::LOCAL_Class_binding, method_info::LOCAL_method_binding, Code_attribute::max_locals, method_find_by_prchar(), ClassFile::methods, CONSTANT_Methodref_info::name_and_type_index, method_info::name_index, CONSTANT_NameAndType_info::name_index, CONSTANT_Class_info::name_index, native_run_method(), object_instance_new(), OBJECT_STATUS_ARRAY, OBJECT_STATUS_EMPTY, OBJECT_STATUS_THREAD, objectutil_synchronize(), objectutil_unsynchronize(), jvm_pc::offset, OPCODE_00_NOP, OPCODE_01_ACONST_NULL, OPCODE_02_ICONST_M1, OPCODE_03_ICONST_0, OPCODE_04_ICONST_1, OPCODE_05_ICONST_2, OPCODE_06_ICONST_3, OPCODE_07_ICONST_4, OPCODE_08_ICONST_5, OPCODE_09_LCONST_0, OPCODE_0A_LCONST_1, OPCODE_0B_FCONST_0, OPCODE_0C_FCONST_1, OPCODE_0D_FCONST_2, OPCODE_0E_DCONST_0, OPCODE_0F_DCONST_1, OPCODE_10_BIPUSH, OPCODE_11_SIPUSH, OPCODE_12_LDC, OPCODE_13_LDC_W, OPCODE_14_LDC2_W, OPCODE_15_ILOAD, OPCODE_16_LLOAD, OPCODE_17_FLOAD, OPCODE_18_DLOAD, OPCODE_19_ALOAD, OPCODE_1A_ILOAD_0, OPCODE_1B_ILOAD_1, OPCODE_1C_ILOAD_2, OPCODE_1D_ILOAD_3, OPCODE_1E_LLOAD_0, OPCODE_1F_LLOAD_1, OPCODE_20_LLOAD_2, OPCODE_21_LLOAD_3, OPCODE_22_FLOAD_0, OPCODE_23_FLOAD_1, OPCODE_24_FLOAD_2, OPCODE_25_FLOAD_3, OPCODE_26_DLOAD_0, OPCODE_27_DLOAD_1, OPCODE_28_DLOAD_2, OPCODE_29_DLOAD_3, OPCODE_2A_ALOAD_0, OPCODE_2B_ALOAD_1, OPCODE_2C_ALOAD_2, OPCODE_2D_ALOAD_3, OPCODE_2E_IALOAD, OPCODE_2F_LALOAD, OPCODE_30_FALOAD, OPCODE_31_DALOAD, OPCODE_32_AALOAD, OPCODE_33_BALOAD, OPCODE_34_CALOAD, OPCODE_35_SALOAD, OPCODE_36_ISTORE, OPCODE_37_LSTORE, OPCODE_38_FSTORE, OPCODE_39_DSTORE, OPCODE_3A_ASTORE, OPCODE_3B_ISTORE_0, OPCODE_3C_ISTORE_1, OPCODE_3D_ISTORE_2, OPCODE_3E_ISTORE_3, OPCODE_3F_LSTORE_0, OPCODE_40_LSTORE_1, OPCODE_41_LSTORE_2, OPCODE_42_LSTORE_3, OPCODE_43_FSTORE_0, OPCODE_44_FSTORE_1, OPCODE_45_FSTORE_2, OPCODE_46_FSTORE_3, OPCODE_47_DSTORE_0, OPCODE_48_DSTORE_1, OPCODE_49_DSTORE_2, OPCODE_4A_DSTORE_3, OPCODE_4B_ASTORE_0, OPCODE_4C_ASTORE_1, OPCODE_4D_ASTORE_2, OPCODE_4E_ASTORE_3, OPCODE_4F_IASTORE, OPCODE_50_LASTORE, OPCODE_51_FASTORE, OPCODE_52_DASTORE, OPCODE_53_AASTORE, OPCODE_54_BASTORE, OPCODE_55_CASTORE, OPCODE_56_SASTORE, OPCODE_57_POP, OPCODE_58_POP2, OPCODE_59_DUP, OPCODE_5A_DUP_X1, OPCODE_5B_DUP_X2, OPCODE_5C_DUP2, OPCODE_5D_DUP2_X1, OPCODE_5E_DUP2_X2, OPCODE_5F_SWAP, OPCODE_60_IADD, OPCODE_61_LADD, OPCODE_62_FADD, OPCODE_63_DADD, OPCODE_64_ISUB, OPCODE_65_LSUB, OPCODE_66_FSUB, OPCODE_67_DSUB, OPCODE_68_IMUL, OPCODE_69_LMUL, OPCODE_6A_FMUL, OPCODE_6B_DMUL, OPCODE_6C_IDIV, OPCODE_6D_LDIV, OPCODE_6E_FDIV, OPCODE_6F_DDIV, OPCODE_70_IREM, OPCODE_71_LREM, OPCODE_72_FREM, OPCODE_73_DREM, OPCODE_74_INEG, OPCODE_75_LNEG, OPCODE_76_FNEG, OPCODE_77_DNEG, OPCODE_78_ISHL, OPCODE_79_LSHL, OPCODE_7A_ISHR, OPCODE_7B_LSHR, OPCODE_7C_IUSHR, OPCODE_7D_LUSHR, OPCODE_7E_IAND, OPCODE_7F_LAND, OPCODE_80_IOR, OPCODE_81_LOR, OPCODE_82_IXOR, OPCODE_83_LXOR, OPCODE_84_IINC, OPCODE_85_I2L, OPCODE_86_I2F, OPCODE_87_I2D, OPCODE_88_L2I, OPCODE_89_L2F, OPCODE_8A_L2D, OPCODE_8B_F2I, OPCODE_8C_F2L, OPCODE_8D_F2D, OPCODE_8E_D2I, OPCODE_8F_D2L, OPCODE_90_D2F, OPCODE_91_I2B, OPCODE_92_I2C, OPCODE_93_I2S, OPCODE_94_LCMP, OPCODE_95_FCMPL, OPCODE_96_FCMPG, OPCODE_97_DCMPL, OPCODE_98_DCMPG, OPCODE_99_IFEQ, OPCODE_9A_IFNE, OPCODE_9B_IFLT, OPCODE_9C_IFGE, OPCODE_9D_IFGT, OPCODE_9E_IFLE, OPCODE_9F_IF_ICMPEQ, OPCODE_A0_IF_ICMPNE, OPCODE_A1_IF_ICMPLT, OPCODE_A2_IF_ICMPGE, OPCODE_A3_IF_ICMPGT, OPCODE_A4_IF_ICMPLE, OPCODE_A5_IF_ACMPEQ, OPCODE_A6_IF_ACMPNE, OPCODE_A7_GOTO, OPCODE_A8_JSR, OPCODE_A9_RET, OPCODE_AA_TABLESWITCH, OPCODE_AB_LOOKUPSWITCH, OPCODE_AC_IRETURN, OPCODE_AD_LRETURN, OPCODE_AE_FRETURN, OPCODE_AF_DRETURN, OPCODE_B0_ARETURN, OPCODE_B1_RETURN, OPCODE_B2_GETSTATIC, OPCODE_B3_PUTSTATIC, OPCODE_B4_GETFIELD, OPCODE_B5_PUTFIELD, OPCODE_B6_INVOKEVIRTUAL, OPCODE_B7_INVOKESPECIAL, OPCODE_B8_INVOKESTATIC, OPCODE_B9_INVOKEINTERFACE, OPCODE_BA_XXXUNUSEDXXX1, OPCODE_BB_NEW, OPCODE_BC_NEWARRAY, OPCODE_BD_ANEWARRAY, OPCODE_BE_ARRAYLENGTH, OPCODE_BF_ATHROW, OPCODE_C0_CHECKCAST, OPCODE_C1_INSTANCEOF, OPCODE_C2_MONITORENTER, OPCODE_C3_MONITOREXIT, OPCODE_C4_WIDE, OPCODE_C5_MULTIANEWARRAY, OPCODE_C6_IFNULL, OPCODE_C7_IFNONNULL, OPCODE_C8_GOTO_W, OPCODE_C9_JSR_W, OPCODE_CA_BREAKPOINT, OPCODE_CB_UNUSED, OPCODE_CC_UNUSED, OPCODE_CD_UNUSED, OPCODE_CE_UNUSED, OPCODE_CF_UNUSED, OPCODE_D0_UNUSED, OPCODE_D1_UNUSED, OPCODE_D2_UNUSED, OPCODE_D3_UNUSED, OPCODE_D4_UNUSED, OPCODE_D5_UNUSED, OPCODE_D6_UNUSED, OPCODE_D7_UNUSED, OPCODE_D8_UNUSED, OPCODE_D9_UNUSED, OPCODE_DA_UNUSED, OPCODE_DB_UNUSED, OPCODE_DC_UNUSED, OPCODE_DD_UNUSED, OPCODE_DE_UNUSED, OPCODE_DF_UNUSED, OPCODE_E0_UNUSED, OPCODE_E1_UNUSED, OPCODE_E2_UNUSED, OPCODE_E3_UNUSED, OPCODE_E4_UNUSED, OPCODE_E5_UNUSED, OPCODE_E6_UNUSED, OPCODE_E7_UNUSED, OPCODE_E8_UNUSED, OPCODE_E9_UNUSED, OPCODE_EA_UNUSED, OPCODE_EB_UNUSED, OPCODE_EC_UNUSED, OPCODE_ED_UNUSED, OPCODE_EE_UNUSED, OPCODE_EF_UNUSED, opcode_end_thread_setup(), opcode_end_thread_test(), OPCODE_F0_UNUSED, OPCODE_F1_UNUSED, OPCODE_F2_UNUSED, OPCODE_F3_UNUSED, OPCODE_F4_UNUSED, OPCODE_F5_UNUSED, OPCODE_F6_UNUSED, OPCODE_F7_UNUSED, OPCODE_F8_UNUSED, OPCODE_F9_UNUSED, OPCODE_FA_UNUSED, OPCODE_FB_UNUSED, OPCODE_FC_UNUSED, OPCODE_FD_UNUSED, OPCODE_FE_IMPDEP1, OPCODE_FF_IMPDEP2, opcode_load_run_throwable(), opcode_run(), pjvm, POP, POP_FRAME, PTR_THIS_CP_Class, PTR_THIS_CP_NameAndType, PTR_THIS_CP_Utf8, PUSH, PUSH_FRAME, PUT_PC_IMMEDIATE, PUTSTATIC, rfalse, rnull, rtrue, STUB, sysErrMsg(), ClassFile::this_class, THIS_PC, THIS_PCFS, THREAD, thread_exception_setup(), THREAD_REQUEST_NEXT_STATE, THREAD_STATE_COMPLETE, thread_state_get_name(), THREAD_STATE_RUNNING, THREAD_STATUS_EMPTY, THREAD_STATUS_THREW_ERROR, THREAD_STATUS_THREW_EXCEPTION, THREAD_STATUS_THREW_THROWABLE, THREAD_STATUS_THREW_UNCAUGHT, thread_throw_exception(), threadstate_request_complete(), rjvm::timeslice_expired, utf_prchar_classname_strcmp(), and utf_utf2prchar(). Referenced by object_run_method(), and opcode_run(). |
|
|
|
Handler linkage for end of thread detection. |
|
Initial value: ((rboolean) 0) This boolean reports the the error-within-an-error state condition within opcode_load_run_throwable() opcode_load_run_throwable() Definition at line 1348 of file opcode.c. Referenced by opcode_load_run_throwable(). |