mirror of
https://github.com/python/cpython.git
synced 2025-07-07 19:35:27 +00:00
GH-129763: Remove the LLTRACE macro (GH-129764)
This commit is contained in:
parent
f52a3a51eb
commit
fbaa6c8ff0
9 changed files with 25 additions and 49 deletions
|
@ -0,0 +1 @@
|
||||||
|
Remove the internal ``LLTRACE`` macro (use :c:macro:`Py_DEBUG` instead).
|
|
@ -78,22 +78,16 @@ Py_DEBUG
|
||||||
|
|
||||||
This is what is generally meant by "a debug build" of Python.
|
This is what is generally meant by "a debug build" of Python.
|
||||||
|
|
||||||
Py_DEBUG implies LLTRACE and Py_REF_DEBUG. In addition, C assert()s are enabled
|
Py_DEBUG implies Py_REF_DEBUG. In addition, C assert()s are enabled
|
||||||
(via the C way: by not defining NDEBUG), and some routines do additional sanity
|
(via the C way: by not defining NDEBUG), and some routines do additional sanity
|
||||||
checks inside "#ifdef Py_DEBUG" blocks.
|
checks inside "#ifdef Py_DEBUG" blocks.
|
||||||
|
|
||||||
|
Also, compile in support for "lltrace" (Low Level TRACE-ing) of the main
|
||||||
LLTRACE
|
interpreter loop. Before _PyEval_EvalFrameDefault executes a frame's code, it
|
||||||
-------
|
checks the frame's global namespace for a variable "__lltrace__" (as well as for
|
||||||
|
the environment variable PYTHON_LLTRACE"). If such a variable is found, mounds
|
||||||
Compile in support for Low Level TRACE-ing of the main interpreter loop.
|
of information about what the interpreter is doing are sprayed to stdout, such
|
||||||
|
as every opcode and opcode argument and values pushed onto and popped off the
|
||||||
When this preprocessor symbol is defined, before PyEval_EvalFrame executes a
|
value stack. Higher integer values for the environment variable result in more
|
||||||
frame's code it checks the frame's global namespace for a variable
|
and more detail being printed (the global __lltrace__ always enables the maximum
|
||||||
"__lltrace__". If such a variable is found, mounds of information about what
|
output). Not useful very often, but *very* useful when needed.
|
||||||
the interpreter is doing are sprayed to stdout, such as every opcode and opcode
|
|
||||||
argument and values pushed onto and popped off the value stack.
|
|
||||||
|
|
||||||
Not useful very often, but very useful when needed.
|
|
||||||
|
|
||||||
Py_DEBUG implies LLTRACE.
|
|
||||||
|
|
|
@ -5301,7 +5301,7 @@ dummy_func(
|
||||||
goto exception_unwind;
|
goto exception_unwind;
|
||||||
}
|
}
|
||||||
/* Resume normal execution */
|
/* Resume normal execution */
|
||||||
#ifdef LLTRACE
|
#ifdef Py_DEBUG
|
||||||
if (frame->lltrace >= 5) {
|
if (frame->lltrace >= 5) {
|
||||||
lltrace_resume_frame(frame);
|
lltrace_resume_frame(frame);
|
||||||
}
|
}
|
||||||
|
@ -5340,15 +5340,7 @@ dummy_func(
|
||||||
}
|
}
|
||||||
next_instr = frame->instr_ptr;
|
next_instr = frame->instr_ptr;
|
||||||
|
|
||||||
#ifdef LLTRACE
|
LLTRACE_RESUME_FRAME();
|
||||||
{
|
|
||||||
int lltrace = maybe_lltrace_resume_frame(frame, GLOBALS());
|
|
||||||
frame->lltrace = lltrace;
|
|
||||||
if (lltrace < 0) {
|
|
||||||
goto exit_unwind;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef Py_DEBUG
|
#ifdef Py_DEBUG
|
||||||
/* _PyEval_EvalFrameDefault() must not be called with an exception set,
|
/* _PyEval_EvalFrameDefault() must not be called with an exception set,
|
||||||
|
|
|
@ -43,11 +43,6 @@
|
||||||
|
|
||||||
#include <stdbool.h> // bool
|
#include <stdbool.h> // bool
|
||||||
|
|
||||||
#ifdef Py_DEBUG
|
|
||||||
/* For debugging the interpreter: */
|
|
||||||
# define LLTRACE 1 /* Low-level trace feature */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if !defined(Py_BUILD_CORE)
|
#if !defined(Py_BUILD_CORE)
|
||||||
# error "ceval.c must be build with Py_BUILD_CORE define for best performance"
|
# error "ceval.c must be build with Py_BUILD_CORE define for best performance"
|
||||||
#endif
|
#endif
|
||||||
|
@ -136,7 +131,7 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#ifdef LLTRACE
|
#ifdef Py_DEBUG
|
||||||
static void
|
static void
|
||||||
dump_stack(_PyInterpreterFrame *frame, _PyStackRef *stack_pointer)
|
dump_stack(_PyInterpreterFrame *frame, _PyStackRef *stack_pointer)
|
||||||
{
|
{
|
||||||
|
@ -818,7 +813,7 @@ _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
|
#ifdef Py_DEBUG
|
||||||
entry_frame.lltrace = 0;
|
entry_frame.lltrace = 0;
|
||||||
#endif
|
#endif
|
||||||
/* Push frame */
|
/* Push frame */
|
||||||
|
|
|
@ -108,21 +108,21 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* 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 Py_DEBUG
|
||||||
#define PRE_DISPATCH_GOTO() if (frame->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)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if LLTRACE
|
#ifdef Py_DEBUG
|
||||||
#define LLTRACE_RESUME_FRAME() \
|
#define LLTRACE_RESUME_FRAME() \
|
||||||
do { \
|
do { \
|
||||||
int lltrace = maybe_lltrace_resume_frame(frame, GLOBALS()); \
|
int lltrace = maybe_lltrace_resume_frame(frame, GLOBALS()); \
|
||||||
frame->lltrace = lltrace; \
|
|
||||||
if (lltrace < 0) { \
|
if (lltrace < 0) { \
|
||||||
JUMP_TO_LABEL(exit_unwind); \
|
JUMP_TO_LABEL(exit_unwind); \
|
||||||
} \
|
} \
|
||||||
|
frame->lltrace = lltrace; \
|
||||||
} while (0)
|
} while (0)
|
||||||
#else
|
#else
|
||||||
#define LLTRACE_RESUME_FRAME() ((void)0)
|
#define LLTRACE_RESUME_FRAME() ((void)0)
|
||||||
|
|
13
Python/generated_cases.c.h
generated
13
Python/generated_cases.c.h
generated
|
@ -11416,7 +11416,7 @@ JUMP_TO_LABEL(error);
|
||||||
JUMP_TO_LABEL(exception_unwind);
|
JUMP_TO_LABEL(exception_unwind);
|
||||||
}
|
}
|
||||||
/* Resume normal execution */
|
/* Resume normal execution */
|
||||||
#ifdef LLTRACE
|
#ifdef Py_DEBUG
|
||||||
if (frame->lltrace >= 5) {
|
if (frame->lltrace >= 5) {
|
||||||
lltrace_resume_frame(frame);
|
lltrace_resume_frame(frame);
|
||||||
}
|
}
|
||||||
|
@ -11458,16 +11458,7 @@ JUMP_TO_LABEL(error);
|
||||||
JUMP_TO_LABEL(exit_unwind);
|
JUMP_TO_LABEL(exit_unwind);
|
||||||
}
|
}
|
||||||
next_instr = frame->instr_ptr;
|
next_instr = frame->instr_ptr;
|
||||||
#ifdef LLTRACE
|
LLTRACE_RESUME_FRAME();
|
||||||
{
|
|
||||||
int lltrace = maybe_lltrace_resume_frame(frame, GLOBALS());
|
|
||||||
frame->lltrace = lltrace;
|
|
||||||
if (lltrace < 0) {
|
|
||||||
JUMP_TO_LABEL(exit_unwind);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef Py_DEBUG
|
#ifdef Py_DEBUG
|
||||||
/* _PyEval_EvalFrameDefault() must not be called with an exception set,
|
/* _PyEval_EvalFrameDefault() must not be called with an exception set,
|
||||||
because it can clear it (directly or indirectly) and so the
|
because it can clear it (directly or indirectly) and so the
|
||||||
|
|
|
@ -69,7 +69,6 @@ Objects/tupleobject.c:_Py_tuple_zero_allocs Py_ssize_t _Py_
|
||||||
Objects/typeobject.c:next_version_tag static unsigned int next_version_tag
|
Objects/typeobject.c:next_version_tag static unsigned int next_version_tag
|
||||||
Python/Python-ast.c:init_types():initialized static int initialized
|
Python/Python-ast.c:init_types():initialized static int initialized
|
||||||
Python/bootstrap_hash.c:urandom_cache static struct { int fd; dev_t st_dev; ino_t st_ino; } urandom_cache
|
Python/bootstrap_hash.c:urandom_cache static struct { int fd; dev_t st_dev; ino_t st_ino; } urandom_cache
|
||||||
Python/ceval.c:lltrace static int lltrace
|
|
||||||
Python/ceval.c:make_pending_calls():busy static int busy
|
Python/ceval.c:make_pending_calls():busy static int busy
|
||||||
Python/dynload_shlib.c:handles static struct { dev_t dev; ino_t ino; void *handle; } handles[128]
|
Python/dynload_shlib.c:handles static struct { dev_t dev; ino_t ino; void *handle; } handles[128]
|
||||||
Python/dynload_shlib.c:nhandles static int nhandles
|
Python/dynload_shlib.c:nhandles static int nhandles
|
||||||
|
|
|
@ -676,7 +676,6 @@ NON_ESCAPING_FUNCTIONS = (
|
||||||
"backoff_counter_triggers",
|
"backoff_counter_triggers",
|
||||||
"initial_temperature_backoff_counter",
|
"initial_temperature_backoff_counter",
|
||||||
"JUMP_TO_LABEL",
|
"JUMP_TO_LABEL",
|
||||||
"maybe_lltrace_resume_frame",
|
|
||||||
"restart_backoff_counter",
|
"restart_backoff_counter",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -81,6 +81,11 @@ do { \
|
||||||
#undef WITHIN_STACK_BOUNDS
|
#undef WITHIN_STACK_BOUNDS
|
||||||
#define WITHIN_STACK_BOUNDS() 1
|
#define WITHIN_STACK_BOUNDS() 1
|
||||||
|
|
||||||
|
#undef LLTRACE_RESUME_FRAME
|
||||||
|
#define LLTRACE_RESUME_FRAME() \
|
||||||
|
do { \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
#define TIER_TWO 2
|
#define TIER_TWO 2
|
||||||
|
|
||||||
__attribute__((preserve_none)) _Py_CODEUNIT *
|
__attribute__((preserve_none)) _Py_CODEUNIT *
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue