diff --git a/bare-arm/main.c b/bare-arm/main.c index e6ce06398..99a7f926e 100644 --- a/bare-arm/main.c +++ b/bare-arm/main.c @@ -48,6 +48,7 @@ mp_obj_t mp_builtin_open(size_t n_args, const mp_obj_t *args, mp_map_t *kwargs) MP_DEFINE_CONST_FUN_OBJ_KW(mp_builtin_open_obj, 1, mp_builtin_open); void nlr_jump_fail(void *val) { + while (1); } void NORETURN __fatal_error(const char *msg) { diff --git a/minimal/main.c b/minimal/main.c index 6b77b1a42..766ad6c1b 100644 --- a/minimal/main.c +++ b/minimal/main.c @@ -87,6 +87,7 @@ mp_obj_t mp_builtin_open(uint n_args, const mp_obj_t *args, mp_map_t *kwargs) { MP_DEFINE_CONST_FUN_OBJ_KW(mp_builtin_open_obj, 1, mp_builtin_open); void nlr_jump_fail(void *val) { + while (1); } void NORETURN __fatal_error(const char *msg) { diff --git a/py/nlr.h b/py/nlr.h index 6c86fc26c..00c1072fe 100644 --- a/py/nlr.h +++ b/py/nlr.h @@ -82,7 +82,7 @@ NORETURN void nlr_jump(void *val); // This must be implemented by a port. It's called by nlr_jump // if no nlr buf has been pushed. It must not return, but rather // should bail out with a fatal error. -void nlr_jump_fail(void *val); +NORETURN void nlr_jump_fail(void *val); // use nlr_raise instead of nlr_jump so that debugging is easier #ifndef DEBUG diff --git a/qemu-arm/main.c b/qemu-arm/main.c index b6ff73980..aa7247b44 100644 --- a/qemu-arm/main.c +++ b/qemu-arm/main.c @@ -1,4 +1,5 @@ #include +#include #include #include #include @@ -59,4 +60,6 @@ mp_obj_t mp_builtin_open(size_t n_args, const mp_obj_t *args, mp_map_t *kwargs) MP_DEFINE_CONST_FUN_OBJ_KW(mp_builtin_open_obj, 1, mp_builtin_open); void nlr_jump_fail(void *val) { + printf("uncaught NLR\n"); + exit(1); } diff --git a/qemu-arm/test_main.c b/qemu-arm/test_main.c index 5c0c915c4..4d8993090 100644 --- a/qemu-arm/test_main.c +++ b/qemu-arm/test_main.c @@ -1,4 +1,5 @@ #include +#include #include #include #include @@ -92,4 +93,6 @@ mp_obj_t mp_builtin_open(size_t n_args, const mp_obj_t *args, mp_map_t *kwargs) MP_DEFINE_CONST_FUN_OBJ_KW(mp_builtin_open_obj, 1, mp_builtin_open); void nlr_jump_fail(void *val) { + printf("uncaught NLR\n"); + exit(1); }