@@ -41,25 +41,10 @@ extern void sys_arch_reboot(int type);
41
41
// Intercept zephyr/kernel/fatal.c:z_fatal_error()
42
42
void __wrap_z_fatal_error (unsigned int reason , const z_arch_esf_t * esf );
43
43
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
-
62
44
void __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
+
63
48
const struct __extra_esf_info * extra_info = & esf -> extra_info ;
64
49
const _callee_saved_t * callee_regs = extra_info -> callee ;
65
50
@@ -82,37 +67,14 @@ void __wrap_z_fatal_error(unsigned int reason, const z_arch_esf_t *esf) {
82
67
.exc_return = exc_return ,
83
68
};
84
69
85
- #if CONFIG_MEMFAULT_ZEPHYR_FATAL_HANDLER
86
- prv_save_crash_info (reason , esf );
87
- #endif
88
-
89
70
memfault_fault_handler (& reg , kMfltRebootReason_HardFault );
90
71
}
91
72
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
-
107
73
MEMFAULT_WEAK
108
74
MEMFAULT_NORETURN
109
75
void memfault_platform_reboot (void ) {
110
76
memfault_platform_halt_if_debugging ();
111
77
112
- #if CONFIG_MEMFAULT_ZEPHYR_FATAL_HANDLER
113
- memfault_zephyr_z_fatal_error ();
114
- #endif
115
-
116
78
sys_arch_reboot (0 );
117
79
CODE_UNREACHABLE ;
118
80
}
0 commit comments