mirror of
https://github.com/openjdk/jdk.git
synced 2026-02-28 11:10:26 +00:00
8148741: compiler/jvmci/code/SimpleDebugInfoTest.java fails in 'frame::sender_for_compiled_frame'
Reviewed-by: twisti
This commit is contained in:
parent
663e1a5c6d
commit
7cf2c51fa7
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2015, 2016, 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
|
||||
@ -22,7 +22,9 @@
|
||||
*/
|
||||
package jdk.vm.ci.hotspot;
|
||||
|
||||
public class HotSpotForeignCallTarget {
|
||||
import jdk.vm.ci.meta.InvokeTarget;
|
||||
|
||||
public class HotSpotForeignCallTarget implements InvokeTarget {
|
||||
|
||||
/**
|
||||
* The entry point address of this call's target.
|
||||
|
||||
@ -92,6 +92,7 @@ public class CodeInstallationTest {
|
||||
|
||||
asm.emitPrologue();
|
||||
compiler.compile(asm);
|
||||
asm.emitEpilogue();
|
||||
|
||||
HotSpotCompiledCode code = asm.finish(resolvedMethod);
|
||||
InstalledCode installed = codeCache.addCode(resolvedMethod, code, null, null);
|
||||
|
||||
@ -32,11 +32,13 @@ import jdk.vm.ci.code.CodeCacheProvider;
|
||||
import jdk.vm.ci.code.DebugInfo;
|
||||
import jdk.vm.ci.code.Register;
|
||||
import jdk.vm.ci.code.StackSlot;
|
||||
import jdk.vm.ci.code.site.Call;
|
||||
import jdk.vm.ci.code.site.ConstantReference;
|
||||
import jdk.vm.ci.code.site.DataPatch;
|
||||
import jdk.vm.ci.code.site.DataSectionReference;
|
||||
import jdk.vm.ci.code.site.Infopoint;
|
||||
import jdk.vm.ci.code.site.InfopointReason;
|
||||
import jdk.vm.ci.code.site.Mark;
|
||||
import jdk.vm.ci.code.site.Reference;
|
||||
import jdk.vm.ci.code.site.Site;
|
||||
import jdk.vm.ci.hotspot.HotSpotCompiledCode;
|
||||
@ -45,6 +47,7 @@ import jdk.vm.ci.hotspot.HotSpotCompiledNmethod;
|
||||
import jdk.vm.ci.hotspot.HotSpotConstant;
|
||||
import jdk.vm.ci.hotspot.HotSpotResolvedJavaMethod;
|
||||
import jdk.vm.ci.meta.Assumptions.Assumption;
|
||||
import jdk.vm.ci.meta.InvokeTarget;
|
||||
import jdk.vm.ci.meta.LIRKind;
|
||||
import jdk.vm.ci.meta.PlatformKind;
|
||||
import jdk.vm.ci.meta.ResolvedJavaMethod;
|
||||
@ -60,6 +63,11 @@ public abstract class TestAssembler {
|
||||
*/
|
||||
public abstract void emitPrologue();
|
||||
|
||||
/**
|
||||
* Emit the method epilogue code (e.g. the deopt handler).
|
||||
*/
|
||||
public abstract void emitEpilogue();
|
||||
|
||||
/**
|
||||
* Emit code to grow the stack frame.
|
||||
*
|
||||
@ -222,6 +230,14 @@ public abstract class TestAssembler {
|
||||
this.deoptRescue = deoptRescue;
|
||||
}
|
||||
|
||||
protected void recordCall(InvokeTarget target, int size, boolean direct, DebugInfo debugInfo) {
|
||||
sites.add(new Call(target, code.position(), size, direct, debugInfo));
|
||||
}
|
||||
|
||||
protected void recordMark(Object id) {
|
||||
sites.add(new Mark(code.position(), id));
|
||||
}
|
||||
|
||||
protected void recordImplicitException(DebugInfo info) {
|
||||
sites.add(new Infopoint(code.position(), info, InfopointReason.IMPLICIT_EXCEPTION));
|
||||
}
|
||||
|
||||
@ -33,6 +33,8 @@ import jdk.vm.ci.code.site.ConstantReference;
|
||||
import jdk.vm.ci.code.site.DataSectionReference;
|
||||
import jdk.vm.ci.hotspot.HotSpotCallingConventionType;
|
||||
import jdk.vm.ci.hotspot.HotSpotConstant;
|
||||
import jdk.vm.ci.hotspot.HotSpotForeignCallTarget;
|
||||
import jdk.vm.ci.hotspot.HotSpotVMConfig;
|
||||
import jdk.vm.ci.meta.JavaKind;
|
||||
import jdk.vm.ci.meta.LIRKind;
|
||||
import jdk.vm.ci.meta.VMConstant;
|
||||
@ -66,6 +68,15 @@ public class AMD64TestAssembler extends TestAssembler {
|
||||
setDeoptRescueSlot(newStackSlot(LIRKind.value(AMD64Kind.QWORD)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void emitEpilogue() {
|
||||
HotSpotVMConfig config = HotSpotVMConfig.config();
|
||||
recordMark(config.MARKID_DEOPT_HANDLER_ENTRY);
|
||||
recordCall(new HotSpotForeignCallTarget(config.handleDeoptStub), 5, true, null);
|
||||
code.emitByte(0xE8); // CALL rel32
|
||||
code.emitInt(0xDEADDEAD);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void emitGrowStack(int size) {
|
||||
// SUB rsp, size
|
||||
|
||||
@ -32,7 +32,9 @@ import jdk.vm.ci.code.site.DataSectionReference;
|
||||
import jdk.vm.ci.hotspot.HotSpotCallingConventionType;
|
||||
import jdk.vm.ci.hotspot.HotSpotCompiledCode;
|
||||
import jdk.vm.ci.hotspot.HotSpotConstant;
|
||||
import jdk.vm.ci.hotspot.HotSpotForeignCallTarget;
|
||||
import jdk.vm.ci.hotspot.HotSpotResolvedJavaMethod;
|
||||
import jdk.vm.ci.hotspot.HotSpotVMConfig;
|
||||
import jdk.vm.ci.meta.JavaKind;
|
||||
import jdk.vm.ci.meta.LIRKind;
|
||||
import jdk.vm.ci.meta.VMConstant;
|
||||
@ -71,6 +73,14 @@ public class SPARCTestAssembler extends TestAssembler {
|
||||
setDeoptRescueSlot(newStackSlot(LIRKind.value(SPARCKind.XWORD)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void emitEpilogue() {
|
||||
HotSpotVMConfig config = HotSpotVMConfig.config();
|
||||
recordMark(config.MARKID_DEOPT_HANDLER_ENTRY);
|
||||
recordCall(new HotSpotForeignCallTarget(config.handleDeoptStub), 4, true, null);
|
||||
code.emitInt(1 << 30); // CALL
|
||||
}
|
||||
|
||||
@Override
|
||||
public HotSpotCompiledCode finish(HotSpotResolvedJavaMethod method) {
|
||||
frameSize += SPARC.REGISTER_SAFE_AREA_SIZE;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user