Print this page
8158 Want named threads API
9857 proc manpages should have LIBRARY section

Split Close
Expand all
Collapse all
          --- old/usr/src/cmd/mdb/common/mdb/mdb_proc.c
          +++ new/usr/src/cmd/mdb/common/mdb/mdb_proc.c
↓ open down ↓ 1295 lines elided ↑ open up ↑
1296 1296                  else
1297 1297                          mdb_printf("no process\n");
1298 1298  
1299 1299                  if (cursig != 0 && sig2str(cursig, signame) == 0)
1300 1300                          mdb_printf("SIG%s: %s\n", signame, strsignal(cursig));
1301 1301          }
1302 1302  
1303 1303          return (pt_regs(addr, flags, argc, argv));
1304 1304  }
1305 1305  
     1306 +static void
     1307 +pt_thread_name(mdb_tgt_t *t, mdb_tgt_tid_t tid, char *buf, size_t bufsize)
     1308 +{
     1309 +        char name[THREAD_NAME_MAX];
     1310 +
     1311 +        buf[0] = '\0';
     1312 +
     1313 +        if (t->t_pshandle == NULL ||
     1314 +            Plwp_getname(t->t_pshandle, tid, name, sizeof (name)) != 0 ||
     1315 +            name[0] == '\0') {
     1316 +                (void) mdb_snprintf(buf, bufsize, "%lu", tid);
     1317 +                return;
     1318 +        }
     1319 +
     1320 +        (void) mdb_snprintf(buf, bufsize, "%lu [%s]", tid, name);
     1321 +}
     1322 +
1306 1323  static int
1307 1324  pt_findstack(uintptr_t tid, uint_t flags, int argc, const mdb_arg_t *argv)
1308 1325  {
1309 1326          mdb_tgt_t *t = mdb.m_target;
1310 1327          mdb_tgt_gregset_t gregs;
1311 1328          int showargs = 0;
1312 1329          int count;
1313 1330          uintptr_t pc, sp;
     1331 +        char name[128];
1314 1332  
1315 1333          if (!(flags & DCMD_ADDRSPEC))
1316 1334                  return (DCMD_USAGE);
1317 1335  
1318 1336          count = mdb_getopts(argc, argv, 'v', MDB_OPT_SETBITS, TRUE, &showargs,
1319 1337              NULL);
1320 1338          argc -= count;
1321 1339          argv += count;
1322 1340  
1323 1341          if (argc > 1 || (argc == 1 && argv->a_type != MDB_TYPE_STRING))
↓ open down ↓ 3 lines elided ↑ open up ↑
1327 1345                  mdb_warn("failed to get register set for thread %p", tid);
1328 1346                  return (DCMD_ERR);
1329 1347          }
1330 1348  
1331 1349          pc = gregs.gregs[R_PC];
1332 1350  #if defined(__i386) || defined(__amd64)
1333 1351          sp = gregs.gregs[R_FP];
1334 1352  #else
1335 1353          sp = gregs.gregs[R_SP];
1336 1354  #endif
1337      -        mdb_printf("stack pointer for thread %p: %p\n", tid, sp);
     1355 +
     1356 +        pt_thread_name(t, tid, name, sizeof (name));
     1357 +
     1358 +        mdb_printf("stack pointer for thread %s: %p\n", name, sp);
1338 1359          if (pc != 0)
1339 1360                  mdb_printf("[ %0?lr %a() ]\n", sp, pc);
1340 1361  
1341 1362          (void) mdb_inc_indent(2);
1342 1363          mdb_set_dot(sp);
1343 1364  
1344 1365          if (argc == 1)
1345 1366                  (void) mdb_eval(argv->a_un.a_str);
1346 1367          else if (showargs)
1347 1368                  (void) mdb_eval("<.$C");
↓ open down ↓ 4141 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX