|
@@ -128,7 +128,18 @@ out_of_memory:
|
|
|
goto out;
|
|
|
}
|
|
|
|
|
|
-void segv_handler(int sig, union uml_pt_regs *regs)
|
|
|
+static void bad_segv(struct faultinfo fi, unsigned long ip)
|
|
|
+{
|
|
|
+ struct siginfo si;
|
|
|
+
|
|
|
+ si.si_signo = SIGSEGV;
|
|
|
+ si.si_code = SEGV_ACCERR;
|
|
|
+ si.si_addr = (void __user *) FAULT_ADDRESS(fi);
|
|
|
+ current->thread.arch.faultinfo = fi;
|
|
|
+ force_sig_info(SIGSEGV, &si, current);
|
|
|
+}
|
|
|
+
|
|
|
+static void segv_handler(int sig, union uml_pt_regs *regs)
|
|
|
{
|
|
|
struct faultinfo * fi = UPT_FAULTINFO(regs);
|
|
|
|
|
@@ -205,17 +216,6 @@ unsigned long segv(struct faultinfo fi, unsigned long ip, int is_user, void *sc)
|
|
|
return(0);
|
|
|
}
|
|
|
|
|
|
-void bad_segv(struct faultinfo fi, unsigned long ip)
|
|
|
-{
|
|
|
- struct siginfo si;
|
|
|
-
|
|
|
- si.si_signo = SIGSEGV;
|
|
|
- si.si_code = SEGV_ACCERR;
|
|
|
- si.si_addr = (void __user *) FAULT_ADDRESS(fi);
|
|
|
- current->thread.arch.faultinfo = fi;
|
|
|
- force_sig_info(SIGSEGV, &si, current);
|
|
|
-}
|
|
|
-
|
|
|
void relay_signal(int sig, union uml_pt_regs *regs)
|
|
|
{
|
|
|
if(arch_handle_signal(sig, regs))
|
|
@@ -232,14 +232,14 @@ void relay_signal(int sig, union uml_pt_regs *regs)
|
|
|
force_sig(sig, current);
|
|
|
}
|
|
|
|
|
|
-void bus_handler(int sig, union uml_pt_regs *regs)
|
|
|
+static void bus_handler(int sig, union uml_pt_regs *regs)
|
|
|
{
|
|
|
if(current->thread.fault_catcher != NULL)
|
|
|
do_longjmp(current->thread.fault_catcher, 1);
|
|
|
else relay_signal(sig, regs);
|
|
|
}
|
|
|
|
|
|
-void winch(int sig, union uml_pt_regs *regs)
|
|
|
+static void winch(int sig, union uml_pt_regs *regs)
|
|
|
{
|
|
|
do_IRQ(WINCH_IRQ, regs);
|
|
|
}
|