• Jinyang He's avatar
    LoongArch: Add generic ex-handler unwind in prologue unwinder · dc74a9e8
    Jinyang He authored
    When exception is triggered, code flow go handle_\exception in some
    cases. One of stackframe in this case as follows,
    
    high -> +-------+
            | REGS  |  <- a pt_regs
            |       |
            |       |  <- ex trigger
            | REGS  |  <- ex pt_regs   <-+
            |       |                    |
            |       |                    |
    low  -> +-------+           ->unwind-+
    
    When unwinder unwinds to handler_\exception it cannot go on prologue
    analysis. Because it is an asynchronous code flow, we should get the
    next frame PC from regs->csr_era rather than regs->regs[1]. At init time
    we copy the handlers to eentry and also copy them to NUMA-affine memory
    named pcpu_handlers if NUMA is enabled. Thus, unwinder cannot unwind
    normally. To solve this, we try to give some hints in handler_\exception
    and fixup unwinders in unwind_next_frame().
    Reported-by: default avatarQing Zhang <zhangqing@loongson.cn>
    Signed-off-by: default avatarJinyang He <hejinyang@loongson.cn>
    Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
    dc74a9e8
unwind.h 2.15 KB