comparison src/cpu/x86/vm/interp_masm_x86_64.cpp @ 1976:0fc262af204f

6780143: hs203t003 hits SIGSEGV/EXCEPTION_ACCESS_VIOLATION with -XX:+UseCompressedOops Summary: Using r12 as temporary register around call_VM trashes heapbase becausecall_VM doesn't always return immediately to following code (eg forward_exception, popframe and early return support). Reviewed-by: never, kvn
author coleenp
date Mon, 29 Nov 2010 15:43:36 -0500
parents f95d63e2154a
children dd031b2226de
comparison
equal deleted inserted replaced
1972:f95d63e2154a 1976:0fc262af204f
447 if (JvmtiExport::can_post_interpreter_events()) { 447 if (JvmtiExport::can_post_interpreter_events()) {
448 Label run_compiled_code; 448 Label run_compiled_code;
449 // JVMTI events, such as single-stepping, are implemented partly by avoiding running 449 // JVMTI events, such as single-stepping, are implemented partly by avoiding running
450 // compiled code in threads for which the event is enabled. Check here for 450 // compiled code in threads for which the event is enabled. Check here for
451 // interp_only_mode if these events CAN be enabled. 451 // interp_only_mode if these events CAN be enabled.
452 get_thread(temp);
453 // interp_only is an int, on little endian it is sufficient to test the byte only 452 // interp_only is an int, on little endian it is sufficient to test the byte only
454 // Is a cmpl faster (ce 453 // Is a cmpl faster?
455 cmpb(Address(temp, JavaThread::interp_only_mode_offset()), 0); 454 cmpb(Address(r15_thread, JavaThread::interp_only_mode_offset()), 0);
456 jcc(Assembler::zero, run_compiled_code); 455 jcc(Assembler::zero, run_compiled_code);
457 jmp(Address(method, methodOopDesc::interpreter_entry_offset())); 456 jmp(Address(method, methodOopDesc::interpreter_entry_offset()));
458 bind(run_compiled_code); 457 bind(run_compiled_code);
459 } 458 }
460 459