Mercurial > hg > truffle
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) { |