diff options
author | Jan Vrany <jan.vrany@labware.com> | 2025-03-19 21:12:53 +0000 |
---|---|---|
committer | Jan Vrany <jan.vrany@labware.com> | 2025-03-19 21:12:53 +0000 |
commit | d1da7bb43ecab2425a1135f09d6f62c9a7f63ae7 (patch) | |
tree | 7311e10f48d395cd6343d04a317c7136e431c068 /gdb | |
parent | f55f92476159098d5200d57768fdc0071e04ed67 (diff) | |
download | binutils-d1da7bb43ecab2425a1135f09d6f62c9a7f63ae7.zip binutils-d1da7bb43ecab2425a1135f09d6f62c9a7f63ae7.tar.gz binutils-d1da7bb43ecab2425a1135f09d6f62c9a7f63ae7.tar.bz2 |
gdb/python: convert gdb.Symtab_and_line to use gdbpy_registry
This commit converts gdb.Symtab_and_line to use gdbpy_registry for
lifecycle management.
Approved-By: Tom Tromey <tom@tromey.com>
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/python/py-symtab.c | 47 |
1 files changed, 11 insertions, 36 deletions
diff --git a/gdb/python/py-symtab.c b/gdb/python/py-symtab.c index 80276cd..2381e4d 100644 --- a/gdb/python/py-symtab.c +++ b/gdb/python/py-symtab.c @@ -65,30 +65,19 @@ struct sal_object { data. All access to obj->sal should be gated by SALPY_REQUIRE_VALID which will raise an exception on invalid symbol table and line objects. */ -struct salpy_deleter +struct salpy_invalidator { void operator() (sal_object *obj) { - gdbpy_enter enter_py; - - while (obj) - { - sal_object *next = obj->next; - - obj->next = nullptr; - obj->prev = nullptr; - xfree (obj->sal); - obj->sal = nullptr; - - obj = next; - } + xfree (obj->sal); + obj->sal = nullptr; } }; extern PyTypeObject sal_object_type CPYCHECKER_TYPE_OBJECT_FOR_TYPEDEF ("sal_object"); -static const registry<objfile>::key<sal_object, salpy_deleter> - salpy_objfile_data_key; +static const gdbpy_registry<gdbpy_tracking_registry_storage<sal_object, + symtab_and_line, &sal_object::sal, salpy_invalidator>> salpy_registry; /* Require a valid symbol table and line object. All access to sal_object->sal should be gated by this call. */ @@ -335,15 +324,9 @@ salpy_dealloc (PyObject *self) { sal_object *self_sal = (sal_object *) self; - if (self_sal->prev) - self_sal->prev->next = self_sal->next; - else if (self_sal->sal != nullptr && self_sal->sal->symtab != nullptr) - salpy_objfile_data_key.set - (self_sal->sal->symtab->compunit ()->objfile (), - self_sal->next); - - if (self_sal->next) - self_sal->next->prev = self_sal->prev; + if (self_sal->sal != nullptr && self_sal->sal->symtab != nullptr) + salpy_registry.remove (self_sal->sal->symtab->compunit ()->objfile (), + self_sal); xfree (self_sal->sal); Py_TYPE (self)->tp_free (self); @@ -360,22 +343,14 @@ set_sal (sal_object *sal_obj, struct symtab_and_line sal) sal_obj->sal = ((struct symtab_and_line *) xmemdup (&sal, sizeof (struct symtab_and_line), sizeof (struct symtab_and_line))); - sal_obj->prev = NULL; + sal_obj->prev = nullptr; + sal_obj->next = nullptr; /* If the SAL does not have a symtab, we do not add it to the objfile cleanup observer linked list. */ symtab *symtab = sal_obj->sal->symtab; if (symtab != nullptr) - { - sal_obj->next - = salpy_objfile_data_key.get (symtab->compunit ()->objfile ()); - if (sal_obj->next) - sal_obj->next->prev = sal_obj; - - salpy_objfile_data_key.set (symtab->compunit ()->objfile (), sal_obj); - } - else - sal_obj->next = NULL; + salpy_registry.add (symtab->compunit ()->objfile (), sal_obj); } /* Given a symtab, and a symtab_object that has previously been |