diff --git a/src/hotspot/cpu/arm/c1_LIRAssembler_arm.cpp b/src/hotspot/cpu/arm/c1_LIRAssembler_arm.cpp index 7ac235986fb..1369a9a0e60 100644 --- a/src/hotspot/cpu/arm/c1_LIRAssembler_arm.cpp +++ b/src/hotspot/cpu/arm/c1_LIRAssembler_arm.cpp @@ -1478,6 +1478,9 @@ void LIR_Assembler::cmove(LIR_Condition condition, LIR_Opr opr1, LIR_Opr opr2, L __ mov_double(result->as_double_reg(), c->as_jdouble(), acond); #endif // __SOFTFP__ break; + case T_METADATA: + __ mov_metadata(result->as_register(), c->as_metadata(), acond); + break; default: ShouldNotReachHere(); } diff --git a/src/hotspot/share/c1/c1_LIR.hpp b/src/hotspot/share/c1/c1_LIR.hpp index a9dfc6a0264..c50ca261da3 100644 --- a/src/hotspot/share/c1/c1_LIR.hpp +++ b/src/hotspot/share/c1/c1_LIR.hpp @@ -2439,7 +2439,7 @@ class LIR_OpVisitState: public StackObj { typedef enum { inputMode, firstMode = inputMode, tempMode, outputMode, numModes, invalidMode = -1 } OprMode; enum { - maxNumberOfOperands = 20, + maxNumberOfOperands = 21, maxNumberOfInfos = 4 }; diff --git a/src/hotspot/share/prims/jvmtiImpl.cpp b/src/hotspot/share/prims/jvmtiImpl.cpp index 2797bb2748f..d315df986dd 100644 --- a/src/hotspot/share/prims/jvmtiImpl.cpp +++ b/src/hotspot/share/prims/jvmtiImpl.cpp @@ -611,7 +611,7 @@ void VM_BaseGetOrSetLocal::doit() { frame fr = _jvf->fr(); if (_set && _depth != 0 && Continuation::is_frame_in_continuation(_jvf->thread(), fr)) { - _result = JVMTI_ERROR_OPAQUE_FRAME; // deferred locals currently unsupported in continuations + _result = JVMTI_ERROR_OPAQUE_FRAME; // deferred locals are not fully supported in continuations return; } @@ -644,6 +644,17 @@ void VM_BaseGetOrSetLocal::doit() { return; } if (_set) { + if (fr.is_heap_frame()) { // we want this check after the check for JVMTI_ERROR_INVALID_SLOT + assert(Continuation::is_frame_in_continuation(_jvf->thread(), fr), "sanity check"); + // If the topmost frame is a heap frame, then it hasn't been thawed. This can happen + // if we are executing at a return barrier safepoint. The callee frame has been popped, + // but the caller frame has not been thawed. We can't support a JVMTI SetLocal in the callee + // frame at this point, because we aren't truly in the callee yet. + // fr.is_heap_frame() is impossible if a continuation is at a single step or breakpoint. + _result = JVMTI_ERROR_OPAQUE_FRAME; // deferred locals are not fully supported in continuations + return; + } + // Force deoptimization of frame if compiled because it's // possible the compiler emitted some locals as constant values, // meaning they are not mutable. diff --git a/src/java.base/share/classes/jdk/internal/jimage/ImageReader.java b/src/java.base/share/classes/jdk/internal/jimage/ImageReader.java index 367ad1c5cfb..f12c39f3e81 100644 --- a/src/java.base/share/classes/jdk/internal/jimage/ImageReader.java +++ b/src/java.base/share/classes/jdk/internal/jimage/ImageReader.java @@ -458,7 +458,11 @@ public final class ImageReader implements AutoCloseable { makeDirectories(path); } else { // a resource makeDirectories(childloc.buildName(true, true, false)); - newResource(dir, childloc); + // if we have already created a resource for this name previously, then don't + // recreate it + if (!nodes.containsKey(childloc.getFullName(true))) { + newResource(dir, childloc); + } } }); dir.setCompleted(true); @@ -753,6 +757,7 @@ public final class ImageReader implements AutoCloseable { } void addChild(Node node) { + assert !children.contains(node) : "Child " + node + " already added"; children.add(node); } diff --git a/src/java.desktop/share/classes/java/awt/doc-files/AWTThreadIssues.html b/src/java.desktop/share/classes/java/awt/doc-files/AWTThreadIssues.html index f5f7d314e87..70f394d460c 100644 --- a/src/java.desktop/share/classes/java/awt/doc-files/AWTThreadIssues.html +++ b/src/java.desktop/share/classes/java/awt/doc-files/AWTThreadIssues.html @@ -5,7 +5,7 @@