Skip to content

Commit 7863bb3

Browse files
committed
Unwrap ImageHeapInstance for debug info and reflection metadata.
1 parent 1ed2a58 commit 7863bb3

File tree

7 files changed

+35
-16
lines changed

7 files changed

+35
-16
lines changed

substratevm/src/com.oracle.svm.core.graal.aarch64/src/com/oracle/svm/core/graal/aarch64/SubstrateAArch64Backend.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -693,7 +693,7 @@ public void visitBreakpointNode(BreakpointNode node) {
693693

694694
@Override
695695
protected DebugInfoBuilder createDebugInfoBuilder(StructuredGraph graph, NodeValueMap nodeValueMap) {
696-
return new SubstrateDebugInfoBuilder(graph, gen.getProviders().getMetaAccessExtensionProvider(), nodeValueMap);
696+
return new SubstrateDebugInfoBuilder(graph, getProviders().getSnippetReflection(), gen.getProviders().getMetaAccessExtensionProvider(), nodeValueMap);
697697
}
698698

699699
private boolean getDestroysCallerSavedRegisters(ResolvedJavaMethod targetMethod) {

substratevm/src/com.oracle.svm.core.graal.amd64/src/com/oracle/svm/core/graal/amd64/SubstrateAMD64Backend.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -828,7 +828,7 @@ public void visitBreakpointNode(BreakpointNode node) {
828828

829829
@Override
830830
protected DebugInfoBuilder createDebugInfoBuilder(StructuredGraph graph, NodeValueMap nodeValueMap) {
831-
return new SubstrateDebugInfoBuilder(graph, gen.getProviders().getMetaAccessExtensionProvider(), nodeValueMap);
831+
return new SubstrateDebugInfoBuilder(graph, getProviders().getSnippetReflection(), gen.getProviders().getMetaAccessExtensionProvider(), nodeValueMap);
832832
}
833833

834834
@Override

substratevm/src/com.oracle.svm.core.graal.llvm/src/com/oracle/svm/core/graal/llvm/LLVMGenerator.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@
5656
import org.graalvm.compiler.core.common.memory.BarrierType;
5757
import org.graalvm.compiler.core.common.memory.MemoryExtendKind;
5858
import org.graalvm.compiler.core.common.memory.MemoryOrderMode;
59-
import org.graalvm.compiler.core.common.spi.CodeGenProviders;
6059
import org.graalvm.compiler.core.common.spi.ForeignCallLinkage;
6160
import org.graalvm.compiler.core.common.spi.ForeignCallsProvider;
6261
import org.graalvm.compiler.core.common.spi.LIRKindTool;
@@ -204,7 +203,7 @@ public BarrierSetLIRGeneratorTool getBarrierSet() {
204203
}
205204

206205
@Override
207-
public CodeGenProviders getProviders() {
206+
public Providers getProviders() {
208207
return providers;
209208
}
210209

substratevm/src/com.oracle.svm.core.graal.llvm/src/com/oracle/svm/core/graal/llvm/NodeLLVMBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ public class NodeLLVMBuilder implements NodeLIRBuilderTool, SubstrateNodeLIRBuil
149149
protected NodeLLVMBuilder(StructuredGraph graph, LLVMGenerator gen) {
150150
this.gen = gen;
151151
this.builder = gen.getBuilder();
152-
this.debugInfoBuilder = new SubstrateDebugInfoBuilder(graph, gen.getProviders().getMetaAccessExtensionProvider(), this);
152+
this.debugInfoBuilder = new SubstrateDebugInfoBuilder(graph, gen.getProviders().getSnippetReflection(), gen.getProviders().getMetaAccessExtensionProvider(), this);
153153
setCompilationResultMethod(gen.getCompilationResult(), graph);
154154

155155
for (HIRBlock block : graph.getLastSchedule().getCFG().getBlocks()) {

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/graal/code/SubstrateDebugInfoBuilder.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,12 @@
2424
*/
2525
package com.oracle.svm.core.graal.code;
2626

27+
import org.graalvm.compiler.api.replacements.SnippetReflectionProvider;
2728
import org.graalvm.compiler.core.common.spi.MetaAccessExtensionProvider;
2829
import org.graalvm.compiler.core.gen.DebugInfoBuilder;
2930
import org.graalvm.compiler.nodes.FrameState;
3031
import org.graalvm.compiler.nodes.StructuredGraph;
32+
import org.graalvm.compiler.nodes.ValueNode;
3133
import org.graalvm.compiler.nodes.spi.NodeValueMap;
3234

3335
import com.oracle.svm.core.meta.SharedMethod;
@@ -36,6 +38,7 @@
3638

3739
import jdk.vm.ci.code.StackLockValue;
3840
import jdk.vm.ci.code.VirtualObject;
41+
import jdk.vm.ci.meta.JavaConstant;
3942
import jdk.vm.ci.meta.JavaKind;
4043
import jdk.vm.ci.meta.JavaType;
4144
import jdk.vm.ci.meta.JavaValue;
@@ -44,17 +47,28 @@
4447
public final class SubstrateDebugInfoBuilder extends DebugInfoBuilder {
4548

4649
private final SharedMethod method;
50+
private final SnippetReflectionProvider snippetReflection;
4751

48-
public SubstrateDebugInfoBuilder(StructuredGraph graph, MetaAccessExtensionProvider metaAccessExtensionProvider, NodeValueMap nodeValueMap) {
52+
public SubstrateDebugInfoBuilder(StructuredGraph graph, SnippetReflectionProvider snippetReflection, MetaAccessExtensionProvider metaAccessExtensionProvider, NodeValueMap nodeValueMap) {
4953
super(nodeValueMap, metaAccessExtensionProvider, graph.getDebug());
5054
this.method = (SharedMethod) graph.method();
55+
this.snippetReflection = snippetReflection;
5156
}
5257

5358
@Override
5459
protected JavaKind storageKind(JavaType type) {
5560
return ((SharedType) type).getStorageKind();
5661
}
5762

63+
@Override
64+
protected JavaValue toJavaValue(ValueNode valueNode) {
65+
JavaValue value = super.toJavaValue(valueNode);
66+
if (value instanceof JavaConstant constant) {
67+
return snippetReflection.unwrapConstant(constant);
68+
}
69+
return value;
70+
}
71+
5872
@Override
5973
protected JavaValue computeLockValue(FrameState state, int lockIndex) {
6074
JavaValue object = toJavaValue(state.lockAt(lockIndex));

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/annotation/AnnotationExceptionProxyValue.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public List<Class<?>> getTypes() {
6363
@Override
6464
public List<JavaConstant> getExceptionProxies(SnippetReflectionProvider snippetReflection) {
6565
if (objectConstant == null) {
66-
objectConstant = snippetReflection.forObject(exceptionProxy);
66+
objectConstant = snippetReflection.unwrapConstant(snippetReflection.forObject(exceptionProxy));
6767
}
6868
return Collections.singletonList(objectConstant);
6969
}

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/reflect/ReflectionMetadataEncoderImpl.java

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@
7373
import org.graalvm.nativeimage.ImageSingletons;
7474
import org.graalvm.nativeimage.impl.RuntimeReflectionSupport;
7575

76+
import com.oracle.graal.pointsto.heap.ImageHeapConstant;
7677
import com.oracle.graal.pointsto.infrastructure.WrappedElement;
7778
import com.oracle.graal.pointsto.meta.AnalysisField;
7879
import com.oracle.graal.pointsto.meta.AnalysisMethod;
@@ -281,8 +282,8 @@ public void addClassMetadata(MetaAccessProvider metaAccess, HostedType type, Cla
281282
if (signers != null) {
282283
signerConstants = new JavaConstant[signers.length];
283284
for (int i = 0; i < signers.length; ++i) {
284-
signerConstants[i] = snippetReflection.forObject(signers[i]);
285-
encoders.objectConstants.addObject(signerConstants[i]);
285+
signerConstants[i] = snippetReflection.unwrapConstant(snippetReflection.forObject(signers[i]));
286+
addConstantObject(signerConstants[i]);
286287
}
287288
}
288289
AnalysisType analysisType = type.getWrapped();
@@ -292,8 +293,13 @@ public void addClassMetadata(MetaAccessProvider metaAccess, HostedType type, Cla
292293
registerClass(type, new ClassMetadata(innerTypes, enclosingMethodInfo, recordComponents, permittedSubtypes, nestMemberTypes, signerConstants, flags, annotations, typeAnnotations));
293294
}
294295

296+
private void addConstantObject(JavaConstant constant) {
297+
assert !(constant instanceof ImageHeapConstant);
298+
encoders.objectConstants.addObject(constant);
299+
}
300+
295301
private void registerError(Throwable error) {
296-
encoders.objectConstants.addObject(snippetReflection.forObject(error));
302+
addConstantObject(snippetReflection.unwrapConstant(snippetReflection.forObject(error)));
297303
}
298304

299305
private static final Method getEnclosingMethod0 = ReflectionUtil.lookupMethod(Class.class, "getEnclosingMethod0");
@@ -416,8 +422,8 @@ public void addReflectionExecutableMetadata(MetaAccessProvider metaAccess, Hoste
416422
ReflectParameterMetadata[] reflectParameters = registerReflectParameters(reflectMethod);
417423
JavaConstant accessorConstant = null;
418424
if (accessor != null) {
419-
accessorConstant = snippetReflection.forObject(accessor);
420-
encoders.objectConstants.addObject(accessorConstant);
425+
accessorConstant = snippetReflection.unwrapConstant(snippetReflection.forObject(accessor));
426+
addConstantObject(accessorConstant);
421427
}
422428

423429
if (isMethod) {
@@ -452,8 +458,8 @@ public void addHeapAccessibleObjectMetadata(MetaAccessProvider metaAccess, Wrapp
452458
AnnotationMemberValue annotationDefault = isMethod ? registerAnnotationDefaultValues((AnalysisMethod) analysisObject) : null;
453459
ReflectParameterMetadata[] reflectParameters = isExecutable ? registerReflectParameters((Executable) object) : null;
454460
AccessibleObject holder = ReflectionMetadataEncoder.getHolder(object);
455-
JavaConstant heapObjectConstant = snippetReflection.forObject(holder);
456-
encoders.objectConstants.addObject(heapObjectConstant);
461+
JavaConstant heapObjectConstant = snippetReflection.unwrapConstant(snippetReflection.forObject(holder));
462+
addConstantObject(heapObjectConstant);
457463

458464
AccessibleObjectMetadata metadata;
459465
if (isMethod) {
@@ -528,7 +534,7 @@ private void registerValues(AnnotationMemberValue annotationValue) {
528534
encoders.sourceMethodNames.addObject(string);
529535
}
530536
for (JavaConstant proxy : annotationValue.getExceptionProxies(snippetReflection)) {
531-
encoders.objectConstants.addObject(proxy);
537+
addConstantObject(snippetReflection.unwrapConstant(proxy));
532538
}
533539
}
534540

@@ -737,7 +743,7 @@ public void encodeAllAndInstall() {
737743
}
738744

739745
private int encodeErrorIndex(Throwable error) {
740-
int index = encoders.objectConstants.getIndex(snippetReflection.forObject(error));
746+
int index = encoders.objectConstants.getIndex(snippetReflection.unwrapConstant(snippetReflection.forObject(error)));
741747
int encodedIndex = FIRST_ERROR_INDEX - index;
742748
VMError.guarantee(ReflectionMetadataDecoderImpl.isErrorIndex(encodedIndex));
743749
return encodedIndex;

0 commit comments

Comments
 (0)