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
This commit is contained in:
Andrew Burgess
2023-04-04 14:50:35 +01:00
committed by Pedro Alves
parent 6b682bbf86
commit 0ae5b8fade
3 changed files with 55 additions and 0 deletions

View File

@@ -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);
}