--- a/hotspot/src/share/vm/runtime/sharedRuntime.cpp Mon Mar 09 13:34:00 2009 -0700
+++ b/hotspot/src/share/vm/runtime/sharedRuntime.cpp Thu Mar 12 18:16:36 2009 -0700
@@ -377,6 +377,32 @@
throw_and_post_jvmti_exception(thread, h_exception);
}
+// The interpreter code to call this tracing function is only
+// called/generated when TraceRedefineClasses has the right bits
+// set. Since obsolete methods are never compiled, we don't have
+// to modify the compilers to generate calls to this function.
+//
+JRT_LEAF(int, SharedRuntime::rc_trace_method_entry(
+ JavaThread* thread, methodOopDesc* method))
+ assert(RC_TRACE_IN_RANGE(0x00001000, 0x00002000), "wrong call");
+
+ if (method->is_obsolete()) {
+ // We are calling an obsolete method, but this is not necessarily
+ // an error. Our method could have been redefined just after we
+ // fetched the methodOop from the constant pool.
+
+ // RC_TRACE macro has an embedded ResourceMark
+ RC_TRACE_WITH_THREAD(0x00001000, thread,
+ ("calling obsolete method '%s'",
+ method->name_and_sig_as_C_string()));
+ if (RC_TRACE_ENABLED(0x00002000)) {
+ // this option is provided to debug calls to obsolete methods
+ guarantee(false, "faulting at call to an obsolete method.");
+ }
+ }
+ return 0;
+JRT_END
+
// ret_pc points into caller; we are returning caller's exception handler
// for given exception
address SharedRuntime::compute_compiled_exc_handler(nmethod* nm, address ret_pc, Handle& exception,