|
|
@@ -18,6 +18,7 @@ static char *_get_elf_name();
|
|
|
|
|
|
void rt_hw_backtrace(rt_uint32_t *ffp, rt_ubase_t sepc)
|
|
|
{
|
|
|
+ extern rt_mmu_info mmu_info;
|
|
|
rt_ubase_t *ra;
|
|
|
rt_ubase_t *fp;
|
|
|
rt_ubase_t vas, vae;
|
|
|
@@ -57,15 +58,17 @@ void rt_hw_backtrace(rt_uint32_t *ffp, rt_ubase_t sepc)
|
|
|
}
|
|
|
|
|
|
ra = fp - 1;
|
|
|
- if (*ra < vas || *ra > vae)
|
|
|
+ if (!rt_hw_mmu_v2p(&mmu_info, ra) || *ra < vas || *ra > vae)
|
|
|
break;
|
|
|
|
|
|
rt_kprintf(" %p", *ra - 0x04);
|
|
|
|
|
|
fp = fp - 2;
|
|
|
- if (!fp)
|
|
|
+ if (!rt_hw_mmu_v2p(&mmu_info, fp))
|
|
|
break;
|
|
|
fp = (rt_ubase_t *)(*fp);
|
|
|
+ if (!fp)
|
|
|
+ break;
|
|
|
}
|
|
|
|
|
|
rt_kputs("\r\n");
|