comparison src/share/vm/runtime/sharedRuntime.cpp @ 610:70998f2e05ef

6805864: 4/3 Problem with jvmti->redefineClasses: some methods don't get redefined Summary: Remove incorrect optimization in klassItable::adjust_method_entries(). Add RedefineClasses() tracing support for obsolete method entry. Reviewed-by: acorn, swamyv
author dcubed
date Mon, 02 Mar 2009 14:03:03 -0700
parents dc16daa0329d
children afa80fa86d22
comparison
equal deleted inserted replaced
609:ea20d7ce26b0 610:70998f2e05ef
392 392
393 void SharedRuntime::throw_and_post_jvmti_exception(JavaThread *thread, symbolOop name, const char *message) { 393 void SharedRuntime::throw_and_post_jvmti_exception(JavaThread *thread, symbolOop name, const char *message) {
394 Handle h_exception = Exceptions::new_exception(thread, name, message); 394 Handle h_exception = Exceptions::new_exception(thread, name, message);
395 throw_and_post_jvmti_exception(thread, h_exception); 395 throw_and_post_jvmti_exception(thread, h_exception);
396 } 396 }
397
398 // The interpreter code to call this tracing function is only
399 // called/generated when TraceRedefineClasses has the right bits
400 // set. Since obsolete methods are never compiled, we don't have
401 // to modify the compilers to generate calls to this function.
402 //
403 JRT_LEAF(int, SharedRuntime::rc_trace_method_entry(
404 JavaThread* thread, methodOopDesc* method))
405 assert(RC_TRACE_IN_RANGE(0x00001000, 0x00002000), "wrong call");
406
407 if (method->is_obsolete()) {
408 // We are calling an obsolete method, but this is not necessarily
409 // an error. Our method could have been redefined just after we
410 // fetched the methodOop from the constant pool.
411
412 // RC_TRACE macro has an embedded ResourceMark
413 RC_TRACE_WITH_THREAD(0x00001000, thread,
414 ("calling obsolete method '%s'",
415 method->name_and_sig_as_C_string()));
416 if (RC_TRACE_ENABLED(0x00002000)) {
417 // this option is provided to debug calls to obsolete methods
418 guarantee(false, "faulting at call to an obsolete method.");
419 }
420 }
421 return 0;
422 JRT_END
397 423
398 // ret_pc points into caller; we are returning caller's exception handler 424 // ret_pc points into caller; we are returning caller's exception handler
399 // for given exception 425 // for given exception
400 address SharedRuntime::compute_compiled_exc_handler(nmethod* nm, address ret_pc, Handle& exception, 426 address SharedRuntime::compute_compiled_exc_handler(nmethod* nm, address ret_pc, Handle& exception,
401 bool force_unwind, bool top_frame_only) { 427 bool force_unwind, bool top_frame_only) {