mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2025-03-02 09:35:28 +08:00
Merge pull request #4344 from mysterywolf/exit_1
[libc][common] 精简exit和abort函数
This commit is contained in:
commit
7ed6644db9
@ -258,23 +258,9 @@ 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 void __rt_libc_exit(int status);
|
||||||
|
__rt_libc_exit(return_code);
|
||||||
#ifdef RT_USING_MODULE
|
while(1);
|
||||||
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 +306,8 @@ int remove(const char *filename)
|
|||||||
#else
|
#else
|
||||||
int system(const char *string)
|
int system(const char *string)
|
||||||
{
|
{
|
||||||
RT_ASSERT(0);
|
extern int __rt_libc_system(const char *string);
|
||||||
for (;;);
|
return __rt_libc_system(string);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -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']
|
||||||
|
49
components/libc/compilers/common/stdlib.c
Normal file
49
components/libc/compilers/common/stdlib.c
Normal 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;
|
||||||
|
}
|
@ -11,42 +11,14 @@
|
|||||||
|
|
||||||
void exit (int status)
|
void exit (int status)
|
||||||
{
|
{
|
||||||
rt_thread_t self = rt_thread_self();
|
extern void __rt_libc_exit(int status);
|
||||||
|
__rt_libc_exit(status);
|
||||||
#ifdef RT_USING_MODULE
|
while(1);
|
||||||
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 void __rt_libc_abort(void);
|
||||||
|
__rt_libc_abort();
|
||||||
#ifdef RT_USING_MODULE
|
while(1);
|
||||||
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,16 @@ _free_r (struct _reent *ptr, void *addr)
|
|||||||
void
|
void
|
||||||
exit (int status)
|
exit (int status)
|
||||||
{
|
{
|
||||||
rt_thread_t self = rt_thread_self();
|
extern void __rt_libc_exit(int status);
|
||||||
|
__rt_libc_exit(status);
|
||||||
#ifdef RT_USING_MODULE
|
while(1);
|
||||||
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 int __rt_libc_system(const char *string);
|
||||||
return;
|
__rt_libc_system(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
void __libc_init_array(void)
|
void __libc_init_array(void)
|
||||||
@ -319,23 +305,9 @@ void __libc_init_array(void)
|
|||||||
|
|
||||||
void abort(void)
|
void abort(void)
|
||||||
{
|
{
|
||||||
rt_thread_t self = rt_thread_self();
|
extern void __rt_libc_abort(void);
|
||||||
|
__rt_libc_abort();
|
||||||
#ifdef RT_USING_MODULE
|
while(1);
|
||||||
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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user