Browse Source

[libc][newlib] 对syscall中malloc相关桩函数做出编译调整

Meco Man 4 năm trước cách đây
mục cha
commit
ac275965f2

+ 52 - 1
components/libc/compilers/newlib/minilib.c

@@ -11,8 +11,59 @@
 #include <reent.h>
 #include <rtthread.h>
 
-void * _sbrk_r(struct _reent *ptr, ptrdiff_t incr)
+#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)
 {
     /* no use this routine to get memory */
     return RT_NULL;
 }
+#endif /*RT_USING_HEAP*/

+ 10 - 8
components/libc/compilers/newlib/syscalls.c

@@ -189,13 +189,6 @@ _rename_r(struct _reent *ptr, const char *old, const char *new)
 #endif
 }
 
-void *
-_sbrk_r(struct _reent *ptr, ptrdiff_t incr)
-{
-    /* no use this routine to get memory */
-    return RT_NULL;
-}
-
 int
 _stat_r(struct _reent *ptr, const char *file, struct stat *pstat)
 {
@@ -258,7 +251,7 @@ _write_r(struct _reent *ptr, int fd, const void *buf, size_t nbytes)
 #endif
 }
 
-/* Memory routine */
+#ifdef RT_USING_HEAP /* Memory routine */
 void *
 _malloc_r (struct _reent *ptr, size_t size)
 {
@@ -306,6 +299,15 @@ _free_r (struct _reent *ptr, void *addr)
     rt_free (addr);
 }
 
+#else
+void *
+_sbrk_r(struct _reent *ptr, ptrdiff_t incr)
+{
+    /* no use this routine to get memory */
+    return RT_NULL;
+}
+#endif /*RT_USING_HEAP*/
+
 /* for exit() and abort() */
 __attribute__ ((noreturn)) void
 _exit (int status)