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