commit d996b4b37aafdb339941459b9d5a4b1445fd9cb7
parent edce04c86b297ce915e51ad6690f4e92a8e220aa
Author: Dimitris Papastamos <dimitris.papastamos@arm.com>
Date: Wed, 21 Nov 2018 13:52:39 +0000
Merge changes from topic 'rv/dlang'
* changes:
[libk] Add kvprint()
[libk] Add kputs()
[arch/amd64] Split the list of object files
[libk] Add kputc()
[libk] Unify all the kgetc() functions
Diffstat:
14 files changed, 80 insertions(+), 30 deletions(-)
diff --git a/arch/amd64/Makefile b/arch/amd64/Makefile
@@ -2,8 +2,19 @@
PROJECTDIR = ../..
include $(PROJECTDIR)/scripts/rules.mk
-ROMOBJS = crt-$(SYS).o arch.o rom.o bss.o $(DLANG) $(SRCDIR)/romfw/builtin.o
-RAMOBJS = crt-$(SYS).o arch.o ram.o bss.o $(DLANG) $(SRCDIR)/ramfw/builtin.o
+ROMOBJS = crt-$(SYS).o \
+ arch.o \
+ rom.o \
+ bss.o \
+ $(DLANG) \
+ $(SRCDIR)/romfw/builtin.o \
+
+RAMOBJS = crt-$(SYS).o \
+ arch.o \
+ ram.o \
+ bss.o \
+ $(DLANG) \
+ $(SRCDIR)/ramfw/builtin.o \
TARGET = $(BINDIR)/romfw.elf $(BINDIR)/ramfw.elf
diff --git a/include/rcode.h b/include/rcode.h
@@ -1,4 +1,5 @@
#include <setjmp.h>
+#include <stdarg.h>
#include <stddef.h>
#include <stdint.h>
@@ -196,6 +197,9 @@ extern int kprint(const char *fmt, ...) KPRINTFMT;
extern int ksnprint(char *str, size_t len, const char *fmt, ...) KSNPRINTFMT;
extern char *kgetln(char *s, int n);
extern int kgetc(void);
+extern int kputc(int ch);
+extern int kputs(const char *s);
+extern int kvprint(const char *fmt, va_list va);
/* architectural functions */
extern _Noreturn void dohalt(void);
diff --git a/src/libk/Makefile b/src/libk/Makefile
@@ -5,7 +5,10 @@ include $(PROJECTDIR)/scripts/rules.mk
OBJS = doprnt.o \
kprint.o \
ksnprint.o \
- kgetc-$(SYS).o \
+ kgetc.o \
+ kputc.o \
+ kputs.o \
+ kvprint.o \
kgetln.o \
__assert.o \
diff --git a/src/libk/doprnt.c b/src/libk/doprnt.c
@@ -1,5 +1,6 @@
#include <stdarg.h>
#include <stddef.h>
+#include <rcode.h>
#include <rcode.h>
@@ -15,8 +16,7 @@ putch(Stream *sp, int c)
if (sp->cnt < sp->len)
sp->base[sp->cnt++] = c;
} else {
- ch = c;
- _write(sp->fd, &ch, 1);
+ kputc(ch);
sp->cnt++;
}
}
diff --git a/src/libk/kgetc-dragonfly.c b/src/libk/kgetc-dragonfly.c
@@ -1 +0,0 @@
-#include "kgetc-posix.c"
diff --git a/src/libk/kgetc-linux.c b/src/libk/kgetc-linux.c
@@ -1 +0,0 @@
-#include "kgetc-posix.c"
diff --git a/src/libk/kgetc-netbsd.c b/src/libk/kgetc-netbsd.c
@@ -1 +0,0 @@
-#include "kgetc-posix.c"
diff --git a/src/libk/kgetc-openbsd.c b/src/libk/kgetc-openbsd.c
@@ -1 +0,0 @@
-#include "kgetc-posix.c"
diff --git a/src/libk/kgetc-posix.c b/src/libk/kgetc-posix.c
@@ -1,7 +0,0 @@
-#include <stdio.h>
-
-int
-kgetc(void)
-{
- return getc(stdin);
-}
diff --git a/src/libk/kgetc-rcode.c b/src/libk/kgetc-rcode.c
@@ -1,14 +0,0 @@
-#include <stdio.h>
-
-#include <uart.h>
-#include <rcode.h>
-
-#include "../libc/syscall.h"
-
-int
-kgetc(void)
-{
- char ch;
-
- return (_read(0, &ch, 1) < 0) ? EOF : 1;
-}
diff --git a/src/libk/kgetc.c b/src/libk/kgetc.c
@@ -0,0 +1,13 @@
+#include <stdio.h>
+
+#include <rcode.h>
+
+#include "../libc/syscall.h"
+
+int
+kgetc(void)
+{
+ char ch;
+
+ return (_read(0, &ch, 1) < 0) ? EOF : ch;
+}
diff --git a/src/libk/kputc.c b/src/libk/kputc.c
@@ -0,0 +1,13 @@
+#include <stdio.h>
+
+#include <rcode.h>
+
+#include "../libc/syscall.h"
+
+int
+kputc(int ch)
+{
+ char c = ch;
+
+ return (_write(0, &c, 1) < 0) ? EOF : 1;
+}
diff --git a/src/libk/kputs.c b/src/libk/kputs.c
@@ -0,0 +1,11 @@
+#include <stdio.h>
+
+#include <rcode.h>
+
+int
+kputs(const char *s)
+{
+ for ( ; *s && kputc(*s) != EOF; ++s)
+ ;
+ return (*s != '\0') ? EOF : 0;
+}
diff --git a/src/libk/kvprint.c b/src/libk/kvprint.c
@@ -0,0 +1,20 @@
+#include <stdarg.h>
+#include <stddef.h>
+
+#include "libk.h"
+
+int
+kvprint(const char *fmt, va_list va)
+{
+ va_list ap;
+ Stream stream;
+
+ va_copy(ap, va);
+ stream.fd = 1;
+ stream.base = NULL;
+ stream.len = 0;
+ stream.cnt = 0;
+ doprnt(&stream, fmt, ap);
+
+ return stream.cnt;
+}