gdb: Improve cache matching criteria for the bfd cache.
authorAndrew Burgess <andrew.burgess@embecosm.com>
Mon, 13 Apr 2015 13:53:48 +0000 (14:53 +0100)
committerAndrew Burgess <andrew.burgess@embecosm.com>
Tue, 18 Aug 2015 13:03:14 +0000 (14:03 +0100)
commitc04fe68f6b94815d3f49c9aed64b2c388d45f4aa
tree72b268617ac9f019df3d32da7363540b3c37fa0f
parent0e1862bb401f47716446aef143b2bf7a4563f541
gdb: Improve cache matching criteria for the bfd cache.

Within gdb open bfd objects are reused where possible if an attempt is
made to reopen a file that is already being debugged.  To spot if the on
disc file has changed gdb currently examines the mtime of the file and
compares it to the mtime of the open bfd in the cache.

A problem exists when the on disc file is being rapidly regenerated, as
happens, for example, with automated testing.  In some cases the file is
generated so quickly that the mtime appears not to change, while the on
disc file has changed.

This patch extends the bfd cache to also hold the file size of the file,
the inode of the file, and the device id of the file; gdb can then
compare filename, file size, mtime, inode, and device id to determine if
an existing bfd object can be reused.

gdb/ChangeLog:

* gdb_bfd.c (struct gdb_bfd_data): Add size, inode, and device id
field.
(struct gdb_bfd_cache_search): Likewise.
(eq_bfd): Compare the size, inode, and device id fields.
(gdb_bfd_open): Initialise the size, inode, and device id fields.
(gdb_bfd_ref): Likewise.
(gdb_bfd_unref): Likewise.
gdb/ChangeLog
gdb/gdb_bfd.c