Merge branch 'master' into libc_stdio

This commit is contained in:
Meco Jianting Man
2021-09-27 06:16:39 -05:00
committed by GitHub
147 changed files with 12780 additions and 3308 deletions

View File

@@ -41,6 +41,9 @@ if RT_USING_LIBC && RT_USING_DFS
endif
if RT_USING_LIBC
config RT_LIBC_USING_TIME
default y
config RT_USING_MODULE
bool "Enable dynamic module with dlopen/dlsym/dlclose feature"
default n

View File

@@ -12,13 +12,10 @@
#include <sys/types.h>
#if defined(_WIN32)
#define O_ACCMODE (_O_RDONLY | _O_WRONLY | _O_RDWR)
#endif
#define O_RDONLY 00
#define O_WRONLY 01
#define O_RDWR 02
#define O_RDONLY 0x0000 /* open for reading only */
#define O_WRONLY 0x0001 /* open for writing only */
#define O_RDWR 0x0002 /* open for reading and writing */
#define O_ACCMODE 0x0003 /* mask for above modes */
#define O_CREAT 0100
#define O_EXCL 0200
@@ -43,8 +40,6 @@
#define O_SEARCH O_PATH
#define O_EXEC O_PATH
#define O_ACCMODE (03|O_SEARCH)
#define F_DUPFD 0
#define F_GETFD 1
#define F_SETFD 2

View File

@@ -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)

View File

@@ -1,66 +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*/

View File

@@ -12,17 +12,82 @@
*/
#include <reent.h>
#include <sys/errno.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/time.h>
#include <rtthread.h>
#include <stddef.h>
#include <unistd.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
@@ -246,59 +311,12 @@ _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 _system(const char *s)
{
void* result;
result = (void*)rt_malloc (size);
if (result == RT_NULL)
{
ptr->_errno = ENOMEM;
}
return result;
extern int __rt_libc_system(const char *string);
__rt_libc_system(s);
}
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*/
/* for exit() and abort() */
__attribute__ ((noreturn)) void _exit (int status)
{
@@ -307,17 +325,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 */
}
mode_t umask(mode_t mask)
{
return 022;
@@ -333,3 +340,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 */