< prev index next >
src/jdk.aot/share/classes/jdk.tools.jaotc/src/jdk/tools/jaotc/DataPatchProcessor.java
Print this page
rev 47466 : 8132547: [AOT] support invokedynamic instructions
Reviewed-by: iveresov, kvn
*** 30,47 ****
--- 30,49 ----
import jdk.tools.jaotc.binformat.Relocation;
import jdk.tools.jaotc.binformat.Relocation.RelocType;
import jdk.tools.jaotc.binformat.Symbol;
import jdk.tools.jaotc.binformat.Symbol.Binding;
import jdk.tools.jaotc.binformat.Symbol.Kind;
+ import jdk.tools.jaotc.AOTCompiledClass;
import org.graalvm.compiler.code.DataSection;
import org.graalvm.compiler.hotspot.meta.HotSpotConstantLoadAction;
import jdk.vm.ci.code.TargetDescription;
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.Reference;
+ import jdk.vm.ci.hotspot.HotSpotConstantPoolObject;
import jdk.vm.ci.hotspot.HotSpotMetaspaceConstant;
import jdk.vm.ci.hotspot.HotSpotObjectConstant;
import jdk.vm.ci.hotspot.HotSpotResolvedObjectType;
import jdk.vm.ci.hotspot.HotSpotSentinelConstant;
import jdk.vm.ci.meta.VMConstant;
*** 82,103 ****
String gotName = null;
if (constant instanceof HotSpotMetaspaceConstant) {
HotSpotMetaspaceConstant metaspaceConstant = (HotSpotMetaspaceConstant) constant;
if (metaspaceConstant.asResolvedJavaType() != null) {
HotSpotResolvedObjectType type = metaspaceConstant.asResolvedJavaType();
- targetSymbol = type.getName();
- gotName = ((action == HotSpotConstantLoadAction.INITIALIZE) ? "got.init." : "got.") + targetSymbol;
methodInfo.addDependentKlassData(binaryContainer, type);
} else if (metaspaceConstant.asResolvedJavaMethod() != null && action == HotSpotConstantLoadAction.LOAD_COUNTERS) {
targetSymbol = "counters." + JavaMethodInfo.uniqueMethodName(metaspaceConstant.asResolvedJavaMethod());
gotName = "got." + targetSymbol;
binaryContainer.addCountersSymbol(targetSymbol);
}
} else if (constant instanceof HotSpotObjectConstant) {
- // String constant.
HotSpotObjectConstant oopConstant = (HotSpotObjectConstant) constant;
targetSymbol = "ldc." + oopConstant.toValueString();
Integer offset = binaryContainer.addOopSymbol(targetSymbol);
gotName = "got.ldc." + offset;
} else if (constant instanceof HotSpotSentinelConstant) {
targetSymbol = "state.M" + methodInfo.getCodeId();
gotName = "got." + targetSymbol;
--- 84,111 ----
String gotName = null;
if (constant instanceof HotSpotMetaspaceConstant) {
HotSpotMetaspaceConstant metaspaceConstant = (HotSpotMetaspaceConstant) constant;
if (metaspaceConstant.asResolvedJavaType() != null) {
HotSpotResolvedObjectType type = metaspaceConstant.asResolvedJavaType();
methodInfo.addDependentKlassData(binaryContainer, type);
+ targetSymbol = AOTCompiledClass.metadataName(type);
+ gotName = ((action == HotSpotConstantLoadAction.INITIALIZE) ? "got.init." : "got.") + targetSymbol;
} else if (metaspaceConstant.asResolvedJavaMethod() != null && action == HotSpotConstantLoadAction.LOAD_COUNTERS) {
targetSymbol = "counters." + JavaMethodInfo.uniqueMethodName(metaspaceConstant.asResolvedJavaMethod());
gotName = "got." + targetSymbol;
binaryContainer.addCountersSymbol(targetSymbol);
}
} else if (constant instanceof HotSpotObjectConstant) {
HotSpotObjectConstant oopConstant = (HotSpotObjectConstant) constant;
+ if (oopConstant instanceof HotSpotConstantPoolObject) {
+ HotSpotConstantPoolObject cpo = (HotSpotConstantPoolObject)oopConstant;
+ // Even if two locations use the same object, resolve separately
+ targetSymbol = "ldc." + cpo.getCpType().getName() + cpo.getCpi();
+ } else {
+ // String constant.
targetSymbol = "ldc." + oopConstant.toValueString();
+ }
Integer offset = binaryContainer.addOopSymbol(targetSymbol);
gotName = "got.ldc." + offset;
} else if (constant instanceof HotSpotSentinelConstant) {
targetSymbol = "state.M" + methodInfo.getCodeId();
gotName = "got." + targetSymbol;
< prev index next >