Skip to content

Commit 662c80e

Browse files
committed
[Backtracing][Docs] Add some information about signal handlers for macOS.
Added a list of handled signals and some notes on what the runtime will do if it finds signal handlers already configured. rdar://105394365
1 parent 24932f2 commit 662c80e

File tree

1 file changed

+54
-0
lines changed

1 file changed

+54
-0
lines changed

docs/Backtracing.rst

+54
Original file line numberDiff line numberDiff line change
@@ -167,3 +167,57 @@ require memory allocation, fetching and reading remote files and so on).
167167
You shouldn't try to run ``swift-backtrace`` yourself; it has unusual
168168
requirements, which vary from platform to platform. Instead, it will be
169169
triggered automatically by the runtime.
170+
171+
System specifics
172+
----------------
173+
174+
macOS
175+
^^^^^
176+
177+
On macOS, we catch crashes and other events using a signal handler. At time of
178+
writing, this is installed for the following signals:
179+
180+
+--------------+--------------------------+-------------------------------------+
181+
| Signal | Description | Comment |
182+
+====+=========+==========================+=====================================+
183+
| 3 | SIGQUIT | Quit program | |
184+
+----+---------+--------------------------+-------------------------------------+
185+
| 4 | SIGILL | Illegal instruction | |
186+
+----+---------+--------------------------+-------------------------------------+
187+
| 5 | SIGTRAP | Trace trap | |
188+
+----+---------+--------------------------+-------------------------------------+
189+
| 6 | SIGABRT | Abort program | |
190+
+----+---------+--------------------------+-------------------------------------+
191+
| 8 | SIGFPE | Floating point exception | On Intel, integer divide by zero |
192+
| | | | also triggers this. |
193+
+----+---------+--------------------------+-------------------------------------+
194+
| 10 | SIGBUS | Bus error | |
195+
+----+---------+--------------------------+-------------------------------------+
196+
| 11 | SIGSEGV | Segmentation violation | |
197+
+----+---------+--------------------------+-------------------------------------+
198+
199+
If crash catching is enabled, the signal handler will be installed for any
200+
process that links the Swift runtime. If you replace the handlers for any of
201+
these signals, your program will no longer produce backtraces for program
202+
failures that lead to the handler you have replaced.
203+
204+
Additionally, the runtime will configure an alternate signal handling stack, so
205+
that stack overflows can be successfully trapped.
206+
207+
Note that the runtime will not install its signal handlers for a signal if it
208+
finds that there is already a handler for that signal. Similarly if something
209+
else has already configured an alternate signal stack, it will leave that
210+
stack alone.
211+
212+
Once the backtracer has finished handling the crash, it will allow the crashing
213+
program to continue and crash normally, which will result in the usual Crash
214+
Reporter log file being generated.
215+
216+
Crash catching *cannot* be enabled for setuid binaries. This is intentional as
217+
doing so might create a security hole.
218+
219+
Other Darwin (iOS, tvOS)
220+
^^^^^^^^^^^^^^^^^^^^^^^^
221+
222+
Crash catching is not enabled for non-macOS Darwin. You should continue to look
223+
at the system-provided crash logs.

0 commit comments

Comments
 (0)