Skip to content

Commit 71b5656

Browse files
committed
Remove downcalls to abort
They are really painful to debug
1 parent 5a6eedf commit 71b5656

File tree

10 files changed

+18
-98
lines changed

10 files changed

+18
-98
lines changed

graalpython/com.oracle.graal.python.cext/src/pylifecycle.c

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,16 @@ _Py_IsFinalizing(void)
7474
}
7575

7676
void _Py_NO_RETURN _Py_FatalErrorFunc(const char *func, const char *msg) {
77-
GraalPyPrivate_FatalErrorFunc(func, msg, -1);
78-
/* If the above upcall returns, then we just fall through to the 'abort' call. */
79-
abort();
77+
const char *prefix1 = "", *prefix2 = "";
78+
if (func) {
79+
prefix1 = func;
80+
prefix2 = ": ";
81+
}
82+
if (!msg) {
83+
msg = "<message not set>";
84+
}
85+
fprintf(stderr, "Fatal Python error: %s%s%s\n", prefix1, prefix2, msg);
86+
abort();
8087
}
8188

8289
_PyRuntimeState _PyRuntime

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cext/PythonCextPyLifecycleBuiltins.java

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -41,17 +41,11 @@
4141
package com.oracle.graal.python.builtins.modules.cext;
4242

4343
import static com.oracle.graal.python.builtins.modules.cext.PythonCextBuiltins.CApiCallPath.Direct;
44-
import static com.oracle.graal.python.builtins.modules.cext.PythonCextBuiltins.CApiCallPath.Ignored;
45-
import static com.oracle.graal.python.builtins.objects.cext.capi.transitions.ArgDescriptor.ConstCharPtrAsTruffleString;
4644
import static com.oracle.graal.python.builtins.objects.cext.capi.transitions.ArgDescriptor.Int;
47-
import static com.oracle.graal.python.builtins.objects.cext.capi.transitions.ArgDescriptor.Void;
4845
import static com.oracle.graal.python.builtins.objects.cext.capi.transitions.ArgDescriptor.func_voidvoid;
4946

5047
import com.oracle.graal.python.builtins.modules.cext.PythonCextBuiltins.CApiBuiltin;
51-
import com.oracle.graal.python.builtins.modules.cext.PythonCextBuiltins.CApiTernaryBuiltinNode;
5248
import com.oracle.graal.python.builtins.modules.cext.PythonCextBuiltins.CApiUnaryBuiltinNode;
53-
import com.oracle.graal.python.builtins.objects.PNone;
54-
import com.oracle.graal.python.builtins.objects.cext.common.CExtCommonNodes;
5549
import com.oracle.graal.python.runtime.PythonContext;
5650
import com.oracle.graal.python.util.ShutdownHook;
5751
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
@@ -60,7 +54,6 @@
6054
import com.oracle.truffle.api.interop.InteropLibrary;
6155
import com.oracle.truffle.api.interop.UnsupportedMessageException;
6256
import com.oracle.truffle.api.interop.UnsupportedTypeException;
63-
import com.oracle.truffle.api.strings.TruffleString;
6457

6558
public final class PythonCextPyLifecycleBuiltins {
6659

@@ -83,23 +76,4 @@ public void call(@SuppressWarnings("unused") PythonContext context) {
8376
return 0;
8477
}
8578
}
86-
87-
@CApiBuiltin(ret = Void, args = {ConstCharPtrAsTruffleString, ConstCharPtrAsTruffleString, Int}, call = Ignored)
88-
abstract static class GraalPyPrivate_FatalErrorFunc extends CApiTernaryBuiltinNode {
89-
90-
@Specialization
91-
@TruffleBoundary
92-
Object doStrings(TruffleString func, TruffleString msg, int status) {
93-
CExtCommonNodes.fatalError(this, getContext(), func, msg, status);
94-
return PNone.NONE;
95-
}
96-
97-
@Specialization
98-
@TruffleBoundary
99-
Object doGeneric(Object funcObj, Object msgObj, int status) {
100-
TruffleString func = funcObj == PNone.NO_VALUE ? null : (TruffleString) funcObj;
101-
TruffleString msg = msgObj == PNone.NO_VALUE ? null : (TruffleString) msgObj;
102-
return doStrings(func, msg, status);
103-
}
104-
}
10579
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cext/PythonCextUnicodeBuiltins.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,6 @@
116116
import com.oracle.graal.python.builtins.objects.cext.capi.CExtNodes.UnicodeFromFormatNode;
117117
import com.oracle.graal.python.builtins.objects.cext.capi.PySequenceArrayWrapper;
118118
import com.oracle.graal.python.builtins.objects.cext.capi.UnicodeObjectNodes.UnicodeAsWideCharNode;
119-
import com.oracle.graal.python.builtins.objects.cext.common.CExtCommonNodes;
120119
import com.oracle.graal.python.builtins.objects.cext.common.CExtCommonNodes.EncodeNativeStringNode;
121120
import com.oracle.graal.python.builtins.objects.cext.common.CExtCommonNodes.GetByteArrayNode;
122121
import com.oracle.graal.python.builtins.objects.cext.common.CExtCommonNodes.ReadUnicodeArrayNode;
@@ -158,11 +157,11 @@
158157
import com.oracle.graal.python.nodes.util.CannotCastException;
159158
import com.oracle.graal.python.nodes.util.CastToJavaStringNode;
160159
import com.oracle.graal.python.nodes.util.CastToTruffleStringNode;
161-
import com.oracle.graal.python.runtime.PythonContext;
162160
import com.oracle.graal.python.runtime.exception.PException;
163161
import com.oracle.graal.python.runtime.exception.PythonErrorType;
164162
import com.oracle.graal.python.runtime.object.PFactory;
165163
import com.oracle.graal.python.util.OverflowException;
164+
import com.oracle.truffle.api.CompilerDirectives;
166165
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
167166
import com.oracle.truffle.api.dsl.Bind;
168167
import com.oracle.truffle.api.dsl.Cached;
@@ -388,15 +387,14 @@ static Object overflow(Object val, int alt, int prec, int type,
388387
@Specialization(guards = "!isOF(prec)")
389388
static Object formatLong(Object val, int alt, int prec, int type,
390389
@Bind Node inliningTarget,
391-
@Bind PythonContext context,
392390
@Cached OctNode toOctBase,
393391
@Cached HexNode toHexBase,
394392
@Cached PyNumberIndexNode indexNode,
395393
@Cached StringBuiltins.StrNewNode strNode,
396394
@Cached CastToJavaStringNode cast,
397395
@Cached TruffleString.FromCharArrayUTF16Node fromCharArrayNode) {
398396
int numnondigits = 0;
399-
TruffleString result = null;
397+
TruffleString result;
400398
switch (type) {
401399
case 'd', 'i', 'u' ->
402400
/* int and int subclasses should print numerically when a numeric */
@@ -410,7 +408,10 @@ static Object formatLong(Object val, int alt, int prec, int type,
410408
numnondigits = 2;
411409
result = (TruffleString) PyNumber_ToBase.toBase16(val, 16, inliningTarget, indexNode, toHexBase);
412410
}
413-
default -> CExtCommonNodes.fatalErrorString(inliningTarget, context, null, null, -1);
411+
default -> {
412+
CompilerDirectives.transferToInterpreterAndInvalidate();
413+
throw PRaiseNode.raiseStatic(inliningTarget, SystemError, ErrorMessages.BAD_ARG_TO_INTERNAL_FUNC);
414+
}
414415
}
415416

416417
char[] buf = getCharArray(cast.execute(result));

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/common/CExtCommonNodes.java

Lines changed: 1 addition & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -51,14 +51,12 @@
5151
import static com.oracle.graal.python.util.PythonUtils.TS_ENCODING;
5252
import static com.oracle.graal.python.util.PythonUtils.tsLiteral;
5353

54-
import java.io.PrintWriter;
5554
import java.nio.charset.CharacterCodingException;
5655
import java.nio.charset.Charset;
5756
import java.nio.charset.CodingErrorAction;
5857
import java.nio.charset.StandardCharsets;
5958
import java.util.logging.Level;
6059

61-
import com.oracle.truffle.api.dsl.Cached.Exclusive;
6260
import org.graalvm.collections.Pair;
6361

6462
import com.oracle.graal.python.PythonLanguage;
@@ -96,14 +94,12 @@
9694
import com.oracle.graal.python.nodes.SpecialMethodNames;
9795
import com.oracle.graal.python.nodes.util.CannotCastException;
9896
import com.oracle.graal.python.nodes.util.CastToTruffleStringNode;
99-
import com.oracle.graal.python.runtime.PosixSupportLibrary;
10097
import com.oracle.graal.python.runtime.PythonContext;
10198
import com.oracle.graal.python.runtime.PythonContext.GetThreadStateNode;
10299
import com.oracle.graal.python.runtime.PythonContext.PythonThreadState;
103100
import com.oracle.graal.python.runtime.PythonOptions;
104101
import com.oracle.graal.python.runtime.exception.PException;
105102
import com.oracle.graal.python.runtime.exception.PythonErrorType;
106-
import com.oracle.graal.python.runtime.exception.PythonExitException;
107103
import com.oracle.graal.python.runtime.object.PFactory;
108104
import com.oracle.graal.python.util.OverflowException;
109105
import com.oracle.graal.python.util.PythonUtils;
@@ -115,6 +111,7 @@
115111
import com.oracle.truffle.api.TruffleLogger;
116112
import com.oracle.truffle.api.dsl.Bind;
117113
import com.oracle.truffle.api.dsl.Cached;
114+
import com.oracle.truffle.api.dsl.Cached.Exclusive;
118115
import com.oracle.truffle.api.dsl.Cached.Shared;
119116
import com.oracle.truffle.api.dsl.Fallback;
120117
import com.oracle.truffle.api.dsl.GenerateCached;
@@ -140,35 +137,6 @@
140137
import com.oracle.truffle.nfi.api.SignatureLibrary;
141138

142139
public abstract class CExtCommonNodes {
143-
@TruffleBoundary
144-
public static void fatalError(Node location, PythonContext context, TruffleString prefix, TruffleString msg, int status) {
145-
fatalErrorString(location, context, prefix != null ? prefix.toJavaStringUncached() : null, msg.toJavaStringUncached(), status);
146-
}
147-
148-
@TruffleBoundary
149-
public static void fatalErrorString(Node location, PythonContext context, String prefix, String msg, int status) {
150-
PrintWriter stderr = new PrintWriter(context.getStandardErr());
151-
stderr.print("Fatal Python error: ");
152-
if (prefix != null) {
153-
stderr.print(prefix);
154-
stderr.print(": ");
155-
}
156-
if (msg != null) {
157-
stderr.print(msg);
158-
} else {
159-
stderr.print("<message not set>");
160-
}
161-
stderr.println();
162-
stderr.flush();
163-
164-
if (status < 0) {
165-
PosixSupportLibrary posixLib = PosixSupportLibrary.getUncached();
166-
Object posixSupport = context.getPosixSupport();
167-
posixLib.abort(posixSupport);
168-
// abort does not return
169-
}
170-
throw new PythonExitException(location, status);
171-
}
172140

173141
@GenerateUncached
174142
@GenerateInline

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/runtime/EmulatedPosixSupport.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,6 @@
212212
import java.util.concurrent.TimeUnit;
213213
import java.util.logging.Level;
214214

215-
import com.oracle.graal.python.nodes.ErrorMessages;
216215
import org.graalvm.nativeimage.ImageInfo;
217216
import org.graalvm.nativeimage.ProcessProperties;
218217
import org.graalvm.polyglot.io.ProcessHandler.Redirect;
@@ -223,6 +222,7 @@
223222
import com.oracle.graal.python.builtins.objects.exception.OSErrorEnum;
224223
import com.oracle.graal.python.builtins.objects.exception.OSErrorEnum.ErrorAndMessagePair;
225224
import com.oracle.graal.python.builtins.objects.exception.OSErrorEnum.OperationWouldBlockException;
225+
import com.oracle.graal.python.nodes.ErrorMessages;
226226
import com.oracle.graal.python.runtime.PosixSupportLibrary.AcceptResult;
227227
import com.oracle.graal.python.runtime.PosixSupportLibrary.AddrInfoCursor;
228228
import com.oracle.graal.python.runtime.PosixSupportLibrary.AddrInfoCursorLibrary;
@@ -2032,12 +2032,6 @@ private static void interruptThread() {
20322032
Thread.currentThread().interrupt();
20332033
}
20342034

2035-
@ExportMessage
2036-
@SuppressWarnings("static-method")
2037-
public void abort(@CachedLibrary("this") PosixSupportLibrary thisLib) {
2038-
throw new PythonExitException(thisLib, 134); // 134 == 128 + SIGABRT
2039-
}
2040-
20412035
// TODO the implementation of the following builtins is taken from posix.py,
20422036
// do they really make sense for the emulated backend? Is the handling of exist status correct?
20432037

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/runtime/LoggingPosixSupport.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -807,12 +807,6 @@ public void mmapWriteByte(Object mmap, long index, byte value,
807807
}
808808
}
809809

810-
@ExportMessage
811-
final void abort(@CachedLibrary("this.delegate") PosixSupportLibrary lib) {
812-
logEnter("abort", "");
813-
lib.abort(this.delegate);
814-
}
815-
816810
@ExportMessage
817811
final boolean wcoredump(int status,
818812
@CachedLibrary("this.delegate") PosixSupportLibrary lib) {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/runtime/NFIPosixSupport.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,6 @@ private enum PosixNativeFunction {
229229
get_terminal_size("(sint32, [sint32]):sint32"),
230230
call_kill("(sint64, sint32):sint32"),
231231
call_killpg("(sint64, sint32):sint32"),
232-
call_abort("():void"),
233232
call_waitpid("(sint64, [sint32], sint32):sint64"),
234233
call_wcoredump("(sint32):sint32"),
235234
call_wifcontinued("(sint32):sint32"),
@@ -1199,11 +1198,6 @@ public boolean wcoredump(int status,
11991198
return invokeNode.callInt(this, PosixNativeFunction.call_wcoredump, status) != 0;
12001199
}
12011200

1202-
@ExportMessage
1203-
public void abort(@Shared("invoke") @Cached InvokeNativeFunction invokeNode) {
1204-
invokeNode.call(this, PosixNativeFunction.call_abort);
1205-
}
1206-
12071201
@ExportMessage
12081202
public boolean wifcontinued(int status,
12091203
@Shared("invoke") @Cached InvokeNativeFunction invokeNode) {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/runtime/PosixSupportLibrary.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -264,8 +264,6 @@ public abstract class PosixSupportLibrary extends Library {
264264

265265
public abstract long[] waitpid(Object receiver, long pid, int options) throws PosixException;
266266

267-
public abstract void abort(Object receiver);
268-
269267
public abstract boolean wcoredump(Object receiver, int status);
270268

271269
public abstract boolean wifcontinued(Object receiver, int status);

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/runtime/PreInitPosixSupport.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -609,12 +609,6 @@ final long[] waitpid(long pid, int options,
609609
return nativeLib.waitpid(nativePosixSupport, pid, options);
610610
}
611611

612-
@ExportMessage
613-
final void abort(@CachedLibrary("this.nativePosixSupport") PosixSupportLibrary nativeLib) {
614-
checkNotInPreInitialization();
615-
nativeLib.abort(nativePosixSupport);
616-
}
617-
618612
@ExportMessage
619613
final boolean wcoredump(int status,
620614
@CachedLibrary("this.nativePosixSupport") PosixSupportLibrary nativeLib) {

graalpython/python-libposix/src/posix.c

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -566,10 +566,6 @@ int64_t call_waitpid(int64_t pid, int32_t *status, int32_t options) {
566566
return waitpid(pid, status, options);
567567
}
568568

569-
void call_abort() {
570-
abort();
571-
}
572-
573569
int32_t call_wcoredump(int32_t status) {
574570
return WCOREDUMP(status) ? 1 : 0;
575571
}

0 commit comments

Comments
 (0)