]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
gdb/python: add unlink () method to gdb.Objfile object
authorJan Vrany <jan.vrany@labware.com>
Thu, 21 Nov 2024 12:31:20 +0000 (12:31 +0000)
committerJan Vrany <jan.vrany@labware.com>
Thu, 21 Nov 2024 13:52:21 +0000 (13:52 +0000)
This commit adds method allowing one remove any objfile. This is meant
to be used to remove objfiles for dynamic code when this dynamic code
is discarded. However gdb.Objfile.unlink() makes no attempt to ensure
this - to make it consistent with other Python API to create and modify
objfiles related structures (compunits, symbol tables and so on).

Reviewed-By: Eli Zaretskii <eliz@gnu.org>
gdb/doc/python.texi
gdb/python/py-objfile.c
gdb/testsuite/gdb.python/py-objfile.exp

index b3262f7bb0b3b98bb3aa44f1337419144e202304..cd41dd15b07ba8e15e14b2c702528865bd6a9afd 100644 (file)
@@ -5710,6 +5710,12 @@ Return a sequence of all the compunits associated with this objfile.
 @xref{Compunits In Python}.
 @end defun
 
+@defun Objfile.unlink ()
+Remove this objfile.  This should be used only on objfiles created by
+Python (see @code{Objfile.__init__} above) but @code{Objfile.unlink} does
+not make any checks.
+@end defun
+
 @node Frames In Python
 @subsubsection Accessing inferior stack frames from Python
 
index cc225ca135d5e4eaf2bcb10b490027748778e387..f8b29ae1f477776abce524741172b81678a13b52 100644 (file)
@@ -608,6 +608,20 @@ objfpy_lookup_static_symbol (PyObject *self, PyObject *args, PyObject *kw)
   Py_RETURN_NONE;
 }
 
+/* Implementation of gdb.Objfile.unlink ().  */
+
+static PyObject *
+objfpy_unlink (PyObject *self, PyObject *args)
+{
+  objfile_object *obj = (objfile_object *) self;
+
+  OBJFPY_REQUIRE_VALID (obj);
+
+  obj->objfile->unlink();
+
+  Py_RETURN_NONE;
+}
+
 /* Implement repr() for gdb.Objfile.  */
 
 static PyObject *
@@ -871,6 +885,10 @@ Look up a static-linkage global symbol in this objfile and return it." },
     "compunits () -> List.\n\
 Return a sequence of compunits associated to this objfile." },
 
+  { "unlink", objfpy_unlink, METH_NOARGS,
+    "unlink ().\n\
+Remove this objfile." },
+
   { NULL }
 };
 
index 250ae4763b7ccaf5f16b58f4abbc9945721d7988..7a88cac663d8136335daaf1d668d91ee4e0abf88 100644 (file)
@@ -209,3 +209,15 @@ gdb_test "python print( gdb.Objfile(\"Test objfile 4\", gdb))" \
 gdb_test "python print( gdb.Objfile(\"Test objfile 5\", gdb.selected_inferior(), gdb.selected_inferior()))" \
        "TypeError.*:.*" \
        "create objfile with valid inferior but invalid arch"
+
+gdb_test "python print(objfile.unlink())" \
+       "None" \
+       "remove (dynamic) objfile"
+
+gdb_test "python print(objfile in gdb.objfiles())" \
+       "False" \
+       "removed (dynamic) objfile no longer in gdb.objfiles()"
+
+gdb_test "python print(objfile.is_valid())" \
+       "False" \
+       "removes (dynamic) objfile is no longer valid"