summaryrefslogtreecommitdiff
path: root/components/libc
diff options
context:
space:
mode:
authorArda <[email protected]>2014-11-24 11:57:31 +0800
committerArda <[email protected]>2014-11-24 11:57:31 +0800
commit143d3b82244b977735649e7d7c201d2affe67460 (patch)
tree61503d3a150cef8d8184c858efc139b146b50cf6 /components/libc
parentbc2a890ab08d163ccea323f7e719c4fdf53050cd (diff)
parent9ecd18411fc1344e3d080d844b60c7070c3fb4d8 (diff)
Merge pull request #2 from RT-Thread/master
update from official source
Diffstat (limited to 'components/libc')
-rw-r--r--components/libc/SConscript17
-rw-r--r--components/libc/armlibc/SConscript14
-rw-r--r--components/libc/armlibc/mem_std.c22
-rw-r--r--components/libc/armlibc/stubs.c54
-rw-r--r--components/libc/minilibc/SConscript12
-rw-r--r--components/libc/minilibc/stdint.h2
-rw-r--r--components/libc/minilibc/stdlib.c2
-rw-r--r--components/libc/minilibc/string.c10
-rw-r--r--components/libc/minilibc/string.h2
-rw-r--r--components/libc/minilibc/sys/types.h2
-rw-r--r--components/libc/newlib/SConscript15
-rw-r--r--components/libc/newlib/syscalls.c8
12 files changed, 109 insertions, 51 deletions
diff --git a/components/libc/SConscript b/components/libc/SConscript
index 19494ea7c2..799ecccb36 100644
--- a/components/libc/SConscript
+++ b/components/libc/SConscript
@@ -1,13 +1,18 @@
# for libc component
import os
-Import('RTT_ROOT')
+Import('rtconfig')
+
+from building import *
objs = []
-list = os.listdir(os.path.join(RTT_ROOT, 'components', 'libc'))
-for d in list:
- path = os.path.join(RTT_ROOT, 'components', 'libc', d)
- if os.path.isfile(os.path.join(path, 'SConscript')):
- objs = objs + SConscript(os.path.join(d, 'SConscript'))
+if GetDepend('RT_USING_LIBC'):
+ if rtconfig.PLATFORM == 'gcc':
+ objs = objs + SConscript('newlib/SConscript')
+ elif rtconfig.PLATFORM == 'armcc':
+ objs = objs + SConscript('armlibc/SConscript')
+else:
+ if rtconfig.PLATFORM == 'gcc':
+ objs = objs + SConscript('minilibc/SConscript')
Return('objs')
diff --git a/components/libc/armlibc/SConscript b/components/libc/armlibc/SConscript
index 11aba6b4f8..29f342a1c1 100644
--- a/components/libc/armlibc/SConscript
+++ b/components/libc/armlibc/SConscript
@@ -1,16 +1,12 @@
-Import('rtconfig')
from building import *
-if GetDepend('RT_USING_ARM_LIBC') and rtconfig.CROSS_TOOL != 'keil':
- print '================ERROR=============================='
- print 'Please use ARM CC compiler if using ARM C library'
- print '==================================================='
- exit(0)
-
-cwd = GetCurrentDir()
src = Glob('*.c')
+cwd = GetCurrentDir()
+
CPPPATH = [cwd]
+CPPDEFINES = ['RT_USING_ARM_LIBC']
-group = DefineGroup('libc', src, depend = ['RT_USING_ARM_LIBC'], CPPPATH = CPPPATH)
+group = DefineGroup('libc', src, depend = ['RT_USING_LIBC'],
+ CPPPATH = CPPPATH, CPPDEFINES = CPPDEFINES)
Return('group')
diff --git a/components/libc/armlibc/mem_std.c b/components/libc/armlibc/mem_std.c
index 017ed77fef..6faf86555f 100644
--- a/components/libc/armlibc/mem_std.c
+++ b/components/libc/armlibc/mem_std.c
@@ -1,7 +1,16 @@
/*
- * File: mem_std.c
- * Brief: Replace memory management functions of arm standard c library
+ * File : mem_std.c
+ * Brief : implement standard memory routins.
*
+ * This file is part of Device File System in RT-Thread RTOS
+ * COPYRIGHT (C) 2014, RT-Thread Development Team
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rt-thread.org/license/LICENSE.
+ *
+ * Change Logs:
+ * 2014-08-03 bernard Add file header.
*/
#include "rtthread.h"
@@ -9,16 +18,21 @@
/* avoid the heap and heap-using library functions supplied by arm */
#pragma import(__use_no_heap)
-void * malloc(int n)
+void *malloc(int n)
{
return rt_malloc(n);
}
-void * realloc(void *rmem, rt_size_t newsize)
+void *realloc(void *rmem, rt_size_t newsize)
{
return rt_realloc(rmem, newsize);
}
+void *calloc(rt_size_t nelem, rt_size_t elsize)
+{
+ return rt_calloc(nelem, elsize);
+}
+
void free(void *rmem)
{
rt_free(rmem);
diff --git a/components/libc/armlibc/stubs.c b/components/libc/armlibc/stubs.c
index d219b3430a..ea42777a08 100644
--- a/components/libc/armlibc/stubs.c
+++ b/components/libc/armlibc/stubs.c
@@ -13,6 +13,8 @@
* Date Author Notes
* 2012-11-23 Yihui The first version
* 2013-11-24 aozima fixed _sys_read()/_sys_write() issues.
+ * 2014-08-03 bernard If using msh, use system() implementation
+ * in msh.
*/
#include <string.h>
@@ -48,6 +50,7 @@ FILEHANDLE _sys_open(const char *name, int openmode)
{
#ifdef RT_USING_DFS
int fd;
+ int mode = O_RDONLY;
#endif
/* Register standard Input Output devices. */
@@ -61,8 +64,33 @@ FILEHANDLE _sys_open(const char *name, int openmode)
#ifndef RT_USING_DFS
return -1;
#else
- /* TODO: adjust open file mode */
- fd = open(name, openmode, 0);
+ /* Correct openmode from fopen to open */
+ if (openmode & OPEN_PLUS)
+ {
+ if (openmode & OPEN_W)
+ {
+ mode |= (O_RDWR | O_TRUNC | O_CREAT);
+ }
+ else if (openmode & OPEN_A)
+ {
+ mode |= (O_RDWR | O_APPEND | O_CREAT);
+ }
+ else
+ mode |= O_RDWR;
+ }
+ else
+ {
+ if (openmode & OPEN_W)
+ {
+ mode |= (O_WRONLY | O_TRUNC | O_CREAT);
+ }
+ else if (openmode & OPEN_A)
+ {
+ mode |= (O_WRONLY | O_APPEND | O_CREAT);
+ }
+ }
+
+ fd = open(name, mode, 0);
if(fd < 0)
return -1;
else
@@ -138,7 +166,6 @@ int _sys_write(FILEHANDLE fh, const unsigned char *buf, unsigned len, int mode)
return 0;
#else
rt_device_t console_device;
- extern rt_device_t rt_console_get_device(void);
console_device = rt_console_get_device();
if (console_device != 0) rt_device_write(console_device, 0, buf, len);
@@ -194,9 +221,13 @@ char *_sys_command_string(char *cmd, int len)
return cmd;
}
+/* This function writes a character to the console. */
void _ttywrch(int ch)
{
- /* TODO */
+ char c;
+
+ c = (char)ch;
+ rt_kprintf(&c);
}
void _sys_exit(int return_code)
@@ -221,7 +252,6 @@ int _sys_istty(FILEHANDLE fh)
return 0;
}
-
int remove(const char *filename)
{
#ifndef RT_USING_DFS
@@ -231,18 +261,12 @@ int remove(const char *filename)
#endif
}
-/* rename() is defined in dfs_posix.c instead */
-#if 0
-int rename(const char *old, const char *new)
-{
- return -1;
-}
-#endif
-
+#if defined(RT_USING_FINSH) && defined(FINSH_USING_MSH) && defined(RT_USING_MODULE) && defined(RT_USING_DFS)
+/* use system(const char *string) implementation in the msh */
+#else
int system(const char *string)
{
RT_ASSERT(0);
for(;;);
}
-
-
+#endif
diff --git a/components/libc/minilibc/SConscript b/components/libc/minilibc/SConscript
index 42f41a311d..b0c82a7125 100644
--- a/components/libc/minilibc/SConscript
+++ b/components/libc/minilibc/SConscript
@@ -2,12 +2,12 @@ Import('RTT_ROOT')
from building import *
src = Glob('*.c')
-CPPPATH = [RTT_ROOT + '/components/libc/minilibc']
+cwd = GetCurrentDir()
+
+CPPPATH = [cwd]
CPPDEFINES = ['RT_USING_MINILIBC']
-group = DefineGroup('minilibc', src,
- depend = ['RT_USING_MINILIBC'],
- CPPPATH = CPPPATH,
- CPPDEFINES = CPPDEFINES
- )
+
+group = DefineGroup('libc', src, depend = ['RT_USING_MINILIBC'],
+ CPPPATH = CPPPATH, CPPDEFINES = CPPDEFINES)
Return('group')
diff --git a/components/libc/minilibc/stdint.h b/components/libc/minilibc/stdint.h
index 2d9e292b7c..f397b57bc5 100644
--- a/components/libc/minilibc/stdint.h
+++ b/components/libc/minilibc/stdint.h
@@ -43,4 +43,6 @@ typedef unsigned long long uint64_t;
#define LONG_MIN (-LONG_MAX - 1)
#define ULONG_MAX (~0UL)
+#define SIZE_MAX ULONG_MAX
+
#endif
diff --git a/components/libc/minilibc/stdlib.c b/components/libc/minilibc/stdlib.c
index 51cb07fee0..e29ae9bc2e 100644
--- a/components/libc/minilibc/stdlib.c
+++ b/components/libc/minilibc/stdlib.c
@@ -54,6 +54,7 @@ long int atol(const char* s)
return sign?-v:v;
}
+#ifdef RT_USING_HEAP
void *malloc(size_t size)
{
return rt_malloc(size);
@@ -73,5 +74,6 @@ void *calloc(size_t nelem, size_t elsize)
{
return rt_calloc(nelem, elsize);
}
+#endif
#endif
diff --git a/components/libc/minilibc/string.c b/components/libc/minilibc/string.c
index 4969ed2fc6..4e90da1554 100644
--- a/components/libc/minilibc/string.c
+++ b/components/libc/minilibc/string.c
@@ -621,4 +621,14 @@ char *strchr(const char *s1, int i)
return (char *) s;
}
+long strtol(const char *str, char **endptr, int base)
+{
+ return simple_strtol(str, endptr, base);
+}
+
+long long strtoll(const char *str, char **endptr, int base)
+{
+ return simple_strtoll(str, endptr, base);
+}
+
#endif
diff --git a/components/libc/minilibc/string.h b/components/libc/minilibc/string.h
index 4bfec8fecd..089903e993 100644
--- a/components/libc/minilibc/string.h
+++ b/components/libc/minilibc/string.h
@@ -66,6 +66,8 @@ char*strtok_r(char*s, const char*delim, char**ptrptr);
size_t strcspn(const char *s, const char *reject);
size_t strspn (const char *s, const char *accept);
+long strtol(const char *str, char **endptr, int base);
+long long strtoll(const char *str, char **endptr, int base);
#endif
#endif
diff --git a/components/libc/minilibc/sys/types.h b/components/libc/minilibc/sys/types.h
index 6d92d80826..a6860f2aee 100644
--- a/components/libc/minilibc/sys/types.h
+++ b/components/libc/minilibc/sys/types.h
@@ -4,7 +4,7 @@
#include <rtthread.h>
typedef long off_t;
-typedef rt_size_t size_t;
+typedef __SIZE_TYPE__ size_t;
typedef signed long ssize_t; /* Used for a count of bytes or an error indication. */
typedef rt_uint8_t u_char;
diff --git a/components/libc/newlib/SConscript b/components/libc/newlib/SConscript
index ae8e8756e1..574c2a8d1f 100644
--- a/components/libc/newlib/SConscript
+++ b/components/libc/newlib/SConscript
@@ -1,15 +1,10 @@
-Import('rtconfig')
from building import *
-if GetDepend('RT_USING_NEWLIB') and rtconfig.CROSS_TOOL != 'gcc':
- print '================ERROR============================'
- print 'Please use GNU GCC compiler if using newlib'
- print '================================================='
- exit(0)
-
+src = Glob('*.c')
cwd = GetCurrentDir()
-src = Glob('*.c')
+
CPPPATH = [cwd]
+CPPDEFINES = ['RT_USING_NEWLIB']
# link with libc and libm:
# libm is a frequently used lib. Newlib is compiled with -ffunction-sections in
@@ -17,7 +12,7 @@ CPPPATH = [cwd]
# been referenced. So setting this won't result in bigger text size.
LIBS = ['c', 'm']
-group = DefineGroup('newlib', src, depend = ['RT_USING_NEWLIB'],
- CPPPATH = CPPPATH, LIBS = LIBS)
+group = DefineGroup('newlib', src, depend = ['RT_USING_LIBC'],
+ CPPPATH = CPPPATH, CPPDEFINES = CPPDEFINES, LIBS = LIBS)
Return('group')
diff --git a/components/libc/newlib/syscalls.c b/components/libc/newlib/syscalls.c
index 5b829f4753..388d240c94 100644
--- a/components/libc/newlib/syscalls.c
+++ b/components/libc/newlib/syscalls.c
@@ -3,6 +3,14 @@
#include <sys/time.h>
#include <rtthread.h>
+#ifdef RT_USING_DFS
+#include <dfs_posix.h>
+#endif
+
+#ifdef RT_USING_PTHREADS
+#include <pthread.h>
+#endif
+
/* Reentrant versions of system calls. */
int