This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Precheck modification time between source and object file before showing source line


When running 'objdump -dlS',
if source file is more recent than object file,
line numbers can't match printed actual source code lines.
So print a warning message in the above case.

binutils/ChangeLog:

    * objdump.c (update_source_path): Check modification time between
    source and object file before opening source file.
    (show_line): Pass additional argument for object file name
    into update_source_path()
---
 binutils/objdump.c | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/binutils/objdump.c b/binutils/objdump.c
index 4609858..237ec45 100644
--- a/binutils/objdump.c
+++ b/binutils/objdump.c
@@ -1389,12 +1389,22 @@ try_print_file_open (const char *origname, const char *modname)
    If found, add location to print_files linked list.  */
 
 static struct print_file_list *
-update_source_path (const char *filename)
+update_source_path (const char *filename, char *objname)
 {
   struct print_file_list *p;
   const char *fname;
+  struct stat fst, ost;
   int i;
 
+  if (stat (filename, &fst) < 0)
+    return NULL;
+  else {
+    if (stat (objname, &ost) < 0)
+      return NULL;
+    if (fst.st_mtime > ost.st_mtime)
+      warn (_("Source file is more recent than object file\n"));
+  }
+
   p = try_print_file_open (filename, filename);
   if (p != NULL)
     return p;
@@ -1551,7 +1561,7 @@ show_line (bfd *abfd, asection *section, bfd_vma addr_offset)
 	{
 	  if (reloc)
 	    filename = xstrdup (filename);
-	  p = update_source_path (filename);
+	  p = update_source_path (filename, bfd_get_filename (abfd));
 	}
 
       if (p != NULL && linenumber != p->last_line)
-- 
2.7.4


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]