[binutils-gdb] Document remote protocol pid and thread id sizes
Tom Tromey via Gdb-cvs <[email protected]> Thu, 16 Jul 2026 18:50:04 +0000 (GMT)
| Newsgroups | gmane.comp.gdb.cvs |
|---|---|
| Message-ID | <[email protected]> |
https://sourceware.org/git/gitweb.cgi?p=3Dbinutils-gdb.git;h=3De88bc211aebd= 80281c569e9144634d4f02004a7b commit e88bc211aebd80281c569e9144634d4f02004a7b Author: Tom Tromey <[email protected]> Date: Thu Jul 2 13:32:25 2026 -0600 Document remote protocol pid and thread id sizes =20 The recent ptid work came from a bug where a problem was observed due to sign extension. That bug also suggested documenting the guaranteed range of thread- and process-ids in the remote protocol. =20 This patch documents these as being 32-bit values at minimum. I also added static asserts to ensure this is true -- note that although 'int' may be 16 bit per the C standard, I doubt gdb would build on such a host. =20 I didn't specify a maximum because it is host-dependent. This is perhaps something to change, and while I do have some work in this area, it's quite invasive. Also, while widening the range here would be good, it would also be incompatible in a sense, where a newer protocol implementation may end up using values not supported by older versions of gdb. Perhaps one idea would be to simply change these both to int32_t and move on. =20 Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=3D33979 Reviewed-By: Eli Zaretskii <[email protected]> Diff: --- gdb/doc/gdb.texinfo | 11 +++++++---- gdbsupport/ptid.h | 4 ++++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index a698b2b8451..04d761c904c 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -43463,7 +43463,8 @@ Several packets and replies include a @var{thread-i= d} field to identify a thread. Normally these are positive numbers with a target-specific interpretation, formatted as big-endian hex strings. A @var{thread-id} can also be a literal @samp{-1} to indicate all threads, or @samp{0} to -pick any thread. +pick any thread. @value{GDBN} guarantees that values of up to 32 bits +will work here. =20 In addition, the remote protocol supports a multiprocess feature in which the @var{thread-id} syntax is extended to optionally include both @@ -43475,9 +43476,11 @@ to indicate all processes or threads (respectively= ), or @samp{0} to indicate an arbitrary process or thread. Specifying just a process, as @samp{p@var{pid}}, is equivalent to @samp{p@var{pid}.-1}. It is an error to specify all processes but a specific thread, such as -@samp{p-1.@var{tid}}. Note that the @samp{p} prefix is @emph{not} used -for those packets and replies explicitly documented to include a process -ID, rather than a @var{thread-id}. +@samp{p-1.@var{tid}}. @value{GDBN} guarantees that values of up to 32 +bits will work for both @var{pid} and @var{tid}. Note that the +@samp{p} prefix is @emph{not} used for those packets and replies +explicitly documented to include a process ID, rather than a +@var{thread-id}. =20 The multiprocess @var{thread-id} syntax extensions are only used if both @value{GDBN} and the stub report support for the @samp{multiprocess} diff --git a/gdbsupport/ptid.h b/gdbsupport/ptid.h index ef6da77eb7e..6872f433880 100644 --- a/gdbsupport/ptid.h +++ b/gdbsupport/ptid.h @@ -44,6 +44,10 @@ public: using lwp_type =3D long; using tid_type =3D ULONGEST; =20 + /* These limits are documented in the manual. */ + static_assert (sizeof (pid_type) >=3D 4); + static_assert (sizeof (lwp_type) >=3D 4); + /* Must have a trivial defaulted default constructor so that the type remains POD. */ ptid_t () noexcept =3D default;