From: Daniel Jacobowitz Date: Fri, 14 Mar 2008 18:39:43 +0000 (+0000) Subject: * cache.c (close_one): Remove mtime hack. X-Git-Tag: added-to-binutils~64 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c04ea773f9e9764a17382e6c1e0cf5a8d24df67a;p=external%2Fbinutils.git * cache.c (close_one): Remove mtime hack. * corefile.c (reopen_exec_file): Use exec_bfd_mtime. * exec.c (exec_bfd_mtime): Define. (exec_close): Clear it. (exec_file_attach): Set it. * gdbcore.h (exec_bfd_mtime): Declare. * source.c (find_source_lines): Do not use bfd_get_mtime. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 54f5a9b..b49f99d 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,7 @@ +2008-03-14 Daniel Jacobowitz + + * cache.c (close_one): Remove mtime hack. + 2008-03-14 H.J. Lu PR ld/5913 diff --git a/bfd/cache.c b/bfd/cache.c index 064cebe..eb6120d 100644 --- a/bfd/cache.c +++ b/bfd/cache.c @@ -166,22 +166,6 @@ close_one (void) kill->where = real_ftell ((FILE *) kill->iostream); - /* Save the file st_mtime. This is a hack so that gdb can detect when - an executable has been deleted and recreated. The only thing that - makes this reasonable is that st_mtime doesn't change when a file - is unlinked, so saving st_mtime makes BFD's file cache operation - a little more transparent for this particular usage pattern. If we - hadn't closed the file then we would not have lost the original - contents, st_mtime etc. Of course, if something is writing to an - existing file, then this is the wrong thing to do. - FIXME: gdb should save these times itself on first opening a file, - and this hack be removed. */ - if (kill->direction == no_direction || kill->direction == read_direction) - { - bfd_get_mtime (kill); - kill->mtime_set = TRUE; - } - return bfd_cache_delete (kill); } diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 075a799..082c44c 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,12 @@ +2008-03-14 Daniel Jacobowitz + + * corefile.c (reopen_exec_file): Use exec_bfd_mtime. + * exec.c (exec_bfd_mtime): Define. + (exec_close): Clear it. + (exec_file_attach): Set it. + * gdbcore.h (exec_bfd_mtime): Declare. + * source.c (find_source_lines): Do not use bfd_get_mtime. + 2008-03-14 Vladimir Prus * top.c (simplified_command_loop): Remove. diff --git a/gdb/corefile.c b/gdb/corefile.c index 7452f50..b1dbc6b 100644 --- a/gdb/corefile.c +++ b/gdb/corefile.c @@ -160,10 +160,9 @@ reopen_exec_file (void) /* If the timestamp of the exec file has changed, reopen it. */ filename = xstrdup (bfd_get_filename (exec_bfd)); make_cleanup (xfree, filename); - mtime = bfd_get_mtime (exec_bfd); res = stat (filename, &st); - if (mtime && mtime != st.st_mtime) + if (exec_bfd_mtime && exec_bfd_mtime != st.st_mtime) exec_file_attach (filename, 0); #endif } diff --git a/gdb/exec.c b/gdb/exec.c index 7648b03..a759ab5 100644 --- a/gdb/exec.c +++ b/gdb/exec.c @@ -69,6 +69,7 @@ struct target_ops exec_ops; /* The Binary File Descriptor handle for the executable file. */ bfd *exec_bfd = NULL; +long exec_bfd_mtime = 0; /* Whether to open exec and core files read-only or read-write. */ @@ -136,6 +137,7 @@ exec_close (int quitting) name, bfd_errmsg (bfd_get_error ())); xfree (name); exec_bfd = NULL; + exec_bfd_mtime = 0; } if (exec_ops.to_sections) @@ -260,6 +262,8 @@ exec_file_attach (char *filename, int from_tty) scratch_pathname, bfd_errmsg (bfd_get_error ())); } + exec_bfd_mtime = bfd_get_mtime (exec_bfd); + validate_files (); set_gdbarch_from_file (exec_bfd); diff --git a/gdb/gdbcore.h b/gdb/gdbcore.h index 383cc3f..6d8d2eb 100644 --- a/gdb/gdbcore.h +++ b/gdb/gdbcore.h @@ -104,6 +104,9 @@ extern void specify_exec_file_hook (void (*hook) (char *filename)); extern bfd *core_bfd; extern bfd *exec_bfd; +/* The mtime when we last opened exec_bfd. */ +extern long exec_bfd_mtime; + /* Whether to open exec and core files read-only or read-write. */ extern int write_files; diff --git a/gdb/source.c b/gdb/source.c index 7cbd55f..2c69547 100644 --- a/gdb/source.c +++ b/gdb/source.c @@ -1127,9 +1127,9 @@ find_source_lines (struct symtab *s, int desc) perror_with_name (s->filename); if (s->objfile && s->objfile->obfd) - mtime = bfd_get_mtime (s->objfile->obfd); + mtime = s->objfile->mtime; else if (exec_bfd) - mtime = bfd_get_mtime (exec_bfd); + mtime = exec_bfd_mtime; if (mtime && mtime < st.st_mtime) warning (_("Source file is more recent than executable."));