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(a)redhat.com
https://www.redhat.com/mailman/listinfo/crash-utility