26 handletrap(void *v
, char *m
)
35 if(strncmp(m
, "interrupt", 9) == 0){
39 memset(&si
, 0, sizeof(si
));
41 sendsignal(p
, &si
, 0);
49 if(strncmp(m
, "sys: trap: general protection violation", 39) == 0)
53 if(strncmp(m
, "sys: write on closed pipe", 25) == 0)
56 if(strncmp(m
, "sys: trap: invalid opcode", 25) == 0){
57 memset(&si
, 0, sizeof(si
));
60 si
.fault
.addr
= (void*)p
->ureg
->pc
;
61 sendsignal(p
, &si
, 0);
65 if(strncmp(m
, "sys: trap: divide error", 23) == 0){
66 memset(&si
, 0, sizeof(si
));
69 si
.fault
.addr
= (void*)p
->ureg
->pc
;
70 sendsignal(p
, &si
, 0);
74 if(strncmp(m
, "sys: trap: overflow", 19) == 0){
75 memset(&si
, 0, sizeof(si
));
78 si
.fault
.addr
= (void*)p
->ureg
->pc
;
79 sendsignal(p
, &si
, 0);
83 trace("handletrap: %s", m
);
87 exitproc(p
, SIGKILL
, 1);
91 traced
: p
->traceproc(p
->tracearg
);
104 /* disable FPU faults */
106 f
&= ~(FPINEX
|FPOVFL
|FPUNFL
|FPZDIV
|FPINVAL
);