board: Pass the assertion expression to board_crashdump too
continue the follow work:
commit 43e7b13697
Author: Xiang Xiao <xiaoxiang@xiaomi.com>
Date: Sun Jan 22 19:31:32 2023 +0800
assert: Log the assertion expression in case of fail
Signed-off-by: Xiang Xiao <xiaoxiang@xiaomi.com>
This commit is contained in:
parent
be10056702
commit
99e89809d7
@ -98,15 +98,14 @@ static void copy_reverse(stack_word_t *dest, stack_word_t *src, int size)
|
|||||||
* Name: board_crashdump
|
* Name: board_crashdump
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
void board_crashdump(uintptr_t currentsp, void *tcb,
|
void board_crashdump(uintptr_t sp, struct tcb_s *tcb,
|
||||||
const char *filename, int lineno)
|
const char *filename, int lineno,
|
||||||
|
const char *msg)
|
||||||
{
|
{
|
||||||
struct tcb_s *rtcb;
|
|
||||||
fullcontext_t *pdump;
|
fullcontext_t *pdump;
|
||||||
|
|
||||||
enter_critical_section();
|
enter_critical_section();
|
||||||
|
|
||||||
rtcb = (struct tcb_s *)tcb;
|
|
||||||
#ifdef CONFIG_CXD56_BACKUPLOG
|
#ifdef CONFIG_CXD56_BACKUPLOG
|
||||||
pdump = up_backuplog_alloc("crash", sizeof(fullcontext_t));
|
pdump = up_backuplog_alloc("crash", sizeof(fullcontext_t));
|
||||||
#else
|
#else
|
||||||
@ -151,10 +150,10 @@ void board_crashdump(uintptr_t currentsp, void *tcb,
|
|||||||
/* Save Context */
|
/* Save Context */
|
||||||
|
|
||||||
#if CONFIG_TASK_NAME_SIZE > 0
|
#if CONFIG_TASK_NAME_SIZE > 0
|
||||||
strlcpy(pdump->info.name, rtcb->name, sizeof(pdump->info.name));
|
strlcpy(pdump->info.name, tcb->name, sizeof(pdump->info.name));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
pdump->info.pid = rtcb->pid;
|
pdump->info.pid = tcb->pid;
|
||||||
|
|
||||||
/* If current_regs is not NULL then we are in an interrupt context
|
/* If current_regs is not NULL then we are in an interrupt context
|
||||||
* and the user context is in current_regs else we are running in
|
* and the user context is in current_regs else we are running in
|
||||||
@ -164,7 +163,7 @@ void board_crashdump(uintptr_t currentsp, void *tcb,
|
|||||||
if (CURRENT_REGS)
|
if (CURRENT_REGS)
|
||||||
{
|
{
|
||||||
#if CONFIG_ARCH_INTERRUPTSTACK > 3
|
#if CONFIG_ARCH_INTERRUPTSTACK > 3
|
||||||
pdump->info.stacks.interrupt.sp = currentsp;
|
pdump->info.stacks.interrupt.sp = sp;
|
||||||
#endif
|
#endif
|
||||||
pdump->info.flags |= (REGS_PRESENT | USERSTACK_PRESENT | \
|
pdump->info.flags |= (REGS_PRESENT | USERSTACK_PRESENT | \
|
||||||
INTSTACK_PRESENT);
|
INTSTACK_PRESENT);
|
||||||
@ -177,12 +176,12 @@ void board_crashdump(uintptr_t currentsp, void *tcb,
|
|||||||
/* users context */
|
/* users context */
|
||||||
|
|
||||||
pdump->info.flags |= USERSTACK_PRESENT;
|
pdump->info.flags |= USERSTACK_PRESENT;
|
||||||
pdump->info.stacks.user.sp = currentsp;
|
pdump->info.stacks.user.sp = sp;
|
||||||
}
|
}
|
||||||
|
|
||||||
pdump->info.stacks.user.top = (uint32_t)rtcb->stack_base_ptr +
|
pdump->info.stacks.user.top = (uint32_t)tcb->stack_base_ptr +
|
||||||
rtcb->adj_stack_size;
|
tcb->adj_stack_size;
|
||||||
pdump->info.stacks.user.size = (uint32_t)rtcb->adj_stack_size;
|
pdump->info.stacks.user.size = (uint32_t)tcb->adj_stack_size;
|
||||||
|
|
||||||
#if CONFIG_ARCH_INTERRUPTSTACK > 3
|
#if CONFIG_ARCH_INTERRUPTSTACK > 3
|
||||||
/* Get the limits on the interrupt stack memory */
|
/* Get the limits on the interrupt stack memory */
|
||||||
|
@ -379,17 +379,15 @@ int stm32_bbsram_int(void)
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#if defined(CONFIG_STM32F4_SAVE_CRASHDUMP)
|
#if defined(CONFIG_STM32F4_SAVE_CRASHDUMP)
|
||||||
void board_crashdump(uintptr_t currentsp, void *tcb,
|
void board_crashdump(uintptr_t sp, struct tcb_s *tcb,
|
||||||
const char *filename, int lineno)
|
const char *filename, int lineno,
|
||||||
|
const char *msg)
|
||||||
{
|
{
|
||||||
fullcontext_t *pdump = (fullcontext_t *)&g_sdata;
|
fullcontext_t *pdump = (fullcontext_t *)&g_sdata;
|
||||||
struct tcb_s *rtcb;
|
|
||||||
int rv;
|
int rv;
|
||||||
|
|
||||||
enter_critical_section();
|
enter_critical_section();
|
||||||
|
|
||||||
rtcb = (struct tcb_s *)tcb;
|
|
||||||
|
|
||||||
/* Zero out everything */
|
/* Zero out everything */
|
||||||
|
|
||||||
memset(pdump, 0, sizeof(fullcontext_t));
|
memset(pdump, 0, sizeof(fullcontext_t));
|
||||||
@ -423,10 +421,10 @@ void board_crashdump(uintptr_t currentsp, void *tcb,
|
|||||||
/* Save Context */
|
/* Save Context */
|
||||||
|
|
||||||
#if CONFIG_TASK_NAME_SIZE > 0
|
#if CONFIG_TASK_NAME_SIZE > 0
|
||||||
strlcpy(pdump->info.name, rtcb->name, sizeof(pdump->info.name));
|
strlcpy(pdump->info.name, tcb->name, sizeof(pdump->info.name));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
pdump->info.pid = rtcb->pid;
|
pdump->info.pid = tcb->pid;
|
||||||
|
|
||||||
/* If current_regs is not NULL then we are in an interrupt context
|
/* If current_regs is not NULL then we are in an interrupt context
|
||||||
* and the user context is in current_regs else we are running in
|
* and the user context is in current_regs else we are running in
|
||||||
@ -435,7 +433,7 @@ void board_crashdump(uintptr_t currentsp, void *tcb,
|
|||||||
|
|
||||||
if (CURRENT_REGS)
|
if (CURRENT_REGS)
|
||||||
{
|
{
|
||||||
pdump->info.stacks.interrupt.sp = currentsp;
|
pdump->info.stacks.interrupt.sp = sp;
|
||||||
pdump->info.flags |= (REGS_PRESENT | USERSTACK_PRESENT | \
|
pdump->info.flags |= (REGS_PRESENT | USERSTACK_PRESENT | \
|
||||||
INTSTACK_PRESENT);
|
INTSTACK_PRESENT);
|
||||||
memcpy(pdump->info.regs, (void *)CURRENT_REGS,
|
memcpy(pdump->info.regs, (void *)CURRENT_REGS,
|
||||||
@ -447,12 +445,12 @@ void board_crashdump(uintptr_t currentsp, void *tcb,
|
|||||||
/* users context */
|
/* users context */
|
||||||
|
|
||||||
pdump->info.flags |= USERSTACK_PRESENT;
|
pdump->info.flags |= USERSTACK_PRESENT;
|
||||||
pdump->info.stacks.user.sp = currentsp;
|
pdump->info.stacks.user.sp = sp;
|
||||||
}
|
}
|
||||||
|
|
||||||
pdump->info.stacks.user.top = (uint32_t)rtcb->stack_base_ptr +
|
pdump->info.stacks.user.top = (uint32_t)tcb->stack_base_ptr +
|
||||||
rtcb->adj_stack_size;
|
tcb->adj_stack_size;
|
||||||
pdump->info.stacks.user.size = (uint32_t)rtcb->adj_stack_size;
|
pdump->info.stacks.user.size = (uint32_t)tcb->adj_stack_size;
|
||||||
|
|
||||||
#if CONFIG_ARCH_INTERRUPTSTACK > 3
|
#if CONFIG_ARCH_INTERRUPTSTACK > 3
|
||||||
/* Get the limits on the interrupt stack memory */
|
/* Get the limits on the interrupt stack memory */
|
||||||
|
@ -379,17 +379,15 @@ int stm32_bbsram_int(void)
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#if defined(CONFIG_STM32F7_SAVE_CRASHDUMP)
|
#if defined(CONFIG_STM32F7_SAVE_CRASHDUMP)
|
||||||
void board_crashdump(uintptr_t currentsp, void *tcb,
|
void board_crashdump(uintptr_t sp, struct tcb_s *tcb,
|
||||||
const char *filename, int lineno)
|
const char *filename, int lineno,
|
||||||
|
const char *msg)
|
||||||
{
|
{
|
||||||
fullcontext_t *pdump = (fullcontext_t *)&g_sdata;
|
fullcontext_t *pdump = (fullcontext_t *)&g_sdata;
|
||||||
struct tcb_s *rtcb;
|
|
||||||
int rv;
|
int rv;
|
||||||
|
|
||||||
enter_critical_section();
|
enter_critical_section();
|
||||||
|
|
||||||
rtcb = (struct tcb_s *)tcb;
|
|
||||||
|
|
||||||
/* Zero out everything */
|
/* Zero out everything */
|
||||||
|
|
||||||
memset(pdump, 0, sizeof(fullcontext_t));
|
memset(pdump, 0, sizeof(fullcontext_t));
|
||||||
@ -423,10 +421,10 @@ void board_crashdump(uintptr_t currentsp, void *tcb,
|
|||||||
/* Save Context */
|
/* Save Context */
|
||||||
|
|
||||||
#if CONFIG_TASK_NAME_SIZE > 0
|
#if CONFIG_TASK_NAME_SIZE > 0
|
||||||
strlcpy(pdump->info.name, rtcb->name, sizeof(pdump->info.name));
|
strlcpy(pdump->info.name, tcb->name, sizeof(pdump->info.name));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
pdump->info.pid = rtcb->pid;
|
pdump->info.pid = tcb->pid;
|
||||||
|
|
||||||
/* If current_regs is not NULL then we are in an interrupt context
|
/* If current_regs is not NULL then we are in an interrupt context
|
||||||
* and the user context is in current_regs else we are running in
|
* and the user context is in current_regs else we are running in
|
||||||
@ -435,7 +433,7 @@ void board_crashdump(uintptr_t currentsp, void *tcb,
|
|||||||
|
|
||||||
if (CURRENT_REGS)
|
if (CURRENT_REGS)
|
||||||
{
|
{
|
||||||
pdump->info.stacks.interrupt.sp = currentsp;
|
pdump->info.stacks.interrupt.sp = sp;
|
||||||
pdump->info.flags |= (REGS_PRESENT | USERSTACK_PRESENT | \
|
pdump->info.flags |= (REGS_PRESENT | USERSTACK_PRESENT | \
|
||||||
INTSTACK_PRESENT);
|
INTSTACK_PRESENT);
|
||||||
memcpy(pdump->info.regs, (void *)CURRENT_REGS,
|
memcpy(pdump->info.regs, (void *)CURRENT_REGS,
|
||||||
@ -447,12 +445,12 @@ void board_crashdump(uintptr_t currentsp, void *tcb,
|
|||||||
/* users context */
|
/* users context */
|
||||||
|
|
||||||
pdump->info.flags |= USERSTACK_PRESENT;
|
pdump->info.flags |= USERSTACK_PRESENT;
|
||||||
pdump->info.stacks.user.sp = currentsp;
|
pdump->info.stacks.user.sp = sp;
|
||||||
}
|
}
|
||||||
|
|
||||||
pdump->info.stacks.user.top = (uint32_t)rtcb->stack_base_ptr +
|
pdump->info.stacks.user.top = (uint32_t)tcb->stack_base_ptr +
|
||||||
rtcb->adj_stack_size;
|
tcb->adj_stack_size;
|
||||||
pdump->info.stacks.user.size = (uint32_t)rtcb->adj_stack_size;
|
pdump->info.stacks.user.size = (uint32_t)tcb->adj_stack_size;
|
||||||
|
|
||||||
#if CONFIG_ARCH_INTERRUPTSTACK > 3
|
#if CONFIG_ARCH_INTERRUPTSTACK > 3
|
||||||
/* Get the limits on the interrupt stack memory */
|
/* Get the limits on the interrupt stack memory */
|
||||||
|
@ -332,18 +332,16 @@ int rx65n_sbram_int(void)
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#if defined(CONFIG_RX65N_SAVE_CRASHDUMP)
|
#if defined(CONFIG_RX65N_SAVE_CRASHDUMP)
|
||||||
void board_crashdump(uintptr_t currentsp, void *tcb,
|
void board_crashdump(uintptr_t sp, struct tcb_s *tcb,
|
||||||
const char *filename, int lineno)
|
const char *filename, int lineno,
|
||||||
|
const char *msg)
|
||||||
{
|
{
|
||||||
struct fullcontext *pdump;
|
struct fullcontext *pdump;
|
||||||
pdump = (struct fullcontext *)&g_sdata;
|
pdump = (struct fullcontext *)&g_sdata;
|
||||||
struct tcb_s *rtcb;
|
|
||||||
int rv;
|
int rv;
|
||||||
|
|
||||||
enter_critical_section();
|
enter_critical_section();
|
||||||
|
|
||||||
rtcb = (struct tcb_s *)tcb;
|
|
||||||
|
|
||||||
/* Zero out everything */
|
/* Zero out everything */
|
||||||
|
|
||||||
memset((uint8_t *)pdump, 0, sizeof(struct fullcontext));
|
memset((uint8_t *)pdump, 0, sizeof(struct fullcontext));
|
||||||
@ -377,10 +375,10 @@ void board_crashdump(uintptr_t currentsp, void *tcb,
|
|||||||
/* Save Context */
|
/* Save Context */
|
||||||
|
|
||||||
#if CONFIG_TASK_NAME_SIZE > 0
|
#if CONFIG_TASK_NAME_SIZE > 0
|
||||||
strlcpy(pdump->info.name, rtcb->name, sizeof(pdump->info.name));
|
strlcpy(pdump->info.name, tcb->name, sizeof(pdump->info.name));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
pdump->info.pid = rtcb->pid;
|
pdump->info.pid = tcb->pid;
|
||||||
|
|
||||||
/* If current_regs is not NULL then we are in an interrupt context
|
/* If current_regs is not NULL then we are in an interrupt context
|
||||||
* and the user context is in current_regs else we are running in
|
* and the user context is in current_regs else we are running in
|
||||||
@ -389,7 +387,7 @@ void board_crashdump(uintptr_t currentsp, void *tcb,
|
|||||||
|
|
||||||
if (g_current_regs)
|
if (g_current_regs)
|
||||||
{
|
{
|
||||||
pdump->info.stacks.interrupt.sp = currentsp;
|
pdump->info.stacks.interrupt.sp = sp;
|
||||||
pdump->info.flags |= (REGS_PRESENT | USERSTACK_PRESENT | \
|
pdump->info.flags |= (REGS_PRESENT | USERSTACK_PRESENT | \
|
||||||
INTSTACK_PRESENT);
|
INTSTACK_PRESENT);
|
||||||
memcpy((uint8_t *)pdump->info.regs, (void *)g_current_regs,
|
memcpy((uint8_t *)pdump->info.regs, (void *)g_current_regs,
|
||||||
@ -401,12 +399,12 @@ void board_crashdump(uintptr_t currentsp, void *tcb,
|
|||||||
/* users context */
|
/* users context */
|
||||||
|
|
||||||
pdump->info.flags |= USERSTACK_PRESENT;
|
pdump->info.flags |= USERSTACK_PRESENT;
|
||||||
pdump->info.stacks.user.sp = currentsp;
|
pdump->info.stacks.user.sp = sp;
|
||||||
}
|
}
|
||||||
|
|
||||||
pdump->info.stacks.user.top = (uint32_t)rtcb->stack_base_ptr +
|
pdump->info.stacks.user.top = (uint32_t)tcb->stack_base_ptr +
|
||||||
rtcb->adj_stack_size;
|
tcb->adj_stack_size;
|
||||||
pdump->info.stacks.user.size = (uint32_t)rtcb->adj_stack_size;
|
pdump->info.stacks.user.size = (uint32_t)tcb->adj_stack_size;
|
||||||
|
|
||||||
#if CONFIG_ARCH_INTERRUPTSTACK > 3
|
#if CONFIG_ARCH_INTERRUPTSTACK > 3
|
||||||
/* Get the limits on the interrupt stack memory */
|
/* Get the limits on the interrupt stack memory */
|
||||||
|
@ -330,18 +330,16 @@ int rx65n_sbram_int(void)
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#if defined(CONFIG_RX65N_SAVE_CRASHDUMP)
|
#if defined(CONFIG_RX65N_SAVE_CRASHDUMP)
|
||||||
void board_crashdump(uintptr_t currentsp, void *tcb,
|
void board_crashdump(uintptr_t sp, struct tcb_s *tcb,
|
||||||
const char *filename, int lineno)
|
const char *filename, int lineno,
|
||||||
|
const char *msg)
|
||||||
{
|
{
|
||||||
struct fullcontext *pdump;
|
struct fullcontext *pdump;
|
||||||
pdump = (struct fullcontext *)&g_sdata;
|
pdump = (struct fullcontext *)&g_sdata;
|
||||||
struct tcb_s *rtcb;
|
|
||||||
int rv;
|
int rv;
|
||||||
|
|
||||||
enter_critical_section();
|
enter_critical_section();
|
||||||
|
|
||||||
rtcb = (struct tcb_s *)tcb;
|
|
||||||
|
|
||||||
/* Zero out everything */
|
/* Zero out everything */
|
||||||
|
|
||||||
memset((uint8_t *)pdump, 0, sizeof(struct fullcontext));
|
memset((uint8_t *)pdump, 0, sizeof(struct fullcontext));
|
||||||
@ -375,10 +373,10 @@ void board_crashdump(uintptr_t currentsp, void *tcb,
|
|||||||
/* Save Context */
|
/* Save Context */
|
||||||
|
|
||||||
#if CONFIG_TASK_NAME_SIZE > 0
|
#if CONFIG_TASK_NAME_SIZE > 0
|
||||||
strlcpy(pdump->info.name, rtcb->name, sizeof(pdump->info.name));
|
strlcpy(pdump->info.name, tcb->name, sizeof(pdump->info.name));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
pdump->info.pid = rtcb->pid;
|
pdump->info.pid = tcb->pid;
|
||||||
|
|
||||||
/* If current_regs is not NULL then we are in an interrupt context
|
/* If current_regs is not NULL then we are in an interrupt context
|
||||||
* and the user context is in current_regs else we are running in
|
* and the user context is in current_regs else we are running in
|
||||||
@ -387,7 +385,7 @@ void board_crashdump(uintptr_t currentsp, void *tcb,
|
|||||||
|
|
||||||
if (g_current_regs)
|
if (g_current_regs)
|
||||||
{
|
{
|
||||||
pdump->info.stacks.interrupt.sp = currentsp;
|
pdump->info.stacks.interrupt.sp = sp;
|
||||||
pdump->info.flags |= (REGS_PRESENT | USERSTACK_PRESENT | \
|
pdump->info.flags |= (REGS_PRESENT | USERSTACK_PRESENT | \
|
||||||
INTSTACK_PRESENT);
|
INTSTACK_PRESENT);
|
||||||
memcpy((uint8_t *)pdump->info.regs, (void *)g_current_regs,
|
memcpy((uint8_t *)pdump->info.regs, (void *)g_current_regs,
|
||||||
@ -399,12 +397,12 @@ void board_crashdump(uintptr_t currentsp, void *tcb,
|
|||||||
/* users context */
|
/* users context */
|
||||||
|
|
||||||
pdump->info.flags |= USERSTACK_PRESENT;
|
pdump->info.flags |= USERSTACK_PRESENT;
|
||||||
pdump->info.stacks.user.sp = currentsp;
|
pdump->info.stacks.user.sp = sp;
|
||||||
}
|
}
|
||||||
|
|
||||||
pdump->info.stacks.user.top = (uint32_t)rtcb->stack_base_ptr +
|
pdump->info.stacks.user.top = (uint32_t)tcb->stack_base_ptr +
|
||||||
rtcb->adj_stack_size;
|
tcb->adj_stack_size;
|
||||||
pdump->info.stacks.user.size = (uint32_t)rtcb->adj_stack_size;
|
pdump->info.stacks.user.size = (uint32_t)tcb->adj_stack_size;
|
||||||
|
|
||||||
#if CONFIG_ARCH_INTERRUPTSTACK > 3
|
#if CONFIG_ARCH_INTERRUPTSTACK > 3
|
||||||
/* Get the limits on the interrupt stack memory */
|
/* Get the limits on the interrupt stack memory */
|
||||||
|
@ -802,9 +802,10 @@ int board_button_irq(int id, xcpt_t irqhandler, FAR void *arg);
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#ifdef CONFIG_BOARD_CRASHDUMP
|
#ifdef CONFIG_BOARD_CRASHDUMP
|
||||||
void board_crashdump(uintptr_t currentsp, FAR void *tcb,
|
struct tcb_s;
|
||||||
FAR const char *filename,
|
void board_crashdump(uintptr_t sp, FAR struct tcb_s *tcb,
|
||||||
int lineno);
|
FAR const char *filename, int lineno,
|
||||||
|
FAR const char *msg);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
|
@ -525,7 +525,7 @@ void _assert(FAR const char *filename, int linenum, FAR const char *msg)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_BOARD_CRASHDUMP
|
#ifdef CONFIG_BOARD_CRASHDUMP
|
||||||
board_crashdump(up_getsp(), rtcb, filename, linenum);
|
board_crashdump(up_getsp(), rtcb, filename, linenum, msg);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Flush any buffered SYSLOG data */
|
/* Flush any buffered SYSLOG data */
|
||||||
|
Loading…
Reference in New Issue
Block a user