From 3dbaad0a1f27b96462541e1189efe37ffa913e9a Mon Sep 17 00:00:00 2001 From: Albert Ou Date: Tue, 13 Dec 2016 15:05:19 -0800 Subject: Refactor libc stubs into libwrap The --wrap feature of GNU ld supports a cleaner framework for linking in alternative implementations of libc functions without cpp hacks. Place wrappers in separate object files to reduce static code size. --- software/demo_gpio/.gitignore | 1 + software/demo_gpio/Makefile | 2 +- software/dhrystone/.gitignore | 1 + software/dhrystone/Makefile | 5 +++-- software/dhrystone/dhry_printf.c | 4 ++-- software/dhrystone/dhry_stubs.c | 15 +-------------- software/hello/.gitignore | 1 + software/hello/Makefile | 2 +- 8 files changed, 11 insertions(+), 20 deletions(-) create mode 100644 software/demo_gpio/.gitignore create mode 100644 software/dhrystone/.gitignore create mode 100644 software/hello/.gitignore (limited to 'software') diff --git a/software/demo_gpio/.gitignore b/software/demo_gpio/.gitignore new file mode 100644 index 0000000..35566c7 --- /dev/null +++ b/software/demo_gpio/.gitignore @@ -0,0 +1 @@ +demo_gpio diff --git a/software/demo_gpio/Makefile b/software/demo_gpio/Makefile index 0a0b148..04a11b7 100644 --- a/software/demo_gpio/Makefile +++ b/software/demo_gpio/Makefile @@ -1,7 +1,7 @@ TARGET = demo_gpio C_SRCS += demo_gpio.c C_SRCS += plic_driver.c -CFLAGS += -fno-builtin-printf -DUSE_PLIC -DUSE_M_TIME +CFLAGS += -O2 -fno-builtin-printf -DUSE_PLIC -DUSE_M_TIME BSP_BASE = ../../bsp include $(BSP_BASE)/env/common.mk diff --git a/software/dhrystone/.gitignore b/software/dhrystone/.gitignore new file mode 100644 index 0000000..eb51a6c --- /dev/null +++ b/software/dhrystone/.gitignore @@ -0,0 +1 @@ +dhrystone diff --git a/software/dhrystone/Makefile b/software/dhrystone/Makefile index 2058ca1..a55b1ec 100644 --- a/software/dhrystone/Makefile +++ b/software/dhrystone/Makefile @@ -5,10 +5,11 @@ C_SRCS := dhry_stubs.c dhry_printf.c HEADERS := dhry.h DHRY_SRCS := dhry_1.c dhry_2.c -DHRY_CFLAGS := -O2 -DTIME -fno-inline -Wno-implicit +DHRY_CFLAGS := -O2 -DTIME -fno-inline -fno-builtin-printf -Wno-implicit XLEN ?= 32 -CFLAGS := -Dscanf=dhry_scanf -Dprintf=dhry_printf -Os -fno-common +CFLAGS := -Os -fno-common +LDFLAGS := -Wl,--wrap=scanf -Wl,--wrap=printf DHRY_OBJS := $(patsubst %.c,%.o,$(DHRY_SRCS)) LINK_OBJS := $(DHRY_OBJS) diff --git a/software/dhrystone/dhry_printf.c b/software/dhrystone/dhry_printf.c index 1fdaac4..025d231 100644 --- a/software/dhrystone/dhry_printf.c +++ b/software/dhrystone/dhry_printf.c @@ -246,7 +246,7 @@ static void vprintfmt(void (*putch)(int, void**), void **putdat, const char *fmt } } -int printf(const char* fmt, ...) +int __wrap_printf(const char* fmt, ...) { va_list ap; va_start(ap, fmt); @@ -257,7 +257,7 @@ int printf(const char* fmt, ...) return 0; // incorrect return value, but who cares, anyway? } -int sprintf(char* str, const char* fmt, ...) +int __wrap_sprintf(char* str, const char* fmt, ...) { va_list ap; char* str0 = str; diff --git a/software/dhrystone/dhry_stubs.c b/software/dhrystone/dhry_stubs.c index d384bf1..d3bd14c 100644 --- a/software/dhrystone/dhry_stubs.c +++ b/software/dhrystone/dhry_stubs.c @@ -12,20 +12,7 @@ long time(void) } // set the number of dhrystone iterations -void scanf(const char* fmt, int* n) +void __wrap_scanf(const char* fmt, int* n) { *n = 1500000; } - -// simple memory allocator -void* malloc(unsigned long sz) -{ - extern void* sbrk(long); - void* res = sbrk(sz); - if ((long)res == -1) - return 0; - return res; -} - -// simple memory deallocator -void free(void* ptr) {} diff --git a/software/hello/.gitignore b/software/hello/.gitignore new file mode 100644 index 0000000..ce01362 --- /dev/null +++ b/software/hello/.gitignore @@ -0,0 +1 @@ +hello diff --git a/software/hello/Makefile b/software/hello/Makefile index c0c5c55..058621c 100644 --- a/software/hello/Makefile +++ b/software/hello/Makefile @@ -1,6 +1,6 @@ TARGET = hello C_SRCS += hello.c -CFLAGS += -fno-builtin-printf +CFLAGS += -O2 -fno-builtin-printf BSP_BASE = ../../bsp include $(BSP_BASE)/env/common.mk -- cgit v1.2.3