public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Eli Zaretskii <eliz@gnu.org>
To: Pedro Alves <pedro@palves.net>
Cc: gdb-patches@sourceware.org
Subject: Re: [PATCH 25/25] Document remote clone events, and QThreadOptions packet
Date: Tue, 21 Jun 2022 15:07:12 +0300	[thread overview]
Message-ID: <838rpqkyof.fsf@gnu.org> (raw)
In-Reply-To: <20220620225419.382221-26-pedro@palves.net> (message from Pedro Alves on Mon, 20 Jun 2022 23:54:19 +0100)

> From: Pedro Alves <pedro@palves.net>
> Date: Mon, 20 Jun 2022 23:54:19 +0100
> 
> This commit documents in both manual and NEWS:
> 
>  - the new remote clone event stop reply,
>  - the new QThreadOptions packet and its current defined options,
>  - the associated "set/show remote thread-events-packet" command,
>  - and the associated QThreadOptions qSupported feature.

Thanks.

>    ** GDBserver is now supported on LoongArch GNU/Linux.
>  
> +* New remote packets
> +
> +clone stop reason
> +  Indicates that a clone system call was executed.

I'm confused: what is the relation between the "stop reason" part and
the description saying that "a clone system call was executed"?  The
gdb.texinfo description only mentions "clone" as the packet name,
without the other 2 words.  What am I missing?

> +@cindex thread clone events, remote reply
> +@anchor{thread clone event}
> +@item clone
> +The packet indicates that @code{clone} was called, and @var{r} is the
> +thread ID of the new child thread.  Refer to @ref{thread-id syntax}
> +for the format of the @var{thread-id} field.  This packet is only
> +applicable to targets that support clone events.

The text refers to @var{r} and @var{thread-id}, but they are not
present on the @item line that describes the packet itself.  Where are
those parameters used in this case.

> +@item QThreadOptions@r{[};@var{options}@r{[}:@var{thread-id}@r{]]}@dots{}
> +@cindex thread options, remote request
> +@cindex @samp{QThreadOptions} packet
> +
> +For each inferior thread, the rightmost options with a matching
> +@var{thread-id} are applied.

"Rightmost" means here "the last in the list"?  If so, perhaps it's
worth saying that explicitly to avoid possible confusion.

> +@item
> +Without clone events (on systems where threads are spawned via a clone
> +system call), if the single-stepped thread spawns a new clone child
> +(i.e., it executes a clone system call), and:
> +
> +@itemize @minus
> +@item
> +the breakpoint is stepped-over in-line, the spawned thread incorrectly
> +runs free while the breakpoint being stepped over is not inserted,
> +thus the spawned thread may potentially run past the breakpoint
> +without stopping for it.  By enabling @code{GDB_TO_CLONE}, the new
> +cloned thread is halted before it executes any instruction;
> +
> +@item
> +if alternativelly displaced (out-of-line) stepping is used, the
> +spawned thread starts running at the out-of-line PC, leading to
> +undefined behavior, usually crashes or data corruption.  By enabling
> +@code{GDB_TO_CLONE}, the new cloned thread is halted before it
> +executes any instruction, and @value{GDBN} adjusts its PC before
> +resuming its execution.
> +@end itemize

This reads awkwardly, because you say "and:", and start each @item of
the following itemized list with a lower-case letter, but each @item
includes more than one sentence.  How about the following rephrasing:

    For example, @value{GDBN} enables the @code{GDB_TO_EXIT} and
    @code{GDB_TO_CLONE} options when single-stepping a thread past a
    breakpoint, for the following reasons:

    @itemize @bullet
    @item
    If the single-stepped thread exits (e.g., it executes a thread exit
    system call), enabling @code{GDB_TO_EXIT} prevents @value{GDBN} from
    waiting forever, not knowing that it should no longer expect a stop for
    that same thread, and blocking other threads from progressing.

    @item
    If the single-stepped thread spawns a new clone child (i.e., it
    executes a clone system call), enabling @code{GDB_TO_CLONE} halts the
    cloned thread before it executes any instructions, and thus prevents
    the following problematic situations:

    @itemize @minus
    @item
    if the breakpoint is stepped-over in-line, the spawned thread would
    incorrectly run free while the breakpoint being stepped over is not
    inserted, and thus the cloned thread may potentially run past the
    breakpoint without stopping for it;

    @item
    if displaced (out-of-line) stepping is used, the cloned thread starts
    running at the out-of-line PC, leading to undefined behavior, usually
    crashing or corrupting data.
    @end itemize

    @end itemize

  reply	other threads:[~2022-06-21 12:07 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-06-20 22:53 [PATCH 00/25] Step over thread clone and thread exit Pedro Alves
2022-06-20 22:53 ` [PATCH 01/25] Don't use pthread_mutex_t in gdb.base/step-over-clone.c Pedro Alves
2022-07-13 21:35   ` Pedro Alves
2022-06-20 22:53 ` [PATCH 02/25] displaced step: pass down target_waitstatus instead of gdb_signal Pedro Alves
2022-06-20 22:53 ` [PATCH 03/25] linux-nat: introduce pending_status_str Pedro Alves
2022-06-20 22:53 ` [PATCH 04/25] Step over clone syscall w/ breakpoint, TARGET_WAITKIND_THREAD_CLONED Pedro Alves
2022-06-20 22:53 ` [PATCH 05/25] Support clone events in the remote protocol Pedro Alves
2022-06-20 22:54 ` [PATCH 06/25] Thread options & clone events (core + remote) Pedro Alves
2022-06-20 22:54 ` [PATCH 07/25] Thread options & clone events (native Linux) Pedro Alves
2022-06-20 22:54 ` [PATCH 08/25] Thread options & clone events (Linux GDBserver) Pedro Alves
2022-06-20 22:54 ` [PATCH 09/25] gdbserver: Hide and don't detach pending clone children Pedro Alves
2022-06-20 22:54 ` [PATCH 10/25] Remove gdb/19675 kfails (displaced stepping + clone) Pedro Alves
2022-06-20 22:54 ` [PATCH 11/25] Add test for stepping over clone syscall Pedro Alves
2022-06-20 22:54 ` [PATCH 12/25] all-stop/synchronous RSP support thread-exit events Pedro Alves
2022-06-20 22:54 ` [PATCH 13/25] Introduce GDB_TO_EXIT thread option, fix step-over-thread-exit Pedro Alves
2022-06-20 22:54 ` [PATCH 14/25] Implement GDB_TO_EXIT support for Linux GDBserver Pedro Alves
2022-06-20 22:54 ` [PATCH 15/25] Implement GDB_TO_EXIT support for native Linux Pedro Alves
2022-06-20 22:54 ` [PATCH 16/25] gdb: clear step over information on thread exit (PR gdb/27338) Pedro Alves
2022-06-20 22:54 ` [PATCH 17/25] stop_all_threads: (re-)enable async before waiting for stops Pedro Alves
2022-06-20 22:54 ` [PATCH 18/25] gdbserver: Queue no-resumed event after thread exit Pedro Alves
2022-06-20 22:54 ` [PATCH 19/25] Don't resume new threads if scheduler-locking is in effect Pedro Alves
2022-06-21 11:07   ` Eli Zaretskii
2022-07-11 14:20     ` Pedro Alves
2022-07-11 15:44       ` Eli Zaretskii
2022-07-11 16:09         ` Pedro Alves
2022-07-11 16:30           ` Eli Zaretskii
2022-07-11 16:38             ` Pedro Alves
2022-07-11 17:00               ` Eli Zaretskii
2022-07-11 17:48                 ` Pedro Alves
2022-07-11 17:50                   ` Eli Zaretskii
2022-07-11 18:18                     ` Pedro Alves
2022-07-11 18:29                       ` Eli Zaretskii
2022-07-11 19:39                         ` Pedro Alves
2022-07-12 16:08                           ` Eli Zaretskii
2022-07-12 17:14                             ` Pedro Alves
2022-06-20 22:54 ` [PATCH 20/25] Tighten gdb.threads/no-unwaited-for-left.exp regexps Pedro Alves
2022-07-13 21:32   ` Pedro Alves
2022-06-20 22:54 ` [PATCH 21/25] Report thread exit event for leader if reporting thread exit events Pedro Alves
2022-06-20 22:54 ` [PATCH 22/25] Ignore failure to read PC when resuming Pedro Alves
2022-06-20 22:54 ` [PATCH 23/25] gdb/testsuite/lib/my-syscalls.S: Refactor new SYSCALL macro Pedro Alves
2022-06-20 22:54 ` [PATCH 24/25] Testcases for stepping over thread exit syscall (PR gdb/27338) Pedro Alves
2022-06-20 22:54 ` [PATCH 25/25] Document remote clone events, and QThreadOptions packet Pedro Alves
2022-06-21 12:07   ` Eli Zaretskii [this message]
2022-07-11 15:19     ` Pedro Alves
2022-07-11 16:09       ` Eli Zaretskii
2022-07-11 16:54         ` Pedro Alves
2022-07-11 17:02           ` Eli Zaretskii

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=838rpqkyof.fsf@gnu.org \
    --to=eliz@gnu.org \
    --cc=gdb-patches@sourceware.org \
    --cc=pedro@palves.net \
    /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).