From 219c04fc3b3f7e7e19fc5f8d47e5036c7a80377f Mon Sep 17 00:00:00 2001 From: Jan Vrany Date: Tue, 1 Feb 2022 14:49:30 +0000 Subject: [PATCH] gdb/python: fix gdb.Objfile.__repr__ () for dynamically compiled code While experimenting with JIT reader API I realized that calling repr () on objfile created by JIT reader crashes GDB. The problem was that objfpy_repr () called objfile_filename () which returned NULL, causing PyString_FromFormat () to crash. This commit fixes this problem by using objfile_name () instead of objfile_filename (). This also makes consistent with the value of gdb.Objfile.filename variable. --- gdb/python/py-objfile.c | 2 +- gdb/testsuite/gdb.base/jit-reader.exp | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/gdb/python/py-objfile.c b/gdb/python/py-objfile.c index 6055a42260b..48d2eb306d1 100644 --- a/gdb/python/py-objfile.c +++ b/gdb/python/py-objfile.c @@ -513,7 +513,7 @@ objfpy_repr (PyObject *self_) return PyString_FromString (""); return PyString_FromFormat ("", - objfile_filename (obj)); + objfile_name (obj)); } /* Subroutine of gdbpy_lookup_objfile_by_build_id to simplify it. diff --git a/gdb/testsuite/gdb.base/jit-reader.exp b/gdb/testsuite/gdb.base/jit-reader.exp index 7ee16d69c84..bcc85640ec0 100644 --- a/gdb/testsuite/gdb.base/jit-reader.exp +++ b/gdb/testsuite/gdb.base/jit-reader.exp @@ -227,6 +227,16 @@ proc jit_reader_test {} { "Attempt to assign to an unmodifiable value\." \ "cannot assign to register" } + + if { ![skip_python_tests] } { + gdb_test "python print(gdb.objfiles())" \ + "$any>>$any" \ + "python gdb.Objfile.__repr__ ()" + + gdb_test "python print(list(map(lambda objf : objf.filename, gdb.objfiles())))" \ + "$any'<< JIT compiled code >>'$any" \ + "python gdb.Objfile.filename" + } } } -- 2.30.2