Skip to content

Commit f0f3938

Browse files
Workaround for web-image.
1 parent 41118c9 commit f0f3938

File tree

5 files changed

+35
-20
lines changed

5 files changed

+35
-20
lines changed

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/hub/DynamicHub.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@
8989
import org.graalvm.nativeimage.ImageSingletons;
9090
import org.graalvm.nativeimage.Platform;
9191
import org.graalvm.nativeimage.Platforms;
92+
import org.graalvm.nativeimage.impl.InternalPlatform.NATIVE_ONLY;
9293

9394
import com.oracle.svm.configure.ClassNameSupport;
9495
import com.oracle.svm.configure.config.SignatureUtil;
@@ -956,7 +957,12 @@ public void initializeCompressedReferenceMapOffset(long currentLayerRefMapDataSt
956957
assert compressedReferenceMapOffset == -1;
957958
assert ReferenceMapIndex.denotesValidReferenceMap(referenceMapIndex);
958959

959-
this.compressedReferenceMapOffset = InstanceReferenceMapEncoder.computeCompressedReferenceMapOffset(currentLayerRefMapDataStart, referenceMapIndex);
960+
if (Platform.includedIn(NATIVE_ONLY.class)) {
961+
this.compressedReferenceMapOffset = InstanceReferenceMapEncoder.computeCompressedReferenceMapOffset(currentLayerRefMapDataStart, referenceMapIndex);
962+
} else {
963+
/* Remove once a heap base is supported, see GR-68847. */
964+
this.compressedReferenceMapOffset = referenceMapIndex;
965+
}
960966
}
961967

962968
/**

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/hub/DynamicHubSupport.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030

3131
import org.graalvm.nativeimage.Platform;
3232
import org.graalvm.nativeimage.Platforms;
33+
import org.graalvm.nativeimage.impl.InternalPlatform.NATIVE_ONLY;
3334

3435
import com.oracle.svm.core.AlwaysInline;
3536
import com.oracle.svm.core.BuildPhaseProvider.AfterHostedUniverse;
@@ -58,7 +59,13 @@ public static DynamicHubSupport currentLayer() {
5859
@AlwaysInline("GC performance")
5960
@Uninterruptible(reason = CALLED_FROM_UNINTERRUPTIBLE_CODE, mayBeInlined = true)
6061
public static InstanceReferenceMap getInstanceReferenceMap(DynamicHub hub) {
61-
return InstanceReferenceMapDecoder.getReferenceMap(hub.getCompressedReferenceMapOffset());
62+
if (Platform.includedIn(NATIVE_ONLY.class)) {
63+
return InstanceReferenceMapDecoder.getReferenceMap(hub.getCompressedReferenceMapOffset());
64+
} else {
65+
/* Remove once a heap base is supported, see GR-68847. */
66+
byte[] referenceMapEncoding = MultiLayeredImageSingleton.getForLayer(DynamicHubSupport.class, 0).referenceMapEncoding;
67+
return InstanceReferenceMapDecoder.getReferenceMap(NonmovableArrays.fromImageHeap(referenceMapEncoding), hub.getCompressedReferenceMapOffset());
68+
}
6269
}
6370

6471
@Uninterruptible(reason = CALLED_FROM_UNINTERRUPTIBLE_CODE, mayBeInlined = true)

web-image/src/com.oracle.svm.hosted.webimage/src/com/oracle/svm/hosted/webimage/codegen/WebImageCodeGen.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,18 +31,23 @@
3131
import java.nio.file.Path;
3232
import java.util.ArrayList;
3333
import java.util.Collection;
34+
import java.util.Collections;
35+
import java.util.IdentityHashMap;
3436
import java.util.List;
3537
import java.util.Map;
3638
import java.util.Objects;
39+
import java.util.Set;
3740

3841
import org.graalvm.collections.UnmodifiableEconomicMap;
3942

4043
import com.oracle.graal.pointsto.util.Timer;
4144
import com.oracle.graal.pointsto.util.TimerCollection;
4245
import com.oracle.svm.core.BuildArtifacts;
46+
import com.oracle.svm.core.BuildPhaseProvider;
4347
import com.oracle.svm.core.SubstrateOptions;
4448
import com.oracle.svm.hosted.ImageClassLoader;
4549
import com.oracle.svm.hosted.NativeImageGenerator;
50+
import com.oracle.svm.hosted.image.NativeImageHeap;
4651
import com.oracle.svm.hosted.meta.HostedMetaAccess;
4752
import com.oracle.svm.hosted.meta.HostedMethod;
4853
import com.oracle.svm.hosted.meta.HostedUniverse;
@@ -192,6 +197,19 @@ protected void buildImage() {
192197
postProcess();
193198
}
194199

200+
protected void afterHeapLayout() {
201+
// after this point, the layout is final and must not be changed anymore
202+
assert !hasDuplicatedObjects(codeCache.nativeImageHeap) : "heap.getObjects() must not contain any duplicates";
203+
BuildPhaseProvider.markHeapLayoutFinished();
204+
codeCache.nativeImageHeap.getLayouter().afterLayout(codeCache.nativeImageHeap);
205+
}
206+
207+
protected boolean hasDuplicatedObjects(NativeImageHeap heap) {
208+
Set<NativeImageHeap.ObjectInfo> deduplicated = Collections.newSetFromMap(new IdentityHashMap<>());
209+
deduplicated.addAll(heap.getObjects());
210+
return deduplicated.size() != heap.getObjectCount();
211+
}
212+
195213
/**
196214
* Emit JS code into {@link #codeBuffer}.
197215
*/

web-image/src/com.oracle.svm.hosted.webimage/src/com/oracle/svm/hosted/webimage/codegen/WebImageJSCodeGen.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,8 @@ protected WebImageJSProviders getProviders() {
142142

143143
@Override
144144
protected void emitCode() {
145+
/* The JS backend doesn't really do any heap layouting, */
146+
afterHeapLayout();
145147
emitJSCode();
146148
}
147149

web-image/src/com.oracle.svm.hosted.webimage/src/com/oracle/svm/hosted/webimage/wasm/codegen/WebImageWasmCodeGen.java

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -35,23 +35,18 @@
3535
import java.nio.file.Path;
3636
import java.util.ArrayList;
3737
import java.util.Collection;
38-
import java.util.Collections;
39-
import java.util.IdentityHashMap;
4038
import java.util.List;
4139
import java.util.Map;
4240
import java.util.Objects;
43-
import java.util.Set;
4441
import java.util.TreeMap;
4542

4643
import com.oracle.svm.core.BuildArtifacts;
47-
import com.oracle.svm.core.BuildPhaseProvider;
4844
import com.oracle.svm.core.InvalidMethodPointerHandler;
4945
import com.oracle.svm.core.image.ImageHeapLayoutInfo;
5046
import com.oracle.svm.core.meta.MethodPointer;
5147
import com.oracle.svm.hosted.HeapBreakdownProvider;
5248
import com.oracle.svm.hosted.NativeImageGenerator;
5349
import com.oracle.svm.hosted.image.AbstractImage;
54-
import com.oracle.svm.hosted.image.NativeImageHeap;
5550
import com.oracle.svm.hosted.meta.HostedMethod;
5651
import com.oracle.svm.hosted.webimage.WebImageCodeCache;
5752
import com.oracle.svm.hosted.webimage.WebImageHostedConfiguration;
@@ -338,19 +333,6 @@ protected void validateModule() {
338333
new WasmValidator().visitModule(module);
339334
}
340335

341-
protected void afterHeapLayout() {
342-
// after this point, the layout is final and must not be changed anymore
343-
assert !hasDuplicatedObjects(codeCache.nativeImageHeap) : "heap.getObjects() must not contain any duplicates";
344-
BuildPhaseProvider.markHeapLayoutFinished();
345-
codeCache.nativeImageHeap.getLayouter().afterLayout(codeCache.nativeImageHeap);
346-
}
347-
348-
protected boolean hasDuplicatedObjects(NativeImageHeap heap) {
349-
Set<NativeImageHeap.ObjectInfo> deduplicated = Collections.newSetFromMap(new IdentityHashMap<>());
350-
deduplicated.addAll(heap.getObjects());
351-
return deduplicated.size() != heap.getObjectCount();
352-
}
353-
354336
@Override
355337
protected void emitPreamble() {
356338
// Nothing to do.

0 commit comments

Comments
 (0)