Print a short info about fatal segfaults like other archs do.

Signed-off-by: Richard Weinberger <rich...@nod.at>
---
 arch/um/kernel/trap.c |   24 ++++++++++++++++++++++++
 1 files changed, 24 insertions(+), 0 deletions(-)

diff --git a/arch/um/kernel/trap.c b/arch/um/kernel/trap.c
index 637c650..8c7b882 100644
--- a/arch/um/kernel/trap.c
+++ b/arch/um/kernel/trap.c
@@ -113,6 +113,27 @@ out_of_memory:
        return 0;
 }
 
+static void show_segv_info(struct uml_pt_regs *regs)
+{
+       struct task_struct *tsk = current;
+       struct faultinfo *fi = UPT_FAULTINFO(regs);
+
+       if (!unhandled_signal(tsk, SIGSEGV))
+               return;
+
+       if (!printk_ratelimit())
+               return;
+
+       printk("%s%s[%d]: segfault at %lx ip %p sp %p error %x",
+               task_pid_nr(tsk) > 1 ? KERN_INFO : KERN_EMERG,
+               tsk->comm, task_pid_nr(tsk), FAULT_ADDRESS(*fi),
+               (void *)UPT_IP(regs), (void *)UPT_SP(regs),
+               fi->error_code);
+
+       print_vma_addr(KERN_CONT " in ", UPT_IP(regs));
+       printk(KERN_CONT "\n");
+}
+
 static void bad_segv(struct faultinfo fi, unsigned long ip)
 {
        struct siginfo si;
@@ -141,6 +162,7 @@ void segv_handler(int sig, struct uml_pt_regs *regs)
        struct faultinfo * fi = UPT_FAULTINFO(regs);
 
        if (UPT_IS_USER(regs) && !SEGV_IS_FIXABLE(fi)) {
+               show_segv_info(regs);
                bad_segv(*fi, UPT_IP(regs));
                return;
        }
@@ -202,6 +224,8 @@ unsigned long segv(struct faultinfo fi, unsigned long ip, 
int is_user,
                      address, ip);
        }
 
+       show_segv_info(regs);
+
        if (err == -EACCES) {
                si.si_signo = SIGBUS;
                si.si_errno = 0;
-- 
1.7.4.2


------------------------------------------------------------------------------
What Every C/C++ and Fortran developer Should Know!
Read this article and learn how Intel has extended the reach of its 
next-generation tools to help Windows* and Linux* C/C++ and Fortran 
developers boost performance applications - including clusters. 
http://p.sf.net/sfu/intel-dev2devmay
_______________________________________________
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel

Reply via email to