aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
authorAndrew Burgess <aburgess@redhat.com>2023-04-04 14:50:35 +0100
committerPedro Alves <pedro@palves.net>2023-11-13 14:16:09 +0000
commit0ae5b8faded5f79d1fa5bfb257262278676d55f9 (patch)
tree90668c69e4d539188a94f303c4e8969f69aa71d5 /gdb
parent6b682bbf86f37982ce1d270fb47f363413490bda (diff)
downloadgdb-0ae5b8faded5f79d1fa5bfb257262278676d55f9.zip
gdb-0ae5b8faded5f79d1fa5bfb257262278676d55f9.tar.gz
gdb-0ae5b8faded5f79d1fa5bfb257262278676d55f9.tar.bz2
Add "maint info linux-lwps" command
This adds a maintenance command that lets you list all the LWPs under control of the linux-nat target. For example: (gdb) maint info linux-lwps LWP Ptid Thread ID 560948.561047.0 None 560948.560948.0 1.1 This shows that "560948.561047.0" LWP doesn't map to any thread_info object, which is bogus. We'll be using this in a testcase in a following patch. Co-Authored-By: Pedro Alves <pedro@palves.net> Change-Id: Ic4e9e123385976e5cd054391990124b7a20fb3f5
Diffstat (limited to 'gdb')
-rw-r--r--gdb/NEWS5
-rw-r--r--gdb/doc/gdb.texinfo4
-rw-r--r--gdb/linux-nat.c46
3 files changed, 55 insertions, 0 deletions
diff --git a/gdb/NEWS b/gdb/NEWS
index 3851114..d85a13b 100644
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -24,6 +24,11 @@ disassemble
** New read/write attribute gdb.Value.bytes that contains a bytes
object holding the contents of this value.
+* New commands
+
+maintenance info linux-lwps
+ List all LWPs under control of the linux-nat target.
+
*** 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 2cd565e..4cbaaa6 100644
--- a/gdb/doc/gdb.texinfo
+++ b/gdb/doc/gdb.texinfo
@@ -41189,6 +41189,10 @@ module (@pxref{Disassembly In Python}), and will only be present after
that module has been imported. To force the module to be imported do
the following:
+@kindex maint info linux-lwps
+@item maint info linux-lwps
+Print information about LWPs under control of the Linux native target.
+
@smallexample
(@value{GDBP}) python import gdb.disassembler
@end smallexample
diff --git a/gdb/linux-nat.c b/gdb/linux-nat.c
index 1c9756c..f73e52f 100644
--- a/gdb/linux-nat.c
+++ b/gdb/linux-nat.c
@@ -4503,6 +4503,49 @@ current_lwp_ptid (void)
return inferior_ptid;
}
+/* Implement 'maintenance info linux-lwps'. Displays some basic
+ information about all the current lwp_info objects. */
+
+static void
+maintenance_info_lwps (const char *arg, int from_tty)
+{
+ if (all_lwps ().size () == 0)
+ {
+ gdb_printf ("No Linux LWPs\n");
+ return;
+ }
+
+ /* Start the width at 8 to match the column heading below, then
+ figure out the widest ptid string. We'll use this to build our
+ output table below. */
+ size_t ptid_width = 8;
+ for (lwp_info *lp : all_lwps ())
+ ptid_width = std::max (ptid_width, lp->ptid.to_string ().size ());
+
+ /* Setup the table headers. */
+ struct ui_out *uiout = current_uiout;
+ ui_out_emit_table table_emitter (uiout, 2, -1, "linux-lwps");
+ uiout->table_header (ptid_width, ui_left, "lwp-ptid", _("LWP Ptid"));
+ uiout->table_header (9, ui_left, "thread-info", _("Thread ID"));
+ uiout->table_body ();
+
+ /* Display one table row for each lwp_info. */
+ for (lwp_info *lp : all_lwps ())
+ {
+ ui_out_emit_tuple tuple_emitter (uiout, "lwp-entry");
+
+ thread_info *th = linux_target->find_thread (lp->ptid);
+
+ uiout->field_string ("lwp-ptid", lp->ptid.to_string ().c_str ());
+ if (th == nullptr)
+ uiout->field_string ("thread-info", "None");
+ else
+ uiout->field_string ("thread-info", print_full_thread_id (th));
+
+ uiout->message ("\n");
+ }
+}
+
void _initialize_linux_nat ();
void
_initialize_linux_nat ()
@@ -4540,6 +4583,9 @@ Enables printf debugging output."),
sigemptyset (&blocked_mask);
lwp_lwpid_htab_create ();
+
+ add_cmd ("linux-lwps", class_maintenance, maintenance_info_lwps,
+ _("List the Linux LWPS."), &maintenanceinfolist);
}