lkcd
[Top] [All Lists]

Retrieving PC from (traversing) the stack on Alpha

To: Matt Robinson <yakker@xxxxxxxxxxxxxxxxxxxx>, x-linux-kernel@xxxxxxxxxxxxxxxx, comp.os.linux.alpha@xxxxxxxxxxxxx
Subject: Retrieving PC from (traversing) the stack on Alpha
From: Brian Hall <brianw.hall@xxxxxxxxxx>
Date: Sat, 18 Dec 1999 14:51:51 -0700 (MST)
Cc: lkcd@xxxxxxxxxxx
In-reply-to: <Pine.SGI.3.94.991213130230.334794A-100000@xxxxxxxxxxxxxxxxxxxx>
Reply-to: Brian Hall <brianw.hall@xxxxxxxxxx>
Sender: owner-lkcd@xxxxxxxxxxx
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

<Prev in Thread] Current Thread [Next in Thread>