[libc][exit][abort] 重新实现exit和abort函数
This commit is contained in:
parent
f0805a7973
commit
b89b3958bc
|
@ -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)
|
||||||
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)
|
||||||
}
|
}
|
||||||
#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)
|
||||||
|
|
||||||
void abort(void)
|
void abort(void)
|
||||||
{
|
{
|
||||||
if (rt_thread_self())
|
|
||||||
{
|
|
||||||
rt_thread_t self = rt_thread_self();
|
rt_thread_t self = rt_thread_self();
|
||||||
|
|
||||||
|
#ifdef RT_USING_MODULE
|
||||||
|
if (dlmodule_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)
|
||||||
|
|
Loading…
Reference in New Issue