Explorar o código

[libc][newlib] 优化syscall 将minilib.c并入syscalls.c

Meco Man %!s(int64=3) %!d(string=hai) anos
pai
achega
a0e800617c

+ 1 - 2
components/libc/compilers/newlib/SConscript

@@ -18,11 +18,10 @@ if rtconfig.PLATFORM == 'gcc':
         LIBS += ['c', 'm']
 
         src += Glob('*.c')
-        SrcRemove(src, ['minilib.c'])
         if GetDepend('RT_USING_MODULE') == False:
             SrcRemove(src, ['libc_syms.c'])
     else:
-        src += ['minilib.c']
+        src += ['syscalls.c']
 
     group = DefineGroup('libc', src, depend = [], CPPPATH = CPPPATH, CPPDEFINES = CPPDEFINES, LIBS = LIBS)
 

+ 0 - 72
components/libc/compilers/newlib/minilib.c

@@ -1,72 +0,0 @@
-/*
- * Copyright (c) 2006-2021, RT-Thread Development Team
- *
- * SPDX-License-Identifier: Apache-2.0
- *
- * Change Logs:
- * Date           Author       Notes
- * 2021-02-23     Meco Man     first version
- */
-
-#include <reent.h>
-#include <rtthread.h>
-
-#ifdef RT_USING_HEAP /* Memory routine */
-#include <sys/errno.h>
-
-void * _malloc_r (struct _reent *ptr, size_t size)
-{
-    void* result;
-
-    result = (void*)rt_malloc (size);
-    if (result == RT_NULL)
-    {
-        ptr->_errno = ENOMEM;
-    }
-
-    return result;
-}
-
-void * _realloc_r (struct _reent *ptr, void *old, size_t newlen)
-{
-    void* result;
-
-    result = (void*)rt_realloc (old, newlen);
-    if (result == RT_NULL)
-    {
-        ptr->_errno = ENOMEM;
-    }
-
-    return result;
-}
-
-void *_calloc_r (struct _reent *ptr, size_t size, size_t len)
-{
-    void* result;
-
-    result = (void*)rt_calloc (size, len);
-    if (result == RT_NULL)
-    {
-        ptr->_errno = ENOMEM;
-    }
-
-    return result;
-}
-
-void _free_r (struct _reent *ptr, void *addr)
-{
-    rt_free (addr);
-}
-
-#else
-void * _sbrk_r(struct _reent *ptr, ptrdiff_t incr)
-{
-    return RT_NULL;
-}
-#endif /*RT_USING_HEAP*/
-
-void __libc_init_array(void)
-{
-    /* we not use __libc init_aray to initialize C++ objects */
-    /* __libc_init_array is ARM code, not Thumb; it will cause hardfault. */
-}

+ 75 - 68
components/libc/compilers/newlib/syscalls.c

@@ -11,17 +11,81 @@
  * 2020-02-24     Meco Man     fix bug of _isatty_r()
  */
 
-#include <reent.h>
-#include <errno.h>
-#include <stdio.h>
-#include <sys/time.h>
-
 #include <rtthread.h>
+#include <stddef.h>
+#include <sys/errno.h>
+
+#define DBG_TAG    "newlib.syscalls"
+#define DBG_LVL    DBG_INFO
+#include <rtdbg.h>
+
+#ifdef RT_USING_HEAP /* Memory routine */
+void *_malloc_r (struct _reent *ptr, size_t size)
+{
+    void* result;
 
+    result = (void*)rt_malloc (size);
+    if (result == RT_NULL)
+    {
+        ptr->_errno = ENOMEM;
+    }
+
+    return result;
+}
+
+void *_realloc_r (struct _reent *ptr, void *old, size_t newlen)
+{
+    void* result;
+
+    result = (void*)rt_realloc (old, newlen);
+    if (result == RT_NULL)
+    {
+        ptr->_errno = ENOMEM;
+    }
+
+    return result;
+}
+
+void *_calloc_r (struct _reent *ptr, size_t size, size_t len)
+{
+    void* result;
+
+    result = (void*)rt_calloc (size, len);
+    if (result == RT_NULL)
+    {
+        ptr->_errno = ENOMEM;
+    }
+
+    return result;
+}
+
+void _free_r (struct _reent *ptr, void *addr)
+{
+    rt_free (addr);
+}
+
+#else
+void *
+_sbrk_r(struct _reent *ptr, ptrdiff_t incr)
+{
+    LOG_E("Please enable RT_USING_HEAP or RT_USING_LIBC");
+    RT_ASSERT(0);
+    return RT_NULL;
+}
+#endif /*RT_USING_HEAP*/
+
+void __libc_init_array(void)
+{
+    /* we not use __libc init_aray to initialize C++ objects */
+    /* __libc_init_array is ARM code, not Thumb; it will cause a hardfault. */
+}
+
+#ifdef RT_USING_LIBC
+#include <reent.h>
+#include <stdio.h>
 #ifdef RT_USING_DFS
 #include <dfs_posix.h>
 #endif
-
 #ifdef RT_USING_MODULE
 #include <dlmodule.h>
 #endif
@@ -233,58 +297,11 @@ _ssize_t _write_r(struct _reent *ptr, int fd, const void *buf, size_t nbytes)
 #endif
 }
 
-#ifdef RT_USING_HEAP /* Memory routine */
-void *_malloc_r (struct _reent *ptr, size_t size)
-{
-    void* result;
-
-    result = (void*)rt_malloc (size);
-    if (result == RT_NULL)
-    {
-        ptr->_errno = ENOMEM;
-    }
-
-    return result;
-}
-
-void *_realloc_r (struct _reent *ptr, void *old, size_t newlen)
-{
-    void* result;
-
-    result = (void*)rt_realloc (old, newlen);
-    if (result == RT_NULL)
-    {
-        ptr->_errno = ENOMEM;
-    }
-
-    return result;
-}
-
-void *_calloc_r (struct _reent *ptr, size_t size, size_t len)
-{
-    void* result;
-
-    result = (void*)rt_calloc (size, len);
-    if (result == RT_NULL)
-    {
-        ptr->_errno = ENOMEM;
-    }
-
-    return result;
-}
-
-void _free_r (struct _reent *ptr, void *addr)
-{
-    rt_free (addr);
-}
-
-#else
-void *
-_sbrk_r(struct _reent *ptr, ptrdiff_t incr)
+void _system(const char *s)
 {
-    return RT_NULL;
+    extern int __rt_libc_system(const char *string);
+    __rt_libc_system(s);
 }
-#endif /*RT_USING_HEAP*/
 
 /* for exit() and abort() */
 __attribute__ ((noreturn)) void _exit (int status)
@@ -294,18 +311,6 @@ __attribute__ ((noreturn)) void _exit (int status)
     while(1);
 }
 
-void _system(const char *s)
-{
-    extern int __rt_libc_system(const char *string);
-    __rt_libc_system(s);
-}
-
-void __libc_init_array(void)
-{
-    /* we not use __libc init_aray to initialize C++ objects */
-    /* __libc_init_array is ARM code, not Thumb; it will cause hardfault. */
-}
-
 mode_t umask(mode_t mask)
 {
     return 022;
@@ -321,3 +326,5 @@ These functions are implemented and replaced by the 'common/time.c' file
 int _gettimeofday_r(struct _reent *ptr, struct timeval *__tp, void *__tzp);
 _CLOCK_T_  _times_r(struct _reent *ptr, struct tms *ptms);
 */
+
+#endif /* RT_USING_LIBC */