x86_64: adjust formatting

This commit is contained in:
2026-02-08 11:36:16 +00:00
parent 4051265876
commit 00ea2b1b3b
7 changed files with 366 additions and 331 deletions

View File

@@ -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);
}