This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: [PATCH] Precheck modification time between source and object file before showing source line
- From: Andrew Burgess <andrew dot burgess at embecosm dot com>
- To: Taeung Song <treeze dot taeung at gmail dot com>
- Cc: binutils at sourceware dot org, Nick Clifton <nickc at redhat dot com>, Alan Modra <amodra at gmail dot com>
- Date: Fri, 10 Mar 2017 10:25:56 +0000
- Subject: Re: [PATCH] Precheck modification time between source and object file before showing source line
- Authentication-results: sourceware.org; auth=none
- References: <1489135843-10737-1-git-send-email-treeze.taeung@gmail.com>
* Taeung Song <treeze.taeung@gmail.com> [2017-03-10 17:50:43 +0900]:
> 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)
I wonder if it would be neater to pass the bfd* pointer in here and
then use bfd_stat below?
> {
> struct print_file_list *p;
> const char *fname;
> + struct stat fst, ost;
> int i;
>
> + if (stat (filename, &fst) < 0)
> + return NULL;
> + else {
The '{' needs to move onto the next line, then re-indent the block below.
> + if (stat (objname, &ost) < 0)
> + return NULL;
> + if (fst.st_mtime > ost.st_mtime)
> + warn (_("Source file is more recent than object file\n"));
Seems like a good thing to warn about. How about adding the name of
the source file and object file to the warning?
Thanks,
Andrew
> + }
> +
> 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
>