Return to BSD News archive
Path: euryale.cc.adfa.oz.au!newshost.carno.net.au!harbinger.cc.monash.edu.au!munnari.OZ.AU!news.mel.connect.com.au!news.mel.aone.net.au!grumpy.fl.net.au!news.webspan.net!newsfeeds.sol.net!newspump.sol.net!howland.erols.net!news.sprintlink.net!news-peer.sprintlink.net!news.sprintlink.net!news-hub.sprintlink.net!news.sprintlink.net!news-stk-3.sprintlink.net!news.rain.net!pacifier!deraadt From: deraadt@theos.com (Theo de Raadt) Newsgroups: comp.unix.bsd.netbsd.misc,comp.unix.bsd.freebsd.misc Subject: Re: Object Oriented Databases for NetBSD/FreeBSD? Date: 19 Feb 1997 20:14:10 GMT Organization: Theo Ports Kernels For Fun And Profit Lines: 49 Message-ID: <DERAADT.97Feb19131410@zeus.pacifier.com> References: <5b58kv$2e1@gummo.bbb.sub.org> <5brbcr$724@trumpet.uni-mannheim.de> <5e9vkr$f84@fu-berlin.de> <5ee982$f4v@gummo.bbb.sub.org> NNTP-Posting-Host: zeus.theos.com In-reply-to: bertram@gummo.bbb.sub.org's message of 19 Feb 1997 08:14:10 +0100 Xref: euryale.cc.adfa.oz.au comp.unix.bsd.netbsd.misc:5508 comp.unix.bsd.freebsd.misc:35827 In article <5ee982$f4v@gummo.bbb.sub.org> bertram@gummo.bbb.sub.org (Bertram Barth) writes: With some minor modifications I could compile it on Netbsd/i386 + gcc-2.7.2 and on FreeBSD-2.1.6 + gcc-2.6.3, on FreeBSD it runs solid and works great! On NetBSD there are some problems since the signal-handler for SIGSEGV doesn't get access to the faulting address (yooda's support for smart pointers to persistent object relies on this feature). With a patched kernel I was able to run it on NetBSD also, but not as stable as on FreeBSD (I didn't go deeper in that, since on FreeBSD it works). Yeah, I know the hack you used. Heh. What you really want is the POSIX 1003.1b (realtime) feature called SA_SIGINFO. If you have access to an SGI, Solaris, or OSF box, you can check <sys/siginfo.h>. If the SA_SIGINFO option is requested, a signal handler will be passed a bunch more information about the signal in question. In the case of SIGSEGV, one added piece of info is the fault address.. Basically setup by.. struct sigaction act; memset(&act, 0, sizeof act); act.sa_handler = sigsegv; sigemptyset(&act.sa_mask); act.sa_flags = SA_SIGINFO; return sigaction(SIGSEGV, &act, NULL); Then later.... void sigsegv(sig, sip, scp) int sig; siginfo_t *sip; struct sigcontext *scp; { printf("Faulting at %p\n", sip->si_addr); .... We just recently added this feature to OpenBSD. Getting it right on all the processor families took quite a bit of work.. -- This space not left unintentionally unblank. deraadt@theos.com www.OpenBSD.org -- We're fixing security problems so you can sleep at night.