From: Tom Tromey Date: Thu, 17 Sep 2020 17:47:50 +0000 (-0600) Subject: Use htab_up in type copying X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=6108fd1823f9cf036bbbe528ffcdf2fee489b40a;p=binutils-gdb.git 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 * 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. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 375fa335f3a..b7e93c127ba 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,12 @@ +2020-09-17 Tom Tromey + + * 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 * typeprint.h (class typedef_hash_table) <~typedef_hash_table>: diff --git a/gdb/compile/compile-object-run.c b/gdb/compile/compile-object-run.c index a2f39900053..533478a0fb4 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 f1f4ec52c7b..63f0d7c8489 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 d28622d46ce..4b67efe3cbf 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 19b7996c946..8fc9629eb0d 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 951dac26174..55d8264fea9 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 c8d94149bb8..4b28213594a 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