Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "userprog/syscall.h"
- #include <stdio.h>
- #include <syscall-nr.h>
- #include "threads/interrupt.h"
- #include "threads/thread.h"
- static void syscall_handler (struct intr_frame *);
- //f->esp check if not null , not kernel memo , not unmapped memo , not bad pointer
- void validate_address (void *esp){
- }
- void
- syscall_init (void)
- {
- intr_register_int (0x30, 3, INTR_ON, syscall_handler, "syscall");
- }
- void
- init_halt ()
- {
- }
- void
- init_exit ()
- {
- int status = get_int((int**)&base_ptr);
- }
- void
- init_exec ()
- {
- char* file = get_char((char***)&base_ptr);
- }
- void
- init_wait ()
- {
- }
- void* base_ptr;
- static void
- syscall_handler (struct intr_frame *f UNUSED)
- {
- base_ptr = f->esp;
- int system_call_number = get_int((int**)&base_ptr);
- switch(system_call_number){
- case 0 :
- init_halt();
- break ;
- case 1 :
- init_exit();
- break ;
- case 2 :
- init_exec();
- break ;
- case 3 :
- init_wait();
- break ;
- case 4 :
- init_create();
- break ;
- case 5 :
- init_remove();
- break ;
- case 6 :
- init_open();
- break ;
- case 7 :
- init_file_size();
- break ;
- case 8 :
- init_read();
- break ;
- case 9 :
- init_write();
- break ;
- case 10 :
- init_seek();
- break ;
- case 11 :
- init_tell();
- break ;
- case 12 :
- init_close();
- break ;
- }
- printf ("system call!\n");
- thread_exit ();
- }
- int get_value (int **esp){
- validate_address ((void*) *esp);
- int value = **esp;
- (*esp)++;
- return value;
- }
- char* get_char (char*** esp){
- validate_address ((void*) *esp);
- char* value = **esp;
- (*esp)++;
- return value;
- }
- void* get_void (void*** esp){
- validate_address ((void*) *esp);
- void* value = **esp;
- (*esp)++;
- return value;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement