x86_64: adjust formatting
This commit is contained in:
@@ -1,24 +1,25 @@
|
||||
#include "mango/machine/panic.h"
|
||||
#include "mango/vm.h"
|
||||
#include <mango/printk.h>
|
||||
#include <mango/libc/stdio.h>
|
||||
#include <arch/irq.h>
|
||||
#include <mango/libc/stdio.h>
|
||||
#include <mango/machine/cpu.h>
|
||||
#include <mango/machine/panic.h>
|
||||
#include <mango/printk.h>
|
||||
#include <mango/vm.h>
|
||||
|
||||
#define R_CF 0
|
||||
#define R_PF 2
|
||||
#define R_AF 4
|
||||
#define R_ZF 6
|
||||
#define R_SF 7
|
||||
#define R_TF 8
|
||||
#define R_IF 9
|
||||
#define R_DF 10
|
||||
#define R_OF 11
|
||||
#define R_NT 14
|
||||
#define R_VM 17
|
||||
#define R_AC 18
|
||||
#define R_CF 0
|
||||
#define R_PF 2
|
||||
#define R_AF 4
|
||||
#define R_ZF 6
|
||||
#define R_SF 7
|
||||
#define R_TF 8
|
||||
#define R_IF 9
|
||||
#define R_DF 10
|
||||
#define R_OF 11
|
||||
#define R_NT 14
|
||||
#define R_VM 17
|
||||
#define R_AC 18
|
||||
#define R_VIF 19
|
||||
#define R_VIP 20
|
||||
#define R_ID 21
|
||||
#define R_ID 21
|
||||
#define R_MAX 21
|
||||
|
||||
struct stack_frame {
|
||||
@@ -82,7 +83,11 @@ static void print_rflags(uintptr_t rflags)
|
||||
if (rflags & (1 << i)) {
|
||||
const char *name = pf_rfl_name(i);
|
||||
if (name) {
|
||||
buf_i += snprintf(buf + buf_i, sizeof(buf) - buf_i, " %s", name);
|
||||
buf_i += snprintf(
|
||||
buf + buf_i,
|
||||
sizeof(buf) - buf_i,
|
||||
" %s",
|
||||
name);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -96,25 +101,38 @@ void ml_print_cpu_state(struct ml_cpu_context *ctx)
|
||||
printk("cpu state:");
|
||||
if (ctx) {
|
||||
printk(" rax %016llx rbx %016llx rcx %016llx",
|
||||
ctx->rax, ctx->rbx, ctx->rcx);
|
||||
ctx->rax,
|
||||
ctx->rbx,
|
||||
ctx->rcx);
|
||||
printk(" rdx %016llx rsi %016llx rdi %016llx",
|
||||
ctx->rdx, ctx->rsi, ctx->rdi);
|
||||
ctx->rdx,
|
||||
ctx->rsi,
|
||||
ctx->rdi);
|
||||
printk(" rsp %016llx rbp %016llx r8 %016llx",
|
||||
ctx->rsp, ctx->rbp, ctx->r8);
|
||||
ctx->rsp,
|
||||
ctx->rbp,
|
||||
ctx->r8);
|
||||
printk(" r9 %016llx r10 %016llx r11 %016llx",
|
||||
ctx->r9, ctx->r10, ctx->r11);
|
||||
ctx->r9,
|
||||
ctx->r10,
|
||||
ctx->r11);
|
||||
printk(" r12 %016llx r13 %016llx r14 %016llx",
|
||||
ctx->r12, ctx->r13, ctx->r14);
|
||||
ctx->r12,
|
||||
ctx->r13,
|
||||
ctx->r14);
|
||||
printk(" r15 %016llx rip %016llx cs %04x ss %04x",
|
||||
ctx->r15, ctx->rip, ctx->cs, ctx->ss);
|
||||
ctx->r15,
|
||||
ctx->rip,
|
||||
ctx->cs,
|
||||
ctx->ss);
|
||||
print_rflags(ctx->rflags);
|
||||
}
|
||||
|
||||
uintptr_t cr0 = 0, cr2 = 0, cr3 = 0, cr4 = 0;
|
||||
asm volatile("mov %%cr0, %%rax" : "=a" (cr0));
|
||||
asm volatile("mov %%cr2, %%rax" : "=a" (cr2));
|
||||
asm volatile("mov %%cr3, %%rax" : "=a" (cr3));
|
||||
asm volatile("mov %%cr4, %%rax" : "=a" (cr4));
|
||||
asm volatile("mov %%cr0, %%rax" : "=a"(cr0));
|
||||
asm volatile("mov %%cr2, %%rax" : "=a"(cr2));
|
||||
asm volatile("mov %%cr3, %%rax" : "=a"(cr3));
|
||||
asm volatile("mov %%cr4, %%rax" : "=a"(cr4));
|
||||
printk(" cr0 %016llx cr2 %016llx", cr0, cr2);
|
||||
printk(" cr3 %016llx cr4 %016llx", cr3, cr4);
|
||||
}
|
||||
@@ -124,22 +142,27 @@ static void print_stack_item(uintptr_t addr)
|
||||
if (!addr) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
char buf[64];
|
||||
size_t i = 0;
|
||||
|
||||
|
||||
i += snprintf(buf, sizeof(buf), " [<%p>] ", addr);
|
||||
|
||||
|
||||
size_t offset = 0;
|
||||
char name[128];
|
||||
int found = -1;
|
||||
|
||||
|
||||
if (found == 0 && name[0] != '\0') {
|
||||
i += snprintf(buf + i, sizeof(buf) - i, "%s+0x%lx", name, offset);
|
||||
i += snprintf(
|
||||
buf + i,
|
||||
sizeof(buf) - i,
|
||||
"%s+0x%lx",
|
||||
name,
|
||||
offset);
|
||||
} else {
|
||||
i += snprintf(buf + i, sizeof(buf) - i, "?");
|
||||
}
|
||||
|
||||
|
||||
printk("%s", buf);
|
||||
}
|
||||
|
||||
@@ -147,20 +170,19 @@ static void print_stack_trace(uintptr_t ip, uintptr_t *bp)
|
||||
{
|
||||
struct stack_frame *stk = (struct stack_frame *)bp;
|
||||
printk("call trace:");
|
||||
|
||||
|
||||
print_stack_item(ip);
|
||||
|
||||
int max_frames = 10, current_frame = 0;
|
||||
while (1) {
|
||||
if (!vm_virt_to_phys(stk) ||
|
||||
bp == NULL ||
|
||||
current_frame > max_frames) {
|
||||
if (!vm_virt_to_phys(stk) || bp == NULL
|
||||
|| current_frame > max_frames) {
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
uintptr_t addr = stk->rip;
|
||||
print_stack_item(addr);
|
||||
|
||||
|
||||
stk = (struct stack_frame *)stk->rbp;
|
||||
current_frame++;
|
||||
}
|
||||
@@ -169,7 +191,7 @@ static void print_stack_trace(uintptr_t ip, uintptr_t *bp)
|
||||
void ml_print_stack_trace(uintptr_t ip)
|
||||
{
|
||||
uintptr_t *bp;
|
||||
asm volatile("mov %%rbp, %0" : "=r" (bp));
|
||||
asm volatile("mov %%rbp, %0" : "=r"(bp));
|
||||
print_stack_trace(ip, bp);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user