Advertisement
Guest User

Untitled

a guest
Jan 17th, 2018
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.86 KB | None | 0 0
  1. #include "userprog/syscall.h"
  2. #include <stdio.h>
  3. #include <syscall-nr.h>
  4. #include "threads/interrupt.h"
  5. #include "threads/thread.h"
  6.  
  7. static void syscall_handler (struct intr_frame *);
  8.  
  9. //f->esp check if not null , not kernel memo , not unmapped memo , not bad pointer
  10. void validate_address (void *esp){
  11.  
  12. }
  13.  
  14. void
  15. syscall_init (void)
  16. {
  17. intr_register_int (0x30, 3, INTR_ON, syscall_handler, "syscall");
  18. }
  19.  
  20. void
  21. init_halt ()
  22. {
  23.  
  24. }
  25.  
  26. void
  27. init_exit ()
  28. {
  29. int status = get_int((int**)&base_ptr);
  30.  
  31. }
  32.  
  33. void
  34. init_exec ()
  35. {
  36. char* file = get_char((char***)&base_ptr);
  37. }
  38. void
  39. init_wait ()
  40. {
  41. }
  42. void* base_ptr;
  43. static void
  44. syscall_handler (struct intr_frame *f UNUSED)
  45. {
  46. base_ptr = f->esp;
  47. int system_call_number = get_int((int**)&base_ptr);
  48.  
  49. switch(system_call_number){
  50. case 0 :
  51. init_halt();
  52. break ;
  53. case 1 :
  54. init_exit();
  55. break ;
  56. case 2 :
  57. init_exec();
  58. break ;
  59. case 3 :
  60. init_wait();
  61. break ;
  62. case 4 :
  63. init_create();
  64. break ;
  65. case 5 :
  66. init_remove();
  67. break ;
  68. case 6 :
  69. init_open();
  70. break ;
  71. case 7 :
  72. init_file_size();
  73. break ;
  74. case 8 :
  75. init_read();
  76. break ;
  77. case 9 :
  78. init_write();
  79. break ;
  80. case 10 :
  81. init_seek();
  82. break ;
  83. case 11 :
  84. init_tell();
  85. break ;
  86. case 12 :
  87. init_close();
  88. break ;
  89.  
  90.  
  91. }
  92.  
  93. printf ("system call!\n");
  94. thread_exit ();
  95. }
  96.  
  97. int get_value (int **esp){
  98.  
  99. validate_address ((void*) *esp);
  100. int value = **esp;
  101. (*esp)++;
  102. return value;
  103.  
  104. }
  105.  
  106. char* get_char (char*** esp){
  107.  
  108. validate_address ((void*) *esp);
  109. char* value = **esp;
  110. (*esp)++;
  111. return value;
  112.  
  113. }
  114.  
  115. void* get_void (void*** esp){
  116.  
  117. validate_address ((void*) *esp);
  118. void* value = **esp;
  119. (*esp)++;
  120. return value;
  121.  
  122. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement