Commit | Line | Data |
---|---|---|
ea2ba7dc GS |
1 | /* |
2 | * Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com) | |
3 | * Licensed under the GPL | |
4 | */ | |
5 | ||
c66fdd5e | 6 | #include <stdlib.h> |
ea2ba7dc | 7 | #include <signal.h> |
c66fdd5e | 8 | #include <setjmp.h> |
ea2ba7dc GS |
9 | #include "kern_util.h" |
10 | #include "user_util.h" | |
11 | #include "os.h" | |
c66fdd5e | 12 | #include "mode.h" |
1d7173ba | 13 | #include "longjmp.h" |
c66fdd5e GS |
14 | |
15 | void usr2_handler(int sig, union uml_pt_regs *regs) | |
16 | { | |
17 | CHOOSE_MODE(syscall_handler_tt(sig, regs), (void) 0); | |
18 | } | |
19 | ||
20 | void (*sig_info[NSIG])(int, union uml_pt_regs *); | |
21 | ||
22 | void os_fill_handlinfo(struct kern_handlers h) | |
23 | { | |
24 | sig_info[SIGTRAP] = h.relay_signal; | |
25 | sig_info[SIGFPE] = h.relay_signal; | |
26 | sig_info[SIGILL] = h.relay_signal; | |
27 | sig_info[SIGWINCH] = h.winch; | |
28 | sig_info[SIGBUS] = h.bus_handler; | |
29 | sig_info[SIGSEGV] = h.page_fault; | |
30 | sig_info[SIGIO] = h.sigio_handler; | |
31 | sig_info[SIGVTALRM] = h.timer_handler; | |
32 | sig_info[SIGALRM] = h.timer_handler; | |
33 | sig_info[SIGUSR2] = usr2_handler; | |
34 | } | |
ea2ba7dc GS |
35 | |
36 | void do_longjmp(void *b, int val) | |
37 | { | |
ad28e029 | 38 | jmp_buf *buf = b; |
ea2ba7dc | 39 | |
ad28e029 | 40 | UML_LONGJMP(buf, val); |
ea2ba7dc | 41 | } |