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].
- [Exceptions - OSDev Wiki][1]
- [piipkernel][2]
- Dru Nelson. [Single Byte or Small x86 Opcodes][3]
Methods
fn new<'a>(val: Int, code: bool) -> &'a mut Isr
unsafe fn idt_entry(&mut self, handler: unsafe extern "C" fn()) -> IdtEntry
fn new<'a>(val: Int, code: bool) -> &'a mut Isr
unsafe fn idt_entry(&mut self, handler: unsafe extern "C" fn()) -> IdtEntry
Keyboard shortcuts
- ?
- Show this help dialog
- S
- Focus the search field
- ⇤
- Move up in search results
- ⇥
- Move down in search results
- ⏎
- Go to active search result
Search tricks
Prefix searches with a type followed by a colon (e.g.
fn:
) to restrict the search to a given type.
Accepted types are: fn
, mod
,
struct
(or str
), enum
,
trait
, typedef
(or
tdef
).