Re: RFA/remote: compare-sections

David Taylor
2014-04-16T16:44:12Z

Final ping. I initially posted this three weeks ago. Eli Zaretskii
immediately approved the doc part. The remainder has been ignored.
I pinged two weeks ago. The remainder continues to be unreviewed.

We (at EMC) find it useful. I will not ping further on it. I hope it
goes in eventually, but have resigned myself to having to maintain it
as a local change. Sigh.

EMC has a copyright assignment on file with the FSF (plus this is small
enought that I'm not sure it is copyrightable), so anyone who wishes to
do so should feel free to incorporate it into their local versions of
GDB.

David Taylor <dtaylor@emc.com> wrote:

> ping.
>
> David Taylor <dtaylor@emc.com> wrote:
>
> > Motivation:
> >
> > When connecting to a remote system, we use the compare-sections command
> > to verify that the box is running the code that we think it is running.
> > Since the system is up and running and *NOT* 'freshly downloaded without
> > yet executing anything', read-write sections, of course, differ from
> > what they were in the executable file.
> >
> > Comparing read-write sections takes time and more importantly the
> > MIS-MATCHED output is confusing to some users.
> >
> > The compare-sections command compares all loadable sections including
> > read-write sections. This patch gives the user the option to compare
> > just the loadable read-only sections.
> >
> > For gdb/ChangeLog:
> >
> > 2014-03-26 David Taylor <dtaylor@emc.com>
> >
> > * remote.c (compare_sections_command): Add -r option to compare
> > all loadable read-only sections.
> >
> > For gdb/doc/ChangeLog:
> >
> > 2014-03-26 David Taylor <dtaylor@emc.com>
> >
> > * gdb.texinfo (compare-sections): Document the new -r (read-only)
> > option.
> >
> > I'm not sure that this patch is big enough to require a copyright
> > assignment, but regardless, EMC has a copyright assignment on file for
> > GDB (and GCC and BINUTILS as well).
> >
> > If it is approved, I will need someone else to commit it as I don't have
> > write access.
> >
> > Patch:
> >
> > Index: gdb/remote.c
> > ===================================================================
> > RCS file: /home/cvsroot/GDB/gdb/remote.c,v
> > retrieving revision 1.8
> > diff -u -r1.8 remote.c
> > --- gdb/remote.c 26 Mar 2014 14:12:34 -0000 1.8
> > +++ gdb/remote.c 26 Mar 2014 15:49:40 -0000
> > @@ -8664,6 +8664,7 @@
> > int matched = 0;
> > int mismatched = 0;
> > int res;
> > + int read_only = 0;
> >
> > if (!exec_bfd)
> > error (_("command cannot be used without an exec file"));
> > @@ -8671,11 +8672,20 @@
> > /* Make sure the remote is pointing at the right process. */
> > set_general_process ();
> >
> > + if (args && (strcmp (args, "-r") == 0))
> > + {
> > + read_only = 1;
> > + args = NULL;
> > + }
> > +
> > for (s = exec_bfd->sections; s; s = s->next)
> > {
> > if (!(s->flags & SEC_LOAD))
> > continue; /* Skip non-loadable section. */
> >
> > + if (read_only && ((s->flags & SEC_READONLY) == 0))
> > + continue; /* Skip writeable sections */
> > +
> > size = bfd_get_section_size (s);
> > if (size == 0)
> > continue; /* Skip zero-length section. */
> > @@ -12046,7 +12056,8 @@
> >
> > add_cmd ("compare-sections", class_obscure, compare_sections_command, _("\
> > Compare section data on target to the exec file.\n\
> > -Argument is a single section name (default: all loaded sections)."),
> > +Argument is a single section name (default: all loaded sections).\n\
> > +To compare only read-only loaded sections, specify the -r option."),
> > &cmdlist);
> >
> > add_cmd ("packet", class_maintenance, packet_command, _("\
> > Index: gdb/doc/gdb.texinfo
> > ===================================================================
> > RCS file: /home/cvsroot/GDB/gdb/doc/gdb.texinfo,v
> > retrieving revision 1.1.1.2
> > diff -u -r1.1.1.2 gdb.texinfo
> > --- gdb/doc/gdb.texinfo 18 Feb 2014 15:36:03 -0000 1.1.1.2
> > +++ gdb/doc/gdb.texinfo 26 Mar 2014 15:49:40 -0000
> > @@ -8760,11 +8760,12 @@
> >
> > @table @code
> > @kindex compare-sections
> > -@item compare-sections @r{[}@var{section-name}@r{]}
> > +@item compare-sections @r{[}@var{section-name}@r{|}@code{-r}@r{]}
> > Compare the data of a loadable section @var{section-name} in the
> > executable file of the program being debugged with the same section in
> > the remote machine's memory, and report any mismatches. With no
> > -arguments, compares all loadable sections. This command's
> > +arguments, compares all loadable sections. With an argument of
> > +@code{-r}, compares all loadable read-only sections. This command's
> > availability depends on the target's support for the @code{"qCRC"}
> > remote request.
> > @end table
> >
>