Helper to backtrace a user context
authorBarret Rhoden <brho@cs.berkeley.edu>
Thu, 21 May 2015 20:41:27 +0000 (16:41 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 4 Jun 2015 13:40:32 +0000 (09:40 -0400)
commitb2356b50a0e782dc5b77abb586f6e3d8a2817445
tree26ed881dce15c2449b93e6c83b36f2b96c0778a9
parentd7b9d230e503f635135d329a587f449bf7d01081
Helper to backtrace a user context

You can backtrace a context, but only if you have one!  And if the
context is somehow messed up or if the stackframe is not using the frame
pointer, then it'll probably die in a horrendous kernel page fault.

Note that when processing as syscall, if the syscall has already
blocked, then current_ctx is not the context that originally issued the
syscall.  *That* context has long-since restarted, due to our async
syscalls.

You can attempt to backtrace the current context like so:
backtrace_user_ctx(p, current_ctx);

Try putting one of these in sys_block() on either side of the
kthread_usleep().  The latter will fail, and if it doesn't, it's
probably grabbing some arbitrary context.
kern/arch/riscv/trap.h
kern/arch/x86/kdebug.c
kern/arch/x86/trap64.h
kern/include/kdebug.h
kern/include/trap.h
kern/src/kdebug.c
kern/src/trap.c