Break out stack(9) from ddb(4):
- Introduce per-architecture stack_machdep.c to hold stack_save(9).
- Introduce per-architecture machine/stack.h to capture any common
definitions required between db_trace.c and stack_machdep.c.
- Add new kernel option "options STACK"; we will build in stack(9) if it is
defined, or also if "options DDB" is defined to provide compatibility
with existing users of stack(9).
Add new stack_save_td(9) function, which allows the capture of a stacktrace
of another thread rather than the current thread, which the existing
stack_save(9) was limited to. It requires that the thread be neither
swapped out nor running, which is the responsibility of the consumer to
enforce.
Update stack(9) man page.
Build tested: amd64, arm, i386, ia64, powerpc, sparc64, sun4v
Runtime tested: amd64 (rwatson), arm (cognet), i386 (rwatson)
2007-12-02 15:40:35 -05:00
|
|
|
/*
|
2015-09-10 23:24:07 -04:00
|
|
|
* This file is in the public domain.
|
Break out stack(9) from ddb(4):
- Introduce per-architecture stack_machdep.c to hold stack_save(9).
- Introduce per-architecture machine/stack.h to capture any common
definitions required between db_trace.c and stack_machdep.c.
- Add new kernel option "options STACK"; we will build in stack(9) if it is
defined, or also if "options DDB" is defined to provide compatibility
with existing users of stack(9).
Add new stack_save_td(9) function, which allows the capture of a stacktrace
of another thread rather than the current thread, which the existing
stack_save(9) was limited to. It requires that the thread be neither
swapped out nor running, which is the responsibility of the consumer to
enforce.
Update stack(9) man page.
Build tested: amd64, arm, i386, ia64, powerpc, sparc64, sun4v
Runtime tested: amd64 (rwatson), arm (cognet), i386 (rwatson)
2007-12-02 15:40:35 -05:00
|
|
|
*/
|
2015-09-10 23:24:07 -04:00
|
|
|
/* $FreeBSD$ */
|
Break out stack(9) from ddb(4):
- Introduce per-architecture stack_machdep.c to hold stack_save(9).
- Introduce per-architecture machine/stack.h to capture any common
definitions required between db_trace.c and stack_machdep.c.
- Add new kernel option "options STACK"; we will build in stack(9) if it is
defined, or also if "options DDB" is defined to provide compatibility
with existing users of stack(9).
Add new stack_save_td(9) function, which allows the capture of a stacktrace
of another thread rather than the current thread, which the existing
stack_save(9) was limited to. It requires that the thread be neither
swapped out nor running, which is the responsibility of the consumer to
enforce.
Update stack(9) man page.
Build tested: amd64, arm, i386, ia64, powerpc, sparc64, sun4v
Runtime tested: amd64 (rwatson), arm (cognet), i386 (rwatson)
2007-12-02 15:40:35 -05:00
|
|
|
|
2023-01-31 17:47:40 -05:00
|
|
|
#ifndef _MACHINE_STACK_H_
|
|
|
|
|
#define _MACHINE_STACK_H_
|
|
|
|
|
|
2015-09-10 23:24:07 -04:00
|
|
|
#include <x86/stack.h>
|
2023-01-31 17:47:40 -05:00
|
|
|
|
|
|
|
|
#ifdef _SYS_PROC_H_
|
|
|
|
|
|
|
|
|
|
/* Get the current kernel thread stack usage. */
|
|
|
|
|
#define GET_STACK_USAGE(total, used) do { \
|
|
|
|
|
struct thread *td = curthread; \
|
|
|
|
|
(total) = td->td_kstack_pages * PAGE_SIZE; \
|
|
|
|
|
(used) = (char *)td->td_kstack + \
|
|
|
|
|
td->td_kstack_pages * PAGE_SIZE - \
|
|
|
|
|
(char *)&td; \
|
|
|
|
|
} while (0)
|
|
|
|
|
|
|
|
|
|
static __inline bool
|
|
|
|
|
kstack_contains(struct thread *td, vm_offset_t va, size_t len)
|
|
|
|
|
{
|
|
|
|
|
return (va >= td->td_kstack && va + len >= va &&
|
|
|
|
|
va + len <= td->td_kstack + td->td_kstack_pages * PAGE_SIZE);
|
|
|
|
|
}
|
|
|
|
|
#endif /* _SYS_PROC_H_ */
|
|
|
|
|
|
|
|
|
|
#endif
|