x86_64: adjust formatting
This commit is contained in:
@@ -3,6 +3,8 @@
|
|||||||
|
|
||||||
#include <arch/gdt.h>
|
#include <arch/gdt.h>
|
||||||
#include <arch/irq.h>
|
#include <arch/irq.h>
|
||||||
|
#include <arch/tss.h>
|
||||||
|
#include <mango/types.h>
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
@@ -13,6 +15,12 @@ extern "C" {
|
|||||||
#define ml_cpu_block_get_id(p) ((p)->c_cpu_id)
|
#define ml_cpu_block_get_id(p) ((p)->c_cpu_id)
|
||||||
#define ml_cpu_block_get_data(p) ((p)->c_data)
|
#define ml_cpu_block_get_data(p) ((p)->c_data)
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
#define ml_read_sp(sp, bp) \
|
||||||
|
asm volatile("mov %%rsp, %0" : "=r"(sp)); \
|
||||||
|
asm volatile("mov %%rbp, %0" : "=r"(bp));
|
||||||
|
#endif
|
||||||
|
|
||||||
struct cpu_data;
|
struct cpu_data;
|
||||||
|
|
||||||
typedef struct ml_cpu_block {
|
typedef struct ml_cpu_block {
|
||||||
|
|||||||
@@ -12,8 +12,9 @@ extern "C" {
|
|||||||
#define __X(x) __X2(x)
|
#define __X(x) __X2(x)
|
||||||
|
|
||||||
#define __define_initcall(fn, id) \
|
#define __define_initcall(fn, id) \
|
||||||
static initcall_t __initcall_##fn##id __used \
|
static initcall_t __initcall_##fn##id __used __section( \
|
||||||
__section(".initcall" __X(id) ".init") = (fn)
|
".initcall" __X(id) ".init") \
|
||||||
|
= (fn)
|
||||||
|
|
||||||
extern int ml_init(uintptr_t arg);
|
extern int ml_init(uintptr_t arg);
|
||||||
|
|
||||||
|
|||||||
@@ -102,16 +102,20 @@ int ml_init(uintptr_t arg)
|
|||||||
put_cpu(this_cpu);
|
put_cpu(this_cpu);
|
||||||
|
|
||||||
struct vm_zone_descriptor vm_zones[] = {
|
struct vm_zone_descriptor vm_zones[] = {
|
||||||
{.zd_id = VM_ZONE_DMA,
|
{
|
||||||
|
.zd_id = VM_ZONE_DMA,
|
||||||
.zd_node = 0,
|
.zd_node = 0,
|
||||||
.zd_name = "dma",
|
.zd_name = "dma",
|
||||||
.zd_base = 0x00,
|
.zd_base = 0x00,
|
||||||
.zd_limit = 0xffffff},
|
.zd_limit = 0xffffff,
|
||||||
{.zd_id = VM_ZONE_NORMAL,
|
},
|
||||||
|
{
|
||||||
|
.zd_id = VM_ZONE_NORMAL,
|
||||||
.zd_node = 0,
|
.zd_node = 0,
|
||||||
.zd_name = "normal",
|
.zd_name = "normal",
|
||||||
.zd_base = 0x1000000,
|
.zd_base = 0x1000000,
|
||||||
.zd_limit = UINTPTR_MAX},
|
.zd_limit = UINTPTR_MAX,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
vm_bootstrap(vm_zones, sizeof vm_zones / sizeof vm_zones[0]);
|
vm_bootstrap(vm_zones, sizeof vm_zones / sizeof vm_zones[0]);
|
||||||
|
|||||||
@@ -194,263 +194,263 @@ void unhook_irq(enum irq_vector vec, struct irq_hook *hook)
|
|||||||
queue_delete(hook_queue, &hook->irq_entry);
|
queue_delete(hook_queue, &hook->irq_entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
extern void _isr0();
|
extern void _isr0(void);
|
||||||
extern void _isr1();
|
extern void _isr1(void);
|
||||||
extern void _isr2();
|
extern void _isr2(void);
|
||||||
extern void _isr3();
|
extern void _isr3(void);
|
||||||
extern void _isr4();
|
extern void _isr4(void);
|
||||||
extern void _isr5();
|
extern void _isr5(void);
|
||||||
extern void _isr6();
|
extern void _isr6(void);
|
||||||
extern void _isr7();
|
extern void _isr7(void);
|
||||||
extern void _isr8();
|
extern void _isr8(void);
|
||||||
extern void _isr9();
|
extern void _isr9(void);
|
||||||
extern void _isr10();
|
extern void _isr10(void);
|
||||||
extern void _isr11();
|
extern void _isr11(void);
|
||||||
extern void _isr12();
|
extern void _isr12(void);
|
||||||
extern void _isr13();
|
extern void _isr13(void);
|
||||||
extern void _isr14();
|
extern void _isr14(void);
|
||||||
extern void _isr15();
|
extern void _isr15(void);
|
||||||
extern void _isr16();
|
extern void _isr16(void);
|
||||||
extern void _isr17();
|
extern void _isr17(void);
|
||||||
extern void _isr18();
|
extern void _isr18(void);
|
||||||
extern void _isr19();
|
extern void _isr19(void);
|
||||||
extern void _isr20();
|
extern void _isr20(void);
|
||||||
extern void _isr21();
|
extern void _isr21(void);
|
||||||
extern void _isr22();
|
extern void _isr22(void);
|
||||||
extern void _isr23();
|
extern void _isr23(void);
|
||||||
extern void _isr24();
|
extern void _isr24(void);
|
||||||
extern void _isr25();
|
extern void _isr25(void);
|
||||||
extern void _isr26();
|
extern void _isr26(void);
|
||||||
extern void _isr27();
|
extern void _isr27(void);
|
||||||
extern void _isr28();
|
extern void _isr28(void);
|
||||||
extern void _isr29();
|
extern void _isr29(void);
|
||||||
extern void _isr30();
|
extern void _isr30(void);
|
||||||
extern void _isr31();
|
extern void _isr31(void);
|
||||||
|
|
||||||
extern void _irq0();
|
extern void _irq0(void);
|
||||||
extern void _irq1();
|
extern void _irq1(void);
|
||||||
extern void _irq2();
|
extern void _irq2(void);
|
||||||
extern void _irq3();
|
extern void _irq3(void);
|
||||||
extern void _irq4();
|
extern void _irq4(void);
|
||||||
extern void _irq5();
|
extern void _irq5(void);
|
||||||
extern void _irq6();
|
extern void _irq6(void);
|
||||||
extern void _irq7();
|
extern void _irq7(void);
|
||||||
extern void _irq8();
|
extern void _irq8(void);
|
||||||
extern void _irq9();
|
extern void _irq9(void);
|
||||||
extern void _irq10();
|
extern void _irq10(void);
|
||||||
extern void _irq11();
|
extern void _irq11(void);
|
||||||
extern void _irq12();
|
extern void _irq12(void);
|
||||||
extern void _irq13();
|
extern void _irq13(void);
|
||||||
extern void _irq14();
|
extern void _irq14(void);
|
||||||
extern void _irq15();
|
extern void _irq15(void);
|
||||||
extern void _irq16();
|
extern void _irq16(void);
|
||||||
extern void _irq17();
|
extern void _irq17(void);
|
||||||
extern void _irq18();
|
extern void _irq18(void);
|
||||||
extern void _irq19();
|
extern void _irq19(void);
|
||||||
extern void _irq20();
|
extern void _irq20(void);
|
||||||
extern void _irq21();
|
extern void _irq21(void);
|
||||||
extern void _irq22();
|
extern void _irq22(void);
|
||||||
extern void _irq23();
|
extern void _irq23(void);
|
||||||
extern void _irq24();
|
extern void _irq24(void);
|
||||||
extern void _irq25();
|
extern void _irq25(void);
|
||||||
extern void _irq26();
|
extern void _irq26(void);
|
||||||
extern void _irq27();
|
extern void _irq27(void);
|
||||||
extern void _irq28();
|
extern void _irq28(void);
|
||||||
extern void _irq29();
|
extern void _irq29(void);
|
||||||
extern void _irq30();
|
extern void _irq30(void);
|
||||||
extern void _irq31();
|
extern void _irq31(void);
|
||||||
extern void _irq32();
|
extern void _irq32(void);
|
||||||
extern void _irq33();
|
extern void _irq33(void);
|
||||||
extern void _irq34();
|
extern void _irq34(void);
|
||||||
extern void _irq35();
|
extern void _irq35(void);
|
||||||
extern void _irq36();
|
extern void _irq36(void);
|
||||||
extern void _irq37();
|
extern void _irq37(void);
|
||||||
extern void _irq38();
|
extern void _irq38(void);
|
||||||
extern void _irq39();
|
extern void _irq39(void);
|
||||||
extern void _irq40();
|
extern void _irq40(void);
|
||||||
extern void _irq41();
|
extern void _irq41(void);
|
||||||
extern void _irq42();
|
extern void _irq42(void);
|
||||||
extern void _irq43();
|
extern void _irq43(void);
|
||||||
extern void _irq44();
|
extern void _irq44(void);
|
||||||
extern void _irq45();
|
extern void _irq45(void);
|
||||||
extern void _irq46();
|
extern void _irq46(void);
|
||||||
extern void _irq47();
|
extern void _irq47(void);
|
||||||
extern void _irq48();
|
extern void _irq48(void);
|
||||||
extern void _irq49();
|
extern void _irq49(void);
|
||||||
extern void _irq50();
|
extern void _irq50(void);
|
||||||
extern void _irq51();
|
extern void _irq51(void);
|
||||||
extern void _irq52();
|
extern void _irq52(void);
|
||||||
extern void _irq53();
|
extern void _irq53(void);
|
||||||
extern void _irq54();
|
extern void _irq54(void);
|
||||||
extern void _irq55();
|
extern void _irq55(void);
|
||||||
extern void _irq56();
|
extern void _irq56(void);
|
||||||
extern void _irq57();
|
extern void _irq57(void);
|
||||||
extern void _irq58();
|
extern void _irq58(void);
|
||||||
extern void _irq59();
|
extern void _irq59(void);
|
||||||
extern void _irq60();
|
extern void _irq60(void);
|
||||||
extern void _irq61();
|
extern void _irq61(void);
|
||||||
extern void _irq62();
|
extern void _irq62(void);
|
||||||
extern void _irq63();
|
extern void _irq63(void);
|
||||||
extern void _irq64();
|
extern void _irq64(void);
|
||||||
extern void _irq65();
|
extern void _irq65(void);
|
||||||
extern void _irq66();
|
extern void _irq66(void);
|
||||||
extern void _irq67();
|
extern void _irq67(void);
|
||||||
extern void _irq68();
|
extern void _irq68(void);
|
||||||
extern void _irq69();
|
extern void _irq69(void);
|
||||||
extern void _irq70();
|
extern void _irq70(void);
|
||||||
extern void _irq71();
|
extern void _irq71(void);
|
||||||
extern void _irq72();
|
extern void _irq72(void);
|
||||||
extern void _irq73();
|
extern void _irq73(void);
|
||||||
extern void _irq74();
|
extern void _irq74(void);
|
||||||
extern void _irq75();
|
extern void _irq75(void);
|
||||||
extern void _irq76();
|
extern void _irq76(void);
|
||||||
extern void _irq77();
|
extern void _irq77(void);
|
||||||
extern void _irq78();
|
extern void _irq78(void);
|
||||||
extern void _irq79();
|
extern void _irq79(void);
|
||||||
extern void _irq80();
|
extern void _irq80(void);
|
||||||
extern void _irq81();
|
extern void _irq81(void);
|
||||||
extern void _irq82();
|
extern void _irq82(void);
|
||||||
extern void _irq83();
|
extern void _irq83(void);
|
||||||
extern void _irq84();
|
extern void _irq84(void);
|
||||||
extern void _irq85();
|
extern void _irq85(void);
|
||||||
extern void _irq86();
|
extern void _irq86(void);
|
||||||
extern void _irq87();
|
extern void _irq87(void);
|
||||||
extern void _irq88();
|
extern void _irq88(void);
|
||||||
extern void _irq89();
|
extern void _irq89(void);
|
||||||
extern void _irq90();
|
extern void _irq90(void);
|
||||||
extern void _irq91();
|
extern void _irq91(void);
|
||||||
extern void _irq92();
|
extern void _irq92(void);
|
||||||
extern void _irq93();
|
extern void _irq93(void);
|
||||||
extern void _irq94();
|
extern void _irq94(void);
|
||||||
extern void _irq95();
|
extern void _irq95(void);
|
||||||
extern void _irq96();
|
extern void _irq96(void);
|
||||||
extern void _irq97();
|
extern void _irq97(void);
|
||||||
extern void _irq98();
|
extern void _irq98(void);
|
||||||
extern void _irq99();
|
extern void _irq99(void);
|
||||||
extern void _irq100();
|
extern void _irq100(void);
|
||||||
extern void _irq101();
|
extern void _irq101(void);
|
||||||
extern void _irq102();
|
extern void _irq102(void);
|
||||||
extern void _irq103();
|
extern void _irq103(void);
|
||||||
extern void _irq104();
|
extern void _irq104(void);
|
||||||
extern void _irq105();
|
extern void _irq105(void);
|
||||||
extern void _irq106();
|
extern void _irq106(void);
|
||||||
extern void _irq107();
|
extern void _irq107(void);
|
||||||
extern void _irq108();
|
extern void _irq108(void);
|
||||||
extern void _irq109();
|
extern void _irq109(void);
|
||||||
extern void _irq110();
|
extern void _irq110(void);
|
||||||
extern void _irq111();
|
extern void _irq111(void);
|
||||||
extern void _irq112();
|
extern void _irq112(void);
|
||||||
extern void _irq113();
|
extern void _irq113(void);
|
||||||
extern void _irq114();
|
extern void _irq114(void);
|
||||||
extern void _irq115();
|
extern void _irq115(void);
|
||||||
extern void _irq116();
|
extern void _irq116(void);
|
||||||
extern void _irq117();
|
extern void _irq117(void);
|
||||||
extern void _irq118();
|
extern void _irq118(void);
|
||||||
extern void _irq119();
|
extern void _irq119(void);
|
||||||
extern void _irq120();
|
extern void _irq120(void);
|
||||||
extern void _irq121();
|
extern void _irq121(void);
|
||||||
extern void _irq122();
|
extern void _irq122(void);
|
||||||
extern void _irq123();
|
extern void _irq123(void);
|
||||||
extern void _irq124();
|
extern void _irq124(void);
|
||||||
extern void _irq125();
|
extern void _irq125(void);
|
||||||
extern void _irq126();
|
extern void _irq126(void);
|
||||||
extern void _irq127();
|
extern void _irq127(void);
|
||||||
extern void _irq128();
|
extern void _irq128(void);
|
||||||
extern void _irq129();
|
extern void _irq129(void);
|
||||||
extern void _irq130();
|
extern void _irq130(void);
|
||||||
extern void _irq131();
|
extern void _irq131(void);
|
||||||
extern void _irq132();
|
extern void _irq132(void);
|
||||||
extern void _irq133();
|
extern void _irq133(void);
|
||||||
extern void _irq134();
|
extern void _irq134(void);
|
||||||
extern void _irq135();
|
extern void _irq135(void);
|
||||||
extern void _irq136();
|
extern void _irq136(void);
|
||||||
extern void _irq137();
|
extern void _irq137(void);
|
||||||
extern void _irq138();
|
extern void _irq138(void);
|
||||||
extern void _irq139();
|
extern void _irq139(void);
|
||||||
extern void _irq140();
|
extern void _irq140(void);
|
||||||
extern void _irq141();
|
extern void _irq141(void);
|
||||||
extern void _irq142();
|
extern void _irq142(void);
|
||||||
extern void _irq143();
|
extern void _irq143(void);
|
||||||
extern void _irq144();
|
extern void _irq144(void);
|
||||||
extern void _irq145();
|
extern void _irq145(void);
|
||||||
extern void _irq146();
|
extern void _irq146(void);
|
||||||
extern void _irq147();
|
extern void _irq147(void);
|
||||||
extern void _irq148();
|
extern void _irq148(void);
|
||||||
extern void _irq149();
|
extern void _irq149(void);
|
||||||
extern void _irq150();
|
extern void _irq150(void);
|
||||||
extern void _irq151();
|
extern void _irq151(void);
|
||||||
extern void _irq152();
|
extern void _irq152(void);
|
||||||
extern void _irq153();
|
extern void _irq153(void);
|
||||||
extern void _irq154();
|
extern void _irq154(void);
|
||||||
extern void _irq155();
|
extern void _irq155(void);
|
||||||
extern void _irq156();
|
extern void _irq156(void);
|
||||||
extern void _irq157();
|
extern void _irq157(void);
|
||||||
extern void _irq158();
|
extern void _irq158(void);
|
||||||
extern void _irq159();
|
extern void _irq159(void);
|
||||||
extern void _irq160();
|
extern void _irq160(void);
|
||||||
extern void _irq161();
|
extern void _irq161(void);
|
||||||
extern void _irq162();
|
extern void _irq162(void);
|
||||||
extern void _irq163();
|
extern void _irq163(void);
|
||||||
extern void _irq164();
|
extern void _irq164(void);
|
||||||
extern void _irq165();
|
extern void _irq165(void);
|
||||||
extern void _irq166();
|
extern void _irq166(void);
|
||||||
extern void _irq167();
|
extern void _irq167(void);
|
||||||
extern void _irq168();
|
extern void _irq168(void);
|
||||||
extern void _irq169();
|
extern void _irq169(void);
|
||||||
extern void _irq170();
|
extern void _irq170(void);
|
||||||
extern void _irq171();
|
extern void _irq171(void);
|
||||||
extern void _irq172();
|
extern void _irq172(void);
|
||||||
extern void _irq173();
|
extern void _irq173(void);
|
||||||
extern void _irq174();
|
extern void _irq174(void);
|
||||||
extern void _irq175();
|
extern void _irq175(void);
|
||||||
extern void _irq176();
|
extern void _irq176(void);
|
||||||
extern void _irq177();
|
extern void _irq177(void);
|
||||||
extern void _irq178();
|
extern void _irq178(void);
|
||||||
extern void _irq179();
|
extern void _irq179(void);
|
||||||
extern void _irq180();
|
extern void _irq180(void);
|
||||||
extern void _irq181();
|
extern void _irq181(void);
|
||||||
extern void _irq182();
|
extern void _irq182(void);
|
||||||
extern void _irq183();
|
extern void _irq183(void);
|
||||||
extern void _irq184();
|
extern void _irq184(void);
|
||||||
extern void _irq185();
|
extern void _irq185(void);
|
||||||
extern void _irq186();
|
extern void _irq186(void);
|
||||||
extern void _irq187();
|
extern void _irq187(void);
|
||||||
extern void _irq188();
|
extern void _irq188(void);
|
||||||
extern void _irq189();
|
extern void _irq189(void);
|
||||||
extern void _irq190();
|
extern void _irq190(void);
|
||||||
extern void _irq191();
|
extern void _irq191(void);
|
||||||
extern void _irq192();
|
extern void _irq192(void);
|
||||||
extern void _irq193();
|
extern void _irq193(void);
|
||||||
extern void _irq194();
|
extern void _irq194(void);
|
||||||
extern void _irq195();
|
extern void _irq195(void);
|
||||||
extern void _irq196();
|
extern void _irq196(void);
|
||||||
extern void _irq197();
|
extern void _irq197(void);
|
||||||
extern void _irq198();
|
extern void _irq198(void);
|
||||||
extern void _irq199();
|
extern void _irq199(void);
|
||||||
extern void _irq200();
|
extern void _irq200(void);
|
||||||
extern void _irq201();
|
extern void _irq201(void);
|
||||||
extern void _irq202();
|
extern void _irq202(void);
|
||||||
extern void _irq203();
|
extern void _irq203(void);
|
||||||
extern void _irq204();
|
extern void _irq204(void);
|
||||||
extern void _irq205();
|
extern void _irq205(void);
|
||||||
extern void _irq206();
|
extern void _irq206(void);
|
||||||
extern void _irq207();
|
extern void _irq207(void);
|
||||||
extern void _irq208();
|
extern void _irq208(void);
|
||||||
extern void _irq209();
|
extern void _irq209(void);
|
||||||
extern void _irq210();
|
extern void _irq210(void);
|
||||||
extern void _irq211();
|
extern void _irq211(void);
|
||||||
extern void _irq212();
|
extern void _irq212(void);
|
||||||
extern void _irq213();
|
extern void _irq213(void);
|
||||||
extern void _irq214();
|
extern void _irq214(void);
|
||||||
extern void _irq215();
|
extern void _irq215(void);
|
||||||
extern void _irq216();
|
extern void _irq216(void);
|
||||||
extern void _irq217();
|
extern void _irq217(void);
|
||||||
extern void _irq218();
|
extern void _irq218(void);
|
||||||
extern void _irq219();
|
extern void _irq219(void);
|
||||||
extern void _irq220();
|
extern void _irq220(void);
|
||||||
extern void _irq221();
|
extern void _irq221(void);
|
||||||
extern void _irq222();
|
extern void _irq222(void);
|
||||||
extern void _irq223();
|
extern void _irq223(void);
|
||||||
|
|
||||||
static uintptr_t int_entry_points[NR_IDT_ENTRIES] = {
|
static uintptr_t int_entry_points[NR_IDT_ENTRIES] = {
|
||||||
[0] = (uintptr_t)_isr0, [1] = (uintptr_t)_isr1,
|
[0] = (uintptr_t)_isr0, [1] = (uintptr_t)_isr1,
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
#include "mango/machine/panic.h"
|
|
||||||
#include "mango/vm.h"
|
|
||||||
#include <mango/printk.h>
|
|
||||||
#include <mango/libc/stdio.h>
|
|
||||||
#include <arch/irq.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_CF 0
|
||||||
#define R_PF 2
|
#define R_PF 2
|
||||||
@@ -82,7 +83,11 @@ static void print_rflags(uintptr_t rflags)
|
|||||||
if (rflags & (1 << i)) {
|
if (rflags & (1 << i)) {
|
||||||
const char *name = pf_rfl_name(i);
|
const char *name = pf_rfl_name(i);
|
||||||
if (name) {
|
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:");
|
printk("cpu state:");
|
||||||
if (ctx) {
|
if (ctx) {
|
||||||
printk(" rax %016llx rbx %016llx rcx %016llx",
|
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",
|
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",
|
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",
|
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",
|
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",
|
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);
|
print_rflags(ctx->rflags);
|
||||||
}
|
}
|
||||||
|
|
||||||
uintptr_t cr0 = 0, cr2 = 0, cr3 = 0, cr4 = 0;
|
uintptr_t cr0 = 0, cr2 = 0, cr3 = 0, cr4 = 0;
|
||||||
asm volatile("mov %%cr0, %%rax" : "=a" (cr0));
|
asm volatile("mov %%cr0, %%rax" : "=a"(cr0));
|
||||||
asm volatile("mov %%cr2, %%rax" : "=a" (cr2));
|
asm volatile("mov %%cr2, %%rax" : "=a"(cr2));
|
||||||
asm volatile("mov %%cr3, %%rax" : "=a" (cr3));
|
asm volatile("mov %%cr3, %%rax" : "=a"(cr3));
|
||||||
asm volatile("mov %%cr4, %%rax" : "=a" (cr4));
|
asm volatile("mov %%cr4, %%rax" : "=a"(cr4));
|
||||||
printk(" cr0 %016llx cr2 %016llx", cr0, cr2);
|
printk(" cr0 %016llx cr2 %016llx", cr0, cr2);
|
||||||
printk(" cr3 %016llx cr4 %016llx", cr3, cr4);
|
printk(" cr3 %016llx cr4 %016llx", cr3, cr4);
|
||||||
}
|
}
|
||||||
@@ -135,7 +153,12 @@ static void print_stack_item(uintptr_t addr)
|
|||||||
int found = -1;
|
int found = -1;
|
||||||
|
|
||||||
if (found == 0 && name[0] != '\0') {
|
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 {
|
} else {
|
||||||
i += snprintf(buf + i, sizeof(buf) - i, "?");
|
i += snprintf(buf + i, sizeof(buf) - i, "?");
|
||||||
}
|
}
|
||||||
@@ -152,9 +175,8 @@ static void print_stack_trace(uintptr_t ip, uintptr_t *bp)
|
|||||||
|
|
||||||
int max_frames = 10, current_frame = 0;
|
int max_frames = 10, current_frame = 0;
|
||||||
while (1) {
|
while (1) {
|
||||||
if (!vm_virt_to_phys(stk) ||
|
if (!vm_virt_to_phys(stk) || bp == NULL
|
||||||
bp == NULL ||
|
|| current_frame > max_frames) {
|
||||||
current_frame > max_frames) {
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -169,7 +191,7 @@ static void print_stack_trace(uintptr_t ip, uintptr_t *bp)
|
|||||||
void ml_print_stack_trace(uintptr_t ip)
|
void ml_print_stack_trace(uintptr_t ip)
|
||||||
{
|
{
|
||||||
uintptr_t *bp;
|
uintptr_t *bp;
|
||||||
asm volatile("mov %%rbp, %0" : "=r" (bp));
|
asm volatile("mov %%rbp, %0" : "=r"(bp));
|
||||||
print_stack_trace(ip, bp);
|
print_stack_trace(ip, bp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
.code64
|
.code64
|
||||||
|
|
||||||
.extern THREAD_sp
|
.extern THREAD_sp
|
||||||
|
|
||||||
.global switch_to
|
.global switch_to
|
||||||
.type switch_to, @function
|
.type switch_to, @function
|
||||||
|
|
||||||
// %rdi = (struct thread *) current thread.
|
// %rdi = (struct thread *) current thread.
|
||||||
// %rsi = (struct thread *) next thread.
|
// %rsi = (struct thread *) next thread.
|
||||||
|
|||||||
Reference in New Issue
Block a user