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:
Xiang Xiao 2023-01-25 20:40:58 +08:00 committed by Alan Carvalho de Assis
parent be10056702
commit 99e89809d7
7 changed files with 57 additions and 65 deletions

View File

@ -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 */

View File

@ -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 */

View File

@ -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 */

View File

@ -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 */

View File

@ -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 */

View File

@ -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
/**************************************************************************** /****************************************************************************

View File

@ -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 */