summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile2
-rw-r--r--arch/arm/lpc17xx/ldscript-mpu10
-rw-r--r--os/Makefile2
-rw-r--r--os/src/close.c4
-rw-r--r--os/src/fclose.c6
-rw-r--r--os/src/free.c5
-rw-r--r--os/src/lseek.c4
-rw-r--r--os/src/malloc.c5
-rw-r--r--os/src/read.c5
-rw-r--r--os/src/sprintf.c10
-rw-r--r--os/src/write.c4
-rw-r--r--target-rules.mk5
12 files changed, 52 insertions, 10 deletions
diff --git a/Makefile b/Makefile
index 8de95f8..d875646 100644
--- a/Makefile
+++ b/Makefile
@@ -1,5 +1,5 @@
TARGET = demo.bin
-LIBS = FreeRTOS/libFreeRTOS.a arch/libarch.a -lc os/libos.a
+LIBS = -Wl,--start-group -lc FreeRTOS/libFreeRTOS.a arch/libarch.a os/libos.a -Wl,--end-group
export ROOTDIR = $(CURDIR)
diff --git a/arch/arm/lpc17xx/ldscript-mpu b/arch/arm/lpc17xx/ldscript-mpu
index ce71313..3af58a9 100644
--- a/arch/arm/lpc17xx/ldscript-mpu
+++ b/arch/arm/lpc17xx/ldscript-mpu
@@ -148,10 +148,11 @@ SECTIONS
__cs3_region_size_rom = LENGTH(rom);
__cs3_region_num = 1;
- .privileged_data :
+ .data :
{
+ __cs3_region_start_ram = .;
__privileged_data_start__ = .;
- *(.priviledge_data)
+ *( privileged_data )
__privileged_data_end___len = . - __privileged_data_start__ - 1 ;
__privileged_data_end___len |= __privileged_data_end___len >> 1 ;
__privileged_data_end___len |= __privileged_data_end___len >> 2 ;
@@ -161,11 +162,6 @@ SECTIONS
. = ALIGN( MAX( __privileged_data_end___len + 1, 32 ) ) ;
__privileged_data_end__ = .;
- } >ram
-
- .data :
- {
- __cs3_region_start_ram = .;
*(.cs3.region-head.ram)
KEEP(*(.jcr))
*(.got.plt) *(.got)
diff --git a/os/Makefile b/os/Makefile
index 070566d..c19d685 100644
--- a/os/Makefile
+++ b/os/Makefile
@@ -6,7 +6,7 @@ include $(ROOTDIR)/common.mk
include config.mk
include $(ROOTDIR)/FreeRTOS/config.mk
-TARGET_SRCS = src/init.c src/sbrk.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
include $(ROOTDIR)/target-rules.mk
diff --git a/os/src/close.c b/os/src/close.c
new file mode 100644
index 0000000..46ee8c5
--- /dev/null
+++ b/os/src/close.c
@@ -0,0 +1,4 @@
+#include <reent.h>
+
+int _close_r(struct _reent * reent, int fd) {
+}
diff --git a/os/src/fclose.c b/os/src/fclose.c
new file mode 100644
index 0000000..fe81f62
--- /dev/null
+++ b/os/src/fclose.c
@@ -0,0 +1,6 @@
+#include <stdio.h>
+#include <reent.h>
+
+int fclose(FILE * fp) {
+ return _fclose_r(_impure_ptr, fp);
+}
diff --git a/os/src/free.c b/os/src/free.c
new file mode 100644
index 0000000..f2d1fe5
--- /dev/null
+++ b/os/src/free.c
@@ -0,0 +1,5 @@
+#include <reent.h>
+
+void free(void * ptr) {
+ _free_r(_impure_ptr, ptr);
+}
diff --git a/os/src/lseek.c b/os/src/lseek.c
new file mode 100644
index 0000000..1b86dbb
--- /dev/null
+++ b/os/src/lseek.c
@@ -0,0 +1,4 @@
+#include <reent.h>
+
+_off_t _lseek_r(struct _reent * reent, int fd, _off_t seek, int wheel) {
+}
diff --git a/os/src/malloc.c b/os/src/malloc.c
new file mode 100644
index 0000000..7d5f965
--- /dev/null
+++ b/os/src/malloc.c
@@ -0,0 +1,5 @@
+#include <reent.h>
+
+void * malloc(size_t size) {
+ return _malloc_r(_impure_ptr, size);
+}
diff --git a/os/src/read.c b/os/src/read.c
new file mode 100644
index 0000000..08351a7
--- /dev/null
+++ b/os/src/read.c
@@ -0,0 +1,5 @@
+#include <reent.h>
+
+_ssize_t _read_r(struct _reent * reent, int fd, void * ptr, size_t size) {
+ return 0;
+}
diff --git a/os/src/sprintf.c b/os/src/sprintf.c
new file mode 100644
index 0000000..76ea9a2
--- /dev/null
+++ b/os/src/sprintf.c
@@ -0,0 +1,10 @@
+#include <reent.h>
+#include <stdarg.h>
+
+int sprintf(char * str, const char * fmt, ...) {
+ int r;
+ va_list ap;
+ va_start(ap, fmt);
+ r = _vsprintf_r(_impure_ptr, str, fmt, ap);
+ va_end(ap);
+}
diff --git a/os/src/write.c b/os/src/write.c
new file mode 100644
index 0000000..a1bf474
--- /dev/null
+++ b/os/src/write.c
@@ -0,0 +1,4 @@
+#include <reent.h>
+
+_ssize_t _write_r(struct _reent * reent, int fd, const void * buf, size_t size) {
+}
diff --git a/target-rules.mk b/target-rules.mk
index 5b976bc..1ce9487 100644
--- a/target-rules.mk
+++ b/target-rules.mk
@@ -11,12 +11,15 @@ TARGET_OBJS = $(addsuffix .o, $(basename $(TARGET_SRCS)))
ifneq ($(TARGET),)
TARGET_ELF = $(addsuffix .elf, $(basename $(TARGET)))
TARGET_BIN = $(addsuffix .bin, $(basename $(TARGET)))
+TARGET_MAP = $(addsuffix .map, $(basename $(TARGET)))
TARGET_OBJS += $(addsuffix .o, $(basename $(TARGET)))
endif
$(TARGET_ELF): $(TARGET_OBJS)
$(E) [TL] Linking $@
- $(Q)$(TARGET_LD) -o $@ $^ -T$(LDSCRIPT) $(LIBS)
+ $(Q)$(TARGET_LD) -Wl,--gc-sections -Wl,-O3 -Wl,-Map=$(TARGET_MAP) -o $@ $^ -T$(LDSCRIPT) $(LIBS)
+
+$(TARGET_MAP): $(TARGET_ELF)
$(TARGET_BIN): $(TARGET_ELF)
$(E) [TB] Creating $@