Mercurial > hg > CbC > CbC_xv6
view src/impl/KernelError.cbc @ 378:297515214d9b
add SyscallEntry interface
author | anatofuz <anatofuz@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 13 Jul 2020 16:09:22 +0900 |
parents | f0b337cb6024 |
children | 3f243b59bcee |
line wrap: on
line source
#include "param.h" #include "proc.h" #interface "Err.h" // ---- // typedef struct KernelError <Type, Isa> impl Error { // __code infinity_loop(Type* error, next(...)); // } KernelError; // ---- Err* createKernelError(struct Context* cbc_context) { struct Err* err = new Err(); struct KernelError* kernel_error = new KernelError(); err->err = (union Data*)kernel_error; kernel_error->err = (union Data*)kernel_error; kernel_error->infinity_loop = C_infinity_loopKernelError; err->error = C_errorKernelError; err->panic = C_panicKernelError; return err; } __code infinity_loopKernelError(struct KernelError* err, __code next(...)) { goto next(...); } __code errorKernelError(struct KernelError* err, int err_code, __code next(...)) { goto next(...); } __code panicKernelError(struct KernelError* err, char* msg) { cli(); cons.locking = 0; cprintf("cpu%d: panic: ", cpu->id); show_callstk(msg); panicked = 1; // freeze other CPU goto infinity_loopKernelError(err, err->inifinity_loop); }