Skip to content

Commit 8b19a65

Browse files
committed
Add debug tracing using debug-log
1 parent 78e252c commit 8b19a65

File tree

8 files changed

+269
-81
lines changed

8 files changed

+269
-81
lines changed

substratevm/src/com.oracle.svm.agent/src/com/oracle/svm/agent/tracing/TraceFileWriter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131

3232
import com.oracle.svm.agent.tracing.core.Tracer;
3333
import com.oracle.svm.agent.tracing.core.TracingResultWriter;
34-
import com.oracle.svm.configure.trace.JsonFileWriter;
34+
import com.oracle.svm.configure.JsonFileWriter;
3535

3636
public class TraceFileWriter extends Tracer implements TracingResultWriter {
3737
private final JsonFileWriter jsonFileWriter;
Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
* or visit www.oracle.com if you need additional information or have any
2323
* questions.
2424
*/
25-
package com.oracle.svm.configure.trace;
25+
package com.oracle.svm.configure;
2626

2727
import java.io.BufferedWriter;
2828
import java.io.Closeable;
@@ -97,6 +97,10 @@ private static void printArray(JsonWriter json, Object[] array) throws IOExcepti
9797
}
9898

9999
private static void printValue(JsonWriter json, Object value) throws IOException {
100+
if (value instanceof JsonPrintable printable) {
101+
printable.printJson(json);
102+
return;
103+
}
100104
Object s = null;
101105
if (value instanceof byte[]) {
102106
s = Base64.getEncoder().encodeToString((byte[]) value);

substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/config/ConfigurationType.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -465,10 +465,18 @@ public synchronized void setAllPublicConstructors(ConfigurationMemberAccessibili
465465
}
466466
}
467467

468+
public synchronized boolean isSerializable() {
469+
return serializable;
470+
}
471+
468472
public synchronized void setSerializable() {
469473
serializable = true;
470474
}
471475

476+
public synchronized boolean isJniAccessible() {
477+
return typeJniAccessible;
478+
}
479+
472480
public synchronized void setJniAccessible() {
473481
typeJniAccessible = true;
474482
}

substratevm/src/com.oracle.svm.configure/src/com/oracle/svm/configure/trace/AccessAdvisor.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131

3232
import org.graalvm.collections.EconomicMap;
3333

34+
import com.oracle.svm.configure.JsonFileWriter;
3435
import com.oracle.svm.configure.filters.ConfigurationFilter;
3536
import com.oracle.svm.configure.filters.HierarchyFilterNode;
3637

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

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@
4747
import org.graalvm.nativeimage.impl.ConfigurationCondition;
4848

4949
import com.oracle.svm.configure.ClassNameSupport;
50-
import com.oracle.svm.configure.config.ConfigurationType;
5150
import com.oracle.svm.core.configure.ConditionalRuntimeValue;
5251
import com.oracle.svm.core.configure.RuntimeConditionSet;
5352
import com.oracle.svm.core.feature.AutomaticallyRegisteredImageSingleton;
@@ -502,10 +501,7 @@ public static Throwable getSavedException(String className) {
502501
public static boolean canUnsafeInstantiateAsInstance(DynamicHub hub) {
503502
Class<?> clazz = DynamicHub.toClass(hub);
504503
if (MetadataTracer.enabled()) {
505-
ConfigurationType type = MetadataTracer.singleton().traceReflectionType(clazz.getTypeName());
506-
if (type != null) {
507-
type.setUnsafeAllocated();
508-
}
504+
MetadataTracer.singleton().traceUnsafeAllocatedType(clazz.getTypeName());
509505
}
510506
RuntimeConditionSet conditionSet = null;
511507
for (var singleton : layeredSingletons()) {

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

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -786,7 +786,7 @@ private static boolean isClassFlagSet(int mask, ReflectionMetadata reflectionMet
786786
}
787787

788788
private void traceClassFlagQuery(int mask) {
789-
ConfigurationType type = MetadataTracer.singleton().traceReflectionType(getTypeName());
789+
ConfigurationType type = MetadataTracer.singleton().traceReflectionTypeImpl(getTypeName());
790790
if (type == null) {
791791
return;
792792
}
@@ -1397,18 +1397,12 @@ private void traceFieldLookup(String fieldName, Field field, boolean publicOnly)
13971397
ConfigurationMemberDeclaration declaration = publicOnly ? ConfigurationMemberDeclaration.PRESENT : ConfigurationMemberDeclaration.DECLARED;
13981398
if (field != null) {
13991399
// register declaring type and field
1400-
ConfigurationType declaringType = MetadataTracer.singleton().traceReflectionType(field.getDeclaringClass().getTypeName());
1401-
if (declaringType != null) {
1402-
declaringType.addField(fieldName, declaration, false);
1403-
}
1400+
MetadataTracer.singleton().traceField(field.getDeclaringClass().getTypeName(), fieldName, declaration);
14041401
// register receiver type
14051402
MetadataTracer.singleton().traceReflectionType(getTypeName());
14061403
} else {
14071404
// register receiver type and negative field query
1408-
ConfigurationType receiverType = MetadataTracer.singleton().traceReflectionType(getTypeName());
1409-
if (receiverType != null) {
1410-
receiverType.addField(fieldName, declaration, false);
1411-
}
1405+
MetadataTracer.singleton().traceField(getTypeName(), fieldName, declaration);
14121406
}
14131407
}
14141408

@@ -1482,18 +1476,13 @@ private void traceMethodLookup(String methodName, Class<?>[] parameterTypes, Exe
14821476
ConfigurationMemberDeclaration declaration = publicOnly ? ConfigurationMemberDeclaration.PRESENT : ConfigurationMemberDeclaration.DECLARED;
14831477
if (method != null) {
14841478
// register declaring type and method
1485-
ConfigurationType declaringType = MetadataTracer.singleton().traceReflectionType(method.getDeclaringClass().getTypeName());
1486-
if (declaringType != null) {
1487-
declaringType.addMethod(methodName, toInternalSignature(parameterTypes), declaration);
1488-
}
1479+
// TODO (GR-64765) loosen to queried accessibility once method invocations are traced
1480+
MetadataTracer.singleton().traceMethod(method.getDeclaringClass().getTypeName(), methodName, toInternalSignature(parameterTypes), declaration, ConfigurationMemberAccessibility.ACCESSED);
14891481
// register receiver type
14901482
MetadataTracer.singleton().traceReflectionType(getTypeName());
14911483
} else {
14921484
// register receiver type and negative method query
1493-
ConfigurationType receiverType = MetadataTracer.singleton().traceReflectionType(getTypeName());
1494-
if (receiverType != null) {
1495-
receiverType.addMethod(methodName, toInternalSignature(parameterTypes), declaration, ConfigurationMemberAccessibility.QUERIED);
1496-
}
1485+
MetadataTracer.singleton().traceMethod(getTypeName(), methodName, toInternalSignature(parameterTypes), declaration, ConfigurationMemberAccessibility.QUERIED);
14971486
}
14981487
}
14991488

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jni/access/JNIReflectionDictionary.java

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@
4343

4444
import com.oracle.svm.configure.ClassNameSupport;
4545
import com.oracle.svm.configure.config.ConfigurationMemberInfo;
46-
import com.oracle.svm.configure.config.ConfigurationType;
4746
import com.oracle.svm.core.SubstrateOptions;
4847
import com.oracle.svm.core.Uninterruptible;
4948
import com.oracle.svm.core.heap.Heap;
@@ -274,10 +273,10 @@ public static JNIMethodId getDeclaredMethodID(Class<?> classObject, JNIAccessibl
274273

275274
private static JNIAccessibleMethod getDeclaredMethod(Class<?> classObject, JNIAccessibleMethodDescriptor descriptor, String dumpLabel) {
276275
if (MetadataTracer.enabled()) {
277-
ConfigurationType clazzType = MetadataTracer.singleton().traceJNIType(classObject.getTypeName());
278-
if (clazzType != null) {
279-
clazzType.addMethod(descriptor.getNameConvertToString(), descriptor.getSignatureConvertToString(), ConfigurationMemberInfo.ConfigurationMemberDeclaration.DECLARED);
280-
}
276+
MetadataTracer.singleton().traceJNIType(classObject.getTypeName());
277+
// TODO (GR-64765) loosen to queried accessibility once method invocations are traced
278+
MetadataTracer.singleton().traceMethod(classObject.getTypeName(), descriptor.getNameConvertToString(), descriptor.getSignatureConvertToString(),
279+
ConfigurationMemberInfo.ConfigurationMemberDeclaration.DECLARED, ConfigurationMemberInfo.ConfigurationMemberAccessibility.ACCESSED);
281280
}
282281
boolean foundClass = false;
283282
for (var dictionary : layeredSingletons()) {
@@ -335,10 +334,8 @@ private static JNIAccessibleMethod checkMethod(JNIAccessibleMethod method, Class
335334

336335
private static JNIAccessibleField getDeclaredField(Class<?> classObject, CharSequence name, boolean isStatic, String dumpLabel) {
337336
if (MetadataTracer.enabled()) {
338-
ConfigurationType clazzType = MetadataTracer.singleton().traceJNIType(classObject.getTypeName());
339-
if (clazzType != null) {
340-
clazzType.addField(name.toString(), ConfigurationMemberInfo.ConfigurationMemberDeclaration.DECLARED, false);
341-
}
337+
MetadataTracer.singleton().traceJNIType(classObject.getTypeName());
338+
MetadataTracer.singleton().traceField(classObject.getTypeName(), name.toString(), ConfigurationMemberInfo.ConfigurationMemberDeclaration.DECLARED);
342339
}
343340
boolean foundClass = false;
344341
for (var dictionary : layeredSingletons()) {

0 commit comments

Comments
 (0)