diff options
author | alm <alm@FreeBSD.org> | 1993-12-03 05:10:08 +0000 |
---|---|---|
committer | alm <alm@FreeBSD.org> | 1993-12-03 05:10:08 +0000 |
commit | 2c48c35e86d75ce81452b240cee8586254d83c52 (patch) | |
tree | 4060d6912e801000759cb2790a59c27cb2d477c6 /sys/kern/subr_trap.c | |
parent | db1888bf053844c4661a8e63541981d72c12ce28 (diff) | |
download | FreeBSD-src-2c48c35e86d75ce81452b240cee8586254d83c52.zip FreeBSD-src-2c48c35e86d75ce81452b240cee8586254d83c52.tar.gz |
From: Jeffrey Hsu <hsu@soda.berkeley.edu>
The following patch adds the addr argument to signal handlers.
The kernel with the patch is no more and no less in compliance or in
violation of POSIX and ANSI C than the kernel before the patch.
The added functionality this addr argument provides is quite useful. It
enables an entire class of algorithms which use mprotect to trace memory
references. Beside garbage collectors, I have heard of this technique being
applied to debuggers and profilers. The only benchmarking I've performed is
using akcl to compile maxima: without the kernel patch, it takes 7 hours to
compile maxima, while with stratified garbage collection, it only takes 50
minutes.
Basically, I can't think of a reason not to add the addr argument and there
is a compelling need for it.
If you find the patch acceptable, please let me know so I can send my
FreeBSD akcl config files to wfs for inclusion in the core akcl release.
The old 386BSD config files there won't work on either NetBSD or FreeBSD.
Diffstat (limited to 'sys/kern/subr_trap.c')
-rw-r--r-- | sys/kern/subr_trap.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/sys/kern/subr_trap.c b/sys/kern/subr_trap.c index d413307..97a7418 100644 --- a/sys/kern/subr_trap.c +++ b/sys/kern/subr_trap.c @@ -34,7 +34,7 @@ * SUCH DAMAGE. * * from: @(#)trap.c 7.4 (Berkeley) 5/13/91 - * $Id: trap.c,v 1.8 1993/11/25 01:31:01 wollman Exp $ + * $Id: trap.c,v 1.9 1993/11/28 09:28:54 davidg Exp $ */ /* @@ -370,6 +370,9 @@ nogo: goto we_re_toast; } i = (rv == KERN_PROTECTION_FAILURE) ? SIGBUS : SIGSEGV; + ucode = type &~ T_USER; + frame.tf_err = eva; + /* kludge to pass faulting virtual address to sendsig */ break; } |