cleaned up ecall code

master
Anton Lydike 3 years ago
parent a7941ce5ae
commit d0dd6595c3

@ -101,8 +101,6 @@ optional_int ecall_handle_exit(int* args, ProcessControlBlock* pcb)
pcb->exit_code = *args; pcb->exit_code = *args;
if (DEBUGGING) { if (DEBUGGING) {
dbgln("exit", 4);
char msg[34] = "process exited with code "; char msg[34] = "process exited with code ";
itoa(pcb->pid, &msg[8], 10); itoa(pcb->pid, &msg[8], 10);
@ -124,12 +122,10 @@ void trap_handle_ecall()
mark_ecall_entry(); mark_ecall_entry();
ProcessControlBlock* pcb = get_current_process(); ProcessControlBlock* pcb = get_current_process();
int *regs = pcb->regs; int *regs = pcb->regs;
int code = regs[REG_A0 + 7]; // code is inside a7 int code = regs[REG_A0 + 7]; // code is stored inside a7
dbgln("ecall:", 6);
// check if the code is too large/small or if the handler is zero // check if the code is too large/small or if the handler is zero
if (code < 0 || code > ECALL_TABLE_LEN || ecall_table[code] == 0) { if (code < 0 || code > ECALL_TABLE_LEN || ecall_table[code] == NULL) {
regs[REG_A0] = ENOCODE; regs[REG_A0] = ENOCODE;
} else { } else {
// run the corresponding ecall handler // run the corresponding ecall handler
@ -204,6 +200,7 @@ void handle_exception(int ecode, int mtval)
{ {
// kill off offending process // kill off offending process
ProcessControlBlock* pcb = get_current_process(); ProcessControlBlock* pcb = get_current_process();
pcb->status = PROC_DEAD; pcb->status = PROC_DEAD;
pcb->exit_code = -99; pcb->exit_code = -99;
destroy_process(pcb); destroy_process(pcb);

Loading…
Cancel
Save