8
8
#include "loader.h"
9
9
#include "memory.h"
10
10
#include "stdio.h"
11
+ #include "syscalls.h"
11
12
12
13
void log_stack_trace_line (uint32_t eip ) {
13
14
char * symbol_name = address_to_symbol_name (eip );
@@ -36,29 +37,7 @@ void log_interrupt_details(char* int_name, uint32_t error_code, uint32_t eip, st
36
37
fprintf (LOG , "--------------------\n" );
37
38
}
38
39
39
- void sys_write_to_screen (char * s ) {
40
- fprintf (LOG , "sys_write_to_screen(%s)\n" , s );
41
- printf (s );
42
- }
43
-
44
- void handle_syscall (struct cpu_state * cpu ) {
45
- uint32_t syscall_num = cpu -> eax ;
46
-
47
- fprintf (LOG , "--------------------\nSYSCALL (%i)\n" , syscall_num );
48
-
49
- switch (syscall_num ) {
50
- case (1 ):
51
- sys_write_to_screen ((char * ) cpu -> ebx );
52
- break ;
53
- default :
54
- fprintf (LOG , "Unknown syscall: %x\n" , syscall_num );
55
- while (1 ){}
56
- }
57
-
58
- fprintf (LOG , "--------------------\n" );
59
- }
60
-
61
- void interrupt_handler (struct cpu_state cpu , uint32_t interrupt_number , uint32_t error_code , uint32_t eip ) {
40
+ uint32_t interrupt_handler (struct cpu_state cpu , uint32_t interrupt_number , uint32_t error_code , uint32_t eip ) {
62
41
switch (interrupt_number ) {
63
42
case (INT_KEYBOARD ):
64
43
keyboard_interrupt_handler ();
@@ -100,8 +79,7 @@ void interrupt_handler(struct cpu_state cpu, uint32_t interrupt_number, uint32_t
100
79
break ;
101
80
102
81
case (INT_SYSCALL ):
103
- handle_syscall (& cpu );
104
- break ;
82
+ return handle_syscall (& cpu );
105
83
106
84
case (INT_OUT_OF_MEMORY ):
107
85
log_interrupt_details ("INT_OUT_OF_MEMORY" , error_code , eip , & cpu );
@@ -116,4 +94,6 @@ void interrupt_handler(struct cpu_state cpu, uint32_t interrupt_number, uint32_t
116
94
}
117
95
118
96
pic_acknowledge ();
97
+
98
+ return 0 ;
119
99
}
0 commit comments