提交 6758481d 编写于 作者: A anoll

8040085: dtrace/jsdt tests crash on solaris. found an unadvertised bad...

8040085: dtrace/jsdt tests crash on solaris. found an unadvertised bad scavengable oop in the code cache
Summary: Add CodeCache::add_scavenge_root_nmethod(this) to the dtrace-constructor of nmethod
Reviewed-by: roland, iveresov
上级 fb43258c
...@@ -771,7 +771,11 @@ nmethod::nmethod( ...@@ -771,7 +771,11 @@ nmethod::nmethod(
_hotness_counter = NMethodSweeper::hotness_counter_reset_val(); _hotness_counter = NMethodSweeper::hotness_counter_reset_val();
code_buffer->copy_values_to(this); code_buffer->copy_values_to(this);
debug_only(verify_scavenge_root_oops()); if (ScavengeRootsInCode && detect_scavenge_root_oops()) {
CodeCache::add_scavenge_root_nmethod(this);
Universe::heap()->register_nmethod(this);
}
DEBUG_ONLY(verify_scavenge_root_oops();)
CodeCache::commit(this); CodeCache::commit(this);
} }
......
...@@ -2690,19 +2690,20 @@ JRT_ENTRY_NO_ASYNC(void, SharedRuntime::block_for_jni_critical(JavaThread* threa ...@@ -2690,19 +2690,20 @@ JRT_ENTRY_NO_ASYNC(void, SharedRuntime::block_for_jni_critical(JavaThread* threa
JRT_END JRT_END
#ifdef HAVE_DTRACE_H #ifdef HAVE_DTRACE_H
// Create a dtrace nmethod for this method. The wrapper converts the /**
// java compiled calling convention to the native convention, makes a dummy call * Create a dtrace nmethod for this method. The wrapper converts the
// (actually nops for the size of the call instruction, which become a trap if * Java-compiled calling convention to the native convention, makes a dummy call
// probe is enabled). The returns to the caller. Since this all looks like a * (actually nops for the size of the call instruction, which become a trap if
// leaf no thread transition is needed. * probe is enabled), and finally returns to the caller. Since this all looks like a
* leaf, no thread transition is needed.
*/
nmethod *AdapterHandlerLibrary::create_dtrace_nmethod(methodHandle method) { nmethod *AdapterHandlerLibrary::create_dtrace_nmethod(methodHandle method) {
ResourceMark rm; ResourceMark rm;
nmethod* nm = NULL; nmethod* nm = NULL;
if (PrintCompilation) { if (PrintCompilation) {
ttyLocker ttyl; ttyLocker ttyl;
tty->print("--- n%s "); tty->print("--- n ");
method->print_short_name(tty); method->print_short_name(tty);
if (method->is_static()) { if (method->is_static()) {
tty->print(" (static)"); tty->print(" (static)");
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册