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
****************************************************************************/
void board_crashdump(uintptr_t currentsp, void *tcb,
const char *filename, int lineno)
void board_crashdump(uintptr_t sp, struct tcb_s *tcb,
const char *filename, int lineno,
const char *msg)
{
struct tcb_s *rtcb;
fullcontext_t *pdump;
enter_critical_section();
rtcb = (struct tcb_s *)tcb;
#ifdef CONFIG_CXD56_BACKUPLOG
pdump = up_backuplog_alloc("crash", sizeof(fullcontext_t));
#else
@ -151,10 +150,10 @@ void board_crashdump(uintptr_t currentsp, void *tcb,
/* Save Context */
#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
pdump->info.pid = rtcb->pid;
pdump->info.pid = tcb->pid;
/* 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
@ -164,7 +163,7 @@ void board_crashdump(uintptr_t currentsp, void *tcb,
if (CURRENT_REGS)
{
#if CONFIG_ARCH_INTERRUPTSTACK > 3
pdump->info.stacks.interrupt.sp = currentsp;
pdump->info.stacks.interrupt.sp = sp;
#endif
pdump->info.flags |= (REGS_PRESENT | USERSTACK_PRESENT | \
INTSTACK_PRESENT);
@ -177,12 +176,12 @@ void board_crashdump(uintptr_t currentsp, void *tcb,
/* users context */
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 +
rtcb->adj_stack_size;
pdump->info.stacks.user.size = (uint32_t)rtcb->adj_stack_size;
pdump->info.stacks.user.top = (uint32_t)tcb->stack_base_ptr +
tcb->adj_stack_size;
pdump->info.stacks.user.size = (uint32_t)tcb->adj_stack_size;
#if CONFIG_ARCH_INTERRUPTSTACK > 3
/* 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)
void board_crashdump(uintptr_t currentsp, void *tcb,
const char *filename, int lineno)
void board_crashdump(uintptr_t sp, struct tcb_s *tcb,
const char *filename, int lineno,
const char *msg)
{
fullcontext_t *pdump = (fullcontext_t *)&g_sdata;
struct tcb_s *rtcb;
int rv;
enter_critical_section();
rtcb = (struct tcb_s *)tcb;
/* Zero out everything */
memset(pdump, 0, sizeof(fullcontext_t));
@ -423,10 +421,10 @@ void board_crashdump(uintptr_t currentsp, void *tcb,
/* Save Context */
#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
pdump->info.pid = rtcb->pid;
pdump->info.pid = tcb->pid;
/* 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
@ -435,7 +433,7 @@ void board_crashdump(uintptr_t currentsp, void *tcb,
if (CURRENT_REGS)
{
pdump->info.stacks.interrupt.sp = currentsp;
pdump->info.stacks.interrupt.sp = sp;
pdump->info.flags |= (REGS_PRESENT | USERSTACK_PRESENT | \
INTSTACK_PRESENT);
memcpy(pdump->info.regs, (void *)CURRENT_REGS,
@ -447,12 +445,12 @@ void board_crashdump(uintptr_t currentsp, void *tcb,
/* users context */
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 +
rtcb->adj_stack_size;
pdump->info.stacks.user.size = (uint32_t)rtcb->adj_stack_size;
pdump->info.stacks.user.top = (uint32_t)tcb->stack_base_ptr +
tcb->adj_stack_size;
pdump->info.stacks.user.size = (uint32_t)tcb->adj_stack_size;
#if CONFIG_ARCH_INTERRUPTSTACK > 3
/* 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)
void board_crashdump(uintptr_t currentsp, void *tcb,
const char *filename, int lineno)
void board_crashdump(uintptr_t sp, struct tcb_s *tcb,
const char *filename, int lineno,
const char *msg)
{
fullcontext_t *pdump = (fullcontext_t *)&g_sdata;
struct tcb_s *rtcb;
int rv;
enter_critical_section();
rtcb = (struct tcb_s *)tcb;
/* Zero out everything */
memset(pdump, 0, sizeof(fullcontext_t));
@ -423,10 +421,10 @@ void board_crashdump(uintptr_t currentsp, void *tcb,
/* Save Context */
#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
pdump->info.pid = rtcb->pid;
pdump->info.pid = tcb->pid;
/* 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
@ -435,7 +433,7 @@ void board_crashdump(uintptr_t currentsp, void *tcb,
if (CURRENT_REGS)
{
pdump->info.stacks.interrupt.sp = currentsp;
pdump->info.stacks.interrupt.sp = sp;
pdump->info.flags |= (REGS_PRESENT | USERSTACK_PRESENT | \
INTSTACK_PRESENT);
memcpy(pdump->info.regs, (void *)CURRENT_REGS,
@ -447,12 +445,12 @@ void board_crashdump(uintptr_t currentsp, void *tcb,
/* users context */
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 +
rtcb->adj_stack_size;
pdump->info.stacks.user.size = (uint32_t)rtcb->adj_stack_size;
pdump->info.stacks.user.top = (uint32_t)tcb->stack_base_ptr +
tcb->adj_stack_size;
pdump->info.stacks.user.size = (uint32_t)tcb->adj_stack_size;
#if CONFIG_ARCH_INTERRUPTSTACK > 3
/* 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)
void board_crashdump(uintptr_t currentsp, void *tcb,
const char *filename, int lineno)
void board_crashdump(uintptr_t sp, struct tcb_s *tcb,
const char *filename, int lineno,
const char *msg)
{
struct fullcontext *pdump;
pdump = (struct fullcontext *)&g_sdata;
struct tcb_s *rtcb;
int rv;
enter_critical_section();
rtcb = (struct tcb_s *)tcb;
/* Zero out everything */
memset((uint8_t *)pdump, 0, sizeof(struct fullcontext));
@ -377,10 +375,10 @@ void board_crashdump(uintptr_t currentsp, void *tcb,
/* Save Context */
#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
pdump->info.pid = rtcb->pid;
pdump->info.pid = tcb->pid;
/* 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
@ -389,7 +387,7 @@ void board_crashdump(uintptr_t currentsp, void *tcb,
if (g_current_regs)
{
pdump->info.stacks.interrupt.sp = currentsp;
pdump->info.stacks.interrupt.sp = sp;
pdump->info.flags |= (REGS_PRESENT | USERSTACK_PRESENT | \
INTSTACK_PRESENT);
memcpy((uint8_t *)pdump->info.regs, (void *)g_current_regs,
@ -401,12 +399,12 @@ void board_crashdump(uintptr_t currentsp, void *tcb,
/* users context */
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 +
rtcb->adj_stack_size;
pdump->info.stacks.user.size = (uint32_t)rtcb->adj_stack_size;
pdump->info.stacks.user.top = (uint32_t)tcb->stack_base_ptr +
tcb->adj_stack_size;
pdump->info.stacks.user.size = (uint32_t)tcb->adj_stack_size;
#if CONFIG_ARCH_INTERRUPTSTACK > 3
/* 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)
void board_crashdump(uintptr_t currentsp, void *tcb,
const char *filename, int lineno)
void board_crashdump(uintptr_t sp, struct tcb_s *tcb,
const char *filename, int lineno,
const char *msg)
{
struct fullcontext *pdump;
pdump = (struct fullcontext *)&g_sdata;
struct tcb_s *rtcb;
int rv;
enter_critical_section();
rtcb = (struct tcb_s *)tcb;
/* Zero out everything */
memset((uint8_t *)pdump, 0, sizeof(struct fullcontext));
@ -375,10 +373,10 @@ void board_crashdump(uintptr_t currentsp, void *tcb,
/* Save Context */
#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
pdump->info.pid = rtcb->pid;
pdump->info.pid = tcb->pid;
/* 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
@ -387,7 +385,7 @@ void board_crashdump(uintptr_t currentsp, void *tcb,
if (g_current_regs)
{
pdump->info.stacks.interrupt.sp = currentsp;
pdump->info.stacks.interrupt.sp = sp;
pdump->info.flags |= (REGS_PRESENT | USERSTACK_PRESENT | \
INTSTACK_PRESENT);
memcpy((uint8_t *)pdump->info.regs, (void *)g_current_regs,
@ -399,12 +397,12 @@ void board_crashdump(uintptr_t currentsp, void *tcb,
/* users context */
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 +
rtcb->adj_stack_size;
pdump->info.stacks.user.size = (uint32_t)rtcb->adj_stack_size;
pdump->info.stacks.user.top = (uint32_t)tcb->stack_base_ptr +
tcb->adj_stack_size;
pdump->info.stacks.user.size = (uint32_t)tcb->adj_stack_size;
#if CONFIG_ARCH_INTERRUPTSTACK > 3
/* 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
void board_crashdump(uintptr_t currentsp, FAR void *tcb,
FAR const char *filename,
int lineno);
struct tcb_s;
void board_crashdump(uintptr_t sp, FAR struct tcb_s *tcb,
FAR const char *filename, int lineno,
FAR const char *msg);
#endif
/****************************************************************************

View File

@ -525,7 +525,7 @@ void _assert(FAR const char *filename, int linenum, FAR const char *msg)
#endif
#ifdef CONFIG_BOARD_CRASHDUMP
board_crashdump(up_getsp(), rtcb, filename, linenum);
board_crashdump(up_getsp(), rtcb, filename, linenum, msg);
#endif
/* Flush any buffered SYSLOG data */