Skip to content

Commit 1a1c45f

Browse files
Add a debug section for autoloading svmhelpers.py in GDB if svmhelpers.py is available
1 parent 0ac5f59 commit 1a1c45f

File tree

1 file changed

+21
-0
lines changed

1 file changed

+21
-0
lines changed

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

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,11 @@
2424
*/
2525
package com.oracle.svm.hosted.image;
2626

27+
import java.nio.file.Files;
28+
import java.nio.file.Path;
2729
import java.util.List;
2830
import java.util.function.Function;
31+
import java.util.function.Supplier;
2932

3033
import com.oracle.svm.util.ReflectionUtil;
3134
import jdk.graal.compiler.debug.DebugContext;
@@ -140,11 +143,29 @@ public boolean isLoadable() {
140143
};
141144
};
142145

146+
Supplier<BasicProgbitsSectionImpl> makeGDBSectionImpl = () -> {
147+
var content = AssemblyBuffer.createOutputAssembler(objectFile.getByteOrder());
148+
// 1 -> python file
149+
content.writeByte((byte) 1);
150+
content.writeString("./svmhelpers.py");
151+
return new BasicProgbitsSectionImpl(content.getBlob()) {
152+
@Override
153+
public boolean isLoadable() {
154+
return false;
155+
}
156+
};
157+
};
158+
143159
var imageClassLoader = accessImpl.getImageClassLoader();
144160
objectFile.newUserDefinedSection(".debug.svm.imagebuild.classpath", makeSectionImpl.apply(DiagnosticUtils.getClassPath(imageClassLoader)));
145161
objectFile.newUserDefinedSection(".debug.svm.imagebuild.modulepath", makeSectionImpl.apply(DiagnosticUtils.getModulePath(imageClassLoader)));
146162
objectFile.newUserDefinedSection(".debug.svm.imagebuild.arguments", makeSectionImpl.apply(DiagnosticUtils.getBuilderArguments(imageClassLoader)));
147163
objectFile.newUserDefinedSection(".debug.svm.imagebuild.java.properties", makeSectionImpl.apply(DiagnosticUtils.getBuilderProperties()));
164+
165+
Path svmDebugHelper = Path.of(System.getProperty("java.home"), "lib/svm/debug/svmhelpers.py");
166+
if (Files.exists(svmDebugHelper)) {
167+
objectFile.newUserDefinedSection(".debug_gdb_scripts", makeGDBSectionImpl.get());
168+
}
148169
}
149170
}
150171
ProgressReporter.singleton().setDebugInfoTimer(timer);

0 commit comments

Comments
 (0)