Struct main::cpu::interrupt::Isr [collapse all] [expand all] [src]

pub struct Isr {
    // some fields omitted
}

An exception is generated by the CPU to indicate incorrect code behavior[1]. To distinguish exceptions, every exception needs a different entry point[2]. For example: asm isr8_double_fault: push eax ; (smaller than push 0) or replaced by nop push byte 8 jmp isr_common Since inline assembly has limitations, we build these entries dynamically. The CPU doesn't push error code on the stack when calling some exceptions. In these cases, we push a dummy value to align the stack[3].

  1. [Exceptions - OSDev Wiki][1]
  2. [piipkernel][2]
  3. Dru Nelson. [Single Byte or Small x86 Opcodes][3]

Methods

impl Isr

fn new<'a>(val: Int, code: bool) -> &'a mut Isr

unsafe fn idt_entry(&mut self, handler: unsafe extern "C" fn()) -> IdtEntry

impl Isr

fn new<'a>(val: Int, code: bool) -> &'a mut Isr

unsafe fn idt_entry(&mut self, handler: unsafe extern "C" fn()) -> IdtEntry