crash.types.task module¶
-
class
crash.types.task.LinuxTask(task_struct: gdb.Value)[source]¶ Bases:
objectA wrapper class for
struct task_struct. There will be typically one of these allocated for every task discovered in the debugging environment.Parameters: task_struct – The task to wrap. The value must be of type struct task_struct.-
active¶ Whether this task is active
Type: bool
-
cpu¶ The CPU number the task was using
Type: int
-
regs¶ The registers associated with this task, if active
-
thread_info¶ The architecture-specific
struct thread_infofor this task. The value will be of typestruct thread_info.Type: gdb.Value
-
thread¶ The GDB representation of the thread.
Type: gdb.InferiorThread
-
mem_valid¶ Whether the memory statistics are currently valid.
Type: bool
-
rss¶ The size of the resident memory for this task.
Type: int
-
total_vm¶ The total size of the vm space for this task.
Type: int
-
pgd_addr¶ The address of the top of the page table tree.
Type: int
Raises: ArgumentTypeError– task_struct was not agdb.Value.UnexpectedGDBTypeError– task_struct was not of typestruct task_struct.InvalidArgumentError– The cpu number was notNoneor anint.
-
attach_thread(thread: gdb.InferiorThread) → None[source]¶ Associate a gdb thread with this task
Parameters: thread – The gdb thread to associate with this task
-
get_last_cpu() → int[source]¶ Returns the last cpu this task was scheduled to execute on
Returns: The last cpu this task was scheduled to execute on Return type: int
-
get_rss() → int[source]¶ Return the resident set for this task
Returns: The size of the resident memory set for this task Return type: int
-
get_stack_pointer() → int[source]¶ Get the stack pointer for this task
Returns: The address of the stack pointer for this task.
Return type: intRaises: NotImplementedError– The architecture hasn’t provided- a stack pointer callback.
-
get_thread_info() → gdb.Value[source]¶ Get the thread info for this task
The thread info structure is architecture specific and so this method abstracts its retreival.
Returns: - The struct thread_info associated with this
- task. The type of the value is
struct thread_info.
Return type: gdb.Value
-
is_exiting() → bool[source]¶ Returns whether a task is exiting
Returns: Whether the task is exiting Return type: bool
-
is_thread_group_leader() → bool[source]¶ Returns whether a task is a thread group leader
Returns: Whether the task is a thread group leader Return type: bool
-
is_zombie() → bool[source]¶ Returns whether a task is in Zombie state
Returns: Whether the task is in zombie state Return type: bool
-
last_run() → int[source]¶ The timestamp of when this task was last run
Returns: The timestamp of when this task was last run Return type: int
-
maybe_dead() → bool[source]¶ Returns whether this task is dead
Returns: Whether this task is dead Return type: bool
-
parent_pid() → int[source]¶ Returns the pid of this task’s parent
Returns: The pid of this task’s parent Return type: int
-
set_active(cpu: int, regs: Dict[str, int]) → None[source]¶ Set this task as active in the debugging environment
Parameters: - cpu – Which CPU this task was using
- regs – The registers associated with this task
Raises: InvalidArgumentError– The cpu was not a valid integer.
-
classmethod
set_get_stack_pointer(fn: Callable[[gdb.Value], int]) → None[source]¶ Set the stack pointer callback for this architecture
The callback must accept a
gdb.Valueof typestruct threadand return aintcontaining the address of the stack pointer.Parameters: fn – The callback to use. It will be used by all tasks.
-
set_thread_info(thread_info: gdb.Value) → None[source]¶ Set the thread info for this task
The thread info structure is architecture specific. This method allows the architecture code to assign its thread info structure to this task.
Parameters: thread_info – The struct thread_infoto be associated with this task. The value must be of typestruct thread_info.
-
task_address() → int[source]¶ Returns the address of the task_struct for this task
Returns: The address of the task_struct Return type: int
-
task_flags() → int[source]¶ Returns the flags for this task
Returns: The flags for this task Return type: int
-
task_name(brackets: bool = False) → str[source]¶ Returns the
commfield of this taskParameters: brackets – If this task is a kernel thread, surround the name in square brackets Returns: The commfield of this task a python stringReturn type: str
-
-
crash.types.task.TF¶ alias of
crash.types.task.TaskStateFlags
-
class
crash.types.task.TaskStateFlags[source]¶ Bases:
objectA class to contain state related to discovering task flag values. Not meant to be instantiated.
The initial values below are overridden once symbols are available to resolve them properly.
-
EXIT_DEAD= -1¶
-
EXIT_ZOMBIE= -1¶
-
TASK_DEAD= -1¶
-
TASK_FLAG_UNINITIALIZED= -1¶
-
TASK_IDLE= -1¶
-
TASK_INTERRUPTIBLE= -1¶
-
TASK_NEW= -1¶
-
TASK_NOLOAD= -1¶
-
TASK_PARKED= -1¶
-
TASK_RUNNING= 0¶
-
TASK_STOPPED= -1¶
-
TASK_SWAPPING= -1¶
-
TASK_TRACING_STOPPED= -1¶
-
TASK_UNINTERRUPTIBLE= -1¶
-
TASK_WAKEKILL= -1¶
-
TASK_WAKING= -1¶
-
classmethod
task_state_flags_callback(symbol: gdb.Symbol) → None[source]¶ Detect which task flags this kernel uses.
Meant to be used as a SymbolCallback.
Different kernels use different task flags or even different values for the same flags. This method tries to determine the flags for the kernel.
Parameters: symbol – The task_state_arraysymbol.
-
-
crash.types.task.for_each_all_tasks() → Iterator[gdb.Value][source]¶ Iterate the task list and yield each task including any associated thread tasks
Yields: gdb.Value– The next task on the list. The value is of typestruct task_struct.
-
crash.types.task.for_each_thread_group_leader() → Iterator[gdb.Value][source]¶ Iterate the task list and yield each thread group leader
Yields: gdb.Value– The next task on the list. The value is of typestruct task_struct.
-
crash.types.task.for_each_thread_in_group(task: gdb.Value) → Iterator[gdb.Value][source]¶ Iterate a thread group leader’s thread list and yield each struct task_struct
Parameters: task – The task_struct that is the thread group leader. The value must be of type struct task_struct.Yields: gdb.Value– The next task on the list. The value is of typestruct task_struct.