summaryrefslogtreecommitdiff
path: root/components/libc
diff options
context:
space:
mode:
authorBernard Xiong <[email protected]>2021-02-18 00:06:18 +0800
committerGitHub <[email protected]>2021-02-18 00:06:18 +0800
commit7ed6644db90681081d259159d82793e0662bc556 (patch)
tree0373f33cb79d345160586eeef7af310d8b7f5802 /components/libc
parent9bfab03b742f2cb6cb53ba350d0d760c5691f9fb (diff)
parent263d856fa4025a727c0556f7fc286f79450d9932 (diff)
Merge pull request #4344 from mysterywolf/exit_1
[libc][common] 精简exit和abort函数
Diffstat (limited to 'components/libc')
-rw-r--r--components/libc/compilers/armlibc/syscalls.c24
-rw-r--r--components/libc/compilers/common/SConscript8
-rw-r--r--components/libc/compilers/common/stdlib.c49
-rw-r--r--components/libc/compilers/dlib/syscalls.c40
-rw-r--r--components/libc/compilers/newlib/syscalls.c44
5 files changed, 72 insertions, 93 deletions
diff --git a/components/libc/compilers/armlibc/syscalls.c b/components/libc/compilers/armlibc/syscalls.c
index 1e08ca1716..37f296fc3a 100644
--- a/components/libc/compilers/armlibc/syscalls.c
+++ b/components/libc/compilers/armlibc/syscalls.c
@@ -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
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;
+}
diff --git a/components/libc/compilers/dlib/syscalls.c b/components/libc/compilers/dlib/syscalls.c
index 0d5f02f952..10155948ba 100644
--- a/components/libc/compilers/dlib/syscalls.c
+++ b/components/libc/compilers/dlib/syscalls.c
@@ -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);
}
diff --git a/components/libc/compilers/newlib/syscalls.c b/components/libc/compilers/newlib/syscalls.c
index cf98e0c3ec..76300f76b2 100644
--- a/components/libc/compilers/newlib/syscalls.c
+++ b/components/libc/compilers/newlib/syscalls.c
@@ -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)