Print this page
8158 Want named threads API
9857 proc manpages should have LIBRARY section
@@ -1301,18 +1301,36 @@
}
return (pt_regs(addr, flags, argc, argv));
}
+static void
+pt_thread_name(mdb_tgt_t *t, mdb_tgt_tid_t tid, char *buf, size_t bufsize)
+{
+ char name[THREAD_NAME_MAX];
+
+ buf[0] = '\0';
+
+ if (t->t_pshandle == NULL ||
+ Plwp_getname(t->t_pshandle, tid, name, sizeof (name)) != 0 ||
+ name[0] == '\0') {
+ (void) mdb_snprintf(buf, bufsize, "%lu", tid);
+ return;
+ }
+
+ (void) mdb_snprintf(buf, bufsize, "%lu [%s]", tid, name);
+}
+
static int
pt_findstack(uintptr_t tid, uint_t flags, int argc, const mdb_arg_t *argv)
{
mdb_tgt_t *t = mdb.m_target;
mdb_tgt_gregset_t gregs;
int showargs = 0;
int count;
uintptr_t pc, sp;
+ char name[128];
if (!(flags & DCMD_ADDRSPEC))
return (DCMD_USAGE);
count = mdb_getopts(argc, argv, 'v', MDB_OPT_SETBITS, TRUE, &showargs,
@@ -1332,11 +1350,14 @@
#if defined(__i386) || defined(__amd64)
sp = gregs.gregs[R_FP];
#else
sp = gregs.gregs[R_SP];
#endif
- mdb_printf("stack pointer for thread %p: %p\n", tid, sp);
+
+ pt_thread_name(t, tid, name, sizeof (name));
+
+ mdb_printf("stack pointer for thread %s: %p\n", name, sp);
if (pc != 0)
mdb_printf("[ %0?lr %a() ]\n", sp, pc);
(void) mdb_inc_indent(2);
mdb_set_dot(sp);