diff options
-rw-r--r-- | firmware/export/panic.h | 7 | ||||
-rw-r--r-- | firmware/kernel/thread.c | 1 | ||||
-rw-r--r-- | firmware/panic.c | 3 |
3 files changed, 4 insertions, 7 deletions
diff --git a/firmware/export/panic.h b/firmware/export/panic.h index 7767c675cf..8e35bfff16 100644 --- a/firmware/export/panic.h +++ b/firmware/export/panic.h | |||
@@ -25,9 +25,6 @@ | |||
25 | #include "config.h" | 25 | #include "config.h" |
26 | #include "gcc_extensions.h" | 26 | #include "gcc_extensions.h" |
27 | 27 | ||
28 | #if defined(CPU_ARM) | 28 | void panicf( const char *fmt, ... ) ATTRIBUTE_PRINTF(1, 2) NORETURN_ATTR; |
29 | void panicf( const char *fmt, ... ) __attribute__ ((naked)) ATTRIBUTE_PRINTF(1, 2); | 29 | |
30 | #else | ||
31 | void panicf( const char *fmt, ... ) ATTRIBUTE_PRINTF(1, 2); | ||
32 | #endif | ||
33 | #endif /* __PANIC_H__ */ | 30 | #endif /* __PANIC_H__ */ |
diff --git a/firmware/kernel/thread.c b/firmware/kernel/thread.c index 01395a9d6d..05c09dc594 100644 --- a/firmware/kernel/thread.c +++ b/firmware/kernel/thread.c | |||
@@ -193,7 +193,6 @@ static NO_INLINE NORETURN_ATTR | |||
193 | static char name[sizeof (((struct thread_debug_info *)0)->name)]; | 193 | static char name[sizeof (((struct thread_debug_info *)0)->name)]; |
194 | format_thread_name(name, sizeof (name), thread); | 194 | format_thread_name(name, sizeof (name), thread); |
195 | panicf ("%s %s" IF_COP(" (%d)"), msg, name IF_COP(, core)); | 195 | panicf ("%s %s" IF_COP(" (%d)"), msg, name IF_COP(, core)); |
196 | while (1); | ||
197 | } | 196 | } |
198 | 197 | ||
199 | static NO_INLINE void thread_stkov(struct thread_entry *thread) | 198 | static NO_INLINE void thread_stkov(struct thread_entry *thread) |
diff --git a/firmware/panic.c b/firmware/panic.c index 3f01689922..7b2c79a872 100644 --- a/firmware/panic.c +++ b/firmware/panic.c | |||
@@ -44,12 +44,13 @@ static char panic_buf[128]; | |||
44 | void panicf_f( const char *fmt, ...); | 44 | void panicf_f( const char *fmt, ...); |
45 | 45 | ||
46 | /* we wrap panicf() here with naked function to catch SP value */ | 46 | /* we wrap panicf() here with naked function to catch SP value */ |
47 | void panicf( const char *fmt, ...) | 47 | void __attribute__((naked)) panicf( const char *fmt, ...) |
48 | { | 48 | { |
49 | (void)fmt; | 49 | (void)fmt; |
50 | asm volatile ("mov r4, sp \n" | 50 | asm volatile ("mov r4, sp \n" |
51 | "b panicf_f \n" | 51 | "b panicf_f \n" |
52 | ); | 52 | ); |
53 | while (1); | ||
53 | } | 54 | } |
54 | 55 | ||
55 | /* | 56 | /* |