コード例 #1
0
ファイル: fault.c プロジェクト: dkruchinin/MuString
INITCODE void arch_faults_init(void)
{
  int slot, ist;
  uint8_t dpl;

  for (slot = 0; slot < IDT_NUM_FAULTS; slot++) {
    /* allow jump to the breakpoint handler from user space */
    dpl = (slot == FLT_BP) ? SEG_DPL_USER : SEG_DPL_KERNEL;
    ist = get_ist_by_fault(slot);
    idt_install_gate(slot, SEG_TYPE_INTR, dpl,
                     GET_FAULTS_TABLE_ENTRY(slot), ist);
  }

  SET_FAULT_HANDLER(FLT_DE,  FH_devide_by_zero);
  SET_FAULT_HANDLER(FLT_DB,  FH_debug);
  SET_FAULT_HANDLER(FLT_NMI, FH_nmi);
  SET_FAULT_HANDLER(FLT_BP,  FH_breakpoint);
  SET_FAULT_HANDLER(FLT_OF,  FH_overflow);
  SET_FAULT_HANDLER(FLT_BR,  FH_bound_range);
  SET_FAULT_HANDLER(FLT_UD,  FH_invalid_opcode);
  SET_FAULT_HANDLER(FLT_NM,  FH_device_not_avail);
  SET_FAULT_HANDLER(FLT_DF,  FH_double_fault);
  SET_FAULT_HANDLER(FLT_TS,  FH_invalid_tss);
  SET_FAULT_HANDLER(FLT_NP,  FH_segment_not_present);
  SET_FAULT_HANDLER(FLT_SS,  FH_stack_exception);
  SET_FAULT_HANDLER(FLT_GP,  FH_general_protection_fault);
  SET_FAULT_HANDLER(FLT_PF,  FH_page_fault);
  SET_FAULT_HANDLER(FLT_MF,  FH_floating_point_exception);
  SET_FAULT_HANDLER(FLT_AC,  FH_alignment_check);
  SET_FAULT_HANDLER(FLT_MC,  FH_machine_check);
  SET_FAULT_HANDLER(FLT_XF,  FH_simd_floating_point);
  SET_FAULT_HANDLER(FLT_SX,  FH_security_exception);

  init_reserved_faults();
}
コード例 #2
0
ファイル: _syscall.c プロジェクト: PtxDK/OSM
/**
 * Installs the Syscall Handler
 */
void syscall_init(void)
{
    /* Install interrupt at vector 0x80 */
    idt_install_gate(0x80, IDT_DESC_PRESENT | IDT_DESC_BIT32 | IDT_DESC_RING3, 
        (GDT_KERNEL_CODE << 3), (int_handler_t)syscall_irq_handler);
}
コード例 #3
0
ファイル: exception.c プロジェクト: DIKU-EDU/kudos
void exception_init() 
{
  //Hardware exceptions x86
  idt_install_gate(0, (uint16_t)(IDT_DESC_PRESENT | IDT_DESC_BIT32), (GDT_KERNEL_CODE << 3), (irq_handler)isr_handler0);
  idt_install_gate(1, (uint16_t)(IDT_DESC_PRESENT | IDT_DESC_BIT32), (GDT_KERNEL_CODE << 3), (irq_handler)isr_handler1);
  idt_install_gate(2, (uint16_t)(IDT_DESC_PRESENT | IDT_DESC_BIT32), (GDT_KERNEL_CODE << 3), (irq_handler)isr_handler2);
  idt_install_gate(3, (uint16_t)(IDT_DESC_PRESENT | IDT_DESC_BIT32), (GDT_KERNEL_CODE << 3), (irq_handler)isr_handler3);
  idt_install_gate(4, (uint16_t)(IDT_DESC_PRESENT | IDT_DESC_BIT32), (GDT_KERNEL_CODE << 3), (irq_handler)isr_handler4);
  idt_install_gate(5, (uint16_t)(IDT_DESC_PRESENT | IDT_DESC_BIT32), (GDT_KERNEL_CODE << 3), (irq_handler)isr_handler5);
  idt_install_gate(6, (uint16_t)(IDT_DESC_PRESENT | IDT_DESC_BIT32), (GDT_KERNEL_CODE << 3), (irq_handler)isr_handler6);
  idt_install_gate(7, (uint16_t)(IDT_DESC_PRESENT | IDT_DESC_BIT32), (GDT_KERNEL_CODE << 3), (irq_handler)isr_handler7);
  idt_install_gate(8, (uint16_t)(IDT_DESC_PRESENT | IDT_DESC_BIT32), (GDT_KERNEL_CODE << 3), (irq_handler)isr_handler8);
  idt_install_gate(9, (uint16_t)(IDT_DESC_PRESENT | IDT_DESC_BIT32), (GDT_KERNEL_CODE << 3), (irq_handler)isr_handler9);
  idt_install_gate(10, (uint16_t)(IDT_DESC_PRESENT | IDT_DESC_BIT32), (GDT_KERNEL_CODE << 3), (irq_handler)isr_handler10);
  idt_install_gate(11, (uint16_t)(IDT_DESC_PRESENT | IDT_DESC_BIT32), (GDT_KERNEL_CODE << 3), (irq_handler)isr_handler11);
  idt_install_gate(12, (uint16_t)(IDT_DESC_PRESENT | IDT_DESC_BIT32), (GDT_KERNEL_CODE << 3), (irq_handler)isr_handler12);
  idt_install_gate(13, (uint16_t)(IDT_DESC_PRESENT | IDT_DESC_BIT32), (GDT_KERNEL_CODE << 3), (irq_handler)isr_handler13);
  idt_install_gate(14, (uint16_t)(IDT_DESC_PRESENT | IDT_DESC_BIT32), (GDT_KERNEL_CODE << 3), (irq_handler)isr_handler14);
  idt_install_gate(15, (uint16_t)(IDT_DESC_PRESENT | IDT_DESC_BIT32), (GDT_KERNEL_CODE << 3), (irq_handler)isr_handler15);
  idt_install_gate(16, (uint16_t)(IDT_DESC_PRESENT | IDT_DESC_BIT32), (GDT_KERNEL_CODE << 3), (irq_handler)isr_handler16);
  idt_install_gate(17, (uint16_t)(IDT_DESC_PRESENT | IDT_DESC_BIT32), (GDT_KERNEL_CODE << 3), (irq_handler)isr_handler17);
  idt_install_gate(18, (uint16_t)(IDT_DESC_PRESENT | IDT_DESC_BIT32), (GDT_KERNEL_CODE << 3), (irq_handler)isr_handler18);
  idt_install_gate(19, (uint16_t)(IDT_DESC_PRESENT | IDT_DESC_BIT32), (GDT_KERNEL_CODE << 3), (irq_handler)isr_handler19);
}