Skip to content

Commit 546f9d4

Browse files
committed
Fix metadata offset-in-heap
1 parent 8ad5cf7 commit 546f9d4

File tree

2 files changed

+6
-3
lines changed

2 files changed

+6
-3
lines changed

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/image/NativeImage.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -561,7 +561,7 @@ public void build(String imageName, DebugContext debug) {
561561
// We print the heap statistics after the heap was successfully written because this
562562
// could modify objects that will be part of the image heap.
563563
printHeapStatistics(heap.getLayouter().getPartitions());
564-
heap.dumpMetadata();
564+
heap.dumpMetadata(heapLayout);
565565
}
566566
}
567567

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/image/NativeImageHeap.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
import java.util.Set;
4747
import java.util.function.Predicate;
4848

49+
import com.oracle.svm.core.image.ImageHeapLayoutInfo;
4950
import com.oracle.svm.core.option.HostedOptionValues;
5051
import org.graalvm.nativeimage.ImageSingletons;
5152
import org.graalvm.nativeimage.c.function.RelocatedPointer;
@@ -801,7 +802,7 @@ public ObjectInfo addLateToImageHeap(Object object, Object reason) {
801802
/**
802803
* Dumps metadata for every object in the image heap.
803804
*/
804-
public void dumpMetadata() {
805+
public void dumpMetadata(ImageHeapLayoutInfo heapLayout) {
805806
String metadataFileName = SubstrateOptions.ImageHeapMetadataDumpFileName.getValue();
806807
if (metadataFileName == null || metadataFileName.isEmpty()) {
807808
// Do not dump metadata if the file name isn't set
@@ -815,11 +816,13 @@ public void dumpMetadata() {
815816
throw VMError.shouldNotReachHere("Image heap metadata directory does not exist: " + metadataDir);
816817
}
817818

819+
long heapLayoutStartOffset = heapLayout.getStartOffset();
820+
818821
try (FileWriter metadataOut = new FileWriter(metadataFile);
819822
BufferedWriter metadataBw = new BufferedWriter(metadataOut)) {
820823
metadataBw.write("class-name,partition,offset-in-heap,size\n");
821824
for (ObjectInfo info : getObjects()) {
822-
String csvLine = info.getClazz().getName() + "," + info.getPartition().getName() + "," + info.getOffset() + "," + info.getSize() + System.lineSeparator();
825+
String csvLine = info.getClazz().getName() + "," + info.getPartition().getName() + "," + (info.getOffset() - heapLayoutStartOffset) + "," + info.getSize() + System.lineSeparator();
823826
metadataBw.write(csvLine);
824827
}
825828
} catch (IOException ex) {

0 commit comments

Comments
 (0)