Skip to content

Commit f4c9f39

Browse files
authored
[3.12] gh-123967: Fix faulthandler for trampoline frames (#127329) (#127363)
gh-123967: Fix faulthandler for trampoline frames (#127329) If the top-most frame is a trampoline frame, skip it. (cherry picked from commit 58e334e)
1 parent c3bb32d commit f4c9f39

File tree

2 files changed

+16
-9
lines changed

2 files changed

+16
-9
lines changed
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Fix faulthandler for trampoline frames. If the top-most frame is a
2+
trampoline frame, skip it. Patch by Victor Stinner.

Python/traceback.c

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1242,6 +1242,8 @@ _Py_DumpASCII(int fd, PyObject *text)
12421242
static void
12431243
dump_frame(int fd, _PyInterpreterFrame *frame)
12441244
{
1245+
assert(frame->owner != FRAME_OWNED_BY_CSTACK);
1246+
12451247
PyCodeObject *code = frame->f_code;
12461248
PUTS(fd, " File ");
12471249
if (code->co_filename != NULL
@@ -1315,24 +1317,27 @@ dump_traceback(int fd, PyThreadState *tstate, int write_header)
13151317

13161318
unsigned int depth = 0;
13171319
while (1) {
1320+
if (frame->owner == FRAME_OWNED_BY_CSTACK) {
1321+
/* Trampoline frame */
1322+
frame = frame->previous;
1323+
if (frame == NULL) {
1324+
break;
1325+
}
1326+
1327+
/* Can't have more than one shim frame in a row */
1328+
assert(frame->owner != FRAME_OWNED_BY_CSTACK);
1329+
}
1330+
13181331
if (MAX_FRAME_DEPTH <= depth) {
13191332
PUTS(fd, " ...\n");
13201333
break;
13211334
}
1335+
13221336
dump_frame(fd, frame);
13231337
frame = frame->previous;
13241338
if (frame == NULL) {
13251339
break;
13261340
}
1327-
if (frame->owner == FRAME_OWNED_BY_CSTACK) {
1328-
/* Trampoline frame */
1329-
frame = frame->previous;
1330-
}
1331-
if (frame == NULL) {
1332-
break;
1333-
}
1334-
/* Can't have more than one shim frame in a row */
1335-
assert(frame->owner != FRAME_OWNED_BY_CSTACK);
13361341
depth++;
13371342
}
13381343
}

0 commit comments

Comments
 (0)