11#include <sys/kassert.h>
13#include "../dev/console.h"
16#define getuint(ap, lflag) \
17 (lflag == 8) ? va_arg(ap, uint64_t) : \
18 (lflag == 4) ? va_arg(ap, uint32_t) : \
19 (lflag == 2) ? va_arg(ap, uint32_t) : \
20 (lflag == 1) ? va_arg(ap, uint32_t) : 0
23#define getint(ap, lflag) \
24 (lflag == 8) ? va_arg(ap, int64_t) : \
25 (lflag == 4) ? va_arg(ap, int32_t) : \
26 (lflag == 2) ? va_arg(ap, int32_t) : \
27 (lflag == 1) ? va_arg(ap, int32_t) : 0
32static void printnum(
void (*func)(
int,
void*),
void *handle,
44 }
while (num /=
base);
49 }
while (num /=
base);
53 spaces = width - (p -
buf);
54 if (padc ==
' ' || padc ==
'0') {
65 func((
int)*p, handle);
84 int lflag, width, padc;
87 while ((ch = *(
unsigned char *)fmt++) !=
'%') {
88 if (ch ==
'\0')
return -1;
96 switch (ch = *(
unsigned char *)fmt++) {
114 width = 10 * width + ch -
'0';
116 if (ch <
'0' || ch >
'9')
129 func(
va_arg(ap,
int) & 0xff, handle);
136 spaces = width -
strlen(p);
168 printnum(func, handle, unum, 10, width, padc);
172 printnum(func, handle, unum, 10, width, padc);
176 printnum(func, handle, unum, 8, width, padc);
179 unum = (
unsigned long)
va_arg(ap,
void *);
180 printnum(func, handle, unum, 8, width, padc);
184 printnum(func, handle, unum, 16, width, padc);
188 printnum(func, handle, unum, -16, width, padc);
231 kprintf(
"PC %lx FP %lx\n", __builtin_return_address(0), __builtin_frame_address(0));
232 kprintf(
"PC %lx FP %lx\n", __builtin_return_address(1), __builtin_frame_address(1));
233 kprintf(
"PC %lx FP %lx\n", __builtin_return_address(2), __builtin_frame_address(2));
234 kprintf(
"PC %lx FP %lx\n", __builtin_return_address(3), __builtin_frame_address(3));
235 kprintf(
"PC %lx FP %lx\n", __builtin_return_address(4), __builtin_frame_address(4));
236 kprintf(
"PC %lx FP %lx\n", __builtin_return_address(5), __builtin_frame_address(5));
void Console_Putc(char ch)
#define getuint(ap, lflag)
static void printnum(void(*func)(int, void *), void *handle, uint64_t num, int base, int width, int padc)
static int kvprintf(char const *fmt, void(*func)(int, void *), void *handle, va_list ap)
#define getint(ap, lflag)
static const char * numberstring_upper
static const char * numberstring_lower
#define va_start(ap, last)
__builtin_va_list va_list
size_t strlen(const char *str)
int kprintf(const char *fmt,...)
void Debug_Assert(const char *fmt,...)
void consoleputc(int c, void *handle)
void Panic(const char *str)