9os

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit 41f18fe7658b8531fb90aff953130edb13cd52d6
parent 23d9f6e3e69626b32799f28f116f0cf9b3edd0ba
Author: Roberto Vargas <roberto.vargas@arm.com>
Date:   Thu,  8 Nov 2018 11:39:17 +0000

[libk] Separate k functions from libc

Change-Id: I171eb7e175d0202aab7fe1efd5c31d319d55e544

Diffstat:
March/amd64/Makefile | 2+-
March/arm64/Makefile | 2+-
Msrc/Makefile | 2+-
Msrc/libc/stdio/Makefile | 1-
Dsrc/libc/stdio/printk.c | 118-------------------------------------------------------------------------------
Asrc/libk/printk.c | 118+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
6 files changed, 121 insertions(+), 122 deletions(-)

diff --git a/arch/amd64/Makefile b/arch/amd64/Makefile @@ -6,7 +6,7 @@ ROMOBJS = crt-$(SYS).o arch.o rom.o $(DEBUGLANG) $(SRCDIR)/romfw/builtin.o RAMOBJS = crt-$(SYS).o arch.o rom.o $(DEBUGLANG) $(SRCDIR)/ramfw/builtin.o TARGET = $(BINDIR)/romfw.elf $(BINDIR)/ramfw.elf -LIBS = -lhdl -lrmu -lc +LIBS = -lhdl -lrmu -lk -lc LIBDEP = $(LIBDIR)/libhdl.a $(LIBDIR)/librmu.a $(LIBDIR)/libc.a diff --git a/arch/arm64/Makefile b/arch/arm64/Makefile @@ -21,7 +21,7 @@ RAMOBJS = ram-crt-$(SYS).o \ $(SRCDIR)/ramfw/builtin.o \ TARGET = $(BINDIR)/romfw.bin $(BINDIR)/ramfw.bin -LIBS = -lhdl -lrmu -lc +LIBS = -lhdl -lrmu -lk -lc LIBDEP = $(LIBDIR)/libhdl.a $(LIBDIR)/librmu.a $(LIBDIR)/libc.a all: $(TARGET) diff --git a/src/Makefile b/src/Makefile @@ -2,7 +2,7 @@ PROJECTDIR=.. include $(PROJECTDIR)/scripts/rules.mk -LIBS = libc librmu libtypes libhdl +LIBS = libk libc librmu libtypes libhdl IMGS = ramfw romfw DIRS = $(LIBS) $(IMGS) debuglang OBJS = rmc.o ecstr.o diff --git a/src/libc/stdio/Makefile b/src/libc/stdio/Makefile @@ -28,7 +28,6 @@ OBJS = __getc.o\ gets.o\ perror.o\ printf.o\ - printk.o\ putc.o\ putchar.o\ puts.o\ diff --git a/src/libc/stdio/printk.c b/src/libc/stdio/printk.c @@ -1,118 +0,0 @@ - -#include <stdarg.h> -#include <stddef.h> - -#include "../syscall.h" - -static void -putch(int c) -{ - char ch = c; - _write(1, &ch, 1); -} - -static void -printn(long long n, int base, int sign) -{ - int first, d; - unsigned long long div; - const static char digits[] = "0123456789ABCDEF"; - - switch (base) { - case 8: - div = 01000000000000000000000u; - break; - case 10: - div = 10000000000000000000u; - break; - case 16: - div = 0x1000000000000000u; - break; - } - - if (sign && n < 0) { - n = -n; - putch('-'); - } - - for (first = 1; div > 0; div /= base) { - d = n / div; - if (d == 0 && first && div != 1) - continue; - n -= d * div; - putch(digits[d]); - first = 0; - } -} - -static long long -getnum(va_list *va, int size) -{ - switch (size) { - case 0: - return va_arg(*va, int); - case 1: - return va_arg(*va, long); - case 2: - return va_arg(*va, long long); - case 3: - default: - return (long long) va_arg(*va, void *); - } -} - -void -printk(const char * restrict fmt, ...) -{ - char c; - va_list va; - int base, sign, size; - char *s; - - va_start(va, fmt); - while (( c = *fmt++) != '\0') { - if (c != '%') { - putch(c); - continue; - } - - sign = 0; - size = 0; -flags: - switch (c = *fmt++) { - case 'l': - size++; - goto flags; - case 'o': - base = 8; - goto print_number; - case 'd': - sign = 1; - case 'u': - base = 10; - goto print_number; - case 'p': - size = 3; - case 'X': - case 'x': - base = 16; - print_number: - printn(getnum(&va, size), base, sign); - break; - case 's': - for (s = va_arg(va, char *); *s; s++) - putch(*s); - break; - case 'c': - c = va_arg(va, int); - case '%': - putch(c); - break; - case '\0': - goto out_loop; - } - } - -out_loop: - va_end(va); -} diff --git a/src/libk/printk.c b/src/libk/printk.c @@ -0,0 +1,118 @@ + +#include <stdarg.h> +#include <stddef.h> + +#include "../libc/syscall.h" + +static void +putch(int c) +{ + char ch = c; + _write(1, &ch, 1); +} + +static void +printn(long long n, int base, int sign) +{ + int first, d; + unsigned long long div; + const static char digits[] = "0123456789ABCDEF"; + + switch (base) { + case 8: + div = 01000000000000000000000u; + break; + case 10: + div = 10000000000000000000u; + break; + case 16: + div = 0x1000000000000000u; + break; + } + + if (sign && n < 0) { + n = -n; + putch('-'); + } + + for (first = 1; div > 0; div /= base) { + d = n / div; + if (d == 0 && first && div != 1) + continue; + n -= d * div; + putch(digits[d]); + first = 0; + } +} + +static long long +getnum(va_list *va, int size) +{ + switch (size) { + case 0: + return va_arg(*va, int); + case 1: + return va_arg(*va, long); + case 2: + return va_arg(*va, long long); + case 3: + default: + return (long long) va_arg(*va, void *); + } +} + +void +printk(const char * restrict fmt, ...) +{ + char c; + va_list va; + int base, sign, size; + char *s; + + va_start(va, fmt); + while (( c = *fmt++) != '\0') { + if (c != '%') { + putch(c); + continue; + } + + sign = 0; + size = 0; +flags: + switch (c = *fmt++) { + case 'l': + size++; + goto flags; + case 'o': + base = 8; + goto print_number; + case 'd': + sign = 1; + case 'u': + base = 10; + goto print_number; + case 'p': + size = 3; + case 'X': + case 'x': + base = 16; + print_number: + printn(getnum(&va, size), base, sign); + break; + case 's': + for (s = va_arg(va, char *); *s; s++) + putch(*s); + break; + case 'c': + c = va_arg(va, int); + case '%': + putch(c); + break; + case '\0': + goto out_loop; + } + } + +out_loop: + va_end(va); +}