Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Doug Evans <dje@google.com>
To: Hal Ashburner <hal@ashburner.info>
Cc: "Abid, Hafiz" <Hafiz_Abid@mentor.com>,
		"gdb-patches@sourceware.org" <gdb-patches@sourceware.org>
Subject: Re: [PATCH] gdb: trivial segfault fix in tui
Date: Mon, 27 Aug 2012 17:06:00 -0000	[thread overview]
Message-ID: <CADPb22Qk9VmtXvC6AYVDC4U_rGFsfZv69NJzGO8MJaAraJd=rA@mail.gmail.com> (raw)
In-Reply-To: <CACCZV9bnhFAUqKwC7ThP6poJnHoOJgjZPSDYEuF0ZzgVyziKHQ@mail.gmail.com>

On Wed, Aug 15, 2012 at 6:50 PM, Hal Ashburner <hal@ashburner.info> wrote:
> On 15 August 2012 10:34, Doug Evans <dje@google.com> wrote:
> > [...]
> Hi Doug,
>
> Thanks for the review! :-)
>
> Yeah it is "more consistent" the way you suggest, but is this what is
> wanted in this particular case? Or do we want it to stand out a little
> and attract our reader's attention, while being minimally intrusive to
> the existing code?
>
> There's a segfault, they're bad, they're annoying to have in the
> middle of a debugging session because you lose all your debugging work
> setting up context, yada yada I don't have to jibber about all that
> here I'm sure.
>
> The check for null fixes the segfaults that have bitten me. I
> sometimes need to do a !reset to make C-X work again in my terminal
> which triggers it less reliably, but not any more with the fix in.
>
> TUI has some pretty hairy code as you rightly point out.
> It appears to be not maintained quite as well as it might be. It does
> have a particular use case I love which is less popular, single
> stepping assembly language code so I would personally advocate keeping
> tui in the gdb codebase.
>
> My patch is a temporary fix until someone has time to look at the
> entirety of how tui works and where it doesn't. Possibly re-factoring
> and re-writing large parts of it. Now that might end up being me in
> the absence of someone more familiar with the project already doing
> it.
>
> tui_win_info_ptr()->content is a pointer to a pointer. Which is being
> used to store the address of an array of pointers to tui_gen_win_info.
> It gets set to null on one of the window init routines.
> tui_init_generic_part()
> tui_resize_all() in tui_win.c calls tui_free_win() on all windows also
> sets it to null so perhaps it's not being reallocated as implicitly
> expected.
>
> I'd be poking around there if it's me who gets time to delve deeper
> into it and the proper formulation of the fix.
>
> Note also that checking this thing for NULL is consistent with the
> following line in the same file, so mine isn't the first time:
> void
> tui_vertical_source_scroll (enum tui_scroll_direction scroll_direction,
>                 int num_to_scroll)
> {
>   if (TUI_SRC_WIN->generic.content != NULL)
>
>
> if (foo == NULL) is not a style I care for, it's tautological by way
> of saying it twice. If this is how it's done in the gdb codebase then
> obviously it's the right way.
>
> So how about we express the patch as follows and get it in as it is
> clearly and obviously better than what is there now. Then it can be
> removed when something better and more stable comes along.
> diff --git a/gdb/ChangeLog b/gdb/ChangeLog
> index 81c03ee..e1a080f 100644
> --- a/gdb/ChangeLog
> +++ b/gdb/ChangeLog
> @@ -1,3 +1,7 @@
> +2012-08-15  Hal Ashburner <hal@ashburner.info>
> +
> +   * tui/tui-source.c: Check for null pointer to prevent segfault.
> +
>  2012-08-10  Sergio Durigan Junior  <sergiodj@redhat.com>
>     * linespec.c (find_methods): Remove unused variables `i1' and
> diff --git a/gdb/tui/tui-source.c b/gdb/tui/tui-source.c
> index 9ba9b1d..2126b36 100644
> --- a/gdb/tui/tui-source.c
> +++ b/gdb/tui/tui-source.c
> @@ -334,11 +334,17 @@ tui_show_symtab_source (struct gdbarch *gdbarch,
> struct symtab *s,
>  int
>  tui_source_is_displayed (char *fname)
>  {
> -  return (TUI_SRC_WIN->generic.content_in_use
> -     && (filename_cmp (((struct tui_win_element *)
> -                (tui_locator_win_info_ptr ())->
> -                content[0])->which_element.locator.file_name,
> -               fname) == 0));
> +  if (tui_locator_win_info_ptr()->content == NULL) {
> +    /* XXX FIXME corrects segfault, but why is content NULL
> +     * after certian terminal resize operations? */
> +    return 0;
> +  } else {
> +    return (TUI_SRC_WIN->generic.content_in_use
> +        && (filename_cmp (((struct tui_win_element *)
> +                   (tui_locator_win_info_ptr ())->
> +                   content[0])->which_element.locator.file_name,
> +                  fname) == 0));
> +  }
>  }
>
>
> Thanks again,
> Hal Ashburner

I like this alternative patch better:
http://sourceware.org/ml/gdb-patches/2012-08/msg00809.html

So let's go with that.


      reply	other threads:[~2012-08-27 17:06 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-08-12 16:13 Hal Ashburner
2012-08-14 10:55 ` Abid, Hafiz
2012-08-14 23:03   ` Hal Ashburner
2012-08-15  0:34     ` Doug Evans
2012-08-16  1:50       ` Hal Ashburner
2012-08-27 17:06         ` Doug Evans [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CADPb22Qk9VmtXvC6AYVDC4U_rGFsfZv69NJzGO8MJaAraJd=rA@mail.gmail.com' \
    --to=dje@google.com \
    --cc=Hafiz_Abid@mentor.com \
    --cc=gdb-patches@sourceware.org \
    --cc=hal@ashburner.info \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox