@@ -41,25 +41,10 @@ extern void sys_arch_reboot(int type);
4141// Intercept zephyr/kernel/fatal.c:z_fatal_error()
4242void __wrap_z_fatal_error (unsigned int reason , const z_arch_esf_t * esf );
4343
44- #if CONFIG_MEMFAULT_ZEPHYR_FATAL_HANDLER
45- extern void __real_z_fatal_error (unsigned int reason , const z_arch_esf_t * esf );
46-
47- // This struct stores the crash info for later passing to __real_z_fatal_error
48- static struct save_crash_info {
49- bool valid ;
50- unsigned int reason ;
51- z_arch_esf_t esf ;
52- } s_save_crash_info ;
53-
54- // stash the reason and esf for later use by zephyr unwinder
55- static void prv_save_crash_info (unsigned int reason , const z_arch_esf_t * esf ) {
56- s_save_crash_info .valid = true;
57- s_save_crash_info .reason = reason ;
58- s_save_crash_info .esf = * esf ;
59- }
60- #endif
61-
6244void __wrap_z_fatal_error (unsigned int reason , const z_arch_esf_t * esf ) {
45+ // flush logs prior to capturing coredump & rebooting
46+ LOG_PANIC ();
47+
6348 const struct __extra_esf_info * extra_info = & esf -> extra_info ;
6449 const _callee_saved_t * callee_regs = extra_info -> callee ;
6550
@@ -82,37 +67,14 @@ void __wrap_z_fatal_error(unsigned int reason, const z_arch_esf_t *esf) {
8267 .exc_return = exc_return ,
8368 };
8469
85- #if CONFIG_MEMFAULT_ZEPHYR_FATAL_HANDLER
86- prv_save_crash_info (reason , esf );
87- #endif
88-
8970 memfault_fault_handler (& reg , kMfltRebootReason_HardFault );
9071}
9172
92- #if CONFIG_MEMFAULT_ZEPHYR_FATAL_HANDLER
93- void memfault_zephyr_z_fatal_error (void ) {
94- if (s_save_crash_info .valid ) {
95- unsigned int reason = K_ERR_KERNEL_OOPS ;
96- z_arch_esf_t * esf = NULL ;
97- if (s_save_crash_info .valid ) {
98- reason = s_save_crash_info .reason ;
99- esf = & s_save_crash_info .esf ;
100- }
101-
102- __real_z_fatal_error (reason , esf );
103- }
104- }
105- #endif
106-
10773MEMFAULT_WEAK
10874MEMFAULT_NORETURN
10975void memfault_platform_reboot (void ) {
11076 memfault_platform_halt_if_debugging ();
11177
112- #if CONFIG_MEMFAULT_ZEPHYR_FATAL_HANDLER
113- memfault_zephyr_z_fatal_error ();
114- #endif
115-
11678 sys_arch_reboot (0 );
11779 CODE_UNREACHABLE ;
11880}
0 commit comments