make "file" use the BFD cache better
Right now the "file" command will discard the exec_bfd and then possibly open a new one. If this ends up reopening the same file, it can cause needless work by gdb -- destroying all the per-BFD data just to re-read it again. This patch changes the code to hold a reference to the old exec_bfd while opening the new one. The possible downside of this is a higher peak memory use. 2014-02-26 Tom Tromey <tromey@redhat.com> * exec.c (exec_file_attach): Hold a reference to exec_bfd.
This commit is contained in:
parent
5f6cac4085
commit
9b333ba340
|
@ -1,3 +1,7 @@
|
|||
2014-02-26 Tom Tromey <tromey@redhat.com>
|
||||
|
||||
* exec.c (exec_file_attach): Hold a reference to exec_bfd.
|
||||
|
||||
2014-02-26 Tom Tromey <tromey@redhat.com>
|
||||
|
||||
* elfread.c (elf_read_minimal_symbols): Return early if
|
||||
|
|
16
gdb/exec.c
16
gdb/exec.c
|
@ -168,6 +168,14 @@ exec_file_clear (int from_tty)
|
|||
void
|
||||
exec_file_attach (char *filename, int from_tty)
|
||||
{
|
||||
struct cleanup *cleanups;
|
||||
|
||||
/* First, acquire a reference to the current exec_bfd. We release
|
||||
this at the end of the function; but acquiring it now lets the
|
||||
BFD cache return it if this call refers to the same file. */
|
||||
gdb_bfd_ref (exec_bfd);
|
||||
cleanups = make_cleanup_bfd_unref (exec_bfd);
|
||||
|
||||
/* Remove any previous exec file. */
|
||||
exec_close ();
|
||||
|
||||
|
@ -182,7 +190,6 @@ exec_file_attach (char *filename, int from_tty)
|
|||
}
|
||||
else
|
||||
{
|
||||
struct cleanup *cleanups;
|
||||
char *scratch_pathname, *canonical_pathname;
|
||||
int scratch_chan;
|
||||
struct target_section *sections = NULL, *sections_end = NULL;
|
||||
|
@ -205,7 +212,7 @@ exec_file_attach (char *filename, int from_tty)
|
|||
if (scratch_chan < 0)
|
||||
perror_with_name (filename);
|
||||
|
||||
cleanups = make_cleanup (xfree, scratch_pathname);
|
||||
make_cleanup (xfree, scratch_pathname);
|
||||
|
||||
/* gdb_bfd_open (and its variants) prefers canonicalized pathname for
|
||||
better BFD caching. */
|
||||
|
@ -261,9 +268,10 @@ exec_file_attach (char *filename, int from_tty)
|
|||
/* Tell display code (if any) about the changed file name. */
|
||||
if (deprecated_exec_file_display_hook)
|
||||
(*deprecated_exec_file_display_hook) (filename);
|
||||
|
||||
do_cleanups (cleanups);
|
||||
}
|
||||
|
||||
do_cleanups (cleanups);
|
||||
|
||||
bfd_cache_close_all ();
|
||||
observer_notify_executable_changed ();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue