]>
Commit | Line | Data |
---|---|---|
3ea5be54 | 1 | @node Internal Probes |
b31b4d6a | 2 | @c @node Internal Probes, Tunables, POSIX Threads, Top |
3ea5be54 AO |
3 | @c %MENU% Probes to monitor libc internal behavior |
4 | @chapter Internal probes | |
5 | ||
6 | In order to aid in debugging and monitoring internal behavior, | |
7 | @theglibc{} exposes nearly-zero-overhead SystemTap probes marked with | |
8 | the @code{libc} provider. | |
9 | ||
10 | These probes are not part of the @glibcadj{} stable ABI, and they are | |
11 | subject to change or removal across releases. Our only promise with | |
12 | regard to them is that, if we find a need to remove or modify the | |
13 | arguments of a probe, the modified probe will have a different name, so | |
14 | that program monitors relying on the old probe will not get unexpected | |
15 | arguments. | |
16 | ||
17 | @menu | |
18 | * Memory Allocation Probes:: Probes in the memory allocation subsystem | |
10e1cf6b | 19 | * Mathematical Function Probes:: Probes in mathematical functions |
7b3436d4 | 20 | * Non-local Goto Probes:: Probes in setjmp and longjmp |
3ea5be54 AO |
21 | @end menu |
22 | ||
23 | @node Memory Allocation Probes | |
24 | @section Memory Allocation Probes | |
25 | ||
26 | These probes are designed to signal relatively unusual situations within | |
4d84e6ad | 27 | the virtual memory subsystem of @theglibc{}. |
3ea5be54 | 28 | |
322dea08 AO |
29 | @deftp Probe memory_sbrk_more (void *@var{$arg1}, size_t @var{$arg2}) |
30 | This probe is triggered after the main arena is extended by calling | |
31 | @code{sbrk}. Argument @var{$arg1} is the additional size requested to | |
32 | @code{sbrk}, and @var{$arg2} is the pointer that marks the end of the | |
33 | @code{sbrk} area, returned in response to the request. | |
34 | @end deftp | |
35 | ||
36 | @deftp Probe memory_sbrk_less (void *@var{$arg1}, size_t @var{$arg2}) | |
37 | This probe is triggered after the size of the main arena is decreased by | |
38 | calling @code{sbrk}. Argument @var{$arg1} is the size released by | |
39 | @code{sbrk} (the positive value, rather than the negative value passed | |
40 | to @code{sbrk}), and @var{$arg2} is the pointer that marks the end of | |
41 | the @code{sbrk} area, returned in response to the request. | |
42 | @end deftp | |
43 | ||
44 | @deftp Probe memory_heap_new (void *@var{$arg1}, size_t @var{$arg2}) | |
45 | This probe is triggered after a new heap is @code{mmap}ed. Argument | |
46 | @var{$arg1} is a pointer to the base of the memory area, where the | |
47 | @code{heap_info} data structure is held, and @var{$arg2} is the size of | |
48 | the heap. | |
49 | @end deftp | |
50 | ||
51 | @deftp Probe memory_heap_free (void *@var{$arg1}, size_t @var{$arg2}) | |
52 | This probe is triggered @emph{before} (unlike the other sbrk and heap | |
53 | probes) a heap is completely removed via @code{munmap}. Argument | |
54 | @var{$arg1} is a pointer to the heap, and @var{$arg2} is the size of the | |
55 | heap. | |
56 | @end deftp | |
57 | ||
58 | @deftp Probe memory_heap_more (void *@var{$arg1}, size_t @var{$arg2}) | |
59 | This probe is triggered after a trailing portion of an @code{mmap}ed | |
60 | heap is extended. Argument @var{$arg1} is a pointer to the heap, and | |
61 | @var{$arg2} is the new size of the heap. | |
62 | @end deftp | |
63 | ||
64 | @deftp Probe memory_heap_less (void *@var{$arg1}, size_t @var{$arg2}) | |
65 | This probe is triggered after a trailing portion of an @code{mmap}ed | |
66 | heap is released. Argument @var{$arg1} is a pointer to the heap, and | |
67 | @var{$arg2} is the new size of the heap. | |
68 | @end deftp | |
69 | ||
35fed6f1 AO |
70 | @deftp Probe memory_malloc_retry (size_t @var{$arg1}) |
71 | @deftpx Probe memory_realloc_retry (size_t @var{$arg1}, void *@var{$arg2}) | |
72 | @deftpx Probe memory_memalign_retry (size_t @var{$arg1}, size_t @var{$arg2}) | |
35fed6f1 AO |
73 | @deftpx Probe memory_calloc_retry (size_t @var{$arg1}) |
74 | These probes are triggered when the corresponding functions fail to | |
75 | obtain the requested amount of memory from the arena in use, before they | |
76 | call @code{arena_get_retry} to select an alternate arena in which to | |
77 | retry the allocation. Argument @var{$arg1} is the amount of memory | |
78 | requested by the user; in the @code{calloc} case, that is the total size | |
79 | computed from both function arguments. In the @code{realloc} case, | |
80 | @var{$arg2} is the pointer to the memory area being resized. In the | |
81 | @code{memalign} case, @var{$arg2} is the alignment to be used for the | |
82 | request, which may be stricter than the value passed to the | |
10ad46bc OB |
83 | @code{memalign} function. A @code{memalign} probe is also used by functions |
84 | @code{posix_memalign, valloc} and @code{pvalloc}. | |
35fed6f1 AO |
85 | |
86 | Note that the argument order does @emph{not} match that of the | |
87 | corresponding two-argument functions, so that in all of these probes the | |
88 | user-requested allocation size is in @var{$arg1}. | |
89 | @end deftp | |
90 | ||
655673f3 AO |
91 | @deftp Probe memory_arena_retry (size_t @var{$arg1}, void *@var{$arg2}) |
92 | This probe is triggered within @code{arena_get_retry} (the function | |
93 | called to select the alternate arena in which to retry an allocation | |
94 | that failed on the first attempt), before the selection of an alternate | |
95 | arena. This probe is redundant, but much easier to use when it's not | |
96 | important to determine which of the various memory allocation functions | |
97 | is failing to allocate on the first try. Argument @var{$arg1} is the | |
98 | same as in the function-specific probes, except for extra room for | |
99 | padding introduced by functions that have to ensure stricter alignment. | |
100 | Argument @var{$arg2} is the arena in which allocation failed. | |
101 | @end deftp | |
102 | ||
3ea5be54 AO |
103 | @deftp Probe memory_arena_new (void *@var{$arg1}, size_t @var{$arg2}) |
104 | This probe is triggered when @code{malloc} allocates and initializes an | |
105 | additional arena (not the main arena), but before the arena is assigned | |
106 | to the running thread or inserted into the internal linked list of | |
107 | arenas. The arena's @code{malloc_state} internal data structure is | |
108 | located at @var{$arg1}, within a newly-allocated heap big enough to hold | |
109 | at least @var{$arg2} bytes. | |
110 | @end deftp | |
111 | ||
6999d38c AO |
112 | @deftp Probe memory_arena_reuse (void *@var{$arg1}, void *@var{$arg2}) |
113 | This probe is triggered when @code{malloc} has just selected an existing | |
114 | arena to reuse, and (temporarily) reserved it for exclusive use. | |
115 | Argument @var{$arg1} is a pointer to the newly-selected arena, and | |
116 | @var{$arg2} is a pointer to the arena previously used by that thread. | |
117 | ||
4d84e6ad | 118 | This occurs within |
6999d38c AO |
119 | @code{reused_arena}, right after the mutex mentioned in probe |
120 | @code{memory_arena_reuse_wait} is acquired; argument @var{$arg1} will | |
121 | point to the same arena. In this configuration, this will usually only | |
122 | occur once per thread. The exception is when a thread first selected | |
123 | the main arena, but a subsequent allocation from it fails: then, and | |
8e52276e | 124 | only then, may we switch to another arena to retry that allocation, and |
6999d38c | 125 | for further allocations within that thread. |
51942fca | 126 | @end deftp |
6999d38c | 127 | |
6999d38c AO |
128 | @deftp Probe memory_arena_reuse_wait (void *@var{$arg1}, void *@var{$arg2}, void *@var{$arg3}) |
129 | This probe is triggered when @code{malloc} is about to wait for an arena | |
130 | to become available for reuse. Argument @var{$arg1} holds a pointer to | |
131 | the mutex the thread is going to wait on, @var{$arg2} is a pointer to a | |
132 | newly-chosen arena to be reused, and @var{$arg3} is a pointer to the | |
133 | arena previously used by that thread. | |
134 | ||
4d84e6ad | 135 | This occurs within |
6999d38c AO |
136 | @code{reused_arena}, when a thread first tries to allocate memory or |
137 | needs a retry after a failure to allocate from the main arena, there | |
138 | isn't any free arena, the maximum number of arenas has been reached, and | |
139 | an existing arena was chosen for reuse, but its mutex could not be | |
140 | immediately acquired. The mutex in @var{$arg1} is the mutex of the | |
141 | selected arena. | |
51942fca | 142 | @end deftp |
6999d38c | 143 | |
6999d38c AO |
144 | @deftp Probe memory_arena_reuse_free_list (void *@var{$arg1}) |
145 | This probe is triggered when @code{malloc} has chosen an arena that is | |
146 | in the free list for use by a thread, within the @code{get_free_list} | |
4d84e6ad | 147 | function. The argument @var{$arg1} holds a pointer to the selected arena. |
6999d38c AO |
148 | @end deftp |
149 | ||
3ea5be54 AO |
150 | @deftp Probe memory_mallopt (int @var{$arg1}, int @var{$arg2}) |
151 | This probe is triggered when function @code{mallopt} is called to change | |
152 | @code{malloc} internal configuration parameters, before any change to | |
153 | the parameters is made. The arguments @var{$arg1} and @var{$arg2} are | |
154 | the ones passed to the @code{mallopt} function. | |
155 | @end deftp | |
0653427f AO |
156 | |
157 | @deftp Probe memory_mallopt_mxfast (int @var{$arg1}, int @var{$arg2}) | |
158 | This probe is triggered shortly after the @code{memory_mallopt} probe, | |
159 | when the parameter to be changed is @code{M_MXFAST}, and the requested | |
160 | value is in an acceptable range. Argument @var{$arg1} is the requested | |
161 | value, and @var{$arg2} is the previous value of this @code{malloc} | |
162 | parameter. | |
163 | @end deftp | |
164 | ||
165 | @deftp Probe memory_mallopt_trim_threshold (int @var{$arg1}, int @var{$arg2}, int @var{$arg3}) | |
8e52276e | 166 | This probe is triggered shortly after the @code{memory_mallopt} probe, |
0653427f AO |
167 | when the parameter to be changed is @code{M_TRIM_THRESHOLD}. Argument |
168 | @var{$arg1} is the requested value, @var{$arg2} is the previous value of | |
169 | this @code{malloc} parameter, and @var{$arg3} is nonzero if dynamic | |
170 | threshold adjustment was already disabled. | |
171 | @end deftp | |
172 | ||
173 | @deftp Probe memory_mallopt_top_pad (int @var{$arg1}, int @var{$arg2}, int @var{$arg3}) | |
174 | This probe is triggered shortly after the @code{memory_mallopt} probe, | |
175 | when the parameter to be changed is @code{M_TOP_PAD}. Argument | |
176 | @var{$arg1} is the requested value, @var{$arg2} is the previous value of | |
177 | this @code{malloc} parameter, and @var{$arg3} is nonzero if dynamic | |
178 | threshold adjustment was already disabled. | |
179 | @end deftp | |
180 | ||
181 | @deftp Probe memory_mallopt_mmap_threshold (int @var{$arg1}, int @var{$arg2}, int @var{$arg3}) | |
182 | This probe is triggered shortly after the @code{memory_mallopt} probe, | |
183 | when the parameter to be changed is @code{M_MMAP_THRESHOLD}, and the | |
184 | requested value is in an acceptable range. Argument @var{$arg1} is the | |
185 | requested value, @var{$arg2} is the previous value of this @code{malloc} | |
186 | parameter, and @var{$arg3} is nonzero if dynamic threshold adjustment | |
187 | was already disabled. | |
188 | @end deftp | |
189 | ||
190 | @deftp Probe memory_mallopt_mmap_max (int @var{$arg1}, int @var{$arg2}, int @var{$arg3}) | |
191 | This probe is triggered shortly after the @code{memory_mallopt} probe, | |
192 | when the parameter to be changed is @code{M_MMAP_MAX}. Argument | |
193 | @var{$arg1} is the requested value, @var{$arg2} is the previous value of | |
194 | this @code{malloc} parameter, and @var{$arg3} is nonzero if dynamic | |
195 | threshold adjustment was already disabled. | |
196 | @end deftp | |
197 | ||
0653427f AO |
198 | @deftp Probe memory_mallopt_perturb (int @var{$arg1}, int @var{$arg2}) |
199 | This probe is triggered shortly after the @code{memory_mallopt} probe, | |
200 | when the parameter to be changed is @code{M_PERTURB}. Argument | |
201 | @var{$arg1} is the requested value, and @var{$arg2} is the previous | |
202 | value of this @code{malloc} parameter. | |
203 | @end deftp | |
204 | ||
205 | @deftp Probe memory_mallopt_arena_test (int @var{$arg1}, int @var{$arg2}) | |
206 | This probe is triggered shortly after the @code{memory_mallopt} probe, | |
207 | when the parameter to be changed is @code{M_ARENA_TEST}, and the | |
208 | requested value is in an acceptable range. Argument @var{$arg1} is the | |
209 | requested value, and @var{$arg2} is the previous value of this | |
4d84e6ad | 210 | @code{malloc} parameter. |
0653427f AO |
211 | @end deftp |
212 | ||
213 | @deftp Probe memory_mallopt_arena_max (int @var{$arg1}, int @var{$arg2}) | |
214 | This probe is triggered shortly after the @code{memory_mallopt} probe, | |
215 | when the parameter to be changed is @code{M_ARENA_MAX}, and the | |
216 | requested value is in an acceptable range. Argument @var{$arg1} is the | |
217 | requested value, and @var{$arg2} is the previous value of this | |
4d84e6ad | 218 | @code{malloc} parameter. |
0653427f AO |
219 | @end deftp |
220 | ||
221 | @deftp Probe memory_mallopt_free_dyn_thresholds (int @var{$arg1}, int @var{$arg2}) | |
222 | This probe is triggered when function @code{free} decides to adjust the | |
223 | dynamic brk/mmap thresholds. Argument @var{$arg1} and @var{$arg2} are | |
224 | the adjusted mmap and trim thresholds, respectively. | |
225 | @end deftp | |
10e1cf6b | 226 | |
d5c3fafc DD |
227 | @deftp Probe memory_tunable_tcache_max_bytes (int @var{$arg1}, int @var{$arg2}) |
228 | This probe is triggered when the @code{glibc.malloc.tcache_max} | |
229 | tunable is set. Argument @var{$arg1} is the requested value, and | |
230 | @var{$arg2} is the previous value of this tunable. | |
231 | @end deftp | |
232 | ||
233 | @deftp Probe memory_tunable_tcache_count (int @var{$arg1}, int @var{$arg2}) | |
234 | This probe is triggered when the @code{glibc.malloc.tcache_count} | |
235 | tunable is set. Argument @var{$arg1} is the requested value, and | |
236 | @var{$arg2} is the previous value of this tunable. | |
237 | @end deftp | |
238 | ||
239 | @deftp Probe memory_tunable_tcache_unsorted_limit (int @var{$arg1}, int @var{$arg2}) | |
240 | This probe is triggered when the | |
241 | @code{glibc.malloc.tcache_unsorted_limit} tunable is set. Argument | |
242 | @var{$arg1} is the requested value, and @var{$arg2} is the previous | |
243 | value of this tunable. | |
244 | @end deftp | |
245 | ||
10e1cf6b SP |
246 | @node Mathematical Function Probes |
247 | @section Mathematical Function Probes | |
248 | ||
249 | Some mathematical functions fall back to multiple precision arithmetic for | |
250 | some inputs to get last bit precision for their return values. This multiple | |
251 | precision fallback is much slower than the default algorithms and may have a | |
252 | significant impact on application performance. The systemtap probe markers | |
253 | described in this section may help you determine if your application calls | |
254 | mathematical functions with inputs that may result in multiple-precision | |
255 | arithmetic. | |
256 | ||
257 | Unless explicitly mentioned otherwise, a precision of 1 implies 24 bits of | |
258 | precision in the mantissa of the multiple precision number. Hence, a precision | |
259 | level of 32 implies 768 bits of precision in the mantissa. | |
260 | ||
f1e00502 JM |
261 | @deftp Probe slowexp_p6 (double @var{$arg1}, double @var{$arg2}) |
262 | This probe is triggered when the @code{exp} function is called with an | |
263 | input that results in multiple precision computation with precision | |
264 | 6. Argument @var{$arg1} is the input value and @var{$arg2} is the | |
265 | computed output. | |
266 | @end deftp | |
267 | ||
268 | @deftp Probe slowexp_p32 (double @var{$arg1}, double @var{$arg2}) | |
269 | This probe is triggered when the @code{exp} function is called with an | |
270 | input that results in multiple precision computation with precision | |
271 | 32. Argument @var{$arg1} is the input value and @var{$arg2} is the | |
272 | computed output. | |
273 | @end deftp | |
274 | ||
10e1cf6b | 275 | @deftp Probe slowpow_p10 (double @var{$arg1}, double @var{$arg2}, double @var{$arg3}, double @var{$arg4}) |
d35f1e80 WN |
276 | This probe is triggered when the @code{pow} function is called with |
277 | inputs that result in multiple precision computation with precision | |
cf822e3c | 278 | 10. Arguments @var{$arg1} and @var{$arg2} are the input values, |
d35f1e80 WN |
279 | @code{$arg3} is the value computed in the fast phase of the algorithm |
280 | and @code{$arg4} is the final accurate value. | |
10e1cf6b SP |
281 | @end deftp |
282 | ||
283 | @deftp Probe slowpow_p32 (double @var{$arg1}, double @var{$arg2}, double @var{$arg3}, double @var{$arg4}) | |
d35f1e80 WN |
284 | This probe is triggered when the @code{pow} function is called with an |
285 | input that results in multiple precision computation with precision | |
cf822e3c | 286 | 32. Arguments @var{$arg1} and @var{$arg2} are the input values, |
d35f1e80 WN |
287 | @code{$arg3} is the value computed in the fast phase of the algorithm |
288 | and @code{$arg4} is the final accurate value. | |
10e1cf6b SP |
289 | @end deftp |
290 | ||
291 | @deftp Probe slowlog (int @var{$arg1}, double @var{$arg2}, double @var{$arg3}) | |
d35f1e80 WN |
292 | This probe is triggered when the @code{log} function is called with an |
293 | input that results in multiple precision computation. Argument | |
294 | @var{$arg1} is the precision with which the computation succeeded. | |
295 | Argument @var{$arg2} is the input and @var{$arg3} is the computed | |
296 | output. | |
10e1cf6b SP |
297 | @end deftp |
298 | ||
299 | @deftp Probe slowlog_inexact (int @var{$arg1}, double @var{$arg2}, double @var{$arg3}) | |
d35f1e80 WN |
300 | This probe is triggered when the @code{log} function is called with an |
301 | input that results in multiple precision computation and none of the | |
302 | multiple precision computations result in an accurate result. | |
303 | Argument @var{$arg1} is the maximum precision with which computations | |
304 | were performed. Argument @var{$arg2} is the input and @var{$arg3} is | |
305 | the computed output. | |
10e1cf6b SP |
306 | @end deftp |
307 | ||
308 | @deftp Probe slowatan2 (int @var{$arg1}, double @var{$arg2}, double @var{$arg3}, double @var{$arg4}) | |
d35f1e80 WN |
309 | This probe is triggered when the @code{atan2} function is called with |
310 | an input that results in multiple precision computation. Argument | |
311 | @var{$arg1} is the precision with which computation succeeded. | |
312 | Arguments @var{$arg2} and @var{$arg3} are inputs to the @code{atan2} | |
313 | function and @var{$arg4} is the computed result. | |
10e1cf6b SP |
314 | @end deftp |
315 | ||
316 | @deftp Probe slowatan2_inexact (int @var{$arg1}, double @var{$arg2}, double @var{$arg3}, double @var{$arg4}) | |
d35f1e80 WN |
317 | This probe is triggered when the @code{atan} function is called with |
318 | an input that results in multiple precision computation and none of | |
319 | the multiple precision computations result in an accurate result. | |
320 | Argument @var{$arg1} is the maximum precision with which computations | |
321 | were performed. Arguments @var{$arg2} and @var{$arg3} are inputs to | |
322 | the @code{atan2} function and @var{$arg4} is the computed result. | |
10e1cf6b SP |
323 | @end deftp |
324 | ||
325 | @deftp Probe slowatan (int @var{$arg1}, double @var{$arg2}, double @var{$arg3}) | |
d35f1e80 WN |
326 | This probe is triggered when the @code{atan} function is called with |
327 | an input that results in multiple precision computation. Argument | |
328 | @var{$arg1} is the precision with which computation succeeded. | |
329 | Argument @var{$arg2} is the input to the @code{atan} function and | |
330 | @var{$arg3} is the computed result. | |
10e1cf6b SP |
331 | @end deftp |
332 | ||
333 | @deftp Probe slowatan_inexact (int @var{$arg1}, double @var{$arg2}, double @var{$arg3}) | |
d35f1e80 WN |
334 | This probe is triggered when the @code{atan} function is called with |
335 | an input that results in multiple precision computation and none of | |
336 | the multiple precision computations result in an accurate result. | |
337 | Argument @var{$arg1} is the maximum precision with which computations | |
338 | were performed. Argument @var{$arg2} is the input to the @code{atan} | |
339 | function and @var{$arg3} is the computed result. | |
10e1cf6b SP |
340 | @end deftp |
341 | ||
342 | @deftp Probe slowtan (double @var{$arg1}, double @var{$arg2}) | |
d35f1e80 WN |
343 | This probe is triggered when the @code{tan} function is called with an |
344 | input that results in multiple precision computation with precision | |
345 | 32. Argument @var{$arg1} is the input to the function and @var{$arg2} | |
346 | is the computed result. | |
10e1cf6b | 347 | @end deftp |
f3fd2628 SP |
348 | |
349 | @deftp Probe slowasin (double @var{$arg1}, double @var{$arg2}) | |
d35f1e80 WN |
350 | This probe is triggered when the @code{asin} function is called with |
351 | an input that results in multiple precision computation with precision | |
352 | 32. Argument @var{$arg1} is the input to the function and @var{$arg2} | |
353 | is the computed result. | |
f3fd2628 SP |
354 | @end deftp |
355 | ||
356 | @deftp Probe slowacos (double @var{$arg1}, double @var{$arg2}) | |
d35f1e80 WN |
357 | This probe is triggered when the @code{acos} function is called with |
358 | an input that results in multiple precision computation with precision | |
359 | 32. Argument @var{$arg1} is the input to the function and @var{$arg2} | |
360 | is the computed result. | |
f3fd2628 SP |
361 | @end deftp |
362 | ||
363 | @deftp Probe slowsin (double @var{$arg1}, double @var{$arg2}) | |
d35f1e80 WN |
364 | This probe is triggered when the @code{sin} function is called with an |
365 | input that results in multiple precision computation with precision | |
366 | 32. Argument @var{$arg1} is the input to the function and @var{$arg2} | |
367 | is the computed result. | |
f3fd2628 SP |
368 | @end deftp |
369 | ||
370 | @deftp Probe slowcos (double @var{$arg1}, double @var{$arg2}) | |
d35f1e80 WN |
371 | This probe is triggered when the @code{cos} function is called with an |
372 | input that results in multiple precision computation with precision | |
373 | 32. Argument @var{$arg1} is the input to the function and @var{$arg2} | |
374 | is the computed result. | |
f3fd2628 SP |
375 | @end deftp |
376 | ||
377 | @deftp Probe slowsin_dx (double @var{$arg1}, double @var{$arg2}, double @var{$arg3}) | |
d35f1e80 WN |
378 | This probe is triggered when the @code{sin} function is called with an |
379 | input that results in multiple precision computation with precision | |
380 | 32. Argument @var{$arg1} is the input to the function, @var{$arg2} is | |
381 | the error bound of @var{$arg1} and @var{$arg3} is the computed result. | |
f3fd2628 SP |
382 | @end deftp |
383 | ||
384 | @deftp Probe slowcos_dx (double @var{$arg1}, double @var{$arg2}, double @var{$arg3}) | |
d35f1e80 WN |
385 | This probe is triggered when the @code{cos} function is called with an |
386 | input that results in multiple precision computation with precision | |
387 | 32. Argument @var{$arg1} is the input to the function, @var{$arg2} is | |
388 | the error bound of @var{$arg1} and @var{$arg3} is the computed result. | |
f3fd2628 | 389 | @end deftp |
7b3436d4 WN |
390 | |
391 | @node Non-local Goto Probes | |
392 | @section Non-local Goto Probes | |
393 | ||
394 | These probes are used to signal calls to @code{setjmp}, @code{sigsetjmp}, | |
395 | @code{longjmp} or @code{siglongjmp}. | |
396 | ||
397 | @deftp Probe setjmp (void *@var{$arg1}, int @var{$arg2}, void *@var{$arg3}) | |
398 | This probe is triggered whenever @code{setjmp} or @code{sigsetjmp} is | |
399 | called. Argument @var{$arg1} is a pointer to the @code{jmp_buf} | |
400 | passed as the first argument of @code{setjmp} or @code{sigsetjmp}, | |
401 | @var{$arg2} is the second argument of @code{sigsetjmp} or zero if this | |
402 | is a call to @code{setjmp} and @var{$arg3} is a pointer to the return | |
403 | address that will be stored in the @code{jmp_buf}. | |
404 | @end deftp | |
405 | ||
406 | @deftp Probe longjmp (void *@var{$arg1}, int @var{$arg2}, void *@var{$arg3}) | |
407 | This probe is triggered whenever @code{longjmp} or @code{siglongjmp} | |
cf822e3c | 408 | is called. Argument @var{$arg1} is a pointer to the @code{jmp_buf} |
7b3436d4 WN |
409 | passed as the first argument of @code{longjmp} or @code{siglongjmp}, |
410 | @var{$arg2} is the return value passed as the second argument of | |
411 | @code{longjmp} or @code{siglongjmp} and @var{$arg3} is a pointer to | |
412 | the return address @code{longjmp} or @code{siglongjmp} will return to. | |
413 | ||
414 | The @code{longjmp} probe is triggered at a point where the registers | |
415 | have not yet been restored to the values in the @code{jmp_buf} and | |
416 | unwinding will show a call stack including the caller of | |
417 | @code{longjmp} or @code{siglongjmp}. | |
418 | @end deftp | |
419 | ||
420 | @deftp Probe longjmp_target (void *@var{$arg1}, int @var{$arg2}, void *@var{$arg3}) | |
421 | This probe is triggered under the same conditions and with the same | |
422 | arguments as the @code{longjmp} probe. | |
423 | ||
424 | The @code{longjmp_target} probe is triggered at a point where the | |
425 | registers have been restored to the values in the @code{jmp_buf} and | |
426 | unwinding will show a call stack including the caller of @code{setjmp} | |
427 | or @code{sigsetjmp}. | |
428 | @end deftp |