Mercurial > hg > Members > innparusu > xv6-rpi
comparison src/syscall.c @ 31:96a5833d0d82
fix
author | mir3636 |
---|---|
date | Fri, 18 Jan 2019 18:20:02 +0900 |
parents | 6a7ab1d7001c |
children | 96af12a50fdb |
comparison
equal
deleted
inserted
replaced
30:6a7ab1d7001c | 31:96a5833d0d82 |
---|---|
144 static __code (*cbccodes[])(__code (*)(int)) = { | 144 static __code (*cbccodes[])(__code (*)(int)) = { |
145 [SYS_cbc_read] = cbc_read, | 145 [SYS_cbc_read] = cbc_read, |
146 }; | 146 }; |
147 | 147 |
148 __code cbc_trap_return(){ | 148 __code cbc_trap_return(){ |
149 goto trap_swi(); | 149 return; |
150 } | 150 } |
151 | 151 |
152 __code cbc_ret(int ret){ | 152 __code cbc_ret(int ret){ |
153 proc->tf->r0 = ret; | 153 proc->tf->r0 = ret; |
154 goto cbc_trap_return(); | 154 goto cbc_trap_return(); |
159 int num; | 159 int num; |
160 int ret; | 160 int ret; |
161 | 161 |
162 num = proc->tf->r0; | 162 num = proc->tf->r0; |
163 | 163 |
164 if (num == 5) | |
165 num = 22; | |
164 //cprintf ("syscall(%d) from %s(%d)\n", num, proc->name, proc->pid); | 166 //cprintf ("syscall(%d) from %s(%d)\n", num, proc->name, proc->pid); |
165 | 167 |
166 if((num > 0) && (num > NELEM(syscalls)) && cbccodes[num]) { | 168 if((num >= NELEM(syscalls)) && (num <= NELEM(cbccodes)) && cbccodes[num]) { |
167 | 169 |
168 goto (cbccodes[num])(cbc_ret); | 170 goto (cbccodes[num])(cbc_ret); |
169 } | 171 } |
170 | 172 |
171 | 173 |