summaryrefslogtreecommitdiff
path: root/components/libc/compilers/armlibc
diff options
context:
space:
mode:
authorcliff-cmc <[email protected]>2021-02-26 11:09:27 +0800
committerCliff Chen <[email protected]>2021-02-26 11:45:19 +0800
commiteea0c3d74a40f73235da45c6f77e8b411ac94cf2 (patch)
treea6906f1aed7118ab53dbe18f2ee4727a754583af /components/libc/compilers/armlibc
parent1a9ecf27f31277750d92c921b62503f75275e122 (diff)
parentfae0fa8eea4c0e797940bf1eddc8ee6c1711734a (diff)
Add memtrace command for memheap.c
Diffstat (limited to 'components/libc/compilers/armlibc')
-rw-r--r--components/libc/compilers/armlibc/README.md9
-rw-r--r--components/libc/compilers/armlibc/fcntl.h2
-rw-r--r--components/libc/compilers/armlibc/libc_syms.c7
-rw-r--r--components/libc/compilers/armlibc/sys/ioctl.h (renamed from components/libc/compilers/armlibc/termios.h)8
-rw-r--r--components/libc/compilers/armlibc/sys/types.h16
-rw-r--r--components/libc/compilers/armlibc/sys/unistd.h36
-rw-r--r--components/libc/compilers/armlibc/syscalls.c (renamed from components/libc/compilers/armlibc/stubs.c)60
-rw-r--r--components/libc/compilers/armlibc/unistd.h1
8 files changed, 110 insertions, 29 deletions
diff --git a/components/libc/compilers/armlibc/README.md b/components/libc/compilers/armlibc/README.md
new file mode 100644
index 0000000000..4d2a73b6be
--- /dev/null
+++ b/components/libc/compilers/armlibc/README.md
@@ -0,0 +1,9 @@
+# ARMLIB (Keil-MDK) porting for RT-Thread
+
+Please define RT_USING_LIBC and compile RT-Thread with Keil-MDK compiler.
+
+
+
+## More Information
+
+https://www.keil.com/support/man/docs/armlib/ \ No newline at end of file
diff --git a/components/libc/compilers/armlibc/fcntl.h b/components/libc/compilers/armlibc/fcntl.h
index 80cf1b4409..3e650a8471 100644
--- a/components/libc/compilers/armlibc/fcntl.h
+++ b/components/libc/compilers/armlibc/fcntl.h
@@ -9,6 +9,8 @@
#ifndef FCNTL_H__
#define FCNTL_H__
+#include <rtconfig.h>
+
#ifdef RT_USING_DFS
#include <dfs_posix.h>
#endif
diff --git a/components/libc/compilers/armlibc/libc_syms.c b/components/libc/compilers/armlibc/libc_syms.c
index 0e1c42d899..a2e8af17f1 100644
--- a/components/libc/compilers/armlibc/libc_syms.c
+++ b/components/libc/compilers/armlibc/libc_syms.c
@@ -10,8 +10,6 @@
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
-#include <time.h>
-
#include <rtm.h>
/* some export routines for module */
@@ -35,11 +33,6 @@ RTM_EXPORT(memchr);
RTM_EXPORT(toupper);
RTM_EXPORT(atoi);
-#ifdef RT_USING_RTC
-RTM_EXPORT(localtime);
-RTM_EXPORT(time);
-#endif
-
/* import the full stdio for printf */
#if defined(RT_USING_MODULE) && defined(__MICROLIB)
#error "[RT_USING_LIBC] Please use standard libc but not microlib."
diff --git a/components/libc/compilers/armlibc/termios.h b/components/libc/compilers/armlibc/sys/ioctl.h
index 1956121225..033a57014a 100644
--- a/components/libc/compilers/armlibc/termios.h
+++ b/components/libc/compilers/armlibc/sys/ioctl.h
@@ -5,11 +5,11 @@
*
* Change Logs:
* Date Author Notes
+ * 2020-09-01 Meco Man First Version
*/
-#ifndef _TERMIOS_H__
-#define _TERMIOS_H__
+#ifndef _SYS_IOCTL_H
+#define _SYS_IOCTL_H
+
-#include <sys/types.h>
-#include <posix_termios.h>
#endif
diff --git a/components/libc/compilers/armlibc/sys/types.h b/components/libc/compilers/armlibc/sys/types.h
index 001ace4dd2..d1e457b36f 100644
--- a/components/libc/compilers/armlibc/sys/types.h
+++ b/components/libc/compilers/armlibc/sys/types.h
@@ -5,20 +5,24 @@
*
* Change Logs:
* Date Author Notes
+ * 2020-09-05 Meco Man fix bugs
+ * 2020-12-16 Meco Man add useconds_t
*/
#ifndef __TYPES_H__
#define __TYPES_H__
#include <stdint.h>
-#include <rtthread.h>
-typedef rt_int32_t clockid_t;
-typedef rt_int32_t key_t; /* Used for interprocess communication. */
-typedef rt_int32_t pid_t; /* Used for process IDs and process group IDs. */
+typedef int32_t clockid_t;
+typedef int32_t key_t; /* Used for interprocess communication. */
+typedef int pid_t; /* Used for process IDs and process group IDs. */
+typedef unsigned short uid_t;
+typedef unsigned short gid_t;
#ifndef ARCH_CPU_64BIT
-typedef signed int ssize_t; /* Used for a count of bytes or an error indication. */
+typedef signed int ssize_t; /* Used for a count of bytes or an error indication. */
#else
-typedef long signed int ssize_t; /* Used for a count of bytes or an error indication. */
+typedef long signed int ssize_t; /* Used for a count of bytes or an error indication. */
#endif
+typedef unsigned long useconds_t; /* microseconds (unsigned) */
#endif
diff --git a/components/libc/compilers/armlibc/sys/unistd.h b/components/libc/compilers/armlibc/sys/unistd.h
index 33f0561e72..ee1e1c4db9 100644
--- a/components/libc/compilers/armlibc/sys/unistd.h
+++ b/components/libc/compilers/armlibc/sys/unistd.h
@@ -5,11 +5,13 @@
*
* Change Logs:
* Date Author Notes
+ * 2020-12-16 Meco Man add usleep
*/
#ifndef _SYS_UNISTD_H
#define _SYS_UNISTD_H
-#include <rtthread.h>
+#include <rtconfig.h>
+#include "types.h"
#ifdef RT_USING_DFS
@@ -36,14 +38,46 @@
#define _FNDELAY _FNONBLOCK /* non blocking I/O (4.2 style) */
#define _FNOCTTY 0x8000 /* don't assign a ctty on this open */
+
+#ifndef O_RDONLY
#define O_RDONLY 0 /* +1 == FREAD */
+#endif
+#ifndef O_WRONLY
#define O_WRONLY 1 /* +1 == FWRITE */
+#endif
+#ifndef O_RDWR
#define O_RDWR 2 /* +1 == FREAD|FWRITE */
+#endif
+#ifndef O_APPEND
#define O_APPEND _FAPPEND
+#endif
+#ifndef O_CREAT
#define O_CREAT _FCREAT
+#endif
+#ifndef O_TRUNC
#define O_TRUNC _FTRUNC
+#endif
+#ifndef O_EXCL
#define O_EXCL _FEXCL
+#endif
+#ifndef O_SYNC
#define O_SYNC _FSYNC
#endif
+#endif
+
+
+int isatty (int fd);
+char * ttyname (int desc);
+
+unsigned int sleep(unsigned int seconds);
+int usleep(useconds_t usec);
+
+pid_t getpid(void);
+pid_t getppid(void);
+uid_t getuid(void);
+uid_t geteuid(void);
+gid_t getgid(void);
+gid_t getegid(void);
+
#endif /* _SYS_UNISTD_H */
diff --git a/components/libc/compilers/armlibc/stubs.c b/components/libc/compilers/armlibc/syscalls.c
index b6ffb37b0f..8addb3e163 100644
--- a/components/libc/compilers/armlibc/stubs.c
+++ b/components/libc/compilers/armlibc/syscalls.c
@@ -9,16 +9,21 @@
* 2013-11-24 aozima fixed _sys_read()/_sys_write() issues.
* 2014-08-03 bernard If using msh, use system() implementation
* in msh.
+ * 2020-08-05 Meco Man fixed _sys_flen() compiling-warning when
+ * RT_USING_DFS is not defined
+ * 2020-02-13 Meco Man re-implement exit() and abort()
+ * 2020-02-14 Meco Man implement _sys_tmpnam()
+ * 2020-02-25 Meco Man add multithreaded protection
*/
#include <string.h>
#include <rt_sys.h>
-#include "rtthread.h"
+#include <rtthread.h>
#include "libc.h"
#ifdef RT_USING_DFS
-#include "dfs_posix.h"
+#include <dfs_posix.h>
#endif
#ifdef __CLANG_ARM
@@ -37,6 +42,36 @@ const char __stdin_name[] = "STDIN";
const char __stdout_name[] = "STDOUT";
const char __stderr_name[] = "STDERR";
+#ifdef RT_USING_HEAP
+int _mutex_initialize(rt_mutex_t *m)
+{
+ *m = rt_mutex_create("_mutex_", RT_IPC_FLAG_PRIO);
+ if(*m == RT_NULL)
+ {
+ return 0;
+ }
+ else
+ {
+ return 1;
+ }
+}
+
+void _mutex_acquire(rt_mutex_t *m)
+{
+ rt_mutex_take(*m, RT_WAITING_FOREVER);
+}
+
+void _mutex_release(rt_mutex_t *m)
+{
+ rt_mutex_release(*m);
+}
+
+void _mutex_free(rt_mutex_t *m)
+{
+ rt_mutex_delete(*m);
+}
+#endif
+
/**
* required by fopen() and freopen().
*
@@ -231,7 +266,8 @@ int _sys_seek(FILEHANDLE fh, long pos)
*/
int _sys_tmpnam(char *name, int fileno, unsigned maxlength)
{
- return -1;
+ rt_snprintf(name, maxlength, "tem%03d", fileno);
+ return 1;
}
char *_sys_command_string(char *cmd, int len)
@@ -251,10 +287,12 @@ void _ttywrch(int ch)
#endif
}
+/* for exit() and abort() */
RT_WEAK void _sys_exit(int return_code)
{
- /* TODO: perhaps exit the thread which is invoking this function */
- while (1);
+ extern void __rt_libc_exit(int status);
+ __rt_libc_exit(return_code);
+ while(1);
}
/**
@@ -265,16 +303,16 @@ RT_WEAK void _sys_exit(int return_code)
*/
long _sys_flen(FILEHANDLE fh)
{
+#ifdef RT_USING_DFS
struct stat stat;
-
+
if (fh < STDERR)
return -1;
-#ifndef RT_USING_DFS
- return -1;
-#else
fstat(fh, &stat);
return stat.st_size;
+#else
+ return -1;
#endif
}
@@ -300,8 +338,8 @@ int remove(const char *filename)
#else
int system(const char *string)
{
- RT_ASSERT(0);
- for (;;);
+ extern int __rt_libc_system(const char *string);
+ return __rt_libc_system(string);
}
#endif
diff --git a/components/libc/compilers/armlibc/unistd.h b/components/libc/compilers/armlibc/unistd.h
index 70187722d8..736fc219a8 100644
--- a/components/libc/compilers/armlibc/unistd.h
+++ b/components/libc/compilers/armlibc/unistd.h
@@ -7,3 +7,4 @@
* Date Author Notes
*/
#include "sys/unistd.h"
+