Skip to content

Commit 27c429d

Browse files
libmicrokit: improve __assert_fail
This is used by libsel4 headers, we should actually crash when an assert fails and also print out the name of the PD that failed. Signed-off-by: Ivan Velickovic <i.velickovic@unsw.edu.au>
1 parent f7a48b4 commit 27c429d

File tree

1 file changed

+10
-2
lines changed

1 file changed

+10
-2
lines changed

libmicrokit/src/dbg.c

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77

88
#include <sel4/sel4.h>
99

10+
extern char microkit_name[];
11+
1012
void microkit_dbg_putc(int c)
1113
{
1214
#if defined(CONFIG_PRINTING)
@@ -50,13 +52,19 @@ void microkit_dbg_put32(seL4_Uint32 x)
5052
microkit_dbg_puts(&tmp[i]);
5153
}
5254

53-
void __assert_fail(const char *str, const char *file, int line, const char *function)
55+
/*
56+
* We have to provide an implementation for libsel4 debug asserts, make it
57+
* weak so user's can override with their own libc etc.
58+
*/
59+
__attribute__((weak)) void __assert_fail(const char *str, const char *file, int line, const char *function)
5460
{
55-
microkit_dbg_puts("assert failed: ");
61+
microkit_dbg_puts(microkit_name);
62+
microkit_dbg_puts("|assert failed: ");
5663
microkit_dbg_puts(str);
5764
microkit_dbg_puts(" ");
5865
microkit_dbg_puts(file);
5966
microkit_dbg_puts(" ");
6067
microkit_dbg_puts(function);
6168
microkit_dbg_puts("\n");
69+
microkit_internal_crash(0);
6270
}

0 commit comments

Comments
 (0)