Make a thread's address available via the kern proc sysctl, just like the

process address.

Add "tdaddr" keyword to ps(1) to display this thread address.

Distilled from Sandvine's patch set by Mark Johnston.
This commit is contained in:
Ed Maste 2010-10-08 00:44:53 +00:00
parent 1476ba4087
commit 6239ef1d29
4 changed files with 7 additions and 1 deletions

View File

@ -187,6 +187,8 @@ static VAR var[] = {
UINT, UIDFMT, 0},
{"svuid", "SVUID", NULL, 0, kvar, NULL, UIDLEN, KOFF(ki_svuid),
UINT, UIDFMT, 0},
{"tdaddr", "TDADDR", NULL, 0, kvar, NULL, sizeof(void *) * 2,
KOFF(ki_tdaddr), KPTR, "lx", 0},
{"tdev", "TDEV", NULL, 0, tdev, NULL, 5, 0, CHAR, NULL, 0},
{"tdnam", "TDNAM", NULL, LJUST, tdnam, NULL, COMMLEN, 0, CHAR, NULL, 0},
{"time", "TIME", NULL, USER, cputime, NULL, 9, 0, CHAR, NULL, 0},

View File

@ -591,6 +591,8 @@ symbolic process state (alias
saved gid from a setgid executable
.It Cm svuid
saved UID from a setuid executable
.It Cm tdaddr
thread address
.It Cm tdev
control terminal device number
.It Cm time

View File

@ -842,6 +842,7 @@ fill_kinfo_thread(struct thread *td, struct kinfo_proc *kp, int preferthread)
struct proc *p;
p = td->td_proc;
kp->ki_tdaddr = td;
PROC_LOCK_ASSERT(p, MA_OWNED);
thread_lock(td);

View File

@ -85,7 +85,7 @@
*/
#define KI_NSPARE_INT 9
#define KI_NSPARE_LONG 12
#define KI_NSPARE_PTR 7
#define KI_NSPARE_PTR 6
#ifndef _KERNEL
#ifndef KINFO_PROC_SIZE
@ -188,6 +188,7 @@ struct kinfo_proc {
struct pcb *ki_pcb; /* kernel virtual addr of pcb */
void *ki_kstack; /* kernel virtual addr of stack */
void *ki_udata; /* User convenience pointer */
struct thread *ki_tdaddr; /* address of thread */
/*
* When adding new variables, take space for pointers from the
* front of ki_spareptrs, and longs from the end of ki_sparelongs.