You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by gs...@apache.org on 2006/11/30 23:14:23 UTC
svn commit: r481094 - in /harmony/enhanced/drlvm/trunk/vm/vmcore:
include/jvmti_internal.h src/jvmti/jvmti_capability.cpp
src/util/ia32/base/jit_lock_rt_support_ia32.cpp
Author: gshimansky
Date: Thu Nov 30 14:14:21 2006
New Revision: 481094
URL: http://svn.apache.org/viewvc?view=rev&rev=481094
Log:
Applied HARMONY-2358 and HARMONY-2360
[drlvm][jvmti] Fix stub names for monitor_exit
[drlvm][jvmti] Disabling monitor_enter fast path on on can_generate_monitor_events capability
Tests passed on ubuntu, windows XP and partially on Gentoo x86_64 (kernel tests
on Jitrino.OPT failed)
Modified:
harmony/enhanced/drlvm/trunk/vm/vmcore/include/jvmti_internal.h
harmony/enhanced/drlvm/trunk/vm/vmcore/src/jvmti/jvmti_capability.cpp
harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/ia32/base/jit_lock_rt_support_ia32.cpp
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/include/jvmti_internal.h
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/include/jvmti_internal.h?view=diff&rev=481094&r1=481093&r2=481094
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/include/jvmti_internal.h (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/include/jvmti_internal.h Thu Nov 30 14:14:21 2006
@@ -293,6 +293,7 @@
TI_GC_ENABLE_FIELD_MODIFICATION_EVENT = 0x40,
TI_GC_ENABLE_POP_FRAME = 0x80,
TI_GC_ENABLE_TAG_OBJECTS = 0x100,
+ TI_GC_ENABLE_MONITOR_EVENTS = 0x200,
};
void set_global_capability(GlobalCapabilities ti_gc)
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/jvmti/jvmti_capability.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/jvmti/jvmti_capability.cpp?view=diff&rev=481094&r1=481093&r2=481094
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/jvmti/jvmti_capability.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/jvmti/jvmti_capability.cpp Thu Nov 30 14:14:21 2006
@@ -284,6 +284,9 @@
if (capabilities_ptr->can_pop_frame)
ti->set_global_capability(DebugUtilsTI::TI_GC_ENABLE_POP_FRAME);
+ if (capabilities_ptr->can_generate_monitor_events)
+ ti->set_global_capability(DebugUtilsTI::TI_GC_ENABLE_MONITOR_EVENTS);
+
if (capabilities_ptr->can_tag_objects) {
ti->set_global_capability(DebugUtilsTI::TI_GC_ENABLE_TAG_OBJECTS);
ManagedObject::_tag_pointer = true;
@@ -376,6 +379,12 @@
if (capabilities_ptr->can_pop_frame)
ti->reset_global_capability(DebugUtilsTI::TI_GC_ENABLE_POP_FRAME);
+
+ // relinquishing following capabilies will not revert VM operation mode
+ // back to optimized, so we do not reset global capabilities
+ //
+ // TI_GC_ENABLE_MONITOR_EVENTS
+ // TI_GC_ENABLE_TAG_OBJECTS
return JVMTI_ERROR_NONE;
}
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/ia32/base/jit_lock_rt_support_ia32.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/ia32/base/jit_lock_rt_support_ia32.cpp?view=diff&rev=481094&r1=481093&r2=481094
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/ia32/base/jit_lock_rt_support_ia32.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/ia32/base/jit_lock_rt_support_ia32.cpp Thu Nov 30 14:14:21 2006
@@ -96,20 +96,22 @@
ss = branch8(ss, Condition_Z, Imm_Opnd(size_8, 0));
char *backpatch_address__null_pointer = ((char *)ss) - 1;
-// skip fast path if ti is enabled
-// so all TI events will be generated
-if(!VM_Global_State::loader_env->TI->isEnabled()) {
- ss = alu(ss, add_opc, ecx_opnd, Imm_Opnd(header_offset)); // pop parameters
- ss = gen_monitorenter_fast_path_helper(ss, ecx_opnd);
- ss = test(ss, eax_opnd, eax_opnd);
- ss = branch8(ss, Condition_NZ, Imm_Opnd(size_8, 0));
- char *backpatch_address__fast_monitor_failed = ((char *)ss) - 1;
- ss = ret(ss, Imm_Opnd(4));
+ // skip fast path if can_generate_monitor_events capability
+ // was requested, so all TI events will be generated
+ if (!VM_Global_State::loader_env->TI->get_global_capability(
+ DebugUtilsTI::TI_GC_ENABLE_MONITOR_EVENTS)) {
+ ss = alu(ss, add_opc, ecx_opnd, Imm_Opnd(header_offset)); // pop parameters
+ ss = gen_monitorenter_fast_path_helper(ss, ecx_opnd);
+ ss = test(ss, eax_opnd, eax_opnd);
+ ss = branch8(ss, Condition_NZ, Imm_Opnd(size_8, 0));
+ char *backpatch_address__fast_monitor_failed = ((char *)ss) - 1;
+ ss = ret(ss, Imm_Opnd(4));
+
+ // Slow path: happens when the monitor is busy (contention case)
+ offset = (signed)ss - (signed)backpatch_address__fast_monitor_failed - 1;
+ *backpatch_address__fast_monitor_failed = (char)offset;
+ }
- // Slow path: happens when the monitor is busy (contention case)
- offset = (signed)ss - (signed)backpatch_address__fast_monitor_failed - 1;
- *backpatch_address__fast_monitor_failed = (char)offset;
-}
ss = gen_setup_j2n_frame(ss);
ss = push(ss, M_Base_Opnd(esp_reg, m2n_sizeof_m2n_frame));
@@ -365,10 +367,10 @@
addr = stub;
assert((ss - stub) < stub_size);
- compile_add_dynamic_generated_code_chunk("vm_monitor_enter_naked", stub, stub_size);
+ compile_add_dynamic_generated_code_chunk("vm_monitor_exit_naked", stub, stub_size);
if (VM_Global_State::loader_env->TI->isEnabled())
- jvmti_send_dynamic_code_generated_event("vm_monitor_enter_naked", stub, stub_size);
+ jvmti_send_dynamic_code_generated_event("vm_monitor_exit_naked", stub, stub_size);
DUMP_STUB(stub, "getaddress__vm_monitor_exit_naked", ss - stub);