@Override public void encodeSnippets() { /* Copy over all snippets from the analysis replacements, changing out metadata objects. */ super.copyFrom(aReplacements, this::replaceAnalysisObjects); }
@Override public void setConfiguration(RuntimeConfiguration runtimeConfig, OptionValues options, Iterable<DebugHandlersFactory> factories, Providers providers, SnippetReflectionProvider snippetReflection) { this.runtimeConfig = runtimeConfig; initialize(options, factories, Group.NullFactory, providers, snippetReflection); }
@Override public final Constant asObjectHub(ResolvedJavaType type) { /* * Substrate VM does not distinguish between the hub and the Class, they are both * represented by the DynamicHub. */ return asJavaClass(type); } }
@Override public Optional<AnalysisMethod> handleForeignCall(ForeignCallDescriptor foreignCallDescriptor, ForeignCallsProvider foreignCallsProvider) { SubstrateForeignCallsProvider foreignCalls = (SubstrateForeignCallsProvider) foreignCallsProvider; /* In unit tests, we run with no registered foreign calls. */ Optional<AnalysisMethod> targetMethod = Optional.empty(); if (foreignCalls.getForeignCalls().size() > 0) { SubstrateForeignCallLinkage linkage = foreignCalls.lookupForeignCall(foreignCallDescriptor); targetMethod = Optional.of((AnalysisMethod) linkage.getMethod()); } return targetMethod; }
@Override public boolean isReexecutable(ForeignCallDescriptor descriptor) { return lookupForeignCall(descriptor).getDescriptor().isReexecutable(); }
protected Providers getProviders() { return runtimeConfig.getProviders(); }
@SuppressWarnings("unused") public static void registerForeignCalls(RuntimeConfiguration runtimeConfig, Providers providers, SnippetReflectionProvider snippetReflection, Map<SubstrateForeignCallDescriptor, SubstrateForeignCallLinkage> foreignCalls, boolean hosted) { for (SubstrateForeignCallDescriptor descriptor : FOREIGN_CALLS) { foreignCalls.put(descriptor, new SubstrateForeignCallLinkage(providers, descriptor)); } }
public int getVTableOffset(int vTableIndex) { assert isFullyInitialized(); return vtableBaseOffset + vTableIndex * vtableEntrySize; }
public SubstrateInstalledCodeImpl(SharedRuntimeMethod method) { super(method.format("%H.%n#(%p)")); }
@Override public void registerSnippet(ResolvedJavaMethod method, ResolvedJavaMethod original, Object receiver, boolean trackNodeSourcePosition) { /* We must have the snippet already available in the analysis replacements. */ assert aReplacements.getSnippet(((HostedMethod) method).wrapped, null, null, trackNodeSourcePosition, null) != null; }
protected ForeignCallsProvider createForeignCallsProvider() { return new SubstrateForeignCallsProvider(); }
public void install() { this.installOperation(); }
@Platforms(Platform.HOSTED_ONLY.class) @Override protected final GraphMaker createGraphMaker(ResolvedJavaMethod substitute, ResolvedJavaMethod substitutedMethod) { return builder.graphMakerFactory.create(this, substitute, substitutedMethod); } }
@Override public LocationIdentity[] getKilledLocations(ForeignCallDescriptor descriptor) { return lookupForeignCall(descriptor).getDescriptor().getKilledLocations(); }
@Override public void registerForeignCalls(RuntimeConfiguration runtimeConfig, Providers providers, SnippetReflectionProvider snippetReflection, Map<SubstrateForeignCallDescriptor, SubstrateForeignCallLinkage> foreignCalls, boolean hosted) { for (SubstrateForeignCallDescriptor descriptor : Safepoint.FOREIGN_CALLS) { foreignCalls.put(descriptor, new SubstrateForeignCallLinkage(providers, descriptor)); } }
public int getComponentHubOffset() { assert isFullyInitialized(); return componentHubOffset; }
public SubstrateInstalledCodeImpl(String name, SharedRuntimeMethod method) { super(name != null ? name : method.format("%H.%n#(%p)")); }
@Override public void registerForeignCalls(RuntimeConfiguration runtimeConfig, Providers providers, SnippetReflectionProvider snippetReflection, Map<SubstrateForeignCallDescriptor, SubstrateForeignCallLinkage> foreignCalls, boolean hosted) { for (SubstrateForeignCallDescriptor descriptor : AMD64ArrayIndexOfForeignCalls.FOREIGN_CALLS) { foreignCalls.put(descriptor, new SubstrateForeignCallLinkage(providers, descriptor)); } } }
public int getInstanceOfBitOffset(int bitIndex) { assert isFullyInitialized(); return instanceOfBitsOffset + bitIndex / 8; }
@Override public void registerForeignCalls(RuntimeConfiguration runtimeConfig, Providers providers, SnippetReflectionProvider snippetReflection, Map<SubstrateForeignCallDescriptor, SubstrateForeignCallLinkage> foreignCalls, boolean hosted) { for (SubstrateForeignCallDescriptor descriptor : ImplicitExceptions.FOREIGN_CALLS) { foreignCalls.put(descriptor, new SubstrateForeignCallLinkage(providers, descriptor)); } } }