Hi, Could I please get reviews for this SA fix? The issue only happens intermittently and with -Xcomp. The new regression test reproduces the issue somewhat reliably. I got 10/10 fails for unpatched, but I've seen it pass as well.
When the issue happens, PCDesc's getScopeDecodeOffset() returs 0 (DebugInformationRecorder.SERIALIZED_NULL). The current SA code doesn't handle this case and goes on and tries to read ScopeDesc from the DebugInfoReadStream at the bogus offset. From then on, bad things happen. A NPE in StackTrace could be one symptom. The same code in hotspot deals with serialized null differently. It doesn't read from the debug info stream, and manually sets up a reasonable frame. Note decode_body is called from ScopeDesc's constructor where decode_offset might have been set to 0: void ScopeDesc::decode_body() { if (decode_offset() == DebugInformationRecorder::serialized_null) { // This is a sentinel record, which is only relevant to // approximate queries. Decode a reasonable frame. _sender_decode_offset = DebugInformationRecorder::serialized_null; _method = _code->method(); _bci = InvocationEntryBci; _locals_decode_offset = DebugInformationRecorder::serialized_null; _expressions_decode_offset = DebugInformationRecorder::serialized_null; _monitors_decode_offset = DebugInformationRecorder::serialized_null; } else { // decode header DebugInfoReadStream* stream = stream_at(decode_offset()); _sender_decode_offset = stream->read_int(); _method = stream->read_method(); _bci = stream->read_bci(); // decode offsets for body and sender _locals_decode_offset = stream->read_int(); _expressions_decode_offset = stream->read_int(); _monitors_decode_offset = stream->read_int(); } } The proposed patch handles serialized null scopes similar to the hotspot side of things, by returning a null scope. CompiledVFrame already deals with null scopes when in debugging mode. Bug: https://bugs.openjdk.java.net/browse/JDK-8196969 webrev: http://cr.openjdk.java.net/~sgehwolf/webrevs/JDK-8196969/03/webrev/ Testing: tier 1 tests on Linux x86_64 (release/fastdebug). jdk-submit and ran various reproducer tests including 1000 interations of the added regression test. All pass. Thoughts? Thanks, Severin