Reputation: 456
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