Well, it's not clear to me how to get the PC and RA of interest off the stack
when we are in the vmdump functions. We could retreive the RA from register 26
in the panic() function itself, and pass that to the dump_execute function.
Then the dump code could at least tell where panic was called from. Is this
sufficient, or at least a start?
On 18-Dec-1999 Brian Hall wrote:
> Okay, after some research, I think I figured out how to get at the needed
> Alpha registers:
>
> register unsigned long fptr __asm__("$15"); /* get frame pointer? */
> register unsigned long sptr __asm__("$30"); /* get stack pointer? */
>
> Now, my understanding of the problem is that I need to go back two frames on
> the stack to get the PC of interest, and three for the RA of interest. How do
> I
> do this? I haven't had much luck yet trying to figure out how to navigate the
> kernel stack. I see the pt_regs structure, but I'm not exactly sure how to
> figure the frame size, since that can vary with each frame.
>
> On 13-Dec-1999 Matt Robinson wrote:
>> The problem is from panic(), you don't have the registers, so you
>> need to grab them. That way the 'lcrash' code has a point to start
>> with as far as the failing process is concerned. Hence the "if (regs)"
>> stuff.
--
Brian Hall <brianw.hall@xxxxxxxxxx>
Linux Consultant
|