public inbox for gdb-prs@sourceware.org
help / color / mirror / Atom feed
From: "cvs-commit at gcc dot gnu.org" <sourceware-bugzilla@sourceware.org>
To: gdb-prs@sourceware.org
Subject: [Bug gdb/30219] [native-gdbserver] FAIL: gdb.base/quit-live.exp: appear_how=run: extra_inferior=0: quit_how=sigterm: quit with SIGTERM (GDB internal error)
Date: Thu, 30 Mar 2023 21:59:16 +0000	[thread overview]
Message-ID: <bug-30219-4717-CPtITLUkU1@http.sourceware.org/bugzilla/> (raw)
In-Reply-To: <bug-30219-4717@http.sourceware.org/bugzilla/>

https://sourceware.org/bugzilla/show_bug.cgi?id=30219

--- Comment #3 from cvs-commit at gcc dot gnu.org <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Kevin Buettner <kevinb@sourceware.org>:

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=3b431a3c9071d3e654e66a461e152c6bf8386096

commit 3b431a3c9071d3e654e66a461e152c6bf8386096
Author: Kevin Buettner <kevinb@redhat.com>
Date:   Fri Mar 10 15:27:43 2023 -0700

    PR gdb/30219: Clear sync_quit_force_run in quit_force

    PR 30219 shows an internal error due to a "Bad switch" in
    print_exception() in gdb/exceptions.c.  The switch in question
    contains cases for RETURN_QUIT and RETURN_ERROR, but is missing a case
    for the recently added RETURN_FORCED_QUIT.  This commit adds that case.

    Making the above change allows the errant test case to pass, but does
    not fix the underlying problem, which I'll describe shortly.  Even
    though the addition of a case for RETURN_FORCED_QUIT isn't the actual
    fix, I still think it's important to add this case so that other
    situations which lead to print_exeption() being called won't generate
    that "Bad switch" internal error.

    In order to understand the underlying problem, please examine
    this portion of the backtrace from the bug report:

    0x5576e4ff5780 print_exception
            /home/smarchi/src/binutils-gdb/gdb/exceptions.c:100
    0x5576e4ff5930 exception_print(ui_file*, gdb_exception const&)
            /home/smarchi/src/binutils-gdb/gdb/exceptions.c:110
    0x5576e6a896dd quit_force(int*, int)
            /home/smarchi/src/binutils-gdb/gdb/top.c:1849

    The real problem is in quit_force; here's the try/catch which
    eventually leads to the internal error:

      /* Get out of tfind mode, and kill or detach all inferiors.  */
      try
        {
          disconnect_tracing ();
          for (inferior *inf : all_inferiors ())
            kill_or_detach (inf, from_tty);
        }
      catch (const gdb_exception &ex)
        {
          exception_print (gdb_stderr, ex);
        }

    While running the calls in the try-block, a QUIT check is being
    performed.  This check finds that sync_quit_force_run is (still) set,
    causing a gdb_exception_forced_quit to be thrown.  The exception
    gdb_exception_forced_quit is derived from gdb_exception, causing
    exception_print to be called.  As shown by the backtrace,
    print_exception is then called, leading to the internal error.

    The actual fix, also implemented by this commit, is to clear
    sync_quit_force_run along with the quit flag.  This will allow the
    various cleanup code, called by quit_force, to run without triggering
    a gdb_exception_forced_quit.  (Though, if another SIGTERM is sent to
    the gdb process, these flags will be set again and a QUIT check in the
    cleanup code will detect it and throw the exception.)

    Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=30219
    Approved-By: Simon Marchi <simon.marchi@efficios.com>

-- 
You are receiving this mail because:
You are on the CC list for the bug.

  parent reply	other threads:[~2023-03-30 21:59 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-10 19:33 [Bug gdb/30219] New: " simon.marchi at polymtl dot ca
2023-03-10 19:35 ` [Bug gdb/30219] " simon.marchi at polymtl dot ca
2023-03-10 19:59 ` kevinb at redhat dot com
2023-03-10 20:00 ` kevinb at redhat dot com
2023-03-30 21:59 ` cvs-commit at gcc dot gnu.org [this message]
2023-03-30 22:22 ` kevinb at redhat dot com

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=bug-30219-4717-CPtITLUkU1@http.sourceware.org/bugzilla/ \
    --to=sourceware-bugzilla@sourceware.org \
    --cc=gdb-prs@sourceware.org \
    /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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).