stack - kernel thread stack tracing routines
Each stack trace is described by a
Vt struct stack .
Before a trace may be created or otherwise manipulated, storage for the trace
must be allocated with
stack_create (,);
which may sleep.
Memory associated with a trace is freed by calling
stack_destroy (.);
A trace of the current kernel thread's call stack may be captured using
stack_save (.);
stack_print ();
may be used to print a stack trace using the kernel
printf(9),
and may sleep as a result of acquiring
sx(9)
locks in the kernel linker while looking up symbol names.
In locking-sensitive environments, the unsynchronized
stack_print_ddb ();
variant may be invoked.
This function bypasses kernel linker locking, making it usable in
ddb(4),
but not in a live system where linker data structures may change.
stack_sbuf_print ();
may be used to construct a human-readable string, including conversion (where
possible) from a simple kernel instruction pointer to a named symbol and
offset.
The argument
sb
must be an initialized
struct sbuf
as described in
sbuf(9).
This function may sleep if an auto-extending
struct sbuf
is used, or due to kernel linker locking.
In locking-sensitive environments, such as
ddb(4),
the unsynchronized
stack_sbuf_print_ddb ();
variant may be invoked to avoid kernel linker locking; it should be used with
a fixed-length sbuf.
The utility functions stack_zero stack_copy and stack_put may be used to manipulate stack data structures directly.
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |