mirror of
https://github.com/python/cpython.git
synced 2025-10-09 16:34:44 +00:00
gh-128563: Move lltrace into the frame struct (GH-129113)
This commit is contained in:
parent
31f149d5b3
commit
5809b25909
5 changed files with 26 additions and 17 deletions
|
@ -76,7 +76,12 @@ typedef struct _PyInterpreterFrame {
|
||||||
_PyStackRef *stackpointer;
|
_PyStackRef *stackpointer;
|
||||||
uint16_t return_offset; /* Only relevant during a function call */
|
uint16_t return_offset; /* Only relevant during a function call */
|
||||||
char owner;
|
char owner;
|
||||||
char visited;
|
#ifdef Py_DEBUG
|
||||||
|
uint8_t visited:1;
|
||||||
|
uint8_t lltrace:7;
|
||||||
|
#else
|
||||||
|
uint8_t visited;
|
||||||
|
#endif
|
||||||
/* Locals and stack */
|
/* Locals and stack */
|
||||||
_PyStackRef localsplus[1];
|
_PyStackRef localsplus[1];
|
||||||
} _PyInterpreterFrame;
|
} _PyInterpreterFrame;
|
||||||
|
|
|
@ -4990,7 +4990,7 @@ dummy_func(
|
||||||
_Py_CODEUNIT *target = _PyFrame_GetBytecode(frame) + exit->target;
|
_Py_CODEUNIT *target = _PyFrame_GetBytecode(frame) + exit->target;
|
||||||
#if defined(Py_DEBUG) && !defined(_Py_JIT)
|
#if defined(Py_DEBUG) && !defined(_Py_JIT)
|
||||||
OPT_HIST(trace_uop_execution_counter, trace_run_length_hist);
|
OPT_HIST(trace_uop_execution_counter, trace_run_length_hist);
|
||||||
if (lltrace >= 2) {
|
if (frame->lltrace >= 2) {
|
||||||
printf("SIDE EXIT: [UOp ");
|
printf("SIDE EXIT: [UOp ");
|
||||||
_PyUOpPrint(&next_uop[-1]);
|
_PyUOpPrint(&next_uop[-1]);
|
||||||
printf(", exit %u, temp %d, target %d -> %s]\n",
|
printf(", exit %u, temp %d, target %d -> %s]\n",
|
||||||
|
@ -5108,7 +5108,7 @@ dummy_func(
|
||||||
_Py_CODEUNIT *target = frame->instr_ptr;
|
_Py_CODEUNIT *target = frame->instr_ptr;
|
||||||
#if defined(Py_DEBUG) && !defined(_Py_JIT)
|
#if defined(Py_DEBUG) && !defined(_Py_JIT)
|
||||||
OPT_HIST(trace_uop_execution_counter, trace_run_length_hist);
|
OPT_HIST(trace_uop_execution_counter, trace_run_length_hist);
|
||||||
if (lltrace >= 2) {
|
if (frame->lltrace >= 2) {
|
||||||
printf("DYNAMIC EXIT: [UOp ");
|
printf("DYNAMIC EXIT: [UOp ");
|
||||||
_PyUOpPrint(&next_uop[-1]);
|
_PyUOpPrint(&next_uop[-1]);
|
||||||
printf(", exit %u, temp %d, target %d -> %s]\n",
|
printf(", exit %u, temp %d, target %d -> %s]\n",
|
||||||
|
|
|
@ -799,9 +799,6 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, _PyInterpreterFrame *frame, int
|
||||||
#endif
|
#endif
|
||||||
uint8_t opcode; /* Current opcode */
|
uint8_t opcode; /* Current opcode */
|
||||||
int oparg; /* Current opcode argument, if any */
|
int oparg; /* Current opcode argument, if any */
|
||||||
#ifdef LLTRACE
|
|
||||||
int lltrace = 0;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
_PyInterpreterFrame entry_frame;
|
_PyInterpreterFrame entry_frame;
|
||||||
|
|
||||||
|
@ -821,6 +818,9 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, _PyInterpreterFrame *frame, int
|
||||||
entry_frame.owner = FRAME_OWNED_BY_INTERPRETER;
|
entry_frame.owner = FRAME_OWNED_BY_INTERPRETER;
|
||||||
entry_frame.visited = 0;
|
entry_frame.visited = 0;
|
||||||
entry_frame.return_offset = 0;
|
entry_frame.return_offset = 0;
|
||||||
|
#ifdef LLTRACE
|
||||||
|
entry_frame.lltrace = 0;
|
||||||
|
#endif
|
||||||
/* Push frame */
|
/* Push frame */
|
||||||
entry_frame.previous = tstate->current_frame;
|
entry_frame.previous = tstate->current_frame;
|
||||||
frame->previous = &entry_frame;
|
frame->previous = &entry_frame;
|
||||||
|
@ -880,9 +880,12 @@ resume_frame:
|
||||||
stack_pointer = _PyFrame_GetStackPointer(frame);
|
stack_pointer = _PyFrame_GetStackPointer(frame);
|
||||||
|
|
||||||
#ifdef LLTRACE
|
#ifdef LLTRACE
|
||||||
lltrace = maybe_lltrace_resume_frame(frame, GLOBALS());
|
{
|
||||||
if (lltrace < 0) {
|
int lltrace = maybe_lltrace_resume_frame(frame, GLOBALS());
|
||||||
goto exit_unwind;
|
frame->lltrace = lltrace;
|
||||||
|
if (lltrace < 0) {
|
||||||
|
goto exit_unwind;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -1002,7 +1005,7 @@ exception_unwind:
|
||||||
}
|
}
|
||||||
/* Resume normal execution */
|
/* Resume normal execution */
|
||||||
#ifdef LLTRACE
|
#ifdef LLTRACE
|
||||||
if (lltrace >= 5) {
|
if (frame->lltrace >= 5) {
|
||||||
lltrace_resume_frame(frame);
|
lltrace_resume_frame(frame);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -1079,7 +1082,7 @@ tier2_dispatch:
|
||||||
for (;;) {
|
for (;;) {
|
||||||
uopcode = next_uop->opcode;
|
uopcode = next_uop->opcode;
|
||||||
#ifdef Py_DEBUG
|
#ifdef Py_DEBUG
|
||||||
if (lltrace >= 3) {
|
if (frame->lltrace >= 3) {
|
||||||
dump_stack(frame, stack_pointer);
|
dump_stack(frame, stack_pointer);
|
||||||
if (next_uop->opcode == _START_EXECUTOR) {
|
if (next_uop->opcode == _START_EXECUTOR) {
|
||||||
printf("%4d uop: ", 0);
|
printf("%4d uop: ", 0);
|
||||||
|
@ -1121,7 +1124,7 @@ tier2_dispatch:
|
||||||
|
|
||||||
jump_to_error_target:
|
jump_to_error_target:
|
||||||
#ifdef Py_DEBUG
|
#ifdef Py_DEBUG
|
||||||
if (lltrace >= 2) {
|
if (frame->lltrace >= 2) {
|
||||||
printf("Error: [UOp ");
|
printf("Error: [UOp ");
|
||||||
_PyUOpPrint(&next_uop[-1]);
|
_PyUOpPrint(&next_uop[-1]);
|
||||||
printf(" @ %d -> %s]\n",
|
printf(" @ %d -> %s]\n",
|
||||||
|
@ -1157,7 +1160,7 @@ exit_to_tier1:
|
||||||
next_instr = next_uop[-1].target + _PyFrame_GetBytecode(frame);
|
next_instr = next_uop[-1].target + _PyFrame_GetBytecode(frame);
|
||||||
goto_to_tier1:
|
goto_to_tier1:
|
||||||
#ifdef Py_DEBUG
|
#ifdef Py_DEBUG
|
||||||
if (lltrace >= 2) {
|
if (frame->lltrace >= 2) {
|
||||||
printf("DEOPT: [UOp ");
|
printf("DEOPT: [UOp ");
|
||||||
_PyUOpPrint(&next_uop[-1]);
|
_PyUOpPrint(&next_uop[-1]);
|
||||||
printf(" -> %s]\n",
|
printf(" -> %s]\n",
|
||||||
|
|
|
@ -80,7 +80,7 @@
|
||||||
|
|
||||||
/* PRE_DISPATCH_GOTO() does lltrace if enabled. Normally a no-op */
|
/* PRE_DISPATCH_GOTO() does lltrace if enabled. Normally a no-op */
|
||||||
#ifdef LLTRACE
|
#ifdef LLTRACE
|
||||||
#define PRE_DISPATCH_GOTO() if (lltrace >= 5) { \
|
#define PRE_DISPATCH_GOTO() if (frame->lltrace >= 5) { \
|
||||||
lltrace_instruction(frame, stack_pointer, next_instr, opcode, oparg); }
|
lltrace_instruction(frame, stack_pointer, next_instr, opcode, oparg); }
|
||||||
#else
|
#else
|
||||||
#define PRE_DISPATCH_GOTO() ((void)0)
|
#define PRE_DISPATCH_GOTO() ((void)0)
|
||||||
|
@ -89,7 +89,8 @@
|
||||||
#if LLTRACE
|
#if LLTRACE
|
||||||
#define LLTRACE_RESUME_FRAME() \
|
#define LLTRACE_RESUME_FRAME() \
|
||||||
do { \
|
do { \
|
||||||
lltrace = maybe_lltrace_resume_frame(frame, GLOBALS()); \
|
int lltrace = maybe_lltrace_resume_frame(frame, GLOBALS()); \
|
||||||
|
frame->lltrace = lltrace; \
|
||||||
if (lltrace < 0) { \
|
if (lltrace < 0) { \
|
||||||
goto exit_unwind; \
|
goto exit_unwind; \
|
||||||
} \
|
} \
|
||||||
|
|
4
Python/executor_cases.c.h
generated
4
Python/executor_cases.c.h
generated
|
@ -5878,7 +5878,7 @@
|
||||||
stack_pointer = _PyFrame_GetStackPointer(frame);
|
stack_pointer = _PyFrame_GetStackPointer(frame);
|
||||||
#if defined(Py_DEBUG) && !defined(_Py_JIT)
|
#if defined(Py_DEBUG) && !defined(_Py_JIT)
|
||||||
OPT_HIST(trace_uop_execution_counter, trace_run_length_hist);
|
OPT_HIST(trace_uop_execution_counter, trace_run_length_hist);
|
||||||
if (lltrace >= 2) {
|
if (frame->lltrace >= 2) {
|
||||||
_PyFrame_SetStackPointer(frame, stack_pointer);
|
_PyFrame_SetStackPointer(frame, stack_pointer);
|
||||||
printf("SIDE EXIT: [UOp ");
|
printf("SIDE EXIT: [UOp ");
|
||||||
_PyUOpPrint(&next_uop[-1]);
|
_PyUOpPrint(&next_uop[-1]);
|
||||||
|
@ -6072,7 +6072,7 @@
|
||||||
_Py_CODEUNIT *target = frame->instr_ptr;
|
_Py_CODEUNIT *target = frame->instr_ptr;
|
||||||
#if defined(Py_DEBUG) && !defined(_Py_JIT)
|
#if defined(Py_DEBUG) && !defined(_Py_JIT)
|
||||||
OPT_HIST(trace_uop_execution_counter, trace_run_length_hist);
|
OPT_HIST(trace_uop_execution_counter, trace_run_length_hist);
|
||||||
if (lltrace >= 2) {
|
if (frame->lltrace >= 2) {
|
||||||
_PyFrame_SetStackPointer(frame, stack_pointer);
|
_PyFrame_SetStackPointer(frame, stack_pointer);
|
||||||
printf("DYNAMIC EXIT: [UOp ");
|
printf("DYNAMIC EXIT: [UOp ");
|
||||||
_PyUOpPrint(&next_uop[-1]);
|
_PyUOpPrint(&next_uop[-1]);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue