diff options
| author | Meco Jianting Man <[email protected]> | 2021-02-18 01:30:19 -0600 |
|---|---|---|
| committer | GitHub <[email protected]> | 2021-02-18 01:30:19 -0600 |
| commit | 8ea33c2101cdc8d8d8a5f94479acca310fbbfb75 (patch) | |
| tree | 48ba0df2445feb188eed3df81d9e2a62d6d57f53 /components/libc/compilers/common | |
| parent | e19873db6d6947f02e0b093251adf3c73daabdd8 (diff) | |
| parent | 6420c2779143f414ca2850cb2ab3d72a4ff10a9b (diff) | |
Merge pull request #18 from RT-Thread/master
pr
Diffstat (limited to 'components/libc/compilers/common')
| -rw-r--r-- | components/libc/compilers/common/SConscript | 8 | ||||
| -rw-r--r-- | components/libc/compilers/common/stdlib.c | 49 |
2 files changed, 53 insertions, 4 deletions
diff --git a/components/libc/compilers/common/SConscript b/components/libc/compilers/common/SConscript index 8877f07f24..ecdee2637e 100644 --- a/components/libc/compilers/common/SConscript +++ b/components/libc/compilers/common/SConscript @@ -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'] diff --git a/components/libc/compilers/common/stdlib.c b/components/libc/compilers/common/stdlib.c new file mode 100644 index 0000000000..b485bbd836 --- /dev/null +++ b/components/libc/compilers/common/stdlib.c @@ -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; +} |
