Browse Source

精简exit abort system函数

Meco Man 4 years ago
parent
commit
e927a53b41

+ 4 - 19
components/libc/compilers/armlibc/syscalls.c

@@ -258,23 +258,8 @@ 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();
-
-#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 rt_inline void __exit__(int status);
+    __exit__(return_code);
 }
 }
 
 
 /**
 /**
@@ -320,8 +305,8 @@ int remove(const char *filename)
 #else
 #else
 int system(const char *string)
 int system(const char *string)
 {
 {
-    RT_ASSERT(0);
-    for (;;);
+    extern rt_inline int __system__(const char *string);
+    return __system__(string);
 }
 }
 #endif
 #endif
 
 

+ 4 - 4
components/libc/compilers/common/SConscript

@@ -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'):
-                src += ['time.c']
+    if GetDepend('RT_LIBC_USING_TIME') and not GetDepend('RT_USING_MINILIBC'):
+        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']

+ 52 - 0
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;
+}

+ 4 - 34
components/libc/compilers/dlib/syscalls.c

@@ -11,42 +11,12 @@
 
 
 void exit (int status)
 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 rt_inline void __exit__(int status);
+    __exit__(return_code);
 }
 }
 
 
 void abort(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 rt_inline void __abort__(void);
+    __abort__();
 }
 }

+ 6 - 36
components/libc/compilers/newlib/syscalls.c

@@ -286,30 +286,15 @@ _free_r (struct _reent *ptr, void *addr)
 void
 void
 exit (int status)
 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 rt_inline void __exit__(int status);
+    __exit__(status);
 }
 }
 
 
 void
 void
 _system(const char *s)
 _system(const char *s)
 {
 {
-    /* not support this call */
-    return;
+    extern rt_inline int __system__(const char *string);
+    __system__(string);
 }
 }
 
 
 void __libc_init_array(void)
 void __libc_init_array(void)
@@ -319,23 +304,8 @@ void __libc_init_array(void)
 
 
 void abort(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 rt_inline void __abort__(void);
+    __abort__();
 }
 }
 
 
 uid_t getuid(void)
 uid_t getuid(void)