Fix for x86_64-freebsd platforms.
[libsigsegv/ericb.git] / PORTING
blob8fceceb0fa67df953076f9c25740685e5d3ee211
1 Successfully tested platforms
2 =============================
4 __PLATFORM__________________________________SIGSEGV__STACK_OVERFLOW__VERSION___
5                                            |         |           |
6 alpha-dec-osf4.0d                          |   yes   |   yes     | 2.1
7 alpha-dec-osf4.0f                          |   yes   |   yes     | 2.1
8 alphaev56-dec-osf4.0f                      |   yes   |   yes     | 2.4
9 alpha-dec-osf4.0g                          |   yes   |   yes     | 2.1
10 alpha-dec-osf5.1                           |   yes   |   yes     | 2.1
11 alphaev67-dec-osf5.1                       |   yes   |   yes     | 2.2
12 alpha-unknown-freebsd4.8                   |   yes   |   yes     | 2.1
13 alpha-portbld-freebsd5.5                   |   yes   |   yes     | 2.3
14 alphaev67-unknown-linux2.4.17-gnu-glibc2.1 |   yes   |   yes     | 1.95
15 alphaev6-unknown-linux2.2.19-gnu-glibc2.2  |   yes   |   yes     | 2.1
16 alphaev67-unknown-linux2.2.20-gnu-glibc2.2 |   yes   |   yes     | 2.1
17 alphaev67-unknown-linux2.4.4-gnu-glibc2.2  |   yes   |   yes     | 2.1
18 alphaev6-unknown-linux2.4.9-gnu-glibc2.2   |   yes   |   yes     | 2.1
19 alphaev67-unknown-linux2.4.9-gnu-glibc2.2  |   yes   |   yes     | 2.1
20 alphaev6-unknown-linux2.4.18-gnu-glibc2.2  |   yes   |   yes     | 2.1
21 alphaev67-unknown-linux2.4.18-gnu-glibc2.2 |   yes   |   yes     | 2.1
22 alpha-unknown-linux2.4.19-gnu-glibc2.3     |   yes   |   yes     | 2.4
23 alphaev68-unknown-linux2.6.11-gnu-glibc2.3 |   yes   |   yes     | 2.2
24 alpha-unknown-openbsd3.7                   |   yes   |   yes     | 2.2
25 alpha-unknown-netbsd1.6                    |   yes   |   yes     | 2.1
26 armv4l-unknown-linux2.4.0-gnu-glibc2.2     |   no    |   yes     | 2.1
27 armv4l-unknown-linux2.4.3-gnu-glibc2.2     |   yes   |   yes     | 2.1
28 armv4l-unknown-linux2.4.9-gnu-glibc2.2     |   no    |   yes     | 2.0.1
29 armv5tel-unknown-linux2.4.20-gnu-glibc2.2  |   yes   |   yes     | 2.2
30 armv6l-unknown-linux2.6.18-gnu-glibc2.3    |   yes   |   yes     | 2.4
31 hppa1.1-hp-hpux11.00                       |   yes   |   yes     | 2.1
32 hppa2.0-hp-hpux10.20                       |   yes   |   yes     | 2.2
33 hppa2.0w-hp-hpux11.00                      |   yes   |   yes     | 2.2
34 hppa2.0w-hp-hpux11.11                      |   yes   |   yes     | 2.4
35 hppa-unknown-linux2.4.19-gnu-glibc2.2      |   yes   |   yes     | 2.0.1
36 hppa64-unknown-linux2.4.17-gnu-glibc2.2    |   yes   |   yes     | 2.1
37 hppa2.0-unknown-linux2.6.20.1-gnu-glibc2.3 |   yes   |   no      | 2.4
38 i586-pc-beos                               |   no    |   yes     | 2.1
39 i686-pc-cygwin                             |   yes   |   yes     | 2.02
40 i686-pc-cygwin                             |   yes   |   yes     | 2.4
41 i386-apple-darwin8.6.1                     |   yes   |   yes     | 2.3
42 i686-apple-darwin8.6.1                     |   yes   |   yes     | 2.3
43 i386-apple-darwin8.8.1                     |   yes   |   yes     | 2.4
44 i386-apple-darwin8.8.2                     |   yes   |   yes     | 2.4
45 i386-apple-darwin8.8.3                     |   yes   |   yes     | 2.4
46 i386-apple-darwin8.9.1                     |   yes   |   yes     | 2.4
47 i386-apple-darwin8.10.1                    |   yes   |   yes     | 2.4
48 i586-pc-linux2.2.14-gnu-glibc2.1           |   yes   |   yes     | 2.1
49 i686-pc-linux2.2.14-gnu-glibc2.1           |   yes   |   yes     | 2.0
50 i686-pc-linux2.2.19-gnu-glibc2.1           |   yes   |   yes     | 1.95
51 i486-pc-linux2.2.21-gnu-glibc2.1           |   yes   |   yes     | 2.0
52 i586-pc-linux2.4.18-gnu-glibc2.1           |   yes   |   yes     | 2.0
53 i686-pc-linux2.4.19-gnu-glibc2.1           |   yes   |   yes     | 2.2
54 i686-pc-linux2.2.16-gnu-glibc2.2           |   yes   |   yes     | 2.0
55 i686-pc-linux2.2.19-gnu-glibc2.2           |   yes   |   yes     | 2.0
56 i686-pc-linux2.4.7-gnu-glibc2.2            |   yes   |   yes     | 2.1
57 i586-pc-linux2.4.9-gnu-glibc2.2            |   yes   |   yes     | 2.0
58 i686-pc-linux2.4.9-gnu-glibc2.2            |   yes   |   yes     | 2.0
59 i386-pc-linux2.4.18-gnu-glibc2.2           |   yes   |   yes     | 2.0
60 i686-pc-linux2.4.18-gnu-glibc2.2           |   yes   |   yes     | 2.0
61 i586-pc-linux2.4.19-gnu-glibc2.2           |   yes   |   yes     | 2.0
62 i686-pc-linux2.4.19-gnu-glibc2.2           |   yes   |   yes     | 2.0
63 i686-pc-linux2.4.20-gnu-glibc2.2           |   yes   |   yes     | 2.0
64 i586-pc-linux2.2.19-gnu-glibc2.3           |   yes   |   yes     | 2.1
65 i686-pc-linux2.4.18-gnu-glibc2.3           |   yes   |   yes     | 1.97
66 i486-pc-linux2.4.20-gnu-glibc2.3           |   yes   |   yes     | 2.0
67 i586-pc-linux2.4.20-gnu-glibc2.3           |   yes   |   yes     | 2.0
68 i686-pc-linux2.4.20-gnu-glibc2.3           |   yes   |   yes     | 2.0
69 i686-pc-linux2.4.21-gnu-glibc2.3           |   yes   |   yes     | 2.0
70 i586-pc-linux2.4.22-gnu-glibc2.3           |   yes   |   yes     | 2.0
71 i386-pc-mingw32                            |   yes   |   yes     | 2.4
72 i586-pc-mingw32                            |   yes   |   yes     | 2.1
73 i686-pc-mingw32                            |   yes   |   yes     | 1.96
74 i386-pc-solaris2.9                         |   yes   |   yes     | 2.2
75 i386-pc-solaris2.10                        |   yes   |   yes     | 2.4
76 i386-pc-solaris2.11                        |   yes   |   yes     | 2.2
77 i686-pc-win32-msvc6                        |   yes   |   yes     | 1.96
78 i386-unknown-freebsd4.0                    |   yes   |   yes     | 2.1
79 i386-unknown-freebsd4.0-gnu-glibc2.3       |   yes   |   yes     | 2.1
80 i386-unknown-freebsd4.6                    |   yes   |   yes     | 1.95
81 i386-unknown-freebsd4.7                    |   yes   |   yes     | 2.1
82 i386-unknown-freebsd4.8                    |   yes   |   yes     | 2.1
83 i386-unknown-freebsd4.9                    |   yes   |   yes     | 2.2
84 i386-unknown-freebsd4.10                   |   yes   |   yes     | 2.2
85 i386-unknown-freebsd5.0                    |   yes   |   yes     | 2.4
86 i386-portbld-freebsd6.0                    |   yes   |   yes     | 2.3
87 i686-unknown-kfreebsd6.2-gnu-glibc2.6      |   yes   |   yes     | 2.5+
88 i386-unknown-netbsdelf1.6                  |   no    |   no      | 2.4
89 i386-unknown-netbsdelf2.0.2                |   yes   |   yes     | 2.4
90 i386-unknown-netbsdelf3.0                  |   yes   |   yes     | 2.4
91 i386-unknown-netbsd                        |   yes   |   no      | 2.2
92 i386-unknown-openbsd3.2                    |   yes   |   yes     | 2.3
93 i386-unknown-openbsd3.3                    |   yes   |   yes     | 2.1
94 i386-unknown-openbsd3.4                    |   yes   |   yes     | 2.2
95 i386-unknown-openbsd3.6                    |   yes   |   yes     | 2.1
96 i386-unknown-openbsd3.8                    |   yes   |   yes     | 2.4
97 i386-unknown-openbsd3.9                    |   yes   |   yes     | 2.4
98 i386-unknown-openbsd4.0                    |   yes   |   yes     | 2.4
99 ia64-portbld-freebsd7.0                    |   yes   |   no      | 2.3
100 ia64-hp-hpux11.22                          |   yes   |   no      | 2.1
101 ia64-hp-hpux11.23                          |   yes   |   no      | 2.2
102 ia64-unknown-linux2.4.18-gnu-glibc2.2      |   yes   |   yes     | 2.4
103 ia64-unknown-linux2.6.9-gnu-glibc2.3       |   yes   |   no      | 2.4
104 ia64-unknown-linux2.6.16.27-gnu-glibc2.4   |   yes   |   no      | 2.4
105 mips-sgi-irix6.5                           |   yes   |   yes     | 2.4
106 mips-unknown-linux2.4.27-gnu-glibc2.3      |   yes   |   yes     | 2.4
107 nsr-tandem-nsk                             |   no    |   no      | 2.1
108 rs6000-ibm-aix3.2.5                        |   yes   |   no      | 2.2
109 rs6000-ibm-aix4.2.0.0                      |   yes   |   yes     | 2.2
110 rs6000-ibm-aix4.2.1.0                      |   yes   |   yes     | 2.1
111 powerpc-ibm-aix4.3.2.0                     |   yes   |   yes     | 2.4
112 powerpc-ibm-aix4.3.3.0                     |   yes   |   yes     | 1.95
113 powerpc-ibm-aix5.1.0.0                     |   yes   |   yes     | 2.4
114 powerpc-ibm-aix5.2.0.0                     |   yes   |   no      | 2.1
115 powerpc-ibm-aix5.3.0.0                     |   yes   |   yes     | 2.4
116 powerpc-apple-darwin5.5                    |   yes   |   yes     | 2.2
117 powerpc-apple-darwin6.0                    |   yes   |   yes     | 2.4
118 powerpc-apple-darwin6.8                    |   yes   |   yes     | 2.2
119 powerpc-apple-darwin7.7.0                  |   yes   |   yes     | 2.2
120 powerpc-apple-darwin7.8.0                  |   yes   |   yes     | 2.2
121 powerpc-apple-darwin7.9.0                  |   yes   |   yes     | 2.4
122 powerpc-apple-darwin8.1.0                  |   yes   |   yes     | 2.2
123 powerpc-apple-darwin8.3.0                  |   yes   |   yes     | 2.2
124 powerpc-apple-darwin8.4.0                  |   yes   |   yes     | 2.2
125 powerpc-apple-darwin8.7.0                  |   yes   |   yes     | 2.4
126 powerpc-apple-darwin8.8.0                  |   yes   |   yes     | 2.4
127 powerpc-apple-darwin8.9.0                  |   yes   |   yes     | 2.4
128 powerpc-apple-darwin8.10.0                 |   yes   |   yes     | 2.4
129 powerpc-unknown-linux2.2.17-gnu-glibc2.1   |   no    |   yes     | 1.95
130 powerpc-unknown-linux2.2.17-gnu-glibc2.2   |   yes   |   yes     | 2.0.1
131 powerpc-unknown-linux2.4.19-gnu-glibc2.2   |   yes   |   yes     | 2.4
132 powerpc-unknown-linux2.4.28-gnu-glibc2.2   |   yes   |   yes     | 2.1
133 powerpc-unknown-linux2.4.26-gnu-glibc2.3   |   yes   |   yes     | 2.1
134 powerpc-unknown-linux2.6.10-gnu-glibc2.3   |   yes   |   yes     | 2.2
135 powerpc-unknown-linux2.6.16-gnu-glibc2.3   |   yes   |   yes     | 2.4
136 powerpc-unknown-netbsd2.0                  |   yes   |   no      | 2.1
137 powerpc-unknown-netbsd3.99.23              |   yes   |   yes     | 2.4
138 powerpc-unknown-openbsd4.0                 |   yes   |   yes     | 2.4
139 powerpc-unknown-openbsd4.1                 |   yes   |   yes     | 2.4
140 powerpc64-unknown-linux2.6.5-gnu-glibc2.3  |   yes   |   yes     | 2.4
141 sparc-unknown-linux2.4.32-gnu-glibc2.3     |   yes   |   no      | 2.1
142 sparc-unknown-openbsd3.9                   |   yes   |   no      | 2.4
143 sparc-sun-solaris2.5.1                     |   yes   |   yes     | 2.2
144 sparc-sun-solaris2.6                       |   yes   |   yes     | 2.2
145 sparc-sun-solaris2.7                       |   yes   |   yes     | 2.4
146 sparc-sun-solaris2.8                       |   yes   |   yes     | 2.4
147 sparc-sun-solaris2.9                       |   yes   |   yes     | 2.4
148 sparc-sun-solaris2.10                      |   yes   |   yes     | 2.4
149 sparc-sun-solaris2.11                      |   yes   |   yes     | 2.4
150 sparc64-unknown-linux2.2.18-gnu-glibc2.1   |   no    |   no      | 1.95
151 sparc64-unknown-linux2.4.28-gnu-glibc2.3   |   yes   |   no      | 2.4
152 sparc64-unknown-openbsd3.6                 |   no    |   no      | 2.2
153 x86_64-unknown-kfreebsd6.2-gnu-glibc2.6    |   yes   |   yes     | 2.5+
154 x86_64-unknown-linux2.4.21-gnu-glibc2.2    |   yes   |   yes     | 2.1
155 x86_64-unknown-linux2.4.21-gnu-glibc2.3    |   yes   |   yes     | 2.1
156 x86_64-unknown-linux2.6.3-gnu-glibc2.3     |   yes   |   yes     | 2.1
157 x86_64-unknown-linux2.6.9-gnu-glibc2.3     |   yes   |   yes     | 2.4
158 x86_64-unknown-linux2.6.11.4-gnu-glibc2.3  |   yes   |   yes     | 2.4
159 x86_64-unknown-linux2.6.13-gnu-glibc2.3    |   yes   |   yes     | 2.4
160 x86_64-unknown-linux2.6.16-gnu-glibc2.4    |   yes   |   yes     | 2.4
161 x86_64-unknown-linux2.6.16.13-gnu-glibc2.4 |   yes   |   yes     | 2.4
162 x86_64-unknown-linux2.6.16.21-gnu-glibc2.4 |   yes   |   yes     | 2.4
163 x86_64-unknown-linux2.6.17-gnu-glibc2.4    |   yes   |   yes     | 2.4
164 x86_64-unknown-linux2.6.20-gnu-glibc2.5    |   yes   |   yes     | 2.4
165 x86_64-unknown-linux2.6.20.1-gnu-glibc2.5  |   yes   |   yes     | 2.4
166 x86_64-unknown-linux2.6.21-gnu-glibc2.6    |   yes   |   yes     | 2.4
167 x86_64-unknown-netbsd3.0                   |   yes   |   yes     | 2.4
168 amd64-portbld-freebsd5.4                   |   yes   |   yes     | 2.2
169 amd64-portbld-freebsd6.0                   |   yes   |   yes     | 2.3
170 amd64-portbld-freebsd7.0                   |   yes   |   yes     | 2.3
173 On FreeBSD 5.2, libsigsegv works best if the /proc filesystem is mounted.
174 (It is not mounted by default.)
177 Porting to new platforms
178 ========================
180 On Unix systems, where faults are notified to the program through a signal
181 handler, the core routines in handler-unix.c can be used without
182 modifications. But they need the following bits of information. Each of
183 them is stored in a platform dependent file; the file is chosen in configure.
185   * List of signals that are sent when an invalid virtual memory address
186     is accessed, or when the stack overflows.
187     This is a file among signals-*.h.
188     configure chooses and sets the variable CFG_SIGNALS.
190   * What arguments are passed to a fault handler.
191     This is a file among fault-*.h.
192     configure chooses and sets the variable CFG_FAULT.
194   * How to determine the stack's virtual memory area.
195     This is a file among stackvma-*.c.
196     configure chooses and sets the variable CFG_STACKVMA.
198   * How to leave a signal handler that is executing on the alternate
199     signal stack.
200     This is a file among leave-*.c.
201     configure chooses and sets the variable CFG_LEAVE.
203 For each of these, the approach should be:
205   - Find a way to implement the needed functionality.  This might involve
206     study of the system include files (in particular <signal.h> and
207     <ucontext.h>) and of the kernel sources.
208     For CFG_FAULT, the best starting point is to run the tests/sigsegv1
209     program with a breakpoint set at 'sigsegv_handler'.
211   - Add to configure.in a test whether your new code works.  This will
212     help portability to platforms similar to yours.
213     Then regenerate the configure script (run "autoconf") and verify
214     that the test says "yes" on your platform.
216   - Create a platform dependent file (e.g. fault-<os>-<cpu>.h) and change
217     configure.in to choose this particular file when your test says "yes".
218     Then regenerate the configure script (run "autoconf").
220   - Verify that "make" and "make check" pass.
222 For non-Unix systems, a separate handler-<os>.c is likely to be needed.