From owner-FreeBSD-users-jp@jp.freebsd.org  Wed Jun  3 17:57:11 1998
Received: (from daemon@localhost)
	by jaz.jp.freebsd.org (8.8.8+3.0Wbeta13/8.7.3) id RAA02242;
	Wed, 3 Jun 1998 17:57:11 +0900 (JST)
	(envelope-from owner-FreeBSD-users-jp@jp.FreeBSD.org)
Received: from fgwnews.fujitsu.co.jp (fgwnews.fujitsu.co.jp [164.71.1.134])
	by jaz.jp.freebsd.org (8.8.8+3.0Wbeta13/8.7.3) with ESMTP id RAA02233
	for <FreeBSD-users-jp@jp.freebsd.org>; Wed, 3 Jun 1998 17:57:10 +0900 (JST)
	(envelope-from ksr@lp.nm.fujitsu.co.jp)
Received: from fdmmail.fujitsu.co.jp by fgwnews.fujitsu.co.jp (8.8.8+2.7Wbeta7/3.6W-MX980602-Fujitsu Gateway)
	id RAA01912; Wed, 3 Jun 1998 17:57:09 +0900 (JST)
Received: from lpdm.lp.nm.fujitsu.co.jp by fdmmail.fujitsu.co.jp (8.8.8+2.7Wbeta7/3.6W-980601-Fujitsu Domain Master)
	id RAA21786; Wed, 3 Jun 1998 17:56:37 +0900 (JST)
Received: from kumando.lp.nm.fujitsu.co.jp (kumando.lp.nm.fujitsu.co.jp [133.162.63.40]) by lpdm.lp.nm.fujitsu.co.jp (8.6.9+2.4Wb/3.3Wb-primary00) with ESMTP id RAA25408 for <FreeBSD-users-jp@jp.freebsd.org>; Wed, 3 Jun 1998 17:56:36 +0900
Received: by kumando.lp.nm.fujitsu.co.jp (8.7.5/6.4J.6-lpslave02)
	id SAA28685; Wed, 3 Jun 1998 18:19:07 +0900 (JST)
To: FreeBSD-users-jp@jp.freebsd.org
References: <199806030821.RAA21767@tukuba.adin.co.jp>
From: ksr <ksr@lp.nm.fujitsu.co.jp>
Date: 03 Jun 1998 18:19:06 +0900
In-Reply-To: futatuki@adin.co.jp's message of Wed, 3 Jun 1998 17:21:13 +0900 (JST)
Message-ID: <wfrlnrej111.fsf@kumando.lp.nm.fujitsu.co.jp>
Lines: 77
X-Mailer: Gnus v5.5/Emacs 20.2
Reply-To: FreeBSD-users-jp@jp.freebsd.org
Precedence: bulk
X-Distribute: distribute [version 2.1 (Alpha) patchlevel=24]
X-Sequence: FreeBSD-users-jp 29029
Subject: [FreeBSD-users-jp 29029] Re: Signal_handler argument
Errors-To: owner-FreeBSD-users-jp@jp.freebsd.org
Sender: owner-FreeBSD-users-jp@jp.freebsd.org

$B$?$J$+$G$9!#(B

> $B8=:_!"(BFreeBSD2.2.2-R$B$r;H$C$F%W%m%0%i%`$r:n$C$F$$$k$N$G$9$,!"(B
> $B%7%0%J%k%O%s%I%i$N4X?t$,<h$l$k0z?t$,J,$+$i$:!":$$C$F$$$^$9!#(B
> 
> $BNc$($P!"(B
> signal(SIGBUS,function);
> $B$H$7$?;~$K!"$3$N(Bfunction$B4X?t$O$I$NMM$J0z?t$,<h$l$k$N$G$7$g$&$+!)(B
// sig  : $B%7%0%J%kHV9f(B
// code : $B%7%0%J%kH/@8;~$N%(%i!<$N<oN`(B
// scp  : $B%7%0%J%kH/@8;~$N>uBV(B($B$?$V$s(B)
// addr : $B%7%0%J%k$,H/@8$7$?%a%b%j$N%"%I%l%9(B

SunOS$B$HF1$8$h$&$G$9!#(B(2.1.5$B$G3NG'(B) 
$B$J$<$+(Baddr$B$O(B0$B$N$h$&$J$N$G!"(Bscp$B$+$i(Beip$B$G$o$+$j$^$9!#(B
> function(int sig,int code,struct sigcontext *scp,char *addr)

---
$B$3$NNc$G$O6/0z$K0z?t$N%"%I%l%9$r<h$C$F$^$9$,!">e$N4X?t@k8@$=$N$^$^$G(Bok$B$G$9!#(B
---
#include <signal.h>
#include <machine/frame.h>
#include <machine/signal.h>

int 
func (int i)
{
  struct sigframe *f;
  f = &i;
  printf ("signum=%d\n", f->sf_signum);
  printf ("code=%d\n", f->sf_code);
  printf ("scp=0x%x\n", f->sf_scp);
  printf ("addr=0x%x\n", f->sf_addr);
  printf ("handler=%d\n", f->sf_handler);
  printf ("%d\n", f->sf_scp->sc_onstack);
  printf ("%d\n", f->sf_scp->sc_mask);
  printf ("%d\n", f->sf_scp->sc_esp);
  printf ("%d\n", f->sf_scp->sc_ebp);
  printf ("%d\n", f->sf_scp->sc_isp);
  printf ("eip=0x%x\n", f->sf_scp->sc_eip);
  printf ("%d\n", f->sf_scp->sc_efl);
  printf ("%d\n", f->sf_scp->sc_es);
  printf ("%d\n", f->sf_scp->sc_ds);
  printf ("%d\n", f->sf_scp->sc_cs);
  printf ("%d\n", f->sf_scp->sc_ss);
  printf ("%d\n", f->sf_scp->sc_edi);
  printf ("%d\n", f->sf_scp->sc_esi);
  printf ("%d\n", f->sf_scp->sc_ebx);
  printf ("%d\n", f->sf_scp->sc_edx);
  printf ("%d\n", f->sf_scp->sc_ecx);
  printf ("%d\n", f->sf_scp->sc_eax);
  printf ("%d\n", f->sf_sc.sc_onstack);
  printf ("%d\n", f->sf_sc.sc_mask);
  printf ("%d\n", f->sf_sc.sc_esp);
  printf ("%d\n", f->sf_sc.sc_ebp);
  printf ("%d\n", f->sf_sc.sc_isp);
  printf ("eip=0x%x\n", f->sf_sc.sc_eip);
  printf ("%d\n", f->sf_sc.sc_efl);
  printf ("%d\n", f->sf_sc.sc_es);
  printf ("%d\n", f->sf_sc.sc_ds);
  printf ("%d\n", f->sf_sc.sc_cs);
  printf ("%d\n", f->sf_sc.sc_ss);
  printf ("%d\n", f->sf_sc.sc_edi);
  printf ("%d\n", f->sf_sc.sc_esi);
  printf ("%d\n", f->sf_sc.sc_ebx);
  printf ("%d\n", f->sf_sc.sc_edx);
  printf ("%d\n", f->sf_sc.sc_ecx);
  printf ("%d\n", f->sf_sc.sc_eax);
  exit (0);
}
main ()
{
  char *p = 0;
  signal (SIGSEGV, func);
  signal (SIGBUS, func);
  *p = 0;
}
