baponkar
baponkar

Reputation: 456

Why is `isr_common_stub` not calling my `isr_handler` function?

I want to enable IDT in x86_64 OS so I have written isr_common_stub function

isr_common_stub:
    call save_registers

    mov eax, 0x10             ; Load the kernel data segment descriptor
    mov ds, eax
    mov es, eax
    mov fs, eax
    mov gs, eax

    mov rdi, rsp             ; Pass the current stack pointer to `isr_handler`
    cld                      ; Required by AMD64 System V ABI
    call isr_handler
    
    add rsp, 16
    call restore_registers
    sti
    iretq                     ; Return from Interrupt

Full code in here

If registers_t structure is

typedef struct registers
{
    uint64_t ds, es, fs, gs;                       // Segment registers 
    uint64_t r15, r14, r13, r12, r11, r10, r9, r8; // General-purpose registers
    uint64_t rdi, rsi, rbp, rdx, rcx, rbx, rax;    // General-purpose registers

    uint64_t int_no, err_code;                     // Interrupt number and error code

    uint64_t iret_rip, iret_cs, iret_rflags, iret_rsp, iret_ss; // CPU state
} registers_t; 

is this proper way to call isr_handler?

Upvotes: 0

Views: 62

Answers (0)

Related Questions