From 2a32dbf110cf80ec9a00290ea6bc84f409948cb0 Mon Sep 17 00:00:00 2001 From: Sam Gross Date: Fri, 19 Nov 2021 13:53:46 -0500 Subject: [PATCH] [3.9] bpo-45838: Fix incorrect line numbers in Tools/gdb/libpython.py (GH-29628) The line number calculation in libpython.py did not properly handle negative (signed) line table deltas. --- Lib/test/test_gdb.py | 25 +++++++++++++++++++ .../2021-11-18-11-20-21.bpo-45838.TH6mwc.rst | 1 + Tools/gdb/libpython.py | 5 +++- 3 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 Misc/NEWS.d/next/Tools-Demos/2021-11-18-11-20-21.bpo-45838.TH6mwc.rst diff --git a/Lib/test/test_gdb.py b/Lib/test/test_gdb.py index 5f554897f86a..b3aa855a5bd5 100644 --- a/Lib/test/test_gdb.py +++ b/Lib/test/test_gdb.py @@ -955,6 +955,31 @@ def __init__(self): self.assertRegex(gdb_output, r" + File "", line 7, in foo + File "", line 11, in +''') + class PyPrintTests(DebuggerTests): @unittest.skipIf(python_is_optimized(), diff --git a/Misc/NEWS.d/next/Tools-Demos/2021-11-18-11-20-21.bpo-45838.TH6mwc.rst b/Misc/NEWS.d/next/Tools-Demos/2021-11-18-11-20-21.bpo-45838.TH6mwc.rst new file mode 100644 index 000000000000..b6dafc5c3edc --- /dev/null +++ b/Misc/NEWS.d/next/Tools-Demos/2021-11-18-11-20-21.bpo-45838.TH6mwc.rst @@ -0,0 +1 @@ +Fix line number calculation when debugging Python with GDB. diff --git a/Tools/gdb/libpython.py b/Tools/gdb/libpython.py index aeaa63e540d8..45be5ab9bb9b 100755 --- a/Tools/gdb/libpython.py +++ b/Tools/gdb/libpython.py @@ -659,7 +659,10 @@ def addr2line(self, addrq): addr += ord(addr_incr) if addr > addrq: return lineno - lineno += ord(line_incr) + line_delta = ord(line_incr) + if line_delta >= 128: + line_delta -= 256 + lineno += line_delta return lineno