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

精简exit abort system函数

上级 e19873db
...@@ -258,23 +258,8 @@ void _ttywrch(int ch) ...@@ -258,23 +258,8 @@ void _ttywrch(int ch)
RT_WEAK void _sys_exit(int return_code) RT_WEAK void _sys_exit(int return_code)
{ {
rt_thread_t self = rt_thread_self(); extern rt_inline void __exit__(int status);
__exit__(return_code);
#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();
}
while(1); /* noreturn */
} }
/** /**
...@@ -320,8 +305,8 @@ int remove(const char *filename) ...@@ -320,8 +305,8 @@ int remove(const char *filename)
#else #else
int system(const char *string) int system(const char *string)
{ {
RT_ASSERT(0); extern rt_inline int __system__(const char *string);
for (;;); return __system__(string);
} }
#endif #endif
......
...@@ -8,13 +8,13 @@ group = [] ...@@ -8,13 +8,13 @@ group = []
CPPPATH = [cwd] CPPPATH = [cwd]
if GetDepend('RT_USING_LIBC'): if GetDepend('RT_USING_LIBC'):
src += Glob('*.c') src += Glob('*.c')
else: else:
if GetDepend('RT_LIBC_USING_TIME') and not GetDepend('RT_USING_MINILIBC'): if GetDepend('RT_LIBC_USING_TIME') and not GetDepend('RT_USING_MINILIBC'):
src += ['time.c'] src += ['time.c']
if GetDepend('RT_USING_POSIX') == False: if GetDepend('RT_USING_POSIX') == False:
SrcRemove(src, ['unistd.c']) SrcRemove(src, ['unistd.c'])
if rtconfig.CROSS_TOOL == 'keil': if rtconfig.CROSS_TOOL == 'keil':
CPPDEFINES = ['__CLK_TCK=RT_TICK_PER_SECOND'] CPPDEFINES = ['__CLK_TCK=RT_TICK_PER_SECOND']
......
/*
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2021-02-15 Meco Man first version
*/
#include <rtthread.h>
#define ABORT_STATUS 2
rt_inline void __exit__(int status)
{
rt_thread_t self = rt_thread_self();
#ifdef RT_USING_MODULE
if (dlmodule_self())
{
dlmodule_exit(status);
}
#endif
if (self != RT_NULL)
{
if(status == ABORT_STATUS) /* abort() */
{
rt_kprintf("thread:%s abort!\n", RT_NAME_MAX, self->name, status);
}
else /* exit() */
{
rt_kprintf("thread:%s exit:%d!\n", RT_NAME_MAX, self->name, status);
}
rt_thread_suspend(self);
rt_schedule();
}
while(1); /* noreturn */
}
rt_inline void __abort__(void)
{
__exit__(ABORT_STATUS);
}
rt_inline int __system__(const char *string)
{
/* TODO */
return 0;
}
...@@ -11,42 +11,12 @@ ...@@ -11,42 +11,12 @@
void exit (int status) void exit (int status)
{ {
rt_thread_t self = rt_thread_self(); extern rt_inline void __exit__(int status);
__exit__(return_code);
#ifdef RT_USING_MODULE
if (dlmodule_self())
{
dlmodule_exit(status);
}
#endif
if (self != RT_NULL)
{
rt_kprintf("thread:%-8.*s exit:%d!\n", RT_NAME_MAX, self->name, status);
rt_thread_suspend(self);
rt_schedule();
}
while(1); /* noreturn */
} }
void abort(void) void abort(void)
{ {
rt_thread_t self = rt_thread_self(); extern rt_inline void __abort__(void);
__abort__();
#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_thread_suspend(self);
rt_schedule();
}
while(1); /* noreturn */
} }
...@@ -286,30 +286,15 @@ _free_r (struct _reent *ptr, void *addr) ...@@ -286,30 +286,15 @@ _free_r (struct _reent *ptr, void *addr)
void void
exit (int status) exit (int status)
{ {
rt_thread_t self = rt_thread_self(); extern rt_inline void __exit__(int status);
__exit__(status);
#ifdef RT_USING_MODULE
if (dlmodule_self())
{
dlmodule_exit(status);
}
#endif
if (self != RT_NULL)
{
rt_kprintf("thread:%-8.*s exit:%d!\n", RT_NAME_MAX, self->name, status);
rt_thread_suspend(self);
rt_schedule();
}
while(1); /* noreturn */
} }
void void
_system(const char *s) _system(const char *s)
{ {
/* not support this call */ extern rt_inline int __system__(const char *string);
return; __system__(string);
} }
void __libc_init_array(void) void __libc_init_array(void)
...@@ -319,23 +304,8 @@ void __libc_init_array(void) ...@@ -319,23 +304,8 @@ void __libc_init_array(void)
void abort(void) void abort(void)
{ {
rt_thread_t self = rt_thread_self(); extern rt_inline void __abort__(void);
__abort__();
#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_thread_suspend(self);
rt_schedule();
}
while(1); /* noreturn */
} }
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.
先完成此消息的编辑!
想要评论请 注册