Compare commits

...

2 Commits

Author SHA1 Message Date
Andrei Pangin
86adc1605a Updated CHANGELOG 2026-04-15 16:24:06 +01:00
Andrei Pangin
804df3ac8e #1203: Fix "Instance field not found" when using -Xcheck:jni on JDK 8 2026-04-15 16:22:31 +01:00
3 changed files with 15 additions and 3 deletions

View File

@@ -27,15 +27,18 @@
### Bug fixes
- #1727: Allocation profile has wrong units in OTLP format
- #1716: Wall-clock Heatmap does not count samples correctly
- #1715: Fix Zing crash when profiling cpu+wall together
- #1708: Another fix for correct vDSO unwinding on ARM64
- #1707: Workaround for JFR shutdown race
- #1699: Allow negative keys in JFR constant pool
- #1697: Ensure remaining buffer is sufficient for event data in JfrReader
- #1657: Re-enable workaround for a long attach on JDK 8
- #1654: Prefer perf-events engine when record-cpu or target-cpu are selected
- #1585: Scale perf counters in case of multiplexing
- #1528: Add a hard-coded limit on the maximum number of jmethodIDs
- #1203: Fix "Instance field not found" when using `-Xcheck:jni` on JDK 8
- Do not walk past virtual thread continuation barriers
## [4.3] - 2026-01-20

View File

@@ -442,7 +442,9 @@ void VMStructs::resolveOffsets() {
return;
}
if (_klass_offset_addr != NULL) {
JVMFlag* cjc = JVMFlag::find("CheckJNICalls");
if (cjc != NULL && !cjc->get() && _klass_offset_addr != NULL) {
// Create a synthetic fieldID to access VMKlass from jclass instance
_klass = (jfieldID)(uintptr_t)(*_klass_offset_addr << 2 | 2);
}
@@ -461,8 +463,7 @@ void VMStructs::resolveOffsets() {
&& (_compact_object_headers ? (_markword_klass_shift >= 0 && _markword_monitor_value == MONITOR_BIT)
: _oop_klass_offset >= 0)
&& (_symbol_length_offset >= 0 || _symbol_length_and_refcount_offset >= 0)
&& _symbol_body_offset >= 0
&& _klass != NULL;
&& _symbol_body_offset >= 0;
_has_method_structs = _jmethod_ids_offset >= 0
&& _nmethod_method_offset >= 0

View File

@@ -5,9 +5,11 @@
package test.vmstructs;
import one.profiler.test.Assert;
import one.profiler.test.Output;
import one.profiler.test.Test;
import one.profiler.test.TestProcess;
import test.alloc.Hello;
import test.smoke.Alloc;
public class VmstructsTests {
@@ -25,4 +27,10 @@ public class VmstructsTests {
Output out = p.profile("stop -o collapsed");
assert out.contains("Alloc.allocate");
}
@Test(mainClass = Hello.class, jvmArgs = "-Xcheck:jni", agentArgs = "start,event=alloc", output = true)
public void checkJni(TestProcess p) throws Exception {
p.waitForExit();
Assert.isEqual(p.exitCode(), 0);
}
}