< 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 >