[Crash-utility] [PATCH v4 1/3] arm64: more improvement of bt -f

AKASHI Takahiro takahiro.akashi at linaro.org
Tue Jun 28 04:40:39 UTC 2016


On Wed, Jun 22, 2016 at 04:31:12PM -0400, Dave Anderson wrote:
> 
> Hi Takahiro,
> 
> BTW, in your next patch posting, can you possibly expound upon the diagram below?
> 
> For example, I'm presuming that 'p', 'c' and 'n' mean previous, current and next?
> But I'm not sure about 'N', or what "real stackframe" or "calced" mean, and what
> the 'top' marker in the IRQ stack signifies.  
>   
> Maybe you could add a sentence or two describing the 3 frame types? 

Sure.
But please feel free to correct my descriptions as much as you want.

I tried to fix the issue I mentioned last week, but I couldn't.
I believe that we have no generic way to fix it unless we adopt
dwarf-based unwinding.
Anyway, please review my v5.

Thanks,
-Takahiro AKASHI

> Thanks,
>   Dave
> 
> > -static int
> > -arm64_unwind_frame(struct bt_info *bt, struct arm64_stackframe *frame)
> > +/*
> > + * (1)Normal frame:
> > + *     +------+
> > + *     | pfp  |
> > + *     | cpc  |
> > + * psp +      +
> > + *     |      |
> > + *     |      |
> > + * pfp +------+ <--- :prev stackframe = <pfp, psp, ppc>
> > + *     | cfp  |
> > + *     | npc  |
> > + * csp +      +
> > + *     |      |
> > + *     |      |
> > + * cfp +------+ <--- :curr stackframe = <cfp, csp, cpc>
> > + *     | nfp  |   |                         cfp = *pfp
> > + *     | Npc  |   |                         csp = pfp + 0x10
> > + * nsp +      +  real stackframe
> > + *     |      |   |         at cpc
> > + *     |      |   |
> > + * nfp +------+ <--- :next stackframe = <nfp, nsp, npc>
> > + *     |      |
> > + *
> > + * (2)Exception:
> > + *     +------+
> > + *     | pfp  |
> > + *     | cpc  |
> > + * psp +      +
> > + *     |      |
> > + *     |      |
> > + * pfp +------+ <--- :prev stackframe = <pfp, psp, ppc>
> > + *     | cfp  |
> > + *     | npc  |
> > + * csp +      +
> > + *     |      |
> > + *     |      |
> > + * cfp +------+ <--- :stackframe = <cfp, csp, cpc>
> > + *     | nfp  |
> > + *     | epc  |
> > + *     +      +
> > + *     |      |
> > + *     |      |       calced dummy
> > + * esp +------+ <--- :exp stackframe = <---, esp, epc>
> > + *     |      |                           esp = nsp - sizeof(pt_regs)
> > + *     |      |
> > + *     | Npc  |
> > + *     | nfp  |
> > + *     | nsp  |
> > + *     | npc  |
> > + * nsp +      +
> > + *     |      |       calced missing
> > + * nfp +------+ <--- :task stackframe = <nfp, nsp, npc>
> > + *     | Nfp  |
> > + *     | NNpc |
> > + * Nsp +      +
> > + *     |      |
> > + * Nfp +------+ <--- :task stackframe = <Nfp, Nsp, Npc>
> > + *     | NNfp |
> > + *
> > + * (3)At interrupt:
> > + *     +------+
> > + *     | pfp  |
> > + *     | cpc  |
> > + * psp +      +
> > + *     |      |
> > + *     |      |
> > + * pfp +------+ <--- :prev stackframe = <pfp, psp, ppc>
> > + *     | cfp  |
> > + *     | epc  |
> > + * csp +      +
> > + *     |      |
> > + *     |      |       calced dummy
> > + * cfp +------+ <--- :irq stackframe = <cfp, csp, epc>
> > + *     | nfp  |                          | if (cfp == IRQ_STACK_PTR)
> > + *     | esp  |                          V
> > + * top +------+                        <---, esp, epc>
> > + *     IRQ stack
> > + *
> > + *                    calced dummy
> > + * esp +------+ <--- :exp stackframe = <---, esp, epc>
> > + *     |      |                            esp = nsp - sizeof(pt_regs)
> > + *     |      |
> > + *     | Npc  |
> > + *     | nfp  |
> > + *     | nsp  |
> > + *     | npc  |       calced missing
> > + * nfp +------+ <--- :task stackframe = <nfp, nsp, npc>
> > + *     | Nfp  |
> > + *     | NNpc |
> > + * Nsp +      +
> > + *     |      |
> > + * Nfp +------+ <--- :task stackframe = <Nfp, Nsp, Npc>
> > + *     | NNfp |
> > + */
> > +
> 
> --
> Crash-utility mailing list
> Crash-utility at redhat.com
> https://www.redhat.com/mailman/listinfo/crash-utility




More information about the Crash-utility mailing list