Skip to content

Commit b0e0eea

Browse files
[GR-67973] Fix graph scheduling segfaults for CEntryPoints.
PullRequest: graal/21633
2 parents 20f8bb7 + 83c8d55 commit b0e0eea

File tree

6 files changed

+217
-153
lines changed

6 files changed

+217
-153
lines changed

substratevm/mx.substratevm/testhello.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ def test():
197197
fr"#4{spaces_pattern}{address_pattern} in com\.oracle\.svm\.core\.JavaMainWrapper::runCore{no_param_types_pattern} {no_arg_values_pattern} at {package_pattern}JavaMainWrapper\.java:[0-9]+",
198198
fr"#5{spaces_pattern}com\.oracle\.svm\.core\.JavaMainWrapper::doRun{param_types_pattern} {arg_values_pattern} at {package_pattern}JavaMainWrapper\.java:[0-9]+",
199199
fr"#6{spaces_pattern}({address_pattern} in )?com\.oracle\.svm\.core\.JavaMainWrapper::run{param_types_pattern} {arg_values_pattern} at {package_pattern}JavaMainWrapper\.java:[0-9]+",
200-
fr"#7{spaces_pattern}com\.oracle\.svm\.core\.code\.IsolateEnterStub::JavaMainWrapper_run_{varname_pattern}{param_types_pattern} {arg_values_pattern}"
200+
fr"#7{spaces_pattern}({address_pattern} in )?com\.oracle\.svm\.core\.code\.IsolateEnterStub::JavaMainWrapper_run_{varname_pattern}{param_types_pattern} {arg_values_pattern}"
201201
]
202202
if musl:
203203
# musl has a different entry point - drop the last two frames
@@ -408,7 +408,7 @@ def test():
408408
fr"#5{spaces_pattern}{address_pattern} in com\.oracle\.svm\.core\.JavaMainWrapper::runCore{no_param_types_pattern} {no_arg_values_pattern} at {package_pattern}JavaMainWrapper\.java:[0-9]+",
409409
fr"#6{spaces_pattern}com\.oracle\.svm\.core\.JavaMainWrapper::doRun{param_types_pattern} {arg_values_pattern} at {package_pattern}JavaMainWrapper\.java:[0-9]+",
410410
fr"#7{spaces_pattern}({address_pattern} in )?com\.oracle\.svm\.core\.JavaMainWrapper::run{param_types_pattern} {arg_values_pattern} at {package_pattern}JavaMainWrapper\.java:[0-9]+",
411-
fr"#8{spaces_pattern}com\.oracle\.svm\.core\.code\.IsolateEnterStub::JavaMainWrapper_run_{varname_pattern}{param_types_pattern} {arg_values_pattern}"
411+
fr"#8{spaces_pattern}({address_pattern} in )?com\.oracle\.svm\.core\.code\.IsolateEnterStub::JavaMainWrapper_run_{varname_pattern}{param_types_pattern} {arg_values_pattern}"
412412
]
413413
if musl:
414414
# musl has a different entry point - drop the last two frames

substratevm/src/com.oracle.svm.hosted.foreign/src/com/oracle/svm/hosted/foreign/UpcallStub.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,9 +218,15 @@ public StructuredGraph buildGraph(DebugContext debug, AnalysisMethod method, Hos
218218
arguments.addFirst(returnBuffer);
219219
}
220220

221-
/* Transfers to the Java-side stub; note that exceptions should be handled there. */
221+
/*
222+
* Transfers to the Java-side stub; note that exceptions should be handled there. We
223+
* explicitly disable inline for this call to prevent that operations floating to a point
224+
* where the base registers are not initialized yet.
225+
*/
222226
arguments.addFirst(mh);
223227
InvokeWithExceptionNode returnValue = kit.createJavaCallWithException(CallTargetNode.InvokeKind.Static, highLevelStub, arguments.toArray(ValueNode.EMPTY_ARRAY));
228+
returnValue.setUseForInlining(false);
229+
224230
kit.exceptionPart();
225231
kit.append(new DeadEndNode());
226232
kit.endInvokeWithException();

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/cenum/CEnumCallWrapperMethod.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ private ValueNode createInvoke(AnalysisMethod method, HostedGraphKit kit, Analys
101101
if (method.getAnnotation(CEnumLookup.class) != null) {
102102
/* Call a method that converts the primitive value to a Java enum. */
103103
EnumInfo enumInfo = (EnumInfo) nativeLibraries.findElementInfo(returnType);
104-
return CInterfaceEnumTool.singleton().createInvokeLookupEnum(kit, returnType, enumInfo, arg);
104+
return CInterfaceEnumTool.singleton().createInvokeLookupEnum(kit, returnType, enumInfo, arg, true);
105105
} else if (method.getAnnotation(CEnumValue.class) != null) {
106106
/* Call a method that converts a Java enum to a primitive value. */
107107
ResolvedJavaType declaringType = method.getDeclaringClass();

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/code/CCallStubMethod.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ private ValueNode adaptReturnValue(AnalysisMethod method, NativeLibraries native
143143
"Enum class %s needs a method that is annotated with @%s because it is used as the return type of a method annotated with @%s: %s.",
144144
declaredReturnType, CEnumLookup.class.getSimpleName(), getCorrespondingAnnotationName(), getOriginal());
145145

146-
return CInterfaceEnumTool.singleton().createInvokeLookupEnum(kit, declaredReturnType, enumInfo, value);
146+
return CInterfaceEnumTool.singleton().createInvokeLookupEnum(kit, declaredReturnType, enumInfo, value, true);
147147
}
148148

149149
private EnumInfo getEnumInfo(NativeLibraries nativeLibraries, AnalysisType type, boolean isReturnType) {

0 commit comments

Comments
 (0)