diff options
author | Tom Tromey <tom@tromey.com> | 2019-11-01 16:21:04 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2019-12-12 15:50:52 -0700 |
commit | 268e4f09144c48e02f01d82ab3aab359457df214 (patch) | |
tree | 8685bc0ca92837f6f41a97059378b1b12d44cf96 /gdb/compile | |
parent | f65fe5704af56aca58fd5547d0841a9512e540af (diff) | |
download | gdb-268e4f09144c48e02f01d82ab3aab359457df214.zip gdb-268e4f09144c48e02f01d82ab3aab359457df214.tar.gz gdb-268e4f09144c48e02f01d82ab3aab359457df214.tar.bz2 |
Make the objfile destructor private
The idea behind this is that, in the long run, some code will need to
be able to hold onto an objfile after it is unlinked from the program
space. In particular, this is needed for some functionality to be
moved to worker threads -- otherwise the objfile can be deleted while
still in use.
So, this makes ~objfile private, replacing it with an "unlink" method,
making it more obvious which operation is intended at the calling
points.
gdb/ChangeLog
2019-12-12 Tom Tromey <tom@tromey.com>
* symfile.c (syms_from_objfile_1): Use objfile_up.
(syms_from_objfile_1, remove_symbol_file_command): Call unlink
method.
(reread_symbols): Use objfile_up.
* solib.c (update_solib_list, reload_shared_libraries_1): Call
unlink method.
* objfiles.h (struct objfile) <~objfile>: Now private.
<unlink>: New method.
(struct objfile_deleter): New.
(objfile_up): New typedef.
* objfiles.c (objfile::unlink): New method.
(free_objfile_separate_debug, free_all_objfiles)
(objfile_purge_solibs): Use it.
* jit.c (jit_unregister_code): Remove.
(jit_inferior_exit_hook, jit_event_handler): Call unlink on
objfile.
* compile/compile-object-run.c (do_module_cleanup): Call unlink on
objfile.
* compile/compile-object-load.c (compile_object_load): Use
objfile_up.
Change-Id: I934bee70b26b8b24e1735828fb1e60fe8a05714f
Diffstat (limited to 'gdb/compile')
-rw-r--r-- | gdb/compile/compile-object-load.c | 6 | ||||
-rw-r--r-- | gdb/compile/compile-object-run.c | 2 |
2 files changed, 4 insertions, 4 deletions
diff --git a/gdb/compile/compile-object-load.c b/gdb/compile/compile-object-load.c index c9bf151..c8762ad 100644 --- a/gdb/compile/compile-object-load.c +++ b/gdb/compile/compile-object-load.c @@ -632,9 +632,9 @@ compile_object_load (const compile_file_names &file_names, /* SYMFILE_VERBOSE is not passed even if FROM_TTY, user is not interested in "Reading symbols from ..." message for automatically generated file. */ - std::unique_ptr<struct objfile> objfile_holder - (symbol_file_add_from_bfd (abfd.get (), filename.get (), - 0, NULL, 0, NULL)); + objfile_up objfile_holder (symbol_file_add_from_bfd (abfd.get (), + filename.get (), + 0, NULL, 0, NULL)); objfile = objfile_holder.get (); func_sym = lookup_global_symbol_from_objfile (objfile, diff --git a/gdb/compile/compile-object-run.c b/gdb/compile/compile-object-run.c index 8173cfe..72f3060 100644 --- a/gdb/compile/compile-object-run.c +++ b/gdb/compile/compile-object-run.c @@ -86,7 +86,7 @@ do_module_cleanup (void *arg, int registers_valid) if ((objfile->flags & OBJF_USERLOADED) == 0 && (strcmp (objfile_name (objfile), data->objfile_name_string) == 0)) { - delete objfile; + objfile->unlink (); /* It may be a bit too pervasive in this dummy_frame dtor callback. */ clear_symtab_users (0); |