From 0b50e479a060cf745a3e858d535516444fe80fd8 Mon Sep 17 00:00:00 2001 From: Vladimir Kozlov Date: Thu, 13 Feb 2025 16:09:04 +0000 Subject: [PATCH] 8349753: Incorrect use of CodeBlob::is_buffer_blob() in few places Reviewed-by: dlong, shade --- src/hotspot/share/code/codeBlob.cpp | 2 +- src/hotspot/share/code/codeCache.cpp | 40 +++++++++++++++++++ .../share/prims/jvmtiCodeBlobEvents.cpp | 2 +- .../codecache/CheckCodeCacheInfo.java | 5 +++ 4 files changed, 47 insertions(+), 2 deletions(-) diff --git a/src/hotspot/share/code/codeBlob.cpp b/src/hotspot/share/code/codeBlob.cpp index 1a041b4679907..c033bff6ff7c8 100644 --- a/src/hotspot/share/code/codeBlob.cpp +++ b/src/hotspot/share/code/codeBlob.cpp @@ -656,7 +656,7 @@ void CodeBlob::print_value_on(outputStream* st) const { } void CodeBlob::dump_for_addr(address addr, outputStream* st, bool verbose) const { - if (is_buffer_blob()) { + if (is_buffer_blob() || is_adapter_blob() || is_vtable_blob() || is_method_handles_adapter_blob()) { // the interpreter is generated into a buffer blob InterpreterCodelet* i = Interpreter::codelet_containing(addr); if (i != nullptr) { diff --git a/src/hotspot/share/code/codeCache.cpp b/src/hotspot/share/code/codeCache.cpp index 40a9819a40e37..3b237e9643e6a 100644 --- a/src/hotspot/share/code/codeCache.cpp +++ b/src/hotspot/share/code/codeCache.cpp @@ -1516,9 +1516,14 @@ void CodeCache::print_trace(const char* event, CodeBlob* cb, uint size) { void CodeCache::print_internals() { int nmethodCount = 0; int runtimeStubCount = 0; + int upcallStubCount = 0; int adapterCount = 0; + int mhAdapterCount = 0; + int vtableBlobCount = 0; int deoptimizationStubCount = 0; int uncommonTrapStubCount = 0; + int exceptionStubCount = 0; + int safepointStubCount = 0; int bufferBlobCount = 0; int total = 0; int nmethodNotEntrant = 0; @@ -1555,12 +1560,22 @@ void CodeCache::print_internals() { } } else if (cb->is_runtime_stub()) { runtimeStubCount++; + } else if (cb->is_upcall_stub()) { + upcallStubCount++; } else if (cb->is_deoptimization_stub()) { deoptimizationStubCount++; } else if (cb->is_uncommon_trap_stub()) { uncommonTrapStubCount++; + } else if (cb->is_exception_stub()) { + exceptionStubCount++; + } else if (cb->is_safepoint_stub()) { + safepointStubCount++; } else if (cb->is_adapter_blob()) { adapterCount++; + } else if (cb->is_method_handles_adapter_blob()) { + mhAdapterCount++; + } else if (cb->is_vtable_blob()) { + vtableBlobCount++; } else if (cb->is_buffer_blob()) { bufferBlobCount++; } @@ -1587,10 +1602,15 @@ void CodeCache::print_internals() { tty->print_cr("\tjava: %d",nmethodJava); tty->print_cr("\tnative: %d",nmethodNative); tty->print_cr("runtime_stubs: %d",runtimeStubCount); + tty->print_cr("upcall_stubs: %d",upcallStubCount); tty->print_cr("adapters: %d",adapterCount); + tty->print_cr("MH adapters: %d",mhAdapterCount); + tty->print_cr("VTables: %d",vtableBlobCount); tty->print_cr("buffer blobs: %d",bufferBlobCount); tty->print_cr("deoptimization_stubs: %d",deoptimizationStubCount); tty->print_cr("uncommon_traps: %d",uncommonTrapStubCount); + tty->print_cr("exception_stubs: %d",exceptionStubCount); + tty->print_cr("safepoint_stubs: %d",safepointStubCount); tty->print_cr("\nnmethod size distribution"); tty->print_cr("-------------------------------------------------"); @@ -1616,9 +1636,14 @@ void CodeCache::print() { CodeBlob_sizes live[CompLevel_full_optimization + 1]; CodeBlob_sizes runtimeStub; + CodeBlob_sizes upcallStub; CodeBlob_sizes uncommonTrapStub; CodeBlob_sizes deoptimizationStub; + CodeBlob_sizes exceptionStub; + CodeBlob_sizes safepointStub; CodeBlob_sizes adapter; + CodeBlob_sizes mhAdapter; + CodeBlob_sizes vtableBlob; CodeBlob_sizes bufferBlob; CodeBlob_sizes other; @@ -1630,12 +1655,22 @@ void CodeCache::print() { live[level].add(cb); } else if (cb->is_runtime_stub()) { runtimeStub.add(cb); + } else if (cb->is_upcall_stub()) { + upcallStub.add(cb); } else if (cb->is_deoptimization_stub()) { deoptimizationStub.add(cb); } else if (cb->is_uncommon_trap_stub()) { uncommonTrapStub.add(cb); + } else if (cb->is_exception_stub()) { + exceptionStub.add(cb); + } else if (cb->is_safepoint_stub()) { + safepointStub.add(cb); } else if (cb->is_adapter_blob()) { adapter.add(cb); + } else if (cb->is_method_handles_adapter_blob()) { + mhAdapter.add(cb); + } else if (cb->is_vtable_blob()) { + vtableBlob.add(cb); } else if (cb->is_buffer_blob()) { bufferBlob.add(cb); } else { @@ -1666,9 +1701,14 @@ void CodeCache::print() { const CodeBlob_sizes* sizes; } non_nmethod_blobs[] = { { "runtime", &runtimeStub }, + { "upcall", &upcallStub }, { "uncommon trap", &uncommonTrapStub }, { "deoptimization", &deoptimizationStub }, + { "exception", &exceptionStub }, + { "safepoint", &safepointStub }, { "adapter", &adapter }, + { "mh_adapter", &mhAdapter }, + { "vtable", &vtableBlob }, { "buffer blob", &bufferBlob }, { "other", &other }, }; diff --git a/src/hotspot/share/prims/jvmtiCodeBlobEvents.cpp b/src/hotspot/share/prims/jvmtiCodeBlobEvents.cpp index 56a5bc2994e47..c57a9e7b2da27 100644 --- a/src/hotspot/share/prims/jvmtiCodeBlobEvents.cpp +++ b/src/hotspot/share/prims/jvmtiCodeBlobEvents.cpp @@ -124,7 +124,7 @@ void CodeBlobCollector::do_blob(CodeBlob* cb) { return; } // exclude VtableStubs, which are processed separately - if (cb->is_buffer_blob() && strcmp(cb->name(), "vtable chunks") == 0) { + if (cb->is_vtable_blob()) { return; } diff --git a/test/hotspot/jtreg/compiler/codecache/CheckCodeCacheInfo.java b/test/hotspot/jtreg/compiler/codecache/CheckCodeCacheInfo.java index f6a2536515e8f..e6ae28651cd9a 100644 --- a/test/hotspot/jtreg/compiler/codecache/CheckCodeCacheInfo.java +++ b/test/hotspot/jtreg/compiler/codecache/CheckCodeCacheInfo.java @@ -56,9 +56,14 @@ public class CheckCodeCacheInfo { + pair + "Non-nmethod blobs:\\n" + " #\\d+ runtime = " + entry + + " #\\d+ upcall = " + entry + " #\\d+ uncommon trap = " + entry + " #\\d+ deoptimization = " + entry + + " #\\d+ exception = " + entry + + " #\\d+ safepoint = " + entry + " #\\d+ adapter = " + entry + + " #\\d+ mh_adapter = " + entry + + " #\\d+ vtable = " + entry + " #\\d+ buffer blob = " + entry + " #\\d+ other = " + entry; }