diff options
Diffstat (limited to 'components/libc/compilers/newlib/syscalls.c')
| -rw-r--r-- | components/libc/compilers/newlib/syscalls.c | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/components/libc/compilers/newlib/syscalls.c b/components/libc/compilers/newlib/syscalls.c index 193080c926..5ce2df284d 100644 --- a/components/libc/compilers/newlib/syscalls.c +++ b/components/libc/compilers/newlib/syscalls.c @@ -288,6 +288,8 @@ _free_r (struct _reent *ptr, void *addr) void exit (int status) { + rt_thread_t self = rt_thread_self(); + #ifdef RT_USING_MODULE if (dlmodule_self()) { @@ -295,10 +297,12 @@ exit (int status) } #endif - rt_kprintf("thread:%s exit with %d\n", rt_thread_self()->name, status); - RT_ASSERT(0); - - while (1); + if (self != RT_NULL) + { + rt_kprintf("thread:%-8.*s exit:%d!\n", RT_NAME_MAX, self->name, status); + rt_thread_suspend(self); + rt_schedule(); + } } void @@ -315,17 +319,21 @@ void __libc_init_array(void) void abort(void) { - if (rt_thread_self()) + rt_thread_t self = rt_thread_self(); + +#ifdef RT_USING_MODULE + if (dlmodule_self()) { - rt_thread_t self = rt_thread_self(); + dlmodule_exit(-1); + } +#endif + if (self != RT_NULL) + { rt_kprintf("thread:%-8.*s abort!\n", RT_NAME_MAX, self->name); rt_thread_suspend(self); - rt_schedule(); } - - while (1); } uid_t getuid(void) |
