hotspot/src/share/vm/classfile/verifier.cpp
changeset 43178 6fb98b21d035
parent 41542 c705c10c4914
child 43179 06ccf3bfd0a3
equal deleted inserted replaced
43177:2158f6c730aa 43178:6fb98b21d035
   539     stack_map_table* sm_table =
   539     stack_map_table* sm_table =
   540         stack_map_table::at((address)data->adr_at(0));
   540         stack_map_table::at((address)data->adr_at(0));
   541     stack_map_frame* sm_frame = sm_table->entries();
   541     stack_map_frame* sm_frame = sm_table->entries();
   542     streamIndentor si2(ss);
   542     streamIndentor si2(ss);
   543     int current_offset = -1;
   543     int current_offset = -1;
   544     // Subtract two from StackMapAttribute length because the length includes
   544     address end_of_sm_table = (address)sm_table + method->stackmap_data()->length();
   545     // two bytes for number of table entries.
       
   546     size_t sm_table_space = method->stackmap_data()->length() - 2;
       
   547     for (u2 i = 0; i < sm_table->number_of_entries(); ++i) {
   545     for (u2 i = 0; i < sm_table->number_of_entries(); ++i) {
   548       ss->indent();
   546       ss->indent();
   549       size_t sm_frame_size = sm_frame->size();
   547       if (!sm_frame->verify((address)sm_frame, end_of_sm_table)) {
   550       // If the size of the next stackmap exceeds the length of the entire
       
   551       // stackmap table then print a truncated message and return.
       
   552       if (sm_frame_size > sm_table_space) {
       
   553         sm_frame->print_truncated(ss, current_offset);
   548         sm_frame->print_truncated(ss, current_offset);
   554         return;
   549         return;
   555       }
   550       }
   556       sm_table_space -= sm_frame_size;
       
   557       sm_frame->print_on(ss, current_offset);
   551       sm_frame->print_on(ss, current_offset);
   558       ss->cr();
   552       ss->cr();
   559       current_offset += sm_frame->offset_delta();
   553       current_offset += sm_frame->offset_delta();
   560       sm_frame = sm_frame->next();
   554       sm_frame = sm_frame->next();
   561     }
   555     }