From: Keith O. <ka...@sg...> - 2004-03-31 12:54:42
|
On Wed, 31 Mar 2004 14:31:59 +0200, "Jan Beulich" <JBe...@no...> wrote: >Following the code path from IPI_handler, I can't see where this >creation of a switch_stack structure should happen. Standard lkcd code does not create a switch_stack for active processes. kdb does, and driving lkcd out of kdb gives lkcd the data that kdb has already captured, for free. >Similarly, I can't see how this would save the >high floating point registers, since the only two places I can find >where they are saved are in switch_to and the ptrace code. IA64 kdb drives all cpus through kdba_main_loop() -> unw_init_running() -> do_kdba_main_loop. unw_init_running (a lovely chunk of ia64 assembler) creates a struct switch_stack that contains all the process state that is not already in pt_regs. kdb continues running on each cpu after switch_stack is pushed, but the switch_stack makes it look like the task is sleeping. gdb needs the data in switch_stack to do a proper unwind. If you trace through unw_init_running, you find that much of the work is done in save_switch_stack. That saves f12-f31, amongst others. |