gdb: Add debug tracing for bfd cache activity.
This patch adds a new debug flag bfd-cache, which when set to non-zero produces debugging log messages relating to gdb's bfd cache. gdb/ChangeLog: * gdb_bfd.c (debug_bfd_cache): New variable. (show_bfd_cache_debug): New function. (gdb_bfd_open): Add debug logging. (gdb_bfd_ref): Likewise. (gdb_bfd_unref): Likewise. (_initialize_gdb_bfd): Add new set/show command. * NEWS: Mention new command. gdb/doc/ChangeLog: * gdb.texinfo (File Caching): Document "set/show debug bfd-cache".
This commit is contained in:
parent
18989b3c56
commit
566f5e3b38
@ -1,3 +1,13 @@
|
||||
2015-08-18 Andrew Burgess <andrew.burgess@embecosm.com>
|
||||
|
||||
* gdb_bfd.c (debug_bfd_cache): New variable.
|
||||
(show_bfd_cache_debug): New function.
|
||||
(gdb_bfd_open): Add debug logging.
|
||||
(gdb_bfd_ref): Likewise.
|
||||
(gdb_bfd_unref): Likewise.
|
||||
(_initialize_gdb_bfd): Add new set/show command.
|
||||
* NEWS: Mention new command.
|
||||
|
||||
2015-08-18 Andrew Burgess <andrew.burgess@embecosm.com>
|
||||
|
||||
* gdb_bfd.c (bfd_sharing): New variable.
|
||||
|
4
gdb/NEWS
4
gdb/NEWS
@ -24,6 +24,10 @@ maint set bfd-sharing
|
||||
maint show bfd-sharing
|
||||
Control the reuse of bfd objects.
|
||||
|
||||
set debug bfd-cache
|
||||
show debug bfd-cache
|
||||
Control display of debugging info regarding bfd caching.
|
||||
|
||||
* The "disassemble" command accepts a new modifier: /s.
|
||||
It prints mixed source+disassembly like /m with two differences:
|
||||
- disassembled instructions are now printed in program order, and
|
||||
|
@ -1,3 +1,7 @@
|
||||
2015-08-18 Andrew Burgess <andrew.burgess@embecosm.com>
|
||||
|
||||
* gdb.texinfo (File Caching): Document "set/show debug bfd-cache".
|
||||
|
||||
2015-08-18 Andrew Burgess <andrew.burgess@embecosm.com>
|
||||
|
||||
* gdb.texinfo (Maintenance Commands): Move documentation of "main
|
||||
|
@ -18371,6 +18371,16 @@ already shared @code{bfd} objects to be unshared, but all future files
|
||||
that are opened will create a new @code{bfd} object. Similarly,
|
||||
re-enabling sharing does not cause multiple existing @code{bfd}
|
||||
objects to be collapsed into a single shared @code{bfd} object.
|
||||
|
||||
@kindex set debug bfd-cache @var{level}
|
||||
@kindex bfd caching
|
||||
@item set debug bfd-cache @var{level}
|
||||
Turns on debugging of the bfd cache, setting the level to @var{level}.
|
||||
|
||||
@kindex show debug bfd-cache
|
||||
@kindex bfd caching
|
||||
@item show debug bfd-cache
|
||||
Show the current debugging level of the bfd cache.
|
||||
@end table
|
||||
|
||||
@node Separate Debug Files
|
||||
|
@ -122,6 +122,16 @@ show_bfd_sharing (struct ui_file *file, int from_tty,
|
||||
fprintf_filtered (file, _("BFD sharing is %s.\n"), value);
|
||||
}
|
||||
|
||||
/* When non-zero debugging of the bfd caches is enabled. */
|
||||
|
||||
static unsigned int debug_bfd_cache;
|
||||
static void
|
||||
show_bfd_cache_debug (struct ui_file *file, int from_tty,
|
||||
struct cmd_list_element *c, const char *value)
|
||||
{
|
||||
fprintf_filtered (file, _("BFD cache debugging is %s.\n"), value);
|
||||
}
|
||||
|
||||
/* The type of an object being looked up in gdb_bfd_cache. We use
|
||||
htab's capability of storing one kind of object (BFD in this case)
|
||||
and using a different sort of object for searching. */
|
||||
@ -407,6 +417,11 @@ gdb_bfd_open (const char *name, const char *target, int fd)
|
||||
abfd = htab_find_with_hash (gdb_bfd_cache, &search, hash);
|
||||
if (bfd_sharing && abfd != NULL)
|
||||
{
|
||||
if (debug_bfd_cache)
|
||||
fprintf_unfiltered (gdb_stdlog,
|
||||
"Reusing cached bfd %s for %s\n",
|
||||
host_address_to_string (abfd),
|
||||
bfd_get_filename (abfd));
|
||||
close (fd);
|
||||
gdb_bfd_ref (abfd);
|
||||
return abfd;
|
||||
@ -416,6 +431,12 @@ gdb_bfd_open (const char *name, const char *target, int fd)
|
||||
if (abfd == NULL)
|
||||
return NULL;
|
||||
|
||||
if (debug_bfd_cache)
|
||||
fprintf_unfiltered (gdb_stdlog,
|
||||
"Creating new bfd %s for %s\n",
|
||||
host_address_to_string (abfd),
|
||||
bfd_get_filename (abfd));
|
||||
|
||||
if (bfd_sharing)
|
||||
{
|
||||
slot = htab_find_slot_with_hash (gdb_bfd_cache, &search, hash, INSERT);
|
||||
@ -484,6 +505,12 @@ gdb_bfd_ref (struct bfd *abfd)
|
||||
|
||||
gdata = bfd_usrdata (abfd);
|
||||
|
||||
if (debug_bfd_cache)
|
||||
fprintf_unfiltered (gdb_stdlog,
|
||||
"Increase reference count on bfd %s (%s)\n",
|
||||
host_address_to_string (abfd),
|
||||
bfd_get_filename (abfd));
|
||||
|
||||
if (gdata != NULL)
|
||||
{
|
||||
gdata->refc += 1;
|
||||
@ -537,7 +564,20 @@ gdb_bfd_unref (struct bfd *abfd)
|
||||
|
||||
gdata->refc -= 1;
|
||||
if (gdata->refc > 0)
|
||||
return;
|
||||
{
|
||||
if (debug_bfd_cache)
|
||||
fprintf_unfiltered (gdb_stdlog,
|
||||
"Decrease reference count on bfd %s (%s)\n",
|
||||
host_address_to_string (abfd),
|
||||
bfd_get_filename (abfd));
|
||||
return;
|
||||
}
|
||||
|
||||
if (debug_bfd_cache)
|
||||
fprintf_unfiltered (gdb_stdlog,
|
||||
"Delete final reference count on bfd %s (%s)\n",
|
||||
host_address_to_string (abfd),
|
||||
bfd_get_filename (abfd));
|
||||
|
||||
archive_bfd = gdata->archive_bfd;
|
||||
search.filename = bfd_get_filename (abfd);
|
||||
@ -968,4 +1008,13 @@ filename, file size, file modification time, and file inode."),
|
||||
&show_bfd_sharing,
|
||||
&maintenance_set_cmdlist,
|
||||
&maintenance_show_cmdlist);
|
||||
|
||||
add_setshow_zuinteger_cmd ("bfd-cache", class_maintenance,
|
||||
&debug_bfd_cache, _("\
|
||||
Set bfd cache debugging."), _("\
|
||||
Show bfd cache debugging."), _("\
|
||||
When non-zero, bfd cache specific debugging is enabled."),
|
||||
NULL,
|
||||
&show_bfd_cache_debug,
|
||||
&setdebuglist, &showdebuglist);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user