From 0f23aeed142a47c74ce4e636bce5260f2d294d2f Mon Sep 17 00:00:00 2001 From: Palmer Dabbelt Date: Tue, 21 Nov 2017 10:22:24 -0800 Subject: Implement a smaller puts The e31's init.c calls puts intsead of printf, which oddly enough is a lot bigger: since we wrap printf, puts pulls in a lot of newlib. This adds a wrapped puts so it's very small. --- bsp/libwrap/libwrap.mk | 3 ++- bsp/libwrap/sys/puts.c | 26 ++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 bsp/libwrap/sys/puts.c (limited to 'bsp/libwrap') diff --git a/bsp/libwrap/libwrap.mk b/bsp/libwrap/libwrap.mk index 313ed00..ce224ac 100644 --- a/bsp/libwrap/libwrap.mk +++ b/bsp/libwrap/libwrap.mk @@ -26,6 +26,7 @@ LIBWRAP_SRCS := \ sys/times.c \ sys/sbrk.c \ sys/_exit.c \ + sys/puts.c \ misc/write_hex.c LIBWRAP_SRCS := $(foreach f,$(LIBWRAP_SRCS),$(LIBWRAP_DIR)/$(f)) @@ -34,7 +35,7 @@ LIBWRAP_OBJS := $(LIBWRAP_SRCS:.c=.o) LIBWRAP_SYMS := malloc free \ open lseek read write fstat stat close link unlink \ execve fork getpid kill wait \ - isatty times sbrk _exit + isatty times sbrk _exit puts LIBWRAP := libwrap.a diff --git a/bsp/libwrap/sys/puts.c b/bsp/libwrap/sys/puts.c new file mode 100644 index 0000000..f77f1a3 --- /dev/null +++ b/bsp/libwrap/sys/puts.c @@ -0,0 +1,26 @@ +/* See LICENSE of license details. */ + +#include +#include +#include +#include + +#include "platform.h" +#include "stub.h" + +int __wrap_puts(const char *s) +{ + while (*s != '\0') { + while (UART0_REG(UART_REG_TXFIFO) & 0x80000000) ; + UART0_REG(UART_REG_TXFIFO) = *s; + + if (*s == '\n') { + while (UART0_REG(UART_REG_TXFIFO) & 0x80000000) ; + UART0_REG(UART_REG_TXFIFO) = '\r'; + } + + ++s; + } + + return 0; +} -- cgit v1.2.3