Successfully tested platforms ============================= __PLATFORM__________________________________SIGSEGV__STACK_OVERFLOW__VERSION___ | | | alpha-dec-osf4.0d | yes | yes | 2.1 alpha-dec-osf4.0f | yes | yes | 2.1 alphaev56-dec-osf4.0f | yes | yes | 2.3 alpha-dec-osf4.0g | yes | yes | 2.1 alpha-dec-osf5.1 | yes | yes | 2.1 alphaev67-dec-osf5.1 | yes | yes | 2.2 alpha-unknown-freebsd4.8 | yes | yes | 2.1 alpha-portbld-freebsd5.5 | yes | yes | 2.3 alphaev67-unknown-linux2.4.17-gnu-glibc2.1 | yes | yes | 1.95 alphaev6-unknown-linux2.2.19-gnu-glibc2.2 | yes | yes | 2.1 alphaev67-unknown-linux2.2.20-gnu-glibc2.2 | yes | yes | 2.1 alphaev67-unknown-linux2.4.4-gnu-glibc2.2 | yes | yes | 2.1 alphaev6-unknown-linux2.4.9-gnu-glibc2.2 | yes | yes | 2.1 alphaev67-unknown-linux2.4.9-gnu-glibc2.2 | yes | yes | 2.1 alphaev6-unknown-linux2.4.18-gnu-glibc2.2 | yes | yes | 2.1 alphaev67-unknown-linux2.4.18-gnu-glibc2.2 | yes | yes | 2.1 alpha-unknown-linux2.4.19-gnu-glibc2.3 | yes | yes | 2.3 alphaev68-unknown-linux2.6.11-gnu-glibc2.3 | yes | yes | 2.2 alpha-unknown-openbsd3.7 | yes | yes | 2.2 alpha-unknown-netbsd1.6 | yes | yes | 2.1 armv4l-unknown-linux2.4.0-gnu-glibc2.2 | no | yes | 2.1 armv4l-unknown-linux2.4.3-gnu-glibc2.2 | yes | yes | 2.1 armv4l-unknown-linux2.4.9-gnu-glibc2.2 | no | yes | 2.0.1 armv5tel-unknown-linux2.4.20-gnu-glibc2.2 | yes | yes | 2.2 hppa1.1-hp-hpux11.00 | yes | yes | 2.1 hppa2.0-hp-hpux10.20 | yes | yes | 2.2 hppa2.0w-hp-hpux11.00 | yes | yes | 2.2 hppa2.0w-hp-hpux11.11 | yes | yes | 2.2 hppa-unknown-linux2.4.19-gnu-glibc2.2 | yes | yes | 2.0.1 hppa64-unknown-linux2.4.17-gnu-glibc2.2 | yes | yes | 2.1 i586-pc-beos | no | yes | 2.1 i686-pc-cygwin | yes | yes | 2.02 i686-pc-cygwin | yes | yes | 2.2 i386-apple-darwin8.6.1 | yes | yes | 2.3 i686-apple-darwin8.6.1 | yes | yes | 2.3 i586-pc-linux2.2.14-gnu-glibc2.1 | yes | yes | 2.1 i686-pc-linux2.2.14-gnu-glibc2.1 | yes | yes | 2.0 i686-pc-linux2.2.19-gnu-glibc2.1 | yes | yes | 1.95 i486-pc-linux2.2.21-gnu-glibc2.1 | yes | yes | 2.0 i586-pc-linux2.4.18-gnu-glibc2.1 | yes | yes | 2.0 i686-pc-linux2.4.19-gnu-glibc2.1 | yes | yes | 2.2 i686-pc-linux2.2.16-gnu-glibc2.2 | yes | yes | 2.0 i686-pc-linux2.2.19-gnu-glibc2.2 | yes | yes | 2.0 i686-pc-linux2.4.7-gnu-glibc2.2 | yes | yes | 2.1 i586-pc-linux2.4.9-gnu-glibc2.2 | yes | yes | 2.0 i686-pc-linux2.4.9-gnu-glibc2.2 | yes | yes | 2.0 i386-pc-linux2.4.18-gnu-glibc2.2 | yes | yes | 2.0 i686-pc-linux2.4.18-gnu-glibc2.2 | yes | yes | 2.0 i586-pc-linux2.4.19-gnu-glibc2.2 | yes | yes | 2.0 i686-pc-linux2.4.19-gnu-glibc2.2 | yes | yes | 2.0 i686-pc-linux2.4.20-gnu-glibc2.2 | yes | yes | 2.0 i586-pc-linux2.2.19-gnu-glibc2.3 | yes | yes | 2.1 i686-pc-linux2.4.18-gnu-glibc2.3 | yes | yes | 1.97 i486-pc-linux2.4.20-gnu-glibc2.3 | yes | yes | 2.0 i586-pc-linux2.4.20-gnu-glibc2.3 | yes | yes | 2.0 i686-pc-linux2.4.20-gnu-glibc2.3 | yes | yes | 2.0 i686-pc-linux2.4.21-gnu-glibc2.3 | yes | yes | 2.0 i586-pc-linux2.4.22-gnu-glibc2.3 | yes | yes | 2.0 i386-pc-mingw32 | yes | yes | 2.2 i586-pc-mingw32 | yes | yes | 2.1 i686-pc-mingw32 | yes | yes | 1.96 i386-pc-solaris2.9 | yes | yes | 2.2 i386-pc-solaris2.10 | yes | yes | 2.3 i386-pc-solaris2.11 | yes | yes | 2.2 i686-pc-win32-msvc6 | yes | yes | 1.96 i386-unknown-freebsd4.0 | yes | yes | 2.1 i386-unknown-freebsd4.0-gnu-glibc2.3 | yes | yes | 2.1 i386-unknown-freebsd4.6 | yes | yes | 1.95 i386-unknown-freebsd4.7 | yes | yes | 2.1 i386-unknown-freebsd4.8 | yes | yes | 2.1 i386-unknown-freebsd4.9 | yes | yes | 2.2 i386-unknown-freebsd4.10 | yes | yes | 2.2 i386-unknown-freebsd5.0 | yes | yes | 2.3 i386-portbld-freebsd6.0 | yes | yes | 2.3 i386-unknown-netbsdelf1.6 | no | no | 2.1 i386-unknown-netbsdelf2.0.2 | yes | yes | 2.4 i386-unknown-netbsdelf3.0 | yes | yes | 2.4 i386-unknown-netbsd | yes | no | 2.2 i386-unknown-openbsd3.2 | yes | yes | 2.3 i386-unknown-openbsd3.3 | yes | yes | 2.1 i386-unknown-openbsd3.4 | yes | yes | 2.2 i386-unknown-openbsd3.6 | yes | yes | 2.1 ia64-portbld-freebsd7.0 | yes | no | 2.3 ia64-hp-hpux11.22 | yes | no | 2.1 ia64-hp-hpux11.23 | yes | no | 2.2 ia64-unknown-linux2.4.18-gnu-glibc2.2 | yes | yes | 2.4 ia64-unknown-linux2.6.9-gnu-glibc2.3 | yes | no | 2.3 mips-sgi-irix6.5 | yes | yes | 2.3 mips-unknown-linux2.4.27-gnu-glibc2.3 | yes | yes | 2.3 nsr-tandem-nsk | no | no | 2.1 rs6000-ibm-aix3.2.5 | yes | no | 2.2 rs6000-ibm-aix4.2.0.0 | yes | yes | 2.2 rs6000-ibm-aix4.2.1.0 | yes | yes | 2.1 powerpc-ibm-aix4.3.2.0 | yes | yes | 2.3 powerpc-ibm-aix4.3.3.0 | yes | yes | 1.95 powerpc-ibm-aix5.1.0.0 | yes | yes | 2.3 powerpc-ibm-aix5.2.0.0 | yes | no | 2.1 powerpc-apple-darwin5.5 | yes | yes | 2.2 powerpc-apple-darwin6.8 | yes | yes | 2.2 powerpc-apple-darwin7.7.0 | yes | yes | 2.2 powerpc-apple-darwin7.8.0 | yes | yes | 2.2 powerpc-apple-darwin7.9.0 | yes | yes | 2.3 powerpc-apple-darwin8.1.0 | yes | yes | 2.2 powerpc-apple-darwin8.3.0 | yes | yes | 2.2 powerpc-apple-darwin8.4.0 | yes | yes | 2.2 powerpc-unknown-linux2.2.17-gnu-glibc2.1 | no | yes | 1.95 powerpc-unknown-linux2.2.17-gnu-glibc2.2 | yes | yes | 2.0.1 powerpc-unknown-linux2.4.19-gnu-glibc2.2 | yes | yes | 2.3 powerpc-unknown-linux2.4.28-gnu-glibc2.2 | yes | yes | 2.1 powerpc-unknown-linux2.4.26-gnu-glibc2.3 | yes | yes | 2.1 powerpc-unknown-linux2.6.10-gnu-glibc2.3 | yes | yes | 2.2 powerpc-unknown-netbsd2.0 | yes | no | 2.1 powerpc64-unknown-linux2.6.5-gnu-glibc2.3 | yes | yes | 2.4 sparc-sun-solaris2.5.1 | yes | yes | 2.2 sparc-sun-solaris2.6 | yes | yes | 2.2 sparc-sun-solaris2.7 | yes | yes | 2.3 sparc-sun-solaris2.8 | yes | yes | 2.3 sparc-sun-solaris2.9 | yes | yes | 2.3 sparc-sun-solaris2.10 | yes | yes | 2.3 sparc-sun-solaris2.11 | yes | yes | 2.4 sparc64-unknown-linux2.2.18-gnu-glibc2.1 | no | no | 1.95 sparc64-unknown-linux2.4.28-gnu-glibc2.3 | yes | no | 2.3 sparc64-unknown-openbsd3.6 | no | no | 2.2 x86_64-unknown-linux2.4.21-gnu-glibc2.2 | yes | yes | 2.1 x86_64-unknown-linux2.4.21-gnu-glibc2.3 | yes | yes | 2.1 x86_64-unknown-linux2.6.3-gnu-glibc2.3 | yes | yes | 2.1 x86_64-unknown-linux2.6.9-gnu-glibc2.3 | yes | yes | 2.3 x86_64-unknown-linux2.6.16.13-gnu-glibc2.4 | yes | yes | 2.4 amd64-portbld-freebsd5.4 | yes | yes | 2.2 amd64-portbld-freebsd6.0 | yes | yes | 2.3 amd64-portbld-freebsd7.0 | yes | yes | 2.3 On FreeBSD 5.2, libsigsegv works best if the /proc filesystem is mounted. (It is not mounted by default.) Porting to new platforms ======================== On Unix systems, where faults are notified to the program through a signal handler, the core routines in handler-unix.c can be used without modifications. But they need the following bits of information. Each of them is stored in a platform dependent file; the file is chosen in configure. * List of signals that are sent when an invalid virtual memory address is accessed, or when the stack overflows. This is a file among signals-*.h. configure chooses and sets the variable CFG_SIGNALS. * What arguments are passed to a fault handler. This is a file among fault-*.h. configure chooses and sets the variable CFG_FAULT. * How to determine the stack's virtual memory area. This is a file among stackvma-*.c. configure chooses and sets the variable CFG_STACKVMA. * How to leave a signal handler that is executing on the alternate signal stack. This is a file among leave-*.c. configure chooses and sets the variable CFG_LEAVE. For each of these, the approach should be: - Find a way to implement the needed functionality. This might involve study of the system include files (in particular and ) and of the kernel sources. For CFG_FAULT, the best starting point is to run the tests/sigsegv1 program with a breakpoint set at 'sigsegv_handler'. - Add to configure.in a test whether your new code works. This will help portability to platforms similar to yours. Then regenerate the configure script (run "autoconf") and verify that the test says "yes" on your platform. - Create a platform dependent file (e.g. fault--.h) and change configure.in to choose this particular file when your test says "yes". Then regenerate the configure script (run "autoconf"). - Verify that "make" and "make check" pass. For non-Unix systems, a separate handler-.c is likely to be needed.