[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