9os

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

commit 4d650d8e49e406f1f2f1dba6caa63b530dcf5788
parent 34670bcdf693abf2e457cdae6759fc6920747efc
Author: Roberto Vargas <roberto.vargas@arm.com>
Date:   Mon, 26 Nov 2018 11:11:04 +0000

[libk] Add basic field size support

This patch forces to print the 16 digits of a
64 bit number.

Change-Id: If3e08b54be84e6a0b646e62225a3fba7054ee3fb

Diffstat:
Msrc/libk/doprnt.c | 15+++++++++------
Msrc/rmc.c | 24++++++++++++------------
2 files changed, 21 insertions(+), 18 deletions(-)

diff --git a/src/libk/doprnt.c b/src/libk/doprnt.c @@ -19,7 +19,7 @@ putch(Stream *sp, int c) } static void -printn(Stream *sp, long long n, int base, int sign) +printn(Stream *sp, long long n, int base, int sign, int fill) { int first, d; unsigned long long div; @@ -45,7 +45,7 @@ printn(Stream *sp, long long n, int base, int sign) for (first = 1; div > 0; div /= base) { d = n / div; - if (d == 0 && first && div != 1) + if (d == 0 && first && div != 1 && !fill) continue; n -= d * div; putch(sp, digits[d]); @@ -76,7 +76,7 @@ doprnt(Stream *sp, const char *fmt, va_list va) { char c; va_list va2; - int base, sign, size; + int fill, base, sign, size; char *s; va_copy(va2, va); @@ -86,10 +86,12 @@ doprnt(Stream *sp, const char *fmt, va_list va) continue; } - sign = 0; - size = 0; + fill = size = sign = 0; flags: switch (c = *fmt++) { + case '0': + fill = 1; + goto flags; case 'l': size++; goto flags; @@ -106,11 +108,12 @@ flags: goto print_number; case 'p': size = 3; + fill = 1; case 'X': case 'x': base = 16; print_number: - printn(sp, getnum(&va2, size), base, sign); + printn(sp, getnum(&va2, size), base, sign, fill); break; case 's': for (s = va_arg(va2, char *); *s; s++) diff --git a/src/rmc.c b/src/rmc.c @@ -7,16 +7,15 @@ static void dumpregs(struct trapframe *fp) { - kprint("x0=%llx\tx1=%llx\tx2=%llx\tx3=%llx\n" - "x4=%llx\tx5=%llx\tx6=%llx\tx7=%llx\n" - "x8=%llx\tx9=%llx\tx10=%llx\tx11=%llx\n" - "x12=%llx\tx13=%llx\tx14=%llx\tx15=%llx\n" - "x16=%llx\tx17=%llx\tx18=%llx\tx19=%llx\n" - "x20=%llx\tx21=%llx\tx22=%llx\tx23=%llx\n" - "x24=%llx\tx25=%llx\tx26=%llx\tx27=%llx\n" - "x28=%llx\tx29=%llx\tx30=%llx\telr=%p\n" - "spsr=%llx\tesr=%llx\tfar=%llx\n" - "sp=%p\n", + kprint("x0=%0llx\tx1=%0llx\nx2=%0llx\tx3=%0llx\n" + "x4=%0llx\tx5=%0llx\nx6=%0llx\tx7=%0llx\n" + "x8=%0llx\tx9=%0llx\nx10=%0llx\tx11=%0llx\n" + "x12=%0llx\tx13=%0llx\nx14=%0llx\tx15=%0llx\n" + "x16=%0llx\tx17=%0llx\nx18=%0llx\tx19=%0llx\n" + "x20=%0llx\tx21=%0llx\nx22=%0llx\tx23=%0llx\n" + "x24=%0llx\tx25=%0llx\nx26=%0llx\tx27=%0llx\n" + "x28=%0llx\tx29=%0llx\nx30=%0llx\telr=%p\n" + "spsr=%0llx\tesr=%0llx\nfar=%0llx\tsp=%p\n", fp->x0, fp->x1, fp->x2, fp->x3, fp->x4, fp->x5, fp->x6, fp->x7, fp->x8, fp->x9, fp->x10, fp->x11, @@ -36,6 +35,7 @@ backtrace(struct trapframe *fp) if (!bss->backtrace) return; kprint("backtrace:\n"); + kprint("%llx\n", fp->x30); for (bp = (void **) fp->x29; *bp; bp = (void **) *bp) kprint("%p\n", bp[1]); } @@ -43,14 +43,14 @@ backtrace(struct trapframe *fp) static void dumpstack(struct trapframe *fp) { - int *sp, i; + long long *sp, i; if (!bss->dumpstack) return; kprint("stack dump:\n"); sp = fp->sp; for (i = 1; i <= 16; i++) - kprint("%x%c", *sp++, (i % 4 == 0) ? '\n' : ' '); + kprint("%0llx%c", *sp++, (i % 4 == 0) ? '\n' : ' '); } static void