diff --git a/arch/arm/arm/src/los_exc.c b/arch/arm/arm/src/los_exc.c index d8c67f5b0c9eae215e9763d9c2ce9799f7a6b225..9bf61daca936ea44d1f5a416914b7aacab97ee64 100644 --- a/arch/arm/arm/src/los_exc.c +++ b/arch/arm/arm/src/los_exc.c @@ -1053,10 +1053,12 @@ STATIC VOID OsCheckAllCpuStatus(VOID) g_currHandleExcCpuID = currCpuID; g_currHandleExcPID = OsCurrProcessGet()->processID; LOS_SpinUnlock(&g_excSerializerSpin); +#ifndef LOSCFG_SAVE_EXCINFO if (g_excFromUserMode[currCpuID] == FALSE) { target = (UINT32)(OS_MP_CPU_ALL & ~CPUID_TO_AFFI_MASK(currCpuID)); HalIrqSendIpi(target, LOS_MP_IPI_HALT); } +#endif } else if (g_excFromUserMode[currCpuID] == TRUE) { /* Both cores raise exceptions, and the current core is a user-mode exception. * Both cores are abnormal and come from the same process @@ -1081,11 +1083,12 @@ STATIC VOID OsCheckAllCpuStatus(VOID) while (1) {} } } - +#ifndef LOSCFG_SAVE_EXCINFO /* use halt ipi to stop other active cores */ if (g_excFromUserMode[ArchCurrCpuid()] == FALSE) { WaitAllCpuStop(currCpuID); } +#endif } #endif diff --git a/kernel/common/los_excinfo.c b/kernel/common/los_excinfo.c index 7bf0123613a06a852df4a5e0b6c09f73d558e237..fbcf4f42acda214b4331cf4e48fbd0ddcf91f460 100644 --- a/kernel/common/los_excinfo.c +++ b/kernel/common/los_excinfo.c @@ -170,16 +170,17 @@ VOID OsRecordExcInfoTime(VOID) #ifdef LOSCFG_SHELL INT32 OsShellCmdReadExcInfo(INT32 argc, CHAR **argv) { +#define EXCINFO_ALIGN_SIZE 64 UINT32 recordSpace = GetRecordSpace(); (VOID)argc; (VOID)argv; - CHAR *buf = (CHAR*)LOS_MemAlloc((void *)OS_SYS_MEM_ADDR, recordSpace + 1); + CHAR *buf = (CHAR *)LOS_MemAllocAlign((VOID *)OS_SYS_MEM_ADDR, recordSpace + 1, EXCINFO_ALIGN_SIZE); if (buf == NULL) { return LOS_NOK; } - (void)memset_s(buf, recordSpace + 1, 0, recordSpace + 1); + (VOID)memset_s(buf, recordSpace + 1, 0, recordSpace + 1); log_read_write_fn hook = GetExcInfoRW(); if (hook != NULL) { diff --git a/kernel/common/los_printf.c b/kernel/common/los_printf.c index fa0d57d2c67d4bb18cccc6c4bbb1ed978d232804..3308a7b8eda187f90d55492c7294dd2c85a052ae 100644 --- a/kernel/common/los_printf.c +++ b/kernel/common/los_printf.c @@ -202,12 +202,22 @@ __attribute__ ((noinline)) VOID dprintf(const CHAR *fmt, ...) va_list ap; va_start(ap, fmt); OsVprintf(fmt, ap, CONSOLE_OUTPUT); +#ifdef LOSCFG_SAVE_EXCINFO + if (OsGetSystemStatus() == OS_SYSTEM_EXC_CURR_CPU) { + WriteExcBufVa(fmt, ap); + } +#endif va_end(ap); } VOID LkDprintf(const CHAR *fmt, va_list ap) { OsVprintf(fmt, ap, CONSOLE_OUTPUT); +#ifdef LOSCFG_SAVE_EXCINFO + if (OsGetSystemStatus() == OS_SYSTEM_EXC_CURR_CPU) { + WriteExcBufVa(fmt, ap); + } +#endif } #ifdef LOSCFG_SHELL_DMESG @@ -273,6 +283,11 @@ VOID LOS_LkPrint(INT32 level, const CHAR *func, INT32 line, const CHAR *fmt, ... va_start(ap, fmt); OsVprintf(fmt, ap, CONSOLE_OUTPUT); +#ifdef LOSCFG_SAVE_EXCINFO + if (OsGetSystemStatus() == OS_SYSTEM_EXC_CURR_CPU) { + WriteExcBufVa(fmt, ap); + } +#endif va_end(ap); } #endif