aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2020-09-17 11:47:50 -0600
committerTom Tromey <tom@tromey.com>2020-09-17 11:58:56 -0600
commit6108fd1823f9cf036bbbe528ffcdf2fee489b40a (patch)
tree0be755427c836f6981902a0a49b5b84f0f36f4dc
parentfa9b11648c07ecb02a9c038304d646a5c652a5e7 (diff)
downloadgdb-6108fd1823f9cf036bbbe528ffcdf2fee489b40a.zip
gdb-6108fd1823f9cf036bbbe528ffcdf2fee489b40a.tar.gz
gdb-6108fd1823f9cf036bbbe528ffcdf2fee489b40a.tar.bz2
Use htab_up in type copying
This changes create_copied_types_hash to return an htab_up, then modifies the callers to avoid explicit use of htab_delete. gdb/ChangeLog 2020-09-17 Tom Tromey <tom@tromey.com> * value.c (preserve_values): Update. * python/py-type.c (save_objfile_types): Update. * guile/scm-type.c (save_objfile_types): Update. * gdbtypes.h (create_copied_types_hash): Return htab_up. * gdbtypes.c (create_copied_types_hash): Return htab_up. * compile/compile-object-run.c (compile_object_run): Update.
-rw-r--r--gdb/ChangeLog9
-rw-r--r--gdb/compile/compile-object-run.c6
-rw-r--r--gdb/gdbtypes.c10
-rw-r--r--gdb/gdbtypes.h2
-rw-r--r--gdb/guile/scm-type.c7
-rw-r--r--gdb/python/py-type.c10
-rw-r--r--gdb/value.c11
7 files changed, 27 insertions, 28 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 375fa33..b7e93c1 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,14 @@
2020-09-17 Tom Tromey <tom@tromey.com>
+ * value.c (preserve_values): Update.
+ * python/py-type.c (save_objfile_types): Update.
+ * guile/scm-type.c (save_objfile_types): Update.
+ * gdbtypes.h (create_copied_types_hash): Return htab_up.
+ * gdbtypes.c (create_copied_types_hash): Return htab_up.
+ * compile/compile-object-run.c (compile_object_run): Update.
+
+2020-09-17 Tom Tromey <tom@tromey.com>
+
* typeprint.h (class typedef_hash_table) <~typedef_hash_table>:
Remove.
<m_table>: Now htab_up.
diff --git a/gdb/compile/compile-object-run.c b/gdb/compile/compile-object-run.c
index a2f3990..533478a 100644
--- a/gdb/compile/compile-object-run.c
+++ b/gdb/compile/compile-object-run.c
@@ -140,14 +140,12 @@ compile_object_run (struct compile_module *module)
try
{
struct type *func_type = SYMBOL_TYPE (func_sym);
- htab_t copied_types;
int current_arg = 0;
struct value **vargs;
/* OBJFILE may disappear while FUNC_TYPE still will be in use. */
- copied_types = create_copied_types_hash (objfile);
- func_type = copy_type_recursive (objfile, func_type, copied_types);
- htab_delete (copied_types);
+ htab_up copied_types = create_copied_types_hash (objfile);
+ func_type = copy_type_recursive (objfile, func_type, copied_types.get ());
gdb_assert (func_type->code () == TYPE_CODE_FUNC);
func_val = value_from_pointer (lookup_pointer_type (func_type),
diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c
index f1f4ec5..63f0d7c 100644
--- a/gdb/gdbtypes.c
+++ b/gdb/gdbtypes.c
@@ -5227,13 +5227,13 @@ type_pair_eq (const void *item_lhs, const void *item_rhs)
types without duplicates. We use OBJFILE's obstack, because
OBJFILE is about to be deleted. */
-htab_t
+htab_up
create_copied_types_hash (struct objfile *objfile)
{
- return htab_create_alloc_ex (1, type_pair_hash, type_pair_eq,
- NULL, &objfile->objfile_obstack,
- hashtab_obstack_allocate,
- dummy_obstack_deallocate);
+ return htab_up (htab_create_alloc_ex (1, type_pair_hash, type_pair_eq,
+ NULL, &objfile->objfile_obstack,
+ hashtab_obstack_allocate,
+ dummy_obstack_deallocate));
}
/* Recursively copy (deep copy) a dynamic attribute list of a type. */
diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h
index d28622d..4b67efe 100644
--- a/gdb/gdbtypes.h
+++ b/gdb/gdbtypes.h
@@ -2472,7 +2472,7 @@ extern int class_or_union_p (const struct type *);
extern void maintenance_print_type (const char *, int);
-extern htab_t create_copied_types_hash (struct objfile *objfile);
+extern htab_up create_copied_types_hash (struct objfile *objfile);
extern struct type *copy_type_recursive (struct objfile *objfile,
struct type *type,
diff --git a/gdb/guile/scm-type.c b/gdb/guile/scm-type.c
index 19b7996..8fc9629 100644
--- a/gdb/guile/scm-type.c
+++ b/gdb/guile/scm-type.c
@@ -387,20 +387,17 @@ static void
save_objfile_types (struct objfile *objfile, void *datum)
{
htab_t htab = (htab_t) datum;
- htab_t copied_types;
if (!gdb_scheme_initialized)
return;
- copied_types = create_copied_types_hash (objfile);
+ htab_up copied_types = create_copied_types_hash (objfile);
if (htab != NULL)
{
- htab_traverse_noresize (htab, tyscm_copy_type_recursive, copied_types);
+ htab_traverse_noresize (htab, tyscm_copy_type_recursive, copied_types.get ());
htab_delete (htab);
}
-
- htab_delete (copied_types);
}
/* Administrivia for field smobs. */
diff --git a/gdb/python/py-type.c b/gdb/python/py-type.c
index 951dac2..55d8264 100644
--- a/gdb/python/py-type.c
+++ b/gdb/python/py-type.c
@@ -1066,7 +1066,6 @@ static void
save_objfile_types (struct objfile *objfile, void *datum)
{
type_object *obj = (type_object *) datum;
- htab_t copied_types;
if (!gdb_python_initialized)
return;
@@ -1075,23 +1074,22 @@ save_objfile_types (struct objfile *objfile, void *datum)
operating on. */
gdbpy_enter enter_py (objfile->arch (), current_language);
- copied_types = create_copied_types_hash (objfile);
+ htab_up copied_types = create_copied_types_hash (objfile);
while (obj)
{
type_object *next = obj->next;
- htab_empty (copied_types);
+ htab_empty (copied_types.get ());
- obj->type = copy_type_recursive (objfile, obj->type, copied_types);
+ obj->type = copy_type_recursive (objfile, obj->type,
+ copied_types.get ());
obj->next = NULL;
obj->prev = NULL;
obj = next;
}
-
- htab_delete (copied_types);
}
static void
diff --git a/gdb/value.c b/gdb/value.c
index c8d9414..4b28213 100644
--- a/gdb/value.c
+++ b/gdb/value.c
@@ -2519,22 +2519,19 @@ preserve_one_internalvar (struct internalvar *var, struct objfile *objfile,
void
preserve_values (struct objfile *objfile)
{
- htab_t copied_types;
struct internalvar *var;
/* Create the hash table. We allocate on the objfile's obstack, since
it is soon to be deleted. */
- copied_types = create_copied_types_hash (objfile);
+ htab_up copied_types = create_copied_types_hash (objfile);
for (const value_ref_ptr &item : value_history)
- preserve_one_value (item.get (), objfile, copied_types);
+ preserve_one_value (item.get (), objfile, copied_types.get ());
for (var = internalvars; var; var = var->next)
- preserve_one_internalvar (var, objfile, copied_types);
+ preserve_one_internalvar (var, objfile, copied_types.get ());
- preserve_ext_lang_values (objfile, copied_types);
-
- htab_delete (copied_types);
+ preserve_ext_lang_values (objfile, copied_types.get ());
}
static void