Skip to content

Commit

Permalink
GH-129763: Remove the LLTRACE macro (GH-129764)
Browse files Browse the repository at this point in the history
  • Loading branch information
brandtbucher authored Feb 7, 2025
1 parent f52a3a5 commit fbaa6c8
Show file tree
Hide file tree
Showing 9 changed files with 25 additions and 49 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Remove the internal ``LLTRACE`` macro (use :c:macro:`Py_DEBUG` instead).
26 changes: 10 additions & 16 deletions Misc/SpecialBuilds.txt
Original file line number Diff line number Diff line change
Expand Up @@ -78,22 +78,16 @@ Py_DEBUG

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
checks inside "#ifdef Py_DEBUG" blocks.


LLTRACE
-------

Compile in support for Low Level TRACE-ing of the main interpreter loop.

When this preprocessor symbol is defined, before PyEval_EvalFrame executes a
frame's code it checks the frame's global namespace for a variable
"__lltrace__". If such a variable is found, mounds 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 value stack.

Not useful very often, but very useful when needed.

Py_DEBUG implies LLTRACE.
Also, compile in support for "lltrace" (Low Level TRACE-ing) of the main
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
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
value stack. Higher integer values for the environment variable result in more
and more detail being printed (the global __lltrace__ always enables the maximum
output). Not useful very often, but *very* useful when needed.
12 changes: 2 additions & 10 deletions Python/bytecodes.c
Original file line number Diff line number Diff line change
Expand Up @@ -5301,7 +5301,7 @@ dummy_func(
goto exception_unwind;
}
/* Resume normal execution */
#ifdef LLTRACE
#ifdef Py_DEBUG
if (frame->lltrace >= 5) {
lltrace_resume_frame(frame);
}
Expand Down Expand Up @@ -5340,15 +5340,7 @@ dummy_func(
}
next_instr = frame->instr_ptr;

#ifdef LLTRACE
{
int lltrace = maybe_lltrace_resume_frame(frame, GLOBALS());
frame->lltrace = lltrace;
if (lltrace < 0) {
goto exit_unwind;
}
}
#endif
LLTRACE_RESUME_FRAME();

#ifdef Py_DEBUG
/* _PyEval_EvalFrameDefault() must not be called with an exception set,
Expand Down
9 changes: 2 additions & 7 deletions Python/ceval.c
Original file line number Diff line number Diff line change
Expand Up @@ -43,11 +43,6 @@

#include <stdbool.h> // bool

#ifdef Py_DEBUG
/* For debugging the interpreter: */
# define LLTRACE 1 /* Low-level trace feature */
#endif

#if !defined(Py_BUILD_CORE)
# error "ceval.c must be build with Py_BUILD_CORE define for best performance"
#endif
Expand Down Expand Up @@ -136,7 +131,7 @@
#endif


#ifdef LLTRACE
#ifdef Py_DEBUG
static void
dump_stack(_PyInterpreterFrame *frame, _PyStackRef *stack_pointer)
{
Expand Down Expand Up @@ -818,7 +813,7 @@ _PyEval_EvalFrameDefault(PyThreadState *tstate, _PyInterpreterFrame *frame, int
entry_frame.owner = FRAME_OWNED_BY_INTERPRETER;
entry_frame.visited = 0;
entry_frame.return_offset = 0;
#ifdef LLTRACE
#ifdef Py_DEBUG
entry_frame.lltrace = 0;
#endif
/* Push frame */
Expand Down
6 changes: 3 additions & 3 deletions Python/ceval_macros.h
Original file line number Diff line number Diff line change
Expand Up @@ -108,21 +108,21 @@
#endif

/* PRE_DISPATCH_GOTO() does lltrace if enabled. Normally a no-op */
#ifdef LLTRACE
#ifdef Py_DEBUG
#define PRE_DISPATCH_GOTO() if (frame->lltrace >= 5) { \
lltrace_instruction(frame, stack_pointer, next_instr, opcode, oparg); }
#else
#define PRE_DISPATCH_GOTO() ((void)0)
#endif

#if LLTRACE
#ifdef Py_DEBUG
#define LLTRACE_RESUME_FRAME() \
do { \
int lltrace = maybe_lltrace_resume_frame(frame, GLOBALS()); \
frame->lltrace = lltrace; \
if (lltrace < 0) { \
JUMP_TO_LABEL(exit_unwind); \
} \
frame->lltrace = lltrace; \
} while (0)
#else
#define LLTRACE_RESUME_FRAME() ((void)0)
Expand Down
13 changes: 2 additions & 11 deletions Python/generated_cases.c.h

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion Tools/c-analyzer/TODO
Original file line number Diff line number Diff line change
Expand Up @@ -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
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/ceval.c:lltrace static int lltrace
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:nhandles static int nhandles
Expand Down
1 change: 0 additions & 1 deletion Tools/cases_generator/analyzer.py
Original file line number Diff line number Diff line change
Expand Up @@ -676,7 +676,6 @@ def has_error_without_pop(op: parser.CodeDef) -> bool:
"backoff_counter_triggers",
"initial_temperature_backoff_counter",
"JUMP_TO_LABEL",
"maybe_lltrace_resume_frame",
"restart_backoff_counter",
)

Expand Down
5 changes: 5 additions & 0 deletions Tools/jit/template.c
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,11 @@ do { \
#undef WITHIN_STACK_BOUNDS
#define WITHIN_STACK_BOUNDS() 1

#undef LLTRACE_RESUME_FRAME
#define LLTRACE_RESUME_FRAME() \
do { \
} while (0)

#define TIER_TWO 2

__attribute__((preserve_none)) _Py_CODEUNIT *
Expand Down

0 comments on commit fbaa6c8

Please sign in to comment.