* cache.c (close_one): Remove mtime hack.
authorDaniel Jacobowitz <drow@false.org>
Fri, 14 Mar 2008 18:39:43 +0000 (18:39 +0000)
committerDaniel Jacobowitz <drow@false.org>
Fri, 14 Mar 2008 18:39:43 +0000 (18:39 +0000)
* 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.

bfd/ChangeLog
bfd/cache.c
gdb/ChangeLog
gdb/corefile.c
gdb/exec.c
gdb/gdbcore.h
gdb/source.c

index 54f5a9bb8923f075d32cc66e5fd137fa48849b39..b49f99dc7ed3f2e6bdbd7cdbcf57e2764e71bebb 100644 (file)
@@ -1,3 +1,7 @@
+2008-03-14  Daniel Jacobowitz  <dan@codesourcery.com>
+
+       * cache.c (close_one): Remove mtime hack.
+
 2008-03-14  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR ld/5913
index 064cebeb3cb3ec4362bb62b2cc96776f20b8cce7..eb6120dfbe2f00734a5cf3250adf51b0619ddc0e 100644 (file)
@@ -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);
 }
 
index 075a7997787ff5e7524d6f8cbe5a1a56fb58c105..082c44c2be69c7f5aafe6eab023086eb7af5fcd5 100644 (file)
@@ -1,3 +1,12 @@
+2008-03-14  Daniel Jacobowitz  <dan@codesourcery.com>
+
+       * 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  <vladimir@codesourcery.com>
 
        * top.c (simplified_command_loop): Remove.
index 7452f50b0b89baa5c80f970dc599a5c2c0a37e09..b1dbc6b6b63d66f53d01a02f2dcbf99d2cc77b7f 100644 (file)
@@ -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
 }
index 7648b0317a6f3030597b55db4aa171bf2542b64c..a759ab53666a6cc6a6c5484e1175c98cb58d19a3 100644 (file)
@@ -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);
index 383cc3f96a73472d4bee000e71a821aba5096d03..6d8d2eb46801b1175b82f5fcbc5ea2884744c6b2 100644 (file)
@@ -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;
index 7cbd55f25bc2e6775254bf0e998f88d36165694d..2c69547da163cb1bbdcea57daae3d67f9f068d1b 100644 (file)
@@ -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."));