summaryrefslogtreecommitdiff
path: root/asm/int_syscall_handler.asm
diff options
context:
space:
mode:
Diffstat (limited to 'asm/int_syscall_handler.asm')
-rw-r--r--asm/int_syscall_handler.asm256
1 files changed, 0 insertions, 256 deletions
diff --git a/asm/int_syscall_handler.asm b/asm/int_syscall_handler.asm
deleted file mode 100644
index 4031f3d..0000000
--- a/asm/int_syscall_handler.asm
+++ /dev/null
@@ -1,256 +0,0 @@
-global int_syscall_handler
-[extern task_fork]
-[extern task_exit]
-[extern task_wait]
-
-
-[extern syscall_exit]
-[extern syscall_write]
-[extern syscall_read]
-[extern syscall_readdir]
-[extern syscall_execve]
-[extern syscall_open]
-[extern syscall_close]
-[extern syscall_isatty]
-[extern syscall_lseek]
-[extern syscall_sbrk]
-[extern syscall_stat]
-[extern syscall_fork]
-[extern syscall_poll]
-[extern syscall_gettimeofday]
-[extern syscall_unhandled]
-
-[bits 32]
-
-pid: dd 0x0
-
-int_syscall_handler:
-
-cmp eax, 72
-je call_fork
-
-cmp eax, 60
-je call_exit
-
-cmp eax, 77
-je call_wait
-
- cli
-
- push ebx
- push ecx
- push edx
-
- cmp eax, 61
- je call_write
-
- cmp eax, 62
- je call_read
-
- cmp eax, 63
- je call_readdir
-
- cmp eax, 64
- je call_execve
-
- cmp eax, 65
- je call_open
-
- cmp eax, 66
- je call_close
-
- cmp eax, 68
- je call_isatty
-
- cmp eax, 69
- je call_lseek
-
- cmp eax, 70
- je call_sbrk
-
- cmp eax, 71
- je call_timeofday
-
- cmp eax, 74
- je call_stat
-
- cmp eax, 67
- je call_stat
-
- cmp eax, 79
- je call_stat
-
- cmp eax, 80
- je call_poll
-
- push eax
- jmp call_unhandled
-
-
-done:
-
-
-
-done_blocking:
-
- pop ebx
- pop ecx
- pop edx
-
- mov ebx,eax
-
- sti
-
- iret ;Interrupt-Return
-
-call_wait:
-
- cli
-
- pusha ;Push all standard registers
-
- mov ebx, esp ;save current stack pointer in esp
- mov esp, 0x7000 ;now put the stack outside of virtual memory in kernel space!
-
- push ebx ;Push pointer to all the stuff we just pushed
-
- call task_wait ;Call C code
-
- mov esp, eax ;Replace the stack with what the C code gave us
-
- popa ;Put the standard registers back
-
- sti
-
- iretd ;Interrupt-Return
- ;;;;
-
-call_exit:
-
- cli
-
- pusha ;Push all standard registers
-
- mov ebx, esp ;save current stack pointer in esp
- mov esp, 0x7000 ;now put the stack outside of virtual memory in kernel space!
-
- push ebx ;Push pointer to all the stuff we just pushed
-
- call task_exit ;Call C code
-
- mov esp, eax ;Replace the stack with what the C code gave us
-
- popa ;Put the standard registers back
-
- sti
-
- iretd ;Interrupt-Return
- ;;;;
-
-call_fork:
-
- pusha ;Push all standard registers
-
- push ds
- push es
- push fs
- push gs
-
- mov ebx, esp ; pass it in
- push ebx
- call task_fork ;Call C code
- pop ebx
-
- pop ds
- pop es
- pop fs
- pop gs
-
- mov [pid],eax ; save return val, so it survives popa
-
- popa ;Put the standard registers back
-
- mov ebx,[pid]
-
- iretd ;Interrupt-Return
-
-call_timeofday:
- call syscall_gettimeofday
- jmp done
-
-call_stat:
- call syscall_stat
- jmp done
-
-call_write:
- call syscall_write
- jmp done
-
-call_open:
- call syscall_open
- jmp done
-
-call_readdir:
- call syscall_readdir
- jmp done
-
-call_close:
- call syscall_close
- jmp done
-
-call_isatty:
- call syscall_isatty
- jmp done
-
-call_lseek:
- call syscall_lseek
- jmp done
-
-call_sbrk:
- call syscall_sbrk
- jmp done
-
-call_poll:
- call syscall_poll
- jmp done
-
-call_unhandled:
- call syscall_unhandled
- jmp done ;this should never be called, since unhandled causes kernel panic
-
-
- ;;; THIS CALLS NEED REENABLE INTERRUPTS BEFORE calling workers
- ;; TODO: redesign this shit!
-call_read:
-
- ;//mov al, 0x20 ;Port number AND command number to Acknowledge IRQ
- ;//out 0x20, al ;Acknowledge IRQ, so we keep getting interrupts
- sti
-
- call syscall_read
-
- jmp done_blocking
-
-call_execve:
-
- pusha
-
- mov eax,esp
- mov esp,0x7000
-
- push ebx
- push ecx
- push edx
-
- mov ebx,eax
- call syscall_execve
-
- pop eax
- pop eax
- pop eax
-
- mov esp,ebx
-
- popa
-
- jmp done