-
Bug
-
Resolution: Fixed
-
P2
-
11, 13, 14
-
b32
-
s390x
Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-8228738 | 14 | Richard Reingruber | P2 | Resolved | Fixed | b08 |
JDK-8228812 | 13.0.2 | Richard Reingruber | P2 | Resolved | Fixed | b01 |
JDK-8229086 | 13.0.1 | Richard Reingruber | P2 | Resolved | Fixed | b05 |
JDK-8229026 | 11.0.5 | Richard Reingruber | P2 | Resolved | Fixed | b02 |
The test vmTestbase/nsk/jvmti/RedefineClasses/StressRedefine non-deterministically crashes the vm on s390.
Analysis:
- c1/c2 generates static call stub without metadata relocation for the instruction L that loads the target Method* T
into Z_method.
(see LIR_Assembler::emit_static_call_stub(), CompiledStaticCall::emit_to_interp_stub(), MacroAssembler::load_const_from_toc())
- During call resolution the initialization of T in the metadata pool fails silently because no
metadata relocation for L is found.
Note that the load does not load from the metadata pool, but from the toc, which is accurately updated.
(see CompiledDirectStaticCall::set_to_interpreted(), NativeMovConstReg::set_data(), relocInfo::update_oop_pool())
- T is not marked 'on-stack' during class redefinition, because it is not found in the metadata pool of the caller
(see MetadataOnStackMark, nmethod::metadata_do())
- Metadata of T (e.g. constant pool) is reclaimed, because T was redefined.
- static stub referencing T is executed and VM crashes
Analysis:
- c1/c2 generates static call stub without metadata relocation for the instruction L that loads the target Method* T
into Z_method.
(see LIR_Assembler::emit_static_call_stub(), CompiledStaticCall::emit_to_interp_stub(), MacroAssembler::load_const_from_toc())
- During call resolution the initialization of T in the metadata pool fails silently because no
metadata relocation for L is found.
Note that the load does not load from the metadata pool, but from the toc, which is accurately updated.
(see CompiledDirectStaticCall::set_to_interpreted(), NativeMovConstReg::set_data(), relocInfo::update_oop_pool())
- T is not marked 'on-stack' during class redefinition, because it is not found in the metadata pool of the caller
(see MetadataOnStackMark, nmethod::metadata_do())
- Metadata of T (e.g. constant pool) is reclaimed, because T was redefined.
- static stub referencing T is executed and VM crashes
- backported by
-
JDK-8228738 s390: c1/c2 fail to add a metadata relocation in the static call stub.
- Resolved
-
JDK-8228812 s390: c1/c2 fail to add a metadata relocation in the static call stub.
- Resolved
-
JDK-8229026 s390: c1/c2 fail to add a metadata relocation in the static call stub.
- Resolved
-
JDK-8229086 s390: c1/c2 fail to add a metadata relocation in the static call stub.
- Resolved