src/cpu/x86/vm/c1_CodeStubs_x86.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File
*** old/src/cpu/x86/vm/c1_CodeStubs_x86.cpp Wed Dec 12 17:34:31 2012
--- new/src/cpu/x86/vm/c1_CodeStubs_x86.cpp Wed Dec 12 17:34:31 2012
*** 311,324 ****
--- 311,324 ----
assert(a_byte == *start++, "should be the same code");
}
#endif
} else {
// make a copy the code which is going to be patched.
- for ( int i = 0; i < _bytes_to_copy; i++) {
address ptr = (address)(_pc_start + i);
int a_byte = (*ptr) & 0xFF;
! __ a_byte (a_byte);
! __ emit_int8(a_byte);
*ptr = 0x90; // make the site look like a nop
}
}
address end_of_patch = __ pc();
*** 361,375 ****
--- 361,375 ----
bytes_to_skip += sizeof_patch_record;
// emit the offsets needed to find the code to patch
int being_initialized_entry_offset = __ pc() - being_initialized_entry + sizeof_patch_record;
! __ a_byte(0xB8);
! __ a_byte(0);
! __ a_byte(being_initialized_entry_offset);
! __ a_byte(bytes_to_skip);
! __ a_byte(_bytes_to_copy);
! __ emit_int8((unsigned char)0xB8);
! __ emit_int8(0);
! __ emit_int8(being_initialized_entry_offset);
! __ emit_int8(bytes_to_skip);
! __ emit_int8(_bytes_to_copy);
address patch_info_pc = __ pc();
assert(patch_info_pc - end_of_patch == bytes_to_skip, "incorrect patch info");
address entry = __ pc();
NativeGeneralJump::insert_unconditional((address)_pc_start, entry);
src/cpu/x86/vm/c1_CodeStubs_x86.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File