Merge pull request #4344 from mysterywolf/exit_1

[libc][common] 精简exit和abort函数
This commit is contained in:
Bernard Xiong 2021-02-18 00:06:18 +08:00 committed by GitHub
commit 7ed6644db9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 72 additions and 93 deletions

View File

@ -258,23 +258,9 @@ void _ttywrch(int ch)
RT_WEAK void _sys_exit(int return_code)
{
rt_thread_t self = rt_thread_self();
#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 */
extern void __rt_libc_exit(int status);
__rt_libc_exit(return_code);
while(1);
}
/**
@ -320,8 +306,8 @@ int remove(const char *filename)
#else
int system(const char *string)
{
RT_ASSERT(0);
for (;;);
extern int __rt_libc_system(const char *string);
return __rt_libc_system(string);
}
#endif

View File

@ -8,13 +8,13 @@ group = []
CPPPATH = [cwd]
if GetDepend('RT_USING_LIBC'):
src += Glob('*.c')
src += Glob('*.c')
else:
if GetDepend('RT_LIBC_USING_TIME') and not GetDepend('RT_USING_MINILIBC'):
src += ['time.c']
if GetDepend('RT_LIBC_USING_TIME') and not GetDepend('RT_USING_MINILIBC'):
src += ['time.c']
if GetDepend('RT_USING_POSIX') == False:
SrcRemove(src, ['unistd.c'])
SrcRemove(src, ['unistd.c'])
if rtconfig.CROSS_TOOL == 'keil':
CPPDEFINES = ['__CLK_TCK=RT_TICK_PER_SECOND']

View File

@ -0,0 +1,49 @@
/*
* 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>
#include <stdlib.h>
void __rt_libc_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 == EXIT_FAILURE) /* abort() */
{
rt_kprintf("thread:%s abort!\n", self->name);
}
else /* exit() */
{
rt_kprintf("thread:%s exit:%d!\n", self->name, status);
}
rt_thread_suspend(self);
rt_schedule();
}
}
void __rt_libc_abort(void)
{
__rt_libc_exit(EXIT_FAILURE);
}
int __rt_libc_system(const char *string)
{
/* TODO */
return 0;
}

View File

@ -11,42 +11,14 @@
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)
{
rt_kprintf("thread:%-8.*s exit:%d!\n", RT_NAME_MAX, self->name, status);
rt_thread_suspend(self);
rt_schedule();
}
while(1); /* noreturn */
extern void __rt_libc_exit(int status);
__rt_libc_exit(status);
while(1);
}
void abort(void)
{
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_thread_suspend(self);
rt_schedule();
}
while(1); /* noreturn */
extern void __rt_libc_abort(void);
__rt_libc_abort();
while(1);
}

View File

@ -286,30 +286,16 @@ _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())
{
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 */
extern void __rt_libc_exit(int status);
__rt_libc_exit(status);
while(1);
}
void
_system(const char *s)
{
/* not support this call */
return;
extern int __rt_libc_system(const char *string);
__rt_libc_system(s);
}
void __libc_init_array(void)
@ -319,23 +305,9 @@ void __libc_init_array(void)
void abort(void)
{
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_thread_suspend(self);
rt_schedule();
}
while(1); /* noreturn */
extern void __rt_libc_abort(void);
__rt_libc_abort();
while(1);
}
uid_t getuid(void)