731 u2 index;
732 int target;
733 VerificationType type, type2;
734 VerificationType atype;
735
736 LogTarget(Info, verification) lt;
737 if (lt.is_enabled()) {
738 ResourceMark rm(THREAD);
739 LogStream ls(lt);
740 current_frame.print_on(&ls);
741 lt.print("offset = %d, opcode = %s", bci, Bytecodes::name(opcode));
742 }
743
744 // Make sure wide instruction is in correct format
745 if (bcs.is_wide()) {
746 if (opcode != Bytecodes::_iinc && opcode != Bytecodes::_iload &&
747 opcode != Bytecodes::_aload && opcode != Bytecodes::_lload &&
748 opcode != Bytecodes::_istore && opcode != Bytecodes::_astore &&
749 opcode != Bytecodes::_lstore && opcode != Bytecodes::_fload &&
750 opcode != Bytecodes::_dload && opcode != Bytecodes::_fstore &&
751 opcode != Bytecodes::_dstore) {
752 /* Unreachable? RawBytecodeStream's raw_next() returns 'illegal'
753 * if we encounter a wide instruction that modifies an invalid
754 * opcode (not one of the ones listed above) */
755 verify_error(ErrorContext::bad_code(bci), "Bad wide instruction");
756 return;
757 }
758 }
759
760 // Look for possible jump target in exception handlers and see if it
761 // matches current_frame. Do this check here for astore*, dstore*,
762 // fstore*, istore*, and lstore* opcodes because they can change the type
763 // state by adding a local. JVM Spec says that the incoming type state
764 // should be used for this check. So, do the check here before a possible
765 // local is added to the type state.
766 if (Bytecodes::is_store_into_local(opcode) && bci >= ex_min && bci < ex_max) {
767 if (was_recursively_verified()) return;
768 verify_exception_handler_targets(
769 bci, this_uninit, ¤t_frame, &stackmap_table, CHECK_VERIFY(this));
770 verified_exc_handlers = true;
771 }
|
731 u2 index;
732 int target;
733 VerificationType type, type2;
734 VerificationType atype;
735
736 LogTarget(Info, verification) lt;
737 if (lt.is_enabled()) {
738 ResourceMark rm(THREAD);
739 LogStream ls(lt);
740 current_frame.print_on(&ls);
741 lt.print("offset = %d, opcode = %s", bci, Bytecodes::name(opcode));
742 }
743
744 // Make sure wide instruction is in correct format
745 if (bcs.is_wide()) {
746 if (opcode != Bytecodes::_iinc && opcode != Bytecodes::_iload &&
747 opcode != Bytecodes::_aload && opcode != Bytecodes::_lload &&
748 opcode != Bytecodes::_istore && opcode != Bytecodes::_astore &&
749 opcode != Bytecodes::_lstore && opcode != Bytecodes::_fload &&
750 opcode != Bytecodes::_dload && opcode != Bytecodes::_fstore &&
751 opcode != Bytecodes::_dstore && opcode != Bytecodes::_vstore &&
752 opcode != Bytecodes::_vload) {
753 /* Unreachable? RawBytecodeStream's raw_next() returns 'illegal'
754 * if we encounter a wide instruction that modifies an invalid
755 * opcode (not one of the ones listed above) */
756 verify_error(ErrorContext::bad_code(bci), "Bad wide instruction");
757 return;
758 }
759 }
760
761 // Look for possible jump target in exception handlers and see if it
762 // matches current_frame. Do this check here for astore*, dstore*,
763 // fstore*, istore*, and lstore* opcodes because they can change the type
764 // state by adding a local. JVM Spec says that the incoming type state
765 // should be used for this check. So, do the check here before a possible
766 // local is added to the type state.
767 if (Bytecodes::is_store_into_local(opcode) && bci >= ex_min && bci < ex_max) {
768 if (was_recursively_verified()) return;
769 verify_exception_handler_targets(
770 bci, this_uninit, ¤t_frame, &stackmap_table, CHECK_VERIFY(this));
771 verified_exc_handlers = true;
772 }
|