src/share/vm/runtime/relocator.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File
*** old/src/share/vm/runtime/relocator.cpp Thu Jul 26 17:35:41 2012
--- new/src/share/vm/runtime/relocator.cpp Thu Jul 26 17:35:41 2012
*** 463,479 ****
--- 463,478 ----
// The width of instruction at "bci" is changing by "delta". Adjust the stack
// map frames.
void Relocator::adjust_stack_map_table(int bci, int delta) {
if (method()->has_stackmap_table()) {
typeArrayOop data = method()->stackmap_data();
! // The data in the array is a classfile representation of the stackmap table
// table attribute, less the initial u2 tag and u4 attribute_length fields.
stack_map_table_attribute* attr = stack_map_table_attribute::at(
(address)data->byte_at_addr(0) - (sizeof(u2) + sizeof(u4)));
+ stack_map_table* sm_table =
+ stack_map_table::at((address)data->byte_at_addr(0));
! int count = attr->number_of_entries();
! stack_map_frame* frame = attr->entries();
! int count = sm_table->number_of_entries();
! stack_map_frame* frame = sm_table->entries();
int bci_iter = -1;
bool offset_adjusted = false; // only need to adjust one offset
for (int i = 0; i < count; ++i) {
int offset_delta = frame->offset_delta();
*** 511,521 ****
--- 510,520 ----
// Now convert the frames in place
if (frame->is_same_frame()) {
same_frame_extended::create_at(frame_addr, new_offset_delta);
} else {
! same_frame_1_stack_item_extended::create_at(
! same_locals_1_stack_item_extended::create_at(
frame_addr, new_offset_delta, NULL);
// the verification_info_type should already be at the right spot
}
}
offset_adjusted = true; // needs to be done only once, since subsequent
src/share/vm/runtime/relocator.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File