interrupt: make LoadIDT/GDT() inline
This commit is contained in:
parent
f241551d64
commit
ebdc816d82
@ -51,10 +51,17 @@ SYSV_ABI void interrupt_MapHandler(void *handler, int interrupt);
|
||||
SYSV_ABI void interrupt_Handler(int vec, int errcode, uint64_t rip, uint64_t rax, uint64_t rbx, uint64_t rcx, uint64_t rdx, uint64_t rsi, uint64_t rdi, uint64_t rbp, uint64_t rsp, uint64_t r8, uint64_t r9, uint64_t r10, uint64_t r11, uint64_t r12, uint64_t r13, uint64_t r14, uint64_t r15);
|
||||
|
||||
// defined in assembly
|
||||
SYSV_ABI void interrupt_LoadGDT(void *gdtr);
|
||||
SYSV_ABI void interrupt_LoadIDT(void *idtr);
|
||||
SYSV_ABI void interrupt_ReloadSegments();
|
||||
|
||||
inline void interrupt_LoadGDT(interrupt_DescriptorTableReference *gdtr) {
|
||||
asm volatile("lgdt %0"
|
||||
: "=m"(*gdtr));
|
||||
}
|
||||
inline void interrupt_LoadIDT(interrupt_DescriptorTableReference *idtr) {
|
||||
asm volatile("lidt %0"
|
||||
: "=m"(*idtr));
|
||||
}
|
||||
|
||||
|
||||
#define INTERRUPT_DISABLE \
|
||||
uintptr_t __interrupt_flags; \
|
||||
|
@ -1,20 +1,10 @@
|
||||
format elf64
|
||||
|
||||
public interrupt_ReloadSegments
|
||||
public interrupt_LoadGDT
|
||||
public interrupt_LoadIDT
|
||||
|
||||
|
||||
section '.text' executable
|
||||
|
||||
; sysvx64call void interrupt_LoadGDT(void* gdtr)
|
||||
;
|
||||
; Input: (void* rdi)
|
||||
; Clobbers: none
|
||||
interrupt_LoadGDT:
|
||||
lgdt [rdi]
|
||||
ret
|
||||
|
||||
; sysvx64call void interrupt_ReloadSegments()
|
||||
;
|
||||
; Clobbers: rax
|
||||
@ -35,11 +25,3 @@ interrupt_ReloadSegments:
|
||||
push rax
|
||||
retfq
|
||||
|
||||
; sysvx64call void interrupt_LoadIDT(void* idtr)
|
||||
;
|
||||
; Input: (void* rdi)
|
||||
; Clobbers: none
|
||||
interrupt_LoadIDT:
|
||||
lidt [rdi]
|
||||
ret
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user