< prev index next >

src/hotspot/share/classfile/verifier.cpp

Print this page




 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, &current_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, &current_frame, &stackmap_table, CHECK_VERIFY(this));
 771         verified_exc_handlers = true;
 772       }


< prev index next >