public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* [PATCH 1/2] doc: add the missing 'handle' attribute in xml
@ 2024-04-02 10:20 Tankut Baris Aktemur
  2024-04-02 10:20 ` [PATCH 2/2] gdbserver, remote: introduce "id_str" in the "qXfer:threads:read" XML Tankut Baris Aktemur
  2024-04-02 12:14 ` [PATCH 1/2] doc: add the missing 'handle' attribute in xml Eli Zaretskii
  0 siblings, 2 replies; 6+ messages in thread
From: Tankut Baris Aktemur @ 2024-04-02 10:20 UTC (permalink / raw)
  To: gdb-patches

The XML response to the "qXfer:threads:read" packet may include
a "handle" attribute.  The attribute is mentioned in the document
but not shown in the sample XML structure.  Add it.
---
 gdb/doc/gdb.texinfo | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
index 727f9275bfb..41a368a0194 100644
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -48081,7 +48081,7 @@ the following structure:
 @smallexample
 <?xml version="1.0"?>
 <threads>
-    <thread id="id" core="0" name="name">
+    <thread id="id" core="0" name="name" handle="XX...">
     ... description ...
     </thread>
 </threads>
-- 
2.34.1

Intel Deutschland GmbH
Registered Address: Am Campeon 10, 85579 Neubiberg, Germany
Tel: +49 89 99 8853-0, www.intel.de <http://www.intel.de>
Managing Directors: Christin Eisenschmid, Sharon Heck, Tiffany Doon Silva  
Chairperson of the Supervisory Board: Nicole Lau
Registered Office: Munich
Commercial Register: Amtsgericht Muenchen HRB 186928


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH 2/2] gdbserver, remote: introduce "id_str" in the "qXfer:threads:read" XML
  2024-04-02 10:20 [PATCH 1/2] doc: add the missing 'handle' attribute in xml Tankut Baris Aktemur
@ 2024-04-02 10:20 ` Tankut Baris Aktemur
  2024-04-02 12:19   ` Eli Zaretskii
  2024-04-03 14:57   ` [PATCH v2] " Tankut Baris Aktemur
  2024-04-02 12:14 ` [PATCH 1/2] doc: add the missing 'handle' attribute in xml Eli Zaretskii
  1 sibling, 2 replies; 6+ messages in thread
From: Tankut Baris Aktemur @ 2024-04-02 10:20 UTC (permalink / raw)
  To: gdb-patches

GDB prints the target id of a thread in various places such as the
output of the "info threads" command in the "Target Id" column or when
switching to a thread.  A target can define what to print for a given
ptid by overriding the `pid_to_str` method.

The remote target is a gateway behind which one of many various
targets could be running.  The remote target converts a given ptid to
a string in a uniform way, without consulting the low target at the
server-side.

In this patch we introduce a new attribute in the XML that is sent in
response to the "qXfer:threads:read" RSP packet, so that a low target
at the server side, if it wishes, can specify what to print as the
target id of a thread.

Note that the existing "name" attribute or the "extra" text provided
in the XML are not sufficient for the server-side low target to
achieve the goal.  Those attributes, when present, are simply appended
to the target id by GDB.
---
 gdb/NEWS            |  9 +++++++++
 gdb/doc/gdb.texinfo |  7 +++++--
 gdb/remote.c        | 26 +++++++++++++++++++++++++-
 gdbserver/server.cc |  4 ++++
 gdbserver/target.cc |  6 ++++++
 gdbserver/target.h  | 13 +++++++++++++
 6 files changed, 62 insertions(+), 3 deletions(-)

diff --git a/gdb/NEWS b/gdb/NEWS
index feb3a37393a..2a0b08887a1 100644
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -192,6 +192,15 @@ QThreadOptions in qSupported
   QThreadOptions packet, and the qSupported response can contain the
   set of thread options the remote stub supports.
 
+* Changed remote packets
+
+qXfer:threads:read
+
+  The XML that is sent as a response can now include an "id_str"
+  attribute for a thread element.  The attribute indicates what GDB
+  should print as the target ID of the thread, for example in the
+  "info threads" command or when switching to the thread.
+
 *** Changes in GDB 14
 
 * GDB now supports the AArch64 Scalable Matrix Extension 2 (SME2), which
diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
index 41a368a0194..42ddd8ca8d5 100644
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -48081,7 +48081,7 @@ the following structure:
 @smallexample
 <?xml version="1.0"?>
 <threads>
-    <thread id="id" core="0" name="name" handle="XX...">
+    <thread id="id" core="0" name="name" id_str="..." handle="XX...">
     ... description ...
     </thread>
 </threads>
@@ -48093,7 +48093,10 @@ identifies the thread (@pxref{thread-id syntax}).  The
 the thread was last executing on.  The @samp{name} attribute, if
 present, specifies the human-readable name of the thread.  The content
 of the of @samp{thread} element is interpreted as human-readable
-auxiliary information.  The @samp{handle} attribute, if present,
+auxiliary information.  The @samp{id_str} attribute, if present,
+specifies what @value{GDBN} should print as the target ID of the
+thread (e.g.@: in the @samp{info threads} command or when switching
+to the thread).  The @samp{handle} attribute, if present,
 is a hex encoded representation of the thread handle.
 
 
diff --git a/gdb/remote.c b/gdb/remote.c
index e278711df7b..e09a0c56eb3 100644
--- a/gdb/remote.c
+++ b/gdb/remote.c
@@ -1537,6 +1537,12 @@ struct remote_thread_info : public private_thread_info
   std::string name;
   int core = -1;
 
+  /* The string representation for the thread's id.
+
+     The target specifies this if they want to display the thread id
+     in a specific way.  If empty, the default approach is used.  */
+  std::string id_str;
+
   /* Thread handle, perhaps a pthread_t or thread_t value, stored as a
      sequence of bytes.  */
   gdb::byte_vector thread_handle;
@@ -3951,6 +3957,9 @@ struct thread_item
   /* The thread's name.  */
   std::string name;
 
+  /* The thread's id, translated to a string for displaying.  */
+  std::string id_str;
+
   /* The core the thread was running on.  -1 if not known.  */
   int core = -1;
 
@@ -4077,6 +4086,10 @@ start_thread (struct gdb_xml_parser *parser,
   if (attr != NULL)
     item.name = (const char *) attr->value.get ();
 
+  attr = xml_find_attribute (attributes, "id_str");
+  if (attr != nullptr)
+    item.id_str = (const char *) attr->value.get ();
+
   attr = xml_find_attribute (attributes, "handle");
   if (attr != NULL)
     item.thread_handle = hex2bin ((const char *) attr->value.get ());
@@ -4098,6 +4111,7 @@ const struct gdb_xml_attribute thread_attributes[] = {
   { "id", GDB_XML_AF_NONE, NULL, NULL },
   { "core", GDB_XML_AF_OPTIONAL, gdb_xml_parse_attr_ulongest, NULL },
   { "name", GDB_XML_AF_OPTIONAL, NULL, NULL },
+  { "id_str", GDB_XML_AF_OPTIONAL, NULL, NULL },
   { "handle", GDB_XML_AF_OPTIONAL, NULL, NULL },
   { NULL, GDB_XML_AF_NONE, NULL, NULL }
 };
@@ -4282,6 +4296,7 @@ remote_target::update_thread_list ()
 	      info->core = item.core;
 	      info->extra = std::move (item.extra);
 	      info->name = std::move (item.name);
+	      info->id_str = std::move (item.id_str);
 	      info->thread_handle = std::move (item.thread_handle);
 	    }
 	}
@@ -12228,7 +12243,16 @@ remote_target::pid_to_str (ptid_t ptid)
     {
       if (magic_null_ptid == ptid)
 	return "Thread <main>";
-      else if (m_features.remote_multi_process_p ())
+
+      thread_info *thread = this->find_thread (ptid);
+      if ((thread != nullptr) && (thread->priv != nullptr))
+	{
+	  remote_thread_info *priv = get_remote_thread_info (thread);
+	  if (!priv->id_str.empty ())
+	    return priv->id_str.c_str ();
+	}
+
+      if (m_features.remote_multi_process_p ())
 	if (ptid.lwp () == 0)
 	  return normal_pid_to_str (ptid);
 	else
diff --git a/gdbserver/server.cc b/gdbserver/server.cc
index c7d5cc1c1b0..018fbc04076 100644
--- a/gdbserver/server.cc
+++ b/gdbserver/server.cc
@@ -1994,6 +1994,7 @@ handle_qxfer_threads_worker (thread_info *thread, std::string *buffer)
   int core = target_core_of_thread (ptid);
   char core_s[21];
   const char *name = target_thread_name (ptid);
+  std::string id_str = target_thread_id_str (thread);
   int handle_len;
   gdb_byte *handle;
   bool handle_status = target_thread_handle (ptid, &handle, &handle_len);
@@ -2018,6 +2019,9 @@ handle_qxfer_threads_worker (thread_info *thread, std::string *buffer)
   if (name != NULL)
     string_xml_appendf (*buffer, " name=\"%s\"", name);
 
+  if (!id_str.empty ())
+    string_xml_appendf (*buffer, " id_str=\"%s\"", id_str.c_str ());
+
   if (handle_status)
     {
       char *handle_s = (char *) alloca (handle_len * 2 + 1);
diff --git a/gdbserver/target.cc b/gdbserver/target.cc
index 6db32da2e95..a26e1599975 100644
--- a/gdbserver/target.cc
+++ b/gdbserver/target.cc
@@ -807,6 +807,12 @@ process_stratum_target::thread_name (ptid_t thread)
   return nullptr;
 }
 
+std::string
+process_stratum_target::thread_id_str (thread_info *thread)
+{
+  return "";
+}
+
 bool
 process_stratum_target::thread_handle (ptid_t ptid, gdb_byte **handle,
 				       int *handle_len)
diff --git a/gdbserver/target.h b/gdbserver/target.h
index 3643b9110da..a46b3fa47ff 100644
--- a/gdbserver/target.h
+++ b/gdbserver/target.h
@@ -475,6 +475,13 @@ class process_stratum_target
      caller.  */
   virtual const char *thread_name (ptid_t thread);
 
+  /* Return the string translation for THREAD's id.  This gives the
+     target a chance to completely re-interpret the thread id and
+     present a target-specific description for displaying to the user.
+     Return empty if the target is fine with how an id is displayed
+     by default.  */
+  virtual std::string thread_id_str (thread_info *thread);
+
   /* Thread ID to (numeric) thread handle: Return true on success and
      false for failure.  Return pointer to thread handle via HANDLE
      and the handle's length via HANDLE_LEN.  */
@@ -735,4 +742,10 @@ bool set_desired_process ();
 
 std::string target_pid_to_str (ptid_t);
 
+static inline std::string
+target_thread_id_str (thread_info *thread)
+{
+  return the_target->thread_id_str (thread);
+}
+
 #endif /* GDBSERVER_TARGET_H */
-- 
2.34.1

Intel Deutschland GmbH
Registered Address: Am Campeon 10, 85579 Neubiberg, Germany
Tel: +49 89 99 8853-0, www.intel.de <http://www.intel.de>
Managing Directors: Christin Eisenschmid, Sharon Heck, Tiffany Doon Silva  
Chairperson of the Supervisory Board: Nicole Lau
Registered Office: Munich
Commercial Register: Amtsgericht Muenchen HRB 186928


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/2] doc: add the missing 'handle' attribute in xml
  2024-04-02 10:20 [PATCH 1/2] doc: add the missing 'handle' attribute in xml Tankut Baris Aktemur
  2024-04-02 10:20 ` [PATCH 2/2] gdbserver, remote: introduce "id_str" in the "qXfer:threads:read" XML Tankut Baris Aktemur
@ 2024-04-02 12:14 ` Eli Zaretskii
  2024-04-03 14:49   ` Aktemur, Tankut Baris
  1 sibling, 1 reply; 6+ messages in thread
From: Eli Zaretskii @ 2024-04-02 12:14 UTC (permalink / raw)
  To: Tankut Baris Aktemur; +Cc: gdb-patches

> From: Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
> Date: Tue,  2 Apr 2024 12:20:19 +0200
> 
> The XML response to the "qXfer:threads:read" packet may include
> a "handle" attribute.  The attribute is mentioned in the document
> but not shown in the sample XML structure.  Add it.
> ---
>  gdb/doc/gdb.texinfo | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
> index 727f9275bfb..41a368a0194 100644
> --- a/gdb/doc/gdb.texinfo
> +++ b/gdb/doc/gdb.texinfo
> @@ -48081,7 +48081,7 @@ the following structure:
>  @smallexample
>  <?xml version="1.0"?>
>  <threads>
> -    <thread id="id" core="0" name="name">
> +    <thread id="id" core="0" name="name" handle="XX...">
>      ... description ...
>      </thread>
>  </threads>

Thanks, but can we put some string without dots there?  IOW, an
example of a real-life "handle" attribute, like the rest of the
example does?

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 2/2] gdbserver, remote: introduce "id_str" in the "qXfer:threads:read" XML
  2024-04-02 10:20 ` [PATCH 2/2] gdbserver, remote: introduce "id_str" in the "qXfer:threads:read" XML Tankut Baris Aktemur
@ 2024-04-02 12:19   ` Eli Zaretskii
  2024-04-03 14:57   ` [PATCH v2] " Tankut Baris Aktemur
  1 sibling, 0 replies; 6+ messages in thread
From: Eli Zaretskii @ 2024-04-02 12:19 UTC (permalink / raw)
  To: Tankut Baris Aktemur; +Cc: gdb-patches

> From: Tankut Baris Aktemur <tankut.baris.aktemur@intel.com>
> Date: Tue,  2 Apr 2024 12:20:20 +0200
> 
> GDB prints the target id of a thread in various places such as the
> output of the "info threads" command in the "Target Id" column or when
> switching to a thread.  A target can define what to print for a given
> ptid by overriding the `pid_to_str` method.
> 
> The remote target is a gateway behind which one of many various
> targets could be running.  The remote target converts a given ptid to
> a string in a uniform way, without consulting the low target at the
> server-side.
> 
> In this patch we introduce a new attribute in the XML that is sent in
> response to the "qXfer:threads:read" RSP packet, so that a low target
> at the server side, if it wishes, can specify what to print as the
> target id of a thread.
> 
> Note that the existing "name" attribute or the "extra" text provided
> in the XML are not sufficient for the server-side low target to
> achieve the goal.  Those attributes, when present, are simply appended
> to the target id by GDB.
> ---
>  gdb/NEWS            |  9 +++++++++
>  gdb/doc/gdb.texinfo |  7 +++++--
>  gdb/remote.c        | 26 +++++++++++++++++++++++++-
>  gdbserver/server.cc |  4 ++++
>  gdbserver/target.cc |  6 ++++++
>  gdbserver/target.h  | 13 +++++++++++++
>  6 files changed, 62 insertions(+), 3 deletions(-)

Thanks, the documentation parts are OK, with the following minor nit:

> --- a/gdb/doc/gdb.texinfo
> +++ b/gdb/doc/gdb.texinfo
> @@ -48081,7 +48081,7 @@ the following structure:
>  @smallexample
>  <?xml version="1.0"?>
>  <threads>
> -    <thread id="id" core="0" name="name" handle="XX...">
> +    <thread id="id" core="0" name="name" id_str="..." handle="XX...">
>      ... description ...
>      </thread>
>  </threads>

Please replace the ellipsis with an example of a real-life value.

Reviewed-By: Eli Zaretskii <eliz@gnu.org>

^ permalink raw reply	[flat|nested] 6+ messages in thread

* RE: [PATCH 1/2] doc: add the missing 'handle' attribute in xml
  2024-04-02 12:14 ` [PATCH 1/2] doc: add the missing 'handle' attribute in xml Eli Zaretskii
@ 2024-04-03 14:49   ` Aktemur, Tankut Baris
  0 siblings, 0 replies; 6+ messages in thread
From: Aktemur, Tankut Baris @ 2024-04-03 14:49 UTC (permalink / raw)
  To: Eli Zaretskii; +Cc: gdb-patches

> > The XML response to the "qXfer:threads:read" packet may include
> > a "handle" attribute.  The attribute is mentioned in the document
> > but not shown in the sample XML structure.  Add it.
> > ---
> >  gdb/doc/gdb.texinfo | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
> > index 727f9275bfb..41a368a0194 100644
> > --- a/gdb/doc/gdb.texinfo
> > +++ b/gdb/doc/gdb.texinfo
> > @@ -48081,7 +48081,7 @@ the following structure:
> >  @smallexample
> >  <?xml version="1.0"?>
> >  <threads>
> > -    <thread id="id" core="0" name="name">
> > +    <thread id="id" core="0" name="name" handle="XX...">
> >      ... description ...
> >      </thread>
> >  </threads>
> 
> Thanks, but can we put some string without dots there?  IOW, an
> example of a real-life "handle" attribute, like the rest of the
> example does?

Thanks.  I pushed this patch with handle="1a2b3c".

-Baris


Intel Deutschland GmbH
Registered Address: Am Campeon 10, 85579 Neubiberg, Germany
Tel: +49 89 99 8853-0, www.intel.de <http://www.intel.de>
Managing Directors: Christin Eisenschmid, Sharon Heck, Tiffany Doon Silva  
Chairperson of the Supervisory Board: Nicole Lau
Registered Office: Munich
Commercial Register: Amtsgericht Muenchen HRB 186928


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH v2] gdbserver, remote: introduce "id_str" in the "qXfer:threads:read" XML
  2024-04-02 10:20 ` [PATCH 2/2] gdbserver, remote: introduce "id_str" in the "qXfer:threads:read" XML Tankut Baris Aktemur
  2024-04-02 12:19   ` Eli Zaretskii
@ 2024-04-03 14:57   ` Tankut Baris Aktemur
  1 sibling, 0 replies; 6+ messages in thread
From: Tankut Baris Aktemur @ 2024-04-03 14:57 UTC (permalink / raw)
  To: gdb-patches

GDB prints the target id of a thread in various places such as the
output of the "info threads" command in the "Target Id" column or when
switching to a thread.  A target can define what to print for a given
ptid by overriding the `pid_to_str` method.

The remote target is a gateway behind which one of many various
targets could be running.  The remote target converts a given ptid to
a string in a uniform way, without consulting the low target at the
server-side.

In this patch we introduce a new attribute in the XML that is sent in
response to the "qXfer:threads:read" RSP packet, so that a low target
at the server side, if it wishes, can specify what to print as the
target id of a thread.

Note that the existing "name" attribute or the "extra" text provided
in the XML are not sufficient for the server-side low target to
achieve the goal.  Those attributes, when present, are simply appended
to the target id by GDB.

Reviewed-By: Eli Zaretskii <eliz@gnu.org>
---
 gdb/NEWS            |  9 +++++++++
 gdb/doc/gdb.texinfo |  7 +++++--
 gdb/remote.c        | 26 +++++++++++++++++++++++++-
 gdbserver/server.cc |  4 ++++
 gdbserver/target.cc |  6 ++++++
 gdbserver/target.h  | 13 +++++++++++++
 6 files changed, 62 insertions(+), 3 deletions(-)

diff --git a/gdb/NEWS b/gdb/NEWS
index feb3a37393a..2a0b08887a1 100644
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -192,6 +192,15 @@ QThreadOptions in qSupported
   QThreadOptions packet, and the qSupported response can contain the
   set of thread options the remote stub supports.
 
+* Changed remote packets
+
+qXfer:threads:read
+
+  The XML that is sent as a response can now include an "id_str"
+  attribute for a thread element.  The attribute indicates what GDB
+  should print as the target ID of the thread, for example in the
+  "info threads" command or when switching to the thread.
+
 *** Changes in GDB 14
 
 * GDB now supports the AArch64 Scalable Matrix Extension 2 (SME2), which
diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo
index 82a617e9ad3..c72a070b223 100644
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -48081,7 +48081,7 @@ the following structure:
 @smallexample
 <?xml version="1.0"?>
 <threads>
-    <thread id="id" core="0" name="name" handle="1a2b3c">
+    <thread id="id" core="0" name="name" id_str="Thread 12.34" handle="1a2b3c">
     ... description ...
     </thread>
 </threads>
@@ -48093,7 +48093,10 @@ identifies the thread (@pxref{thread-id syntax}).  The
 the thread was last executing on.  The @samp{name} attribute, if
 present, specifies the human-readable name of the thread.  The content
 of the of @samp{thread} element is interpreted as human-readable
-auxiliary information.  The @samp{handle} attribute, if present,
+auxiliary information.  The @samp{id_str} attribute, if present,
+specifies what @value{GDBN} should print as the target ID of the
+thread (e.g.@: in the @samp{info threads} command or when switching
+to the thread).  The @samp{handle} attribute, if present,
 is a hex encoded representation of the thread handle.
 
 
diff --git a/gdb/remote.c b/gdb/remote.c
index e278711df7b..e09a0c56eb3 100644
--- a/gdb/remote.c
+++ b/gdb/remote.c
@@ -1537,6 +1537,12 @@ struct remote_thread_info : public private_thread_info
   std::string name;
   int core = -1;
 
+  /* The string representation for the thread's id.
+
+     The target specifies this if they want to display the thread id
+     in a specific way.  If empty, the default approach is used.  */
+  std::string id_str;
+
   /* Thread handle, perhaps a pthread_t or thread_t value, stored as a
      sequence of bytes.  */
   gdb::byte_vector thread_handle;
@@ -3951,6 +3957,9 @@ struct thread_item
   /* The thread's name.  */
   std::string name;
 
+  /* The thread's id, translated to a string for displaying.  */
+  std::string id_str;
+
   /* The core the thread was running on.  -1 if not known.  */
   int core = -1;
 
@@ -4077,6 +4086,10 @@ start_thread (struct gdb_xml_parser *parser,
   if (attr != NULL)
     item.name = (const char *) attr->value.get ();
 
+  attr = xml_find_attribute (attributes, "id_str");
+  if (attr != nullptr)
+    item.id_str = (const char *) attr->value.get ();
+
   attr = xml_find_attribute (attributes, "handle");
   if (attr != NULL)
     item.thread_handle = hex2bin ((const char *) attr->value.get ());
@@ -4098,6 +4111,7 @@ const struct gdb_xml_attribute thread_attributes[] = {
   { "id", GDB_XML_AF_NONE, NULL, NULL },
   { "core", GDB_XML_AF_OPTIONAL, gdb_xml_parse_attr_ulongest, NULL },
   { "name", GDB_XML_AF_OPTIONAL, NULL, NULL },
+  { "id_str", GDB_XML_AF_OPTIONAL, NULL, NULL },
   { "handle", GDB_XML_AF_OPTIONAL, NULL, NULL },
   { NULL, GDB_XML_AF_NONE, NULL, NULL }
 };
@@ -4282,6 +4296,7 @@ remote_target::update_thread_list ()
 	      info->core = item.core;
 	      info->extra = std::move (item.extra);
 	      info->name = std::move (item.name);
+	      info->id_str = std::move (item.id_str);
 	      info->thread_handle = std::move (item.thread_handle);
 	    }
 	}
@@ -12228,7 +12243,16 @@ remote_target::pid_to_str (ptid_t ptid)
     {
       if (magic_null_ptid == ptid)
 	return "Thread <main>";
-      else if (m_features.remote_multi_process_p ())
+
+      thread_info *thread = this->find_thread (ptid);
+      if ((thread != nullptr) && (thread->priv != nullptr))
+	{
+	  remote_thread_info *priv = get_remote_thread_info (thread);
+	  if (!priv->id_str.empty ())
+	    return priv->id_str.c_str ();
+	}
+
+      if (m_features.remote_multi_process_p ())
 	if (ptid.lwp () == 0)
 	  return normal_pid_to_str (ptid);
 	else
diff --git a/gdbserver/server.cc b/gdbserver/server.cc
index c7d5cc1c1b0..018fbc04076 100644
--- a/gdbserver/server.cc
+++ b/gdbserver/server.cc
@@ -1994,6 +1994,7 @@ handle_qxfer_threads_worker (thread_info *thread, std::string *buffer)
   int core = target_core_of_thread (ptid);
   char core_s[21];
   const char *name = target_thread_name (ptid);
+  std::string id_str = target_thread_id_str (thread);
   int handle_len;
   gdb_byte *handle;
   bool handle_status = target_thread_handle (ptid, &handle, &handle_len);
@@ -2018,6 +2019,9 @@ handle_qxfer_threads_worker (thread_info *thread, std::string *buffer)
   if (name != NULL)
     string_xml_appendf (*buffer, " name=\"%s\"", name);
 
+  if (!id_str.empty ())
+    string_xml_appendf (*buffer, " id_str=\"%s\"", id_str.c_str ());
+
   if (handle_status)
     {
       char *handle_s = (char *) alloca (handle_len * 2 + 1);
diff --git a/gdbserver/target.cc b/gdbserver/target.cc
index 6db32da2e95..a26e1599975 100644
--- a/gdbserver/target.cc
+++ b/gdbserver/target.cc
@@ -807,6 +807,12 @@ process_stratum_target::thread_name (ptid_t thread)
   return nullptr;
 }
 
+std::string
+process_stratum_target::thread_id_str (thread_info *thread)
+{
+  return "";
+}
+
 bool
 process_stratum_target::thread_handle (ptid_t ptid, gdb_byte **handle,
 				       int *handle_len)
diff --git a/gdbserver/target.h b/gdbserver/target.h
index 3643b9110da..a46b3fa47ff 100644
--- a/gdbserver/target.h
+++ b/gdbserver/target.h
@@ -475,6 +475,13 @@ class process_stratum_target
      caller.  */
   virtual const char *thread_name (ptid_t thread);
 
+  /* Return the string translation for THREAD's id.  This gives the
+     target a chance to completely re-interpret the thread id and
+     present a target-specific description for displaying to the user.
+     Return empty if the target is fine with how an id is displayed
+     by default.  */
+  virtual std::string thread_id_str (thread_info *thread);
+
   /* Thread ID to (numeric) thread handle: Return true on success and
      false for failure.  Return pointer to thread handle via HANDLE
      and the handle's length via HANDLE_LEN.  */
@@ -735,4 +742,10 @@ bool set_desired_process ();
 
 std::string target_pid_to_str (ptid_t);
 
+static inline std::string
+target_thread_id_str (thread_info *thread)
+{
+  return the_target->thread_id_str (thread);
+}
+
 #endif /* GDBSERVER_TARGET_H */
-- 
2.34.1

Intel Deutschland GmbH
Registered Address: Am Campeon 10, 85579 Neubiberg, Germany
Tel: +49 89 99 8853-0, www.intel.de <http://www.intel.de>
Managing Directors: Christin Eisenschmid, Sharon Heck, Tiffany Doon Silva  
Chairperson of the Supervisory Board: Nicole Lau
Registered Office: Munich
Commercial Register: Amtsgericht Muenchen HRB 186928


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2024-04-03 14:58 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-04-02 10:20 [PATCH 1/2] doc: add the missing 'handle' attribute in xml Tankut Baris Aktemur
2024-04-02 10:20 ` [PATCH 2/2] gdbserver, remote: introduce "id_str" in the "qXfer:threads:read" XML Tankut Baris Aktemur
2024-04-02 12:19   ` Eli Zaretskii
2024-04-03 14:57   ` [PATCH v2] " Tankut Baris Aktemur
2024-04-02 12:14 ` [PATCH 1/2] doc: add the missing 'handle' attribute in xml Eli Zaretskii
2024-04-03 14:49   ` Aktemur, Tankut Baris

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).