comparison src/share/vm/c1x/c1x_CodeInstaller.cpp @ 1453:d603bdbec024

Enable monitorenter/monitorexit runtime calls.
author Thomas Wuerthinger <wuerthinger@ssw.jku.at>
date Fri, 12 Nov 2010 18:34:07 +0100
parents 565f45cebac2
children dc114f680d9c
comparison
equal deleted inserted replaced
1452:9b22e3e5df8e 1453:d603bdbec024
325 } else { 325 } else {
326 Bytecodes::Code code = Bytecodes::java_code_at(method->bcp_from(bci)); 326 Bytecodes::Code code = Bytecodes::java_code_at(method->bcp_from(bci));
327 reexecute = Interpreter::bytecode_should_reexecute(code); 327 reexecute = Interpreter::bytecode_should_reexecute(code);
328 } 328 }
329 329
330
331 if (frame != NULL) { 330 if (frame != NULL) {
332 jint local_count = CiDebugInfo_Frame::numLocals(frame); 331 jint local_count = CiDebugInfo_Frame::numLocals(frame);
333 jint expression_count = CiDebugInfo_Frame::numStack(frame); 332 jint expression_count = CiDebugInfo_Frame::numStack(frame);
334 jint monitor_count = CiDebugInfo_Frame::numLocks(frame); 333 jint monitor_count = CiDebugInfo_Frame::numLocks(frame);
335 arrayOop values = (arrayOop) CiDebugInfo_Frame::values(frame); 334 arrayOop values = (arrayOop) CiDebugInfo_Frame::values(frame);
348 } else if (i < local_count + expression_count) { 347 } else if (i < local_count + expression_count) {
349 expressions->append(value); 348 expressions->append(value);
350 } else { 349 } else {
351 assert(value->is_location(), "invalid monitor location"); 350 assert(value->is_location(), "invalid monitor location");
352 LocationValue* loc = (LocationValue*)value; 351 LocationValue* loc = (LocationValue*)value;
353 LocationValue* obj = new LocationValue(Location::new_stk_loc(Location::oop, loc->location().stack_offset() + HeapWordSize)); 352 int monitor_offset = loc->location().stack_offset();
354 monitors->append(new MonitorValue(obj, Location::new_stk_loc(Location::normal, loc->location().stack_offset()))); 353 LocationValue* obj = new LocationValue(Location::new_stk_loc(Location::oop, monitor_offset + BasicObjectLock::obj_offset_in_bytes()));
354 monitors->append(new MonitorValue(obj, Location::new_stk_loc(Location::normal, monitor_offset + BasicObjectLock::lock_offset_in_bytes())));
355 } 355 }
356 } 356 }
357 DebugToken* locals_token = _debug_recorder->create_scope_values(locals); 357 DebugToken* locals_token = _debug_recorder->create_scope_values(locals);
358 DebugToken* expressions_token = _debug_recorder->create_scope_values(expressions); 358 DebugToken* expressions_token = _debug_recorder->create_scope_values(expressions);
359 DebugToken* monitors_token = _debug_recorder->create_monitor_values(monitors); 359 DebugToken* monitors_token = _debug_recorder->create_monitor_values(monitors);