--- old/src/hotspot/share/classfile/javaClasses.cpp 2019-08-12 11:07:36.000000000 -0700 +++ new/src/hotspot/share/classfile/javaClasses.cpp 2019-08-12 11:07:36.000000000 -0700 @@ -2677,14 +2677,14 @@ Method* method = java_lang_StackFrameInfo::get_method(stackFrame, holder, CHECK); short version = stackFrame->short_field(_version_offset); - short bci = stackFrame->short_field(_bci_offset); + int bci = stackFrame->int_field(_bci_offset); Symbol* name = method->name(); java_lang_StackTraceElement::fill_in(stack_trace_element, holder, method, version, bci, name, CHECK); } #define STACKFRAMEINFO_FIELDS_DO(macro) \ macro(_memberName_offset, k, "memberName", object_signature, false); \ - macro(_bci_offset, k, "bci", short_signature, false) + macro(_bci_offset, k, "bci", int_signature, false) void java_lang_StackFrameInfo::compute_offsets() { InstanceKlass* k = SystemDictionary::StackFrameInfo_klass(); --- old/src/java.base/share/classes/java/lang/StackFrameInfo.java 2019-08-12 11:07:37.000000000 -0700 +++ new/src/java.base/share/classes/java/lang/StackFrameInfo.java 2019-08-12 11:07:37.000000000 -0700 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -26,28 +26,31 @@ import jdk.internal.access.JavaLangInvokeAccess; import jdk.internal.access.SharedSecrets; +import jdk.internal.vm.annotation.Stable; import java.lang.StackWalker.StackFrame; import java.lang.invoke.MethodType; class StackFrameInfo implements StackFrame { - private final byte RETAIN_CLASS_REF = 0x01; + private final static byte RETAIN_CLASS_REF = 0x01; private final static JavaLangInvokeAccess JLIA = SharedSecrets.getJavaLangInvokeAccess(); private final byte flags; - private final Object memberName; - private final short bci; + private final Object memberName; // MemberName initialized by VM + private @Stable int bci = -1; // BCI set by VM private volatile StackTraceElement ste; /* - * Create StackFrameInfo for StackFrameTraverser and LiveStackFrameTraverser - * to use + * Construct an empty StackFrameInfo object that will be filled by the VM + * during stack walking. + * + * @see StackStreamFactory.AbstractStackWalker#callStackWalk + * @see StackStreamFactory.AbstractStackWalker#fetchStackFrames */ StackFrameInfo(StackWalker walker) { this.flags = walker.retainClassRef ? RETAIN_CLASS_REF : 0; - this.bci = -1; this.memberName = JLIA.newMemberName(); }