[10] RFR: [AOT] assert(false) failed: DEBUG MESSAGE: InterpreterMacroAssembler::call_VM_base: last_sp != NULL
Vladimir Kozlov
vladimir.kozlov at oracle.com
Mon Sep 11 18:33:08 UTC 2017
Jamsheed,
You said you have a small test case. Can you add it as new jtreg test?
Can it be reproduced with CompileCommand=dontinline,Object.<init> ?
I don't see RBT testing results.
Here is Dean's evaluation:
"This crash happens because of the code in
TemplateInterpreter::deopt_reexecute_entry() that uses
_normal_table.entry() instead of
AbstractInterpreter::deopt_reexecute_entry() if we are at a return
bytecode. Normally C1 and C2 inline and use an intrinsic for
Object.<init>, so there is little chance to deoptimize on a return
bytecode. But with AOT-compiled Object.<init> it's possible, and we
assert because we skipped the deopt entry that is supposed to clear
last_sp. "
Thanks,
Vladimir
On 9/11/17 11:13 AM, jamsheed wrote:
> Hi,
>
> request for review the fix made for the bug
>
> JBS: https://bugs.openjdk.java.net/browse/JDK-8168712
>
> webrev: http://cr.openjdk.java.net/~jcm/8168712/webrev.00/
>
> brief desc: special handling of Object.<init> in
> TemplateInterpreter::deopt_reexecute_entry
>
> required last_sp to be reset explicitly in normal return path
>
> address TemplateInterpreter::deopt_reexecute_entry(Method* method,
> address bcp) {
> assert(method->contains(bcp), "just checkin'");
> Bytecodes::Code code = Bytecodes::java_code_at(method, bcp);
> if (code == Bytecodes::_return) {
> // This is used for deopt during registration of finalizers
> // during Object.<init>. We simply need to resume execution at
> // the standard return vtos bytecode to pop the frame normally.
> // reexecuting the real bytecode would cause double registration
> // of the finalizable object.
> return _normal_table.entry(Bytecodes::_return).entry(vtos);
>
> test: jprt
>
> Best Regards,
>
> Jamsheed
>
>
More information about the hotspot-compiler-dev
mailing list