All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jeff Dike <jdike@addtoit.com>
To: uml-devel <user-mode-linux-devel@lists.sourceforge.net>
Subject: [uml-devel] [RFC PATCH 3/9] SKAS4 - Host SIGSEGV siginfo_t extensions
Date: Wed, 9 Jan 2008 17:09:51 -0500	[thread overview]
Message-ID: <20080109220951.GA9109@c2.user-mode-linux.org> (raw)

Add CPU trap number and error code to siginfo_t in the SIGSEGV case for x86.

Index: linux-2.6-skas4/arch/x86/mm/fault_32.c
===================================================================
--- linux-2.6-skas4.orig/arch/x86/mm/fault_32.c	2008-01-08 18:48:30.000000000 -0500
+++ linux-2.6-skas4/arch/x86/mm/fault_32.c	2008-01-08 18:48:36.000000000 -0500
@@ -211,6 +211,8 @@ static noinline void force_sig_info_faul
 	info.si_errno = 0;
 	info.si_code = si_code;
 	info.si_addr = (void __user *)address;
+	info.si_trapno = tsk->thread.trap_no;
+	info.si_error = tsk->thread.error_code;
 	force_sig_info(si_signo, &info, tsk);
 }
 
Index: linux-2.6-skas4/arch/x86/mm/fault_64.c
===================================================================
--- linux-2.6-skas4.orig/arch/x86/mm/fault_64.c	2008-01-08 18:48:30.000000000 -0500
+++ linux-2.6-skas4/arch/x86/mm/fault_64.c	2008-01-08 18:48:36.000000000 -0500
@@ -502,6 +502,8 @@ bad_area_nosemaphore:
 		info.si_errno = 0;
 		/* info.si_code has been set above */
 		info.si_addr = (void __user *)address;
+		info.si_trapno = tsk->thread.trap_no;
+		info.si_error = tsk->thread.error_code;
 		force_sig_info(SIGSEGV, &info, tsk);
 		return;
 	}
@@ -577,6 +579,8 @@ do_sigbus:
 	info.si_errno = 0;
 	info.si_code = BUS_ADRERR;
 	info.si_addr = (void __user *)address;
+	info.si_trapno = tsk->thread.trap_no;
+	info.si_error = tsk->thread.error_code;
 	force_sig_info(SIGBUS, &info, tsk);
 	return;
 }
Index: linux-2.6-skas4/include/asm-generic/siginfo.h
===================================================================
--- linux-2.6-skas4.orig/include/asm-generic/siginfo.h	2008-01-08 18:48:30.000000000 -0500
+++ linux-2.6-skas4/include/asm-generic/siginfo.h	2008-01-08 18:48:36.000000000 -0500
@@ -82,6 +82,9 @@ typedef struct siginfo {
 #ifdef __ARCH_SI_TRAPNO
 			int _trapno;	/* TRAP # which caused the signal */
 #endif
+#ifdef __ARCH_SI_ERROR
+			int _error;	/* CPU error code */
+#endif
 		} _sigfault;
 
 		/* SIGPOLL */
@@ -112,6 +115,12 @@ typedef struct siginfo {
 #ifdef __ARCH_SI_TRAPNO
 #define si_trapno	_sifields._sigfault._trapno
 #endif
+#ifdef __ARCH_SI_ERROR
+#define si_error	_sifields._sigfault._error
+#endif
+#ifdef __ARCH_SI_ERROR
+#define si_error	_sifields._sigfault._error
+#endif
 #define si_band		_sifields._sigpoll._band
 #define si_fd		_sifields._sigpoll._fd
 
Index: linux-2.6-skas4/include/asm-x86/siginfo.h
===================================================================
--- linux-2.6-skas4.orig/include/asm-x86/siginfo.h	2008-01-08 18:48:30.000000000 -0500
+++ linux-2.6-skas4/include/asm-x86/siginfo.h	2008-01-08 18:48:36.000000000 -0500
@@ -5,6 +5,12 @@
 # define __ARCH_SI_PREAMBLE_SIZE	(4 * sizeof(int))
 #endif
 
+#define __ARCH_SI_TRAPNO
+#define __ARCH_SI_ERROR
+
+#define __ARCH_SI_TRAPNO
+#define __ARCH_SI_ERROR
+
 #include <asm-generic/siginfo.h>
 
 #endif
Index: linux-2.6-skas4/include/linux/signalfd.h
===================================================================
--- linux-2.6-skas4.orig/include/linux/signalfd.h	2008-01-08 18:48:30.000000000 -0500
+++ linux-2.6-skas4/include/linux/signalfd.h	2008-01-08 18:48:36.000000000 -0500
@@ -26,6 +26,8 @@ struct signalfd_siginfo {
 	__u64 ssi_utime;
 	__u64 ssi_stime;
 	__u64 ssi_addr;
+	__u32 ssi_trap_no;
+	__u32 ssi_error_code;
 
 	/*
 	 * Pad strcture to 128 bytes. Remember to update the
@@ -36,7 +38,7 @@ struct signalfd_siginfo {
 	 * comes out of a read(2) and we really don't want to have
 	 * a compat on read(2).
 	 */
-	__u8 __pad[48];
+	__u8 __pad[40];
 };
 
 
Index: linux-2.6-skas4/kernel/signal.c
===================================================================
--- linux-2.6-skas4.orig/kernel/signal.c	2008-01-08 18:48:30.000000000 -0500
+++ linux-2.6-skas4/kernel/signal.c	2008-01-08 18:48:36.000000000 -0500
@@ -2108,6 +2108,9 @@ int copy_siginfo_to_user(siginfo_t __use
 #ifdef __ARCH_SI_TRAPNO
 		err |= __put_user(from->si_trapno, &to->si_trapno);
 #endif
+#ifdef __ARCH_SI_ERROR
+		err |= __put_user(from->si_error, &to->si_error);
+#endif
 		break;
 	case __SI_CHLD:
 		err |= __put_user(from->si_pid, &to->si_pid);

-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace
_______________________________________________
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel

                 reply	other threads:[~2008-01-09 22:09 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20080109220951.GA9109@c2.user-mode-linux.org \
    --to=jdike@addtoit.com \
    --cc=user-mode-linux-devel@lists.sourceforge.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.