Mercurial > hg > Members > menikon > CbC_xv6
view src/impl/kernel_error.cbc @ 310:ba8687746ff6
impl kernel_error codes
author | anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 06 Feb 2020 12:25:34 +0900 |
parents | 04a5e0aa7f01 |
children | cd9092628a63 |
line wrap: on
line source
#include "../context.h" #interface "ErrorGear.h" // ---- // typedef struct KernelError <Type, Isa> impl ErrorGear { // __code infinity_loop(Type* error_gear,__code next(...)); // } KernelError; // ---- ErrorGear* createKernelError(struct Context* cbc_context) { struct ErrorGear* error_gear = new ErrorGear(); struct KernelError* kernel_error = new KernelError(); error_gear->error_gear = (union Data*)kernel_error; kernel_error->error_gear = NULL; kernel_error->infinity_loop = C_infinity_loopKernelError; error_gear->error = C_errorKernelError; error_gear->panic = C_panicKernelError; error_gear->next = C_nextKernelError; return error_gear; } __code infinity_loopKernelError(struct KernelError* error_gear,__code next(...)) { goto next(...); } __code errorKernelError(struct KernelError* error_gear, int err_code, __code next(...)) { goto next(...); } __code panicKernelError(struct KernelError* error_gear, char* msg) { cli(); cons.locking = 0; cprintf("cpu%d: panic: ", cpu->id); show_callstk(s); panicked = 1; // freeze other CPU goto infinity_loopKernelError(error_gear, error_gear->inifinity_loop); }