summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPixel <pixel@nobis-crew.org>2011-01-28 00:35:56 -0800
committerPixel <pixel@nobis-crew.org>2011-01-28 00:35:56 -0800
commitc8a010ba85e8325fdbf7468ef49744ff1f09f213 (patch)
treeaf7ef6d67d0cf47faef0c8bc339aeb75cedc139d
parentf3906ecc2cacaf75efa1e54f453ff723cddd3d66 (diff)
Adding a few more 'syscalls' to our libc.
-rw-r--r--os/Makefile3
-rw-r--r--os/src/fprintf.c14
-rw-r--r--os/src/fstat.c8
-rw-r--r--os/src/init.c2
-rw-r--r--os/src/isatty.c8
-rw-r--r--os/src/printf.c14
-rw-r--r--os/src/sbrk.c3
-rw-r--r--os/src/sprintf.c2
8 files changed, 50 insertions, 4 deletions
diff --git a/os/Makefile b/os/Makefile
index 453c8d1..2dee1e9 100644
--- a/os/Makefile
+++ b/os/Makefile
@@ -7,7 +7,8 @@ include config.mk
include $(ROOTDIR)/FreeRTOS/config.mk
include $(ROOTDIR)/arch/config.mk
-TARGET_SRCS = src/init.c src/sbrk.c src/sprintf.c src/malloc.c src/free.c src/fclose.c src/read.c src/lseek.c src/write.c src/close.c src/osdebug.c
+TARGET_SRCS = src/init.c src/sbrk.c src/sprintf.c src/malloc.c src/free.c src/fclose.c src/read.c src/lseek.c src/write.c src/close.c src/osdebug.c \
+src/printf.c src/fstat.c src/isatty.c src/fprintf.c
include $(ROOTDIR)/target-rules.mk
diff --git a/os/src/fprintf.c b/os/src/fprintf.c
new file mode 100644
index 0000000..10d34e7
--- /dev/null
+++ b/os/src/fprintf.c
@@ -0,0 +1,14 @@
+#include <reent.h>
+#include <stdio.h>
+#include <stdarg.h>
+#include <osdebug.h>
+
+int fprintf(FILE * file, const char * fmt, ...) {
+ int r;
+ va_list ap;
+ DBGOUT("fprintf(%p, %p, ...)\r\n", file, fmt);
+ va_start(ap, fmt);
+ r = _vfprintf_r(_impure_ptr, file, fmt, ap);
+ va_end(ap);
+ return r;
+}
diff --git a/os/src/fstat.c b/os/src/fstat.c
new file mode 100644
index 0000000..a756206
--- /dev/null
+++ b/os/src/fstat.c
@@ -0,0 +1,8 @@
+#include <reent.h>
+#include <sys/stat.h>
+#include "osdebug.h"
+
+int _fstat_r(struct _reent * ptr, int fildes, struct stat * buf) {
+ DBGOUT("_fstat_r(%p, %d, %p)\r\n", ptr, fildes, buf);
+ return 0;
+}
diff --git a/os/src/init.c b/os/src/init.c
index bb3a6fb..070fac1 100644
--- a/os/src/init.c
+++ b/os/src/init.c
@@ -3,7 +3,6 @@
extern void __libc_init_array();
extern void __libc_fini_array();
-extern void __main();
extern int main(int, char **, char **);
extern void BoardEarlyInit();
extern void BoardLateInit();
@@ -22,6 +21,7 @@ void _start() {
BoardEarlyInit();
BoardConsoleInit();
BoardConsolePuts("uC-sdk - booting.");
+// __sinit(_impure_ptr);
__libc_init_array();
BoardLateInit();
atexit(__libc_fini_array);
diff --git a/os/src/isatty.c b/os/src/isatty.c
new file mode 100644
index 0000000..baf78e4
--- /dev/null
+++ b/os/src/isatty.c
@@ -0,0 +1,8 @@
+#include <unistd.h>
+#include <reent.h>
+#include "osdebug.h"
+
+int _isatty_r(struct _reent * ptr, int fildes) {
+ DBGOUT("_isatty_r(%p, %d)\r\n", ptr, fildes);
+ return 0;
+}
diff --git a/os/src/printf.c b/os/src/printf.c
new file mode 100644
index 0000000..599857c
--- /dev/null
+++ b/os/src/printf.c
@@ -0,0 +1,14 @@
+#include <reent.h>
+#include <stdio.h>
+#include <stdarg.h>
+#include <osdebug.h>
+
+int printf(const char * fmt, ...) {
+ int r;
+ va_list ap;
+ DBGOUT("printf(%p, ...)\r\n", fmt);
+ va_start(ap, fmt);
+ r = _vprintf_r(_impure_ptr, fmt, ap);
+ va_end(ap);
+ return r;
+}
diff --git a/os/src/sbrk.c b/os/src/sbrk.c
index bff44a2..eca289a 100644
--- a/os/src/sbrk.c
+++ b/os/src/sbrk.c
@@ -15,7 +15,8 @@ extern uintptr_t __heap_start, __heap_end;
/* Low-level bulk RAM allocator -- used by Newlib's Malloc */
static void *heap_end = NULL;
-PRIVILEGED_FUNCTION void *_sbrk_r(struct _reent *ptr, ptrdiff_t incr)
+
+void *_sbrk_r(struct _reent *ptr, ptrdiff_t incr)
{
void *prev_heap_end, *next_heap_end, *ret;
// void *stack_min = (void *)(__stack_start ? __stack_start : __heap_end);
diff --git a/os/src/sprintf.c b/os/src/sprintf.c
index 3dc1b2c..9027623 100644
--- a/os/src/sprintf.c
+++ b/os/src/sprintf.c
@@ -6,7 +6,7 @@
int sprintf(char * str, const char * fmt, ...) {
int r;
va_list ap;
- DBGOUT("sprintf(%p, %s, ...)\r\n", str, fmt);
+ DBGOUT("sprintf(%p, %p, ...)\r\n", str, fmt);
va_start(ap, fmt);
r = _vsprintf_r(_impure_ptr, str, fmt, ap);
va_end(ap);