| 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" | 
|  | 9 | #include "user_util.h" | 
|  | 10 | #include "os.h" | 
| Gennady Sharapov | c66fdd5 | 2006-01-08 01:01:32 -0800 | [diff] [blame] | 11 | #include "mode.h" | 
| Jeff Dike | 1d7173b | 2006-01-18 17:42:49 -0800 | [diff] [blame] | 12 | #include "longjmp.h" | 
| Gennady Sharapov | c66fdd5 | 2006-01-08 01:01:32 -0800 | [diff] [blame] | 13 |  | 
|  | 14 | void usr2_handler(int sig, union uml_pt_regs *regs) | 
|  | 15 | { | 
|  | 16 | CHOOSE_MODE(syscall_handler_tt(sig, regs), (void) 0); | 
|  | 17 | } | 
|  | 18 |  | 
| Jeff Dike | 0e8cd28 | 2007-03-06 01:42:20 -0800 | [diff] [blame] | 19 | /* Initialized from linux_main() */ | 
| Gennady Sharapov | c66fdd5 | 2006-01-08 01:01:32 -0800 | [diff] [blame] | 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 | } | 
| Gennady Sharapov | ea2ba7d | 2006-01-08 01:01:31 -0800 | [diff] [blame] | 35 |  | 
|  | 36 | void do_longjmp(void *b, int val) | 
|  | 37 | { | 
| Jeff Dike | ad28e02 | 2006-04-18 22:21:41 -0700 | [diff] [blame] | 38 | jmp_buf *buf = b; | 
| Gennady Sharapov | ea2ba7d | 2006-01-08 01:01:31 -0800 | [diff] [blame] | 39 |  | 
| Jeff Dike | ad28e02 | 2006-04-18 22:21:41 -0700 | [diff] [blame] | 40 | UML_LONGJMP(buf, val); | 
| Gennady Sharapov | ea2ba7d | 2006-01-08 01:01:31 -0800 | [diff] [blame] | 41 | } |