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 <signal.h> and
    <ucontext.h>) 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-<os>-<cpu>.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-<os>.c is likely to be needed.
