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:
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