Skip to content

Commit 47393a3

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 47393a3

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

libmicrokit/src/dbg.c

Lines changed: 12 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,21 @@ 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);
66+
microkit_dbg_puts(":");
67+
microkit_dbg_put32(line);
5968
microkit_dbg_puts(" ");
6069
microkit_dbg_puts(function);
6170
microkit_dbg_puts("\n");
71+
microkit_internal_crash(0);
6272
}

0 commit comments

Comments
 (0)