change aarch64 trap backtrace & coredump priority rating. (#8008)
This commit is contained in:
parent
012aa117af
commit
e8e980879e
|
@ -34,19 +34,49 @@ extern long list_thread(void);
|
||||||
#include <lwp_core_dump.h>
|
#include <lwp_core_dump.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void check_user_fault(struct rt_hw_exp_stack *regs, uint32_t pc_adj, char *info)
|
static void _check_fault(struct rt_hw_exp_stack *regs, uint32_t pc_adj, char *info)
|
||||||
{
|
{
|
||||||
uint32_t mode = regs->cpsr;
|
uint32_t mode = regs->cpsr;
|
||||||
|
|
||||||
if ((mode & 0x1f) == 0x00)
|
if ((mode & 0x1f) == 0x00)
|
||||||
{
|
{
|
||||||
rt_kprintf("%s! pc = 0x%08x\n", info, regs->pc - pc_adj);
|
rt_kprintf("%s! pc = 0x%08x\n", info, regs->pc - pc_adj);
|
||||||
|
|
||||||
|
/* user stack backtrace */
|
||||||
|
#ifdef RT_USING_LWP
|
||||||
|
{
|
||||||
|
rt_thread_t th;
|
||||||
|
|
||||||
|
th = rt_thread_self();
|
||||||
|
if (th && th->lwp)
|
||||||
|
{
|
||||||
|
rt_backtrace_user_thread(th);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef LWP_USING_CORE_DUMP
|
#ifdef LWP_USING_CORE_DUMP
|
||||||
lwp_core_dump(regs, pc_adj);
|
lwp_core_dump(regs, pc_adj);
|
||||||
#endif
|
#endif
|
||||||
backtrace((unsigned long)regs->pc, (unsigned long)regs->x30, (unsigned long)regs->x29);
|
|
||||||
sys_exit_group(-1);
|
sys_exit_group(-1);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* user stack backtrace */
|
||||||
|
#ifdef RT_USING_LWP
|
||||||
|
{
|
||||||
|
rt_thread_t th;
|
||||||
|
|
||||||
|
th = rt_thread_self();
|
||||||
|
if (th && th->lwp)
|
||||||
|
{
|
||||||
|
rt_backtrace_user_thread(th);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
/* kernel stack backtrace */
|
||||||
|
backtrace((unsigned long)regs->pc, (unsigned long)regs->x30, (unsigned long)regs->x29);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int _get_type(unsigned long esr)
|
int _get_type(unsigned long esr)
|
||||||
|
@ -293,29 +323,18 @@ void rt_hw_trap_exception(struct rt_hw_exp_stack *regs)
|
||||||
process_exception(esr, regs->pc);
|
process_exception(esr, regs->pc);
|
||||||
rt_hw_show_register(regs);
|
rt_hw_show_register(regs);
|
||||||
rt_kprintf("current: %s\n", rt_thread_self()->parent.name);
|
rt_kprintf("current: %s\n", rt_thread_self()->parent.name);
|
||||||
#ifdef RT_USING_LWP
|
|
||||||
check_user_fault(regs, 0, "user fault");
|
|
||||||
#endif
|
|
||||||
#ifdef RT_USING_FINSH
|
#ifdef RT_USING_FINSH
|
||||||
list_thread();
|
list_thread();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef RT_USING_LWP
|
#ifdef RT_USING_LWP
|
||||||
{
|
_check_fault(regs, 0, "user fault");
|
||||||
rt_thread_t th;
|
|
||||||
|
|
||||||
th = rt_thread_self();
|
|
||||||
if (th && th->lwp)
|
|
||||||
{
|
|
||||||
rt_backtrace_user_thread(th);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
backtrace((unsigned long)regs->pc, (unsigned long)regs->x30, (unsigned long)regs->x29);
|
|
||||||
rt_hw_cpu_shutdown();
|
rt_hw_cpu_shutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void rt_hw_trap_serror(struct rt_hw_exp_stack *regs)
|
void rt_hw_trap_serror(struct rt_hw_exp_stack *regs)
|
||||||
{
|
{
|
||||||
rt_kprintf("SError\n");
|
rt_kprintf("SError\n");
|
||||||
|
|
Loading…
Reference in New Issue