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:
parent
1476ba4087
commit
6239ef1d29
@ -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},
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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.
|
||||
|
Loading…
Reference in New Issue
Block a user