Gennady Sharapov | ea2ba7d | 2006-01-08 01:01:31 -0800 | [diff] [blame] | 1 | /* |
| 2 | * Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com) |
| 3 | * Licensed under the GPL |
| 4 | */ |
| 5 | |
Gennady Sharapov | c66fdd5 | 2006-01-08 01:01:32 -0800 | [diff] [blame] | 6 | #include <stdlib.h> |
Gennady Sharapov | ea2ba7d | 2006-01-08 01:01:31 -0800 | [diff] [blame] | 7 | #include <signal.h> |
| 8 | #include "kern_util.h" |
Gennady Sharapov | ea2ba7d | 2006-01-08 01:01:31 -0800 | [diff] [blame] | 9 | #include "os.h" |
Jeff Dike | 1d7173b | 2006-01-18 17:42:49 -0800 | [diff] [blame] | 10 | #include "longjmp.h" |
Gennady Sharapov | c66fdd5 | 2006-01-08 01:01:32 -0800 | [diff] [blame] | 11 | |
Jeff Dike | 0e8cd28 | 2007-03-06 01:42:20 -0800 | [diff] [blame] | 12 | /* Initialized from linux_main() */ |
Jeff Dike | 77bf440 | 2007-10-16 01:26:58 -0700 | [diff] [blame^] | 13 | void (*sig_info[NSIG])(int, struct uml_pt_regs *); |
Gennady Sharapov | c66fdd5 | 2006-01-08 01:01:32 -0800 | [diff] [blame] | 14 | |
| 15 | void os_fill_handlinfo(struct kern_handlers h) |
| 16 | { |
| 17 | sig_info[SIGTRAP] = h.relay_signal; |
| 18 | sig_info[SIGFPE] = h.relay_signal; |
| 19 | sig_info[SIGILL] = h.relay_signal; |
| 20 | sig_info[SIGWINCH] = h.winch; |
| 21 | sig_info[SIGBUS] = h.bus_handler; |
| 22 | sig_info[SIGSEGV] = h.page_fault; |
| 23 | sig_info[SIGIO] = h.sigio_handler; |
| 24 | sig_info[SIGVTALRM] = h.timer_handler; |
| 25 | sig_info[SIGALRM] = h.timer_handler; |
Gennady Sharapov | c66fdd5 | 2006-01-08 01:01:32 -0800 | [diff] [blame] | 26 | } |
Gennady Sharapov | ea2ba7d | 2006-01-08 01:01:31 -0800 | [diff] [blame] | 27 | |
| 28 | void do_longjmp(void *b, int val) |
| 29 | { |
Jeff Dike | ad28e02 | 2006-04-18 22:21:41 -0700 | [diff] [blame] | 30 | jmp_buf *buf = b; |
Gennady Sharapov | ea2ba7d | 2006-01-08 01:01:31 -0800 | [diff] [blame] | 31 | |
Jeff Dike | ad28e02 | 2006-04-18 22:21:41 -0700 | [diff] [blame] | 32 | UML_LONGJMP(buf, val); |
Gennady Sharapov | ea2ba7d | 2006-01-08 01:01:31 -0800 | [diff] [blame] | 33 | } |