2 * Copyright (C) 2002 - 2003 Jeff Dike (jdike@addtoit.com)
3 * Licensed under the GPL
8 #include "signal_user.h"
10 #include "kern_util.h"
12 #include "sigcontext.h"
14 #include "ptrace_user.h"
15 #include "sysdep/ptrace.h"
16 #include "sysdep/ptrace_user.h"
18 void sig_handler_common_skas(int sig
, void *sc_ptr
)
20 struct sigcontext
*sc
= sc_ptr
;
22 struct signal_info
*info
;
23 int save_errno
= errno
;
26 /* This is done because to allow SIGSEGV to be delivered inside a SEGV
27 * handler. This can happen in copy_user, and if SEGV is disabled,
28 * the process will die.
29 * XXX Figure out why this is better than SA_NODEFER
32 change_sig(SIGSEGV
, 1);
34 r
= &TASK_REGS(get_current())->skas
;
35 save_user
= r
->is_user
;
37 if ( sig
== SIGFPE
|| sig
== SIGSEGV
||
38 sig
== SIGBUS
|| sig
== SIGILL
||
40 GET_FAULTINFO_FROM_SC(r
->faultinfo
, sc
);
43 change_sig(SIGUSR1
, 1);
44 info
= &sig_info
[sig
];
45 if(!info
->is_irq
) unblock_signals();
47 (*info
->handler
)(sig
, (union uml_pt_regs
*) r
);
50 r
->is_user
= save_user
;
53 extern int ptrace_faultinfo
;
55 void user_signal(int sig
, union uml_pt_regs
*regs
, int pid
)
57 struct signal_info
*info
;
58 int segv
= ((sig
== SIGFPE
) || (sig
== SIGSEGV
) || (sig
== SIGBUS
) ||
59 (sig
== SIGILL
) || (sig
== SIGTRAP
));
62 get_skas_faultinfo(pid
, ®s
->skas
.faultinfo
);
63 info
= &sig_info
[sig
];
64 (*info
->handler
)(sig
, regs
);
70 * Overrides for Emacs so that we follow Linus's tabbing style.
71 * Emacs will notice this stuff at the end of the file and automatically
72 * adjust the settings for this buffer only. This must remain at the end
74 * ---------------------------------------------------------------------------
76 * c-file-style: "linux"