diff options
-rw-r--r-- | gdb/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/compile/compile-object-run.c | 17 |
2 files changed, 20 insertions, 3 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 3614d8e..fc3d6e3 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2020-09-18 Andrew Burgess <andrew.burgess@embecosm.com> + + * compile/compile-object-run.c (create_copied_type_recursive): New + function. + (compile_object_run): Use new function. + 2020-08-21 Jon Turney <jon.turney@dronecode.org.uk> * NEWS: Mention x86_64 Cygwin core file support. diff --git a/gdb/compile/compile-object-run.c b/gdb/compile/compile-object-run.c index 533478a..985c6f3 100644 --- a/gdb/compile/compile-object-run.c +++ b/gdb/compile/compile-object-run.c @@ -105,6 +105,16 @@ do_module_cleanup (void *arg, int registers_valid) xfree (data); } +/* Create a copy of FUNC_TYPE that is independent of OBJFILE. */ + +static type * +create_copied_type_recursive (objfile *objfile, type *func_type) +{ + htab_up copied_types = create_copied_types_hash (objfile); + func_type = copy_type_recursive (objfile, func_type, copied_types.get ()); + return func_type; +} + /* Perform inferior call of MODULE. This function may throw an error. This function may leave files referenced by MODULE on disk until the inferior call dummy frame is discarded. This function may throw errors. @@ -143,9 +153,10 @@ compile_object_run (struct compile_module *module) int current_arg = 0; struct value **vargs; - /* OBJFILE may disappear while FUNC_TYPE still will be in use. */ - htab_up copied_types = create_copied_types_hash (objfile); - func_type = copy_type_recursive (objfile, func_type, copied_types.get ()); + /* OBJFILE may disappear while FUNC_TYPE is still in use as a + result of the call to DO_MODULE_CLEANUP below, so we need a copy + that does not depend on the objfile in anyway. */ + func_type = create_copied_type_recursive (objfile, func_type); gdb_assert (func_type->code () == TYPE_CODE_FUNC); func_val = value_from_pointer (lookup_pointer_type (func_type), |