提交 b89b3958 编写于 作者: mysterywolf's avatar mysterywolf

[libc][exit][abort] 重新实现exit和abort函数

上级 f0805a79
...@@ -255,8 +255,21 @@ void _ttywrch(int ch) ...@@ -255,8 +255,21 @@ void _ttywrch(int ch)
RT_WEAK void _sys_exit(int return_code) RT_WEAK void _sys_exit(int return_code)
{ {
/* TODO: perhaps exit the thread which is invoking this function */ rt_thread_t self = rt_thread_self();
while (1);
#ifdef RT_USING_MODULE
if (dlmodule_self())
{
dlmodule_exit(return_code);
}
#endif
if (self != RT_NULL)
{
rt_kprintf("thread:%-8.*s exit:%d!\n", RT_NAME_MAX, self->name, return_code);
rt_thread_suspend(self);
rt_schedule();
}
} }
/** /**
......
...@@ -288,6 +288,8 @@ _free_r (struct _reent *ptr, void *addr) ...@@ -288,6 +288,8 @@ _free_r (struct _reent *ptr, void *addr)
void void
exit (int status) exit (int status)
{ {
rt_thread_t self = rt_thread_self();
#ifdef RT_USING_MODULE #ifdef RT_USING_MODULE
if (dlmodule_self()) if (dlmodule_self())
{ {
...@@ -295,10 +297,12 @@ exit (int status) ...@@ -295,10 +297,12 @@ exit (int status)
} }
#endif #endif
rt_kprintf("thread:%s exit with %d\n", rt_thread_self()->name, status); if (self != RT_NULL)
RT_ASSERT(0); {
rt_kprintf("thread:%-8.*s exit:%d!\n", RT_NAME_MAX, self->name, status);
while (1); rt_thread_suspend(self);
rt_schedule();
}
} }
void void
...@@ -315,17 +319,21 @@ void __libc_init_array(void) ...@@ -315,17 +319,21 @@ void __libc_init_array(void)
void abort(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_kprintf("thread:%-8.*s abort!\n", RT_NAME_MAX, self->name);
rt_thread_suspend(self); rt_thread_suspend(self);
rt_schedule(); rt_schedule();
} }
while (1);
} }
uid_t getuid(void) uid_t getuid(void)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册