summaryrefslogtreecommitdiff
path: root/components/libc/compilers/common
diff options
context:
space:
mode:
authorMeco Man <[email protected]>2021-02-17 00:02:28 +0800
committerMeco Man <[email protected]>2021-02-17 00:02:28 +0800
commite927a53b41fa58573e14eccac37374d686ad3cf7 (patch)
tree7e18aa21c63b86a7b7d18cdfb55349817f86d388 /components/libc/compilers/common
parente19873db6d6947f02e0b093251adf3c73daabdd8 (diff)
精简exit abort system函数
Diffstat (limited to 'components/libc/compilers/common')
-rw-r--r--components/libc/compilers/common/SConscript8
-rw-r--r--components/libc/compilers/common/stdlib.c52
2 files changed, 56 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..01f18aca5f
--- /dev/null
+++ b/components/libc/compilers/common/stdlib.c
@@ -0,0 +1,52 @@
+/*
+ * 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;
+}