Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=75ada8ffe08cef9b506a796ba6f9ce2071dcf0d7
Commit:     75ada8ffe08cef9b506a796ba6f9ce2071dcf0d7
Parent:     e06173bde0ec9830a296720f8cd7cb2f17b76fa4
Author:     Jeff Dike <[EMAIL PROTECTED]>
AuthorDate: Mon Feb 4 22:31:12 2008 -0800
Committer:  Linus Torvalds <[EMAIL PROTECTED]>
CommitDate: Tue Feb 5 09:44:30 2008 -0800

    uml: move sig_handler_common_skas
    
    This patch moves sig_handler_common_skas from
    arch/um/os-Linux/skas/trap.c to its only caller in
    arch/um/os-Linux/signal.c.  trap.c is now empty, so it can be removed.
    
    This is code movement only - the significant cleanup needed here is
    done in the next patch.
    
    Signed-off-by: Jeff Dike <[EMAIL PROTECTED]>
    Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
    Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
---
 arch/um/include/os.h           |    3 --
 arch/um/os-Linux/signal.c      |   62 ++++++++++++++++++++++++++++++++++
 arch/um/os-Linux/skas/Makefile |    6 ++--
 arch/um/os-Linux/skas/trap.c   |   73 ----------------------------------------
 4 files changed, 65 insertions(+), 79 deletions(-)

diff --git a/arch/um/include/os.h b/arch/um/include/os.h
index bce2881..b9779ac 100644
--- a/arch/um/include/os.h
+++ b/arch/um/include/os.h
@@ -292,9 +292,6 @@ extern int add_sigio_fd(int fd);
 extern int ignore_sigio_fd(int fd);
 extern void maybe_sigio_broken(int fd, int read);
 
-/* skas/trap */
-extern void sig_handler_common_skas(int sig, void *sc_ptr);
-
 /* sys-x86_64/prctl.c */
 extern int os_arch_prctl(int pid, int code, unsigned long *addr);
 
diff --git a/arch/um/os-Linux/signal.c b/arch/um/os-Linux/signal.c
index 62a66f3..cde9e76 100644
--- a/arch/um/os-Linux/signal.c
+++ b/arch/um/os-Linux/signal.c
@@ -9,12 +9,74 @@
 #include <errno.h>
 #include <signal.h>
 #include <strings.h>
+#include "as-layout.h"
+#include "kern_constants.h"
 #include "kern_util.h"
 #include "os.h"
 #include "sysdep/barrier.h"
 #include "sysdep/sigcontext.h"
+#include "task.h"
 #include "user.h"
 
+void (*sig_info[NSIG])(int, struct uml_pt_regs *) = {
+       [SIGTRAP]       = relay_signal,
+       [SIGFPE]        = relay_signal,
+       [SIGILL]        = relay_signal,
+       [SIGWINCH]      = winch,
+       [SIGBUS]        = bus_handler,
+       [SIGSEGV]       = segv_handler,
+       [SIGIO]         = sigio_handler,
+       [SIGVTALRM]     = timer_handler };
+
+static struct uml_pt_regs ksig_regs[UM_NR_CPUS];
+
+void sig_handler_common_skas(int sig, void *sc_ptr)
+{
+       struct sigcontext *sc = sc_ptr;
+       struct uml_pt_regs *r;
+       void (*handler)(int, struct uml_pt_regs *);
+       int save_user, save_errno = errno;
+
+       /*
+        * This is done because to allow SIGSEGV to be delivered inside a SEGV
+        * handler.  This can happen in copy_user, and if SEGV is disabled,
+        * the process will die.
+        * XXX Figure out why this is better than SA_NODEFER
+        */
+       if (sig == SIGSEGV) {
+               change_sig(SIGSEGV, 1);
+               /*
+                * For segfaults, we want the data from the
+                * sigcontext.  In this case, we don't want to mangle
+                * the process registers, so use a static set of
+                * registers.  For other signals, the process
+                * registers are OK.
+                */
+               r = &ksig_regs[cpu()];
+               copy_sc(r, sc_ptr);
+       } else
+               r = TASK_REGS(get_current());
+
+       save_user = r->is_user;
+       r->is_user = 0;
+       if ((sig == SIGFPE) || (sig == SIGSEGV) || (sig == SIGBUS) ||
+           (sig == SIGILL) || (sig == SIGTRAP))
+               GET_FAULTINFO_FROM_SC(r->faultinfo, sc);
+
+       change_sig(SIGUSR1, 1);
+
+       handler = sig_info[sig];
+
+       /* unblock SIGVTALRM, SIGIO if sig isn't IRQ signal */
+       if ((sig != SIGIO) && (sig != SIGWINCH) && (sig != SIGVTALRM))
+               unblock_signals();
+
+       handler(sig, r);
+
+       errno = save_errno;
+       r->is_user = save_user;
+}
+
 /* Copied from linux/compiler-gcc.h since we can't include it directly */
 #define barrier() __asm__ __volatile__("": : :"memory")
 
diff --git a/arch/um/os-Linux/skas/Makefile b/arch/um/os-Linux/skas/Makefile
index 5fd8d4d..d2ea340 100644
--- a/arch/um/os-Linux/skas/Makefile
+++ b/arch/um/os-Linux/skas/Makefile
@@ -1,10 +1,10 @@
 #
-# Copyright (C) 2002 - 2004 Jeff Dike ([EMAIL PROTECTED])
+# Copyright (C) 2002 - 2007 Jeff Dike ([EMAIL PROTECTED],addtoit}.com)
 # Licensed under the GPL
 #
 
-obj-y := mem.o process.o trap.o
+obj-y := mem.o process.o
 
-USER_OBJS := mem.o process.o trap.o
+USER_OBJS := $(obj-y)
 
 include arch/um/scripts/Makefile.rules
diff --git a/arch/um/os-Linux/skas/trap.c b/arch/um/os-Linux/skas/trap.c
deleted file mode 100644
index a19a74f..0000000
--- a/arch/um/os-Linux/skas/trap.c
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (C) 2002 - 2007 Jeff Dike ([EMAIL PROTECTED],linux.intel}.com)
- * Licensed under the GPL
- */
-
-#include <errno.h>
-#include <signal.h>
-#include "sysdep/ptrace.h"
-#include "kern_constants.h"
-#include "as-layout.h"
-#include "kern_util.h"
-#include "os.h"
-#include "sigcontext.h"
-#include "task.h"
-
-void (*sig_info[NSIG])(int, struct uml_pt_regs *) = {
-       [SIGTRAP]       = relay_signal,
-       [SIGFPE]        = relay_signal,
-       [SIGILL]        = relay_signal,
-       [SIGWINCH]      = winch,
-       [SIGBUS]        = bus_handler,
-       [SIGSEGV]       = segv_handler,
-       [SIGIO]         = sigio_handler,
-       [SIGVTALRM]     = timer_handler };
-
-static struct uml_pt_regs ksig_regs[UM_NR_CPUS];
-
-void sig_handler_common_skas(int sig, void *sc_ptr)
-{
-       struct sigcontext *sc = sc_ptr;
-       struct uml_pt_regs *r;
-       void (*handler)(int, struct uml_pt_regs *);
-       int save_user, save_errno = errno;
-
-       /*
-        * This is done because to allow SIGSEGV to be delivered inside a SEGV
-        * handler.  This can happen in copy_user, and if SEGV is disabled,
-        * the process will die.
-        * XXX Figure out why this is better than SA_NODEFER
-        */
-       if (sig == SIGSEGV) {
-               change_sig(SIGSEGV, 1);
-               /*
-                * For segfaults, we want the data from the
-                * sigcontext.  In this case, we don't want to mangle
-                * the process registers, so use a static set of
-                * registers.  For other signals, the process
-                * registers are OK.
-                */
-               r = &ksig_regs[cpu()];
-               copy_sc(r, sc_ptr);
-       }
-       else r = TASK_REGS(get_current());
-
-       save_user = r->is_user;
-       r->is_user = 0;
-       if ((sig == SIGFPE) || (sig == SIGSEGV) || (sig == SIGBUS) ||
-           (sig == SIGILL) || (sig == SIGTRAP))
-               GET_FAULTINFO_FROM_SC(r->faultinfo, sc);
-
-       change_sig(SIGUSR1, 1);
-
-       handler = sig_info[sig];
-
-       /* unblock SIGVTALRM, SIGIO if sig isn't IRQ signal */
-       if ((sig != SIGIO) && (sig != SIGWINCH) && (sig != SIGVTALRM))
-               unblock_signals();
-
-       handler(sig, r);
-
-       errno = save_errno;
-       r->is_user = save_user;
-}
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to