]> git.ipfire.org Git - thirdparty/glibc.git/blame - manual/probes.texi
Document that --enable-static-pie implies PIE
[thirdparty/glibc.git] / manual / probes.texi
CommitLineData
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
6In order to aid in debugging and monitoring internal behavior,
7@theglibc{} exposes nearly-zero-overhead SystemTap probes marked with
8the @code{libc} provider.
9
10These probes are not part of the @glibcadj{} stable ABI, and they are
11subject to change or removal across releases. Our only promise with
12regard to them is that, if we find a need to remove or modify the
13arguments of a probe, the modified probe will have a different name, so
14that program monitors relying on the old probe will not get unexpected
15arguments.
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
26These probes are designed to signal relatively unusual situations within
4d84e6ad 27the virtual memory subsystem of @theglibc{}.
3ea5be54 28
322dea08
AO
29@deftp Probe memory_sbrk_more (void *@var{$arg1}, size_t @var{$arg2})
30This 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})
37This probe is triggered after the size of the main arena is decreased by
38calling @code{sbrk}. Argument @var{$arg1} is the size released by
39@code{sbrk} (the positive value, rather than the negative value passed
40to @code{sbrk}), and @var{$arg2} is the pointer that marks the end of
41the @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})
45This 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
48the heap.
49@end deftp
50
51@deftp Probe memory_heap_free (void *@var{$arg1}, size_t @var{$arg2})
52This probe is triggered @emph{before} (unlike the other sbrk and heap
53probes) 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
55heap.
56@end deftp
57
58@deftp Probe memory_heap_more (void *@var{$arg1}, size_t @var{$arg2})
59This probe is triggered after a trailing portion of an @code{mmap}ed
60heap 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})
65This probe is triggered after a trailing portion of an @code{mmap}ed
66heap 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})
74These probes are triggered when the corresponding functions fail to
75obtain the requested amount of memory from the arena in use, before they
76call @code{arena_get_retry} to select an alternate arena in which to
77retry the allocation. Argument @var{$arg1} is the amount of memory
78requested by the user; in the @code{calloc} case, that is the total size
79computed 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
82request, 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
86Note that the argument order does @emph{not} match that of the
87corresponding two-argument functions, so that in all of these probes the
88user-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})
92This probe is triggered within @code{arena_get_retry} (the function
93called to select the alternate arena in which to retry an allocation
94that failed on the first attempt), before the selection of an alternate
95arena. This probe is redundant, but much easier to use when it's not
96important to determine which of the various memory allocation functions
97is failing to allocate on the first try. Argument @var{$arg1} is the
98same as in the function-specific probes, except for extra room for
99padding introduced by functions that have to ensure stricter alignment.
100Argument @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})
104This probe is triggered when @code{malloc} allocates and initializes an
105additional arena (not the main arena), but before the arena is assigned
106to the running thread or inserted into the internal linked list of
107arenas. The arena's @code{malloc_state} internal data structure is
108located at @var{$arg1}, within a newly-allocated heap big enough to hold
109at least @var{$arg2} bytes.
110@end deftp
111
6999d38c
AO
112@deftp Probe memory_arena_reuse (void *@var{$arg1}, void *@var{$arg2})
113This probe is triggered when @code{malloc} has just selected an existing
114arena to reuse, and (temporarily) reserved it for exclusive use.
115Argument @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 118This 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
121point to the same arena. In this configuration, this will usually only
122occur once per thread. The exception is when a thread first selected
123the main arena, but a subsequent allocation from it fails: then, and
8e52276e 124only then, may we switch to another arena to retry that allocation, and
6999d38c 125for 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})
129This probe is triggered when @code{malloc} is about to wait for an arena
130to become available for reuse. Argument @var{$arg1} holds a pointer to
131the mutex the thread is going to wait on, @var{$arg2} is a pointer to a
132newly-chosen arena to be reused, and @var{$arg3} is a pointer to the
133arena previously used by that thread.
134
4d84e6ad 135This occurs within
6999d38c
AO
136@code{reused_arena}, when a thread first tries to allocate memory or
137needs a retry after a failure to allocate from the main arena, there
138isn't any free arena, the maximum number of arenas has been reached, and
139an existing arena was chosen for reuse, but its mutex could not be
140immediately acquired. The mutex in @var{$arg1} is the mutex of the
141selected arena.
51942fca 142@end deftp
6999d38c 143
6999d38c
AO
144@deftp Probe memory_arena_reuse_free_list (void *@var{$arg1})
145This probe is triggered when @code{malloc} has chosen an arena that is
146in the free list for use by a thread, within the @code{get_free_list}
4d84e6ad 147function. 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})
151This probe is triggered when function @code{mallopt} is called to change
152@code{malloc} internal configuration parameters, before any change to
153the parameters is made. The arguments @var{$arg1} and @var{$arg2} are
154the 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})
158This probe is triggered shortly after the @code{memory_mallopt} probe,
159when the parameter to be changed is @code{M_MXFAST}, and the requested
160value is in an acceptable range. Argument @var{$arg1} is the requested
161value, and @var{$arg2} is the previous value of this @code{malloc}
162parameter.
163@end deftp
164
165@deftp Probe memory_mallopt_trim_threshold (int @var{$arg1}, int @var{$arg2}, int @var{$arg3})
8e52276e 166This probe is triggered shortly after the @code{memory_mallopt} probe,
0653427f
AO
167when 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
169this @code{malloc} parameter, and @var{$arg3} is nonzero if dynamic
170threshold adjustment was already disabled.
171@end deftp
172
173@deftp Probe memory_mallopt_top_pad (int @var{$arg1}, int @var{$arg2}, int @var{$arg3})
174This probe is triggered shortly after the @code{memory_mallopt} probe,
175when 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
177this @code{malloc} parameter, and @var{$arg3} is nonzero if dynamic
178threshold adjustment was already disabled.
179@end deftp
180
181@deftp Probe memory_mallopt_mmap_threshold (int @var{$arg1}, int @var{$arg2}, int @var{$arg3})
182This probe is triggered shortly after the @code{memory_mallopt} probe,
183when the parameter to be changed is @code{M_MMAP_THRESHOLD}, and the
184requested value is in an acceptable range. Argument @var{$arg1} is the
185requested value, @var{$arg2} is the previous value of this @code{malloc}
186parameter, and @var{$arg3} is nonzero if dynamic threshold adjustment
187was already disabled.
188@end deftp
189
190@deftp Probe memory_mallopt_mmap_max (int @var{$arg1}, int @var{$arg2}, int @var{$arg3})
191This probe is triggered shortly after the @code{memory_mallopt} probe,
192when 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
194this @code{malloc} parameter, and @var{$arg3} is nonzero if dynamic
195threshold adjustment was already disabled.
196@end deftp
197
0653427f
AO
198@deftp Probe memory_mallopt_perturb (int @var{$arg1}, int @var{$arg2})
199This probe is triggered shortly after the @code{memory_mallopt} probe,
200when the parameter to be changed is @code{M_PERTURB}. Argument
201@var{$arg1} is the requested value, and @var{$arg2} is the previous
202value of this @code{malloc} parameter.
203@end deftp
204
205@deftp Probe memory_mallopt_arena_test (int @var{$arg1}, int @var{$arg2})
206This probe is triggered shortly after the @code{memory_mallopt} probe,
207when the parameter to be changed is @code{M_ARENA_TEST}, and the
208requested value is in an acceptable range. Argument @var{$arg1} is the
209requested 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})
214This probe is triggered shortly after the @code{memory_mallopt} probe,
215when the parameter to be changed is @code{M_ARENA_MAX}, and the
216requested value is in an acceptable range. Argument @var{$arg1} is the
217requested 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})
222This probe is triggered when function @code{free} decides to adjust the
223dynamic brk/mmap thresholds. Argument @var{$arg1} and @var{$arg2} are
224the 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})
228This probe is triggered when the @code{glibc.malloc.tcache_max}
229tunable 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})
234This probe is triggered when the @code{glibc.malloc.tcache_count}
235tunable 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})
240This 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
243value of this tunable.
244@end deftp
245
10e1cf6b
SP
246@node Mathematical Function Probes
247@section Mathematical Function Probes
248
249Some mathematical functions fall back to multiple precision arithmetic for
250some inputs to get last bit precision for their return values. This multiple
251precision fallback is much slower than the default algorithms and may have a
252significant impact on application performance. The systemtap probe markers
253described in this section may help you determine if your application calls
254mathematical functions with inputs that may result in multiple-precision
255arithmetic.
256
257Unless explicitly mentioned otherwise, a precision of 1 implies 24 bits of
258precision in the mantissa of the multiple precision number. Hence, a precision
259level of 32 implies 768 bits of precision in the mantissa.
260
f1e00502
JM
261@deftp Probe slowexp_p6 (double @var{$arg1}, double @var{$arg2})
262This probe is triggered when the @code{exp} function is called with an
263input that results in multiple precision computation with precision
2646. Argument @var{$arg1} is the input value and @var{$arg2} is the
265computed output.
266@end deftp
267
268@deftp Probe slowexp_p32 (double @var{$arg1}, double @var{$arg2})
269This probe is triggered when the @code{exp} function is called with an
270input that results in multiple precision computation with precision
27132. Argument @var{$arg1} is the input value and @var{$arg2} is the
272computed 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
276This probe is triggered when the @code{pow} function is called with
277inputs that result in multiple precision computation with precision
cf822e3c 27810. 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
280and @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
284This probe is triggered when the @code{pow} function is called with an
285input that results in multiple precision computation with precision
cf822e3c 28632. 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
288and @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
292This probe is triggered when the @code{log} function is called with an
293input that results in multiple precision computation. Argument
294@var{$arg1} is the precision with which the computation succeeded.
295Argument @var{$arg2} is the input and @var{$arg3} is the computed
296output.
10e1cf6b
SP
297@end deftp
298
299@deftp Probe slowlog_inexact (int @var{$arg1}, double @var{$arg2}, double @var{$arg3})
d35f1e80
WN
300This probe is triggered when the @code{log} function is called with an
301input that results in multiple precision computation and none of the
302multiple precision computations result in an accurate result.
303Argument @var{$arg1} is the maximum precision with which computations
304were performed. Argument @var{$arg2} is the input and @var{$arg3} is
305the 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
309This probe is triggered when the @code{atan2} function is called with
310an input that results in multiple precision computation. Argument
311@var{$arg1} is the precision with which computation succeeded.
312Arguments @var{$arg2} and @var{$arg3} are inputs to the @code{atan2}
313function 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
317This probe is triggered when the @code{atan} function is called with
318an input that results in multiple precision computation and none of
319the multiple precision computations result in an accurate result.
320Argument @var{$arg1} is the maximum precision with which computations
321were performed. Arguments @var{$arg2} and @var{$arg3} are inputs to
322the @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
326This probe is triggered when the @code{atan} function is called with
327an input that results in multiple precision computation. Argument
328@var{$arg1} is the precision with which computation succeeded.
329Argument @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
334This probe is triggered when the @code{atan} function is called with
335an input that results in multiple precision computation and none of
336the multiple precision computations result in an accurate result.
337Argument @var{$arg1} is the maximum precision with which computations
338were performed. Argument @var{$arg2} is the input to the @code{atan}
339function 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
343This probe is triggered when the @code{tan} function is called with an
344input that results in multiple precision computation with precision
34532. Argument @var{$arg1} is the input to the function and @var{$arg2}
346is the computed result.
10e1cf6b 347@end deftp
f3fd2628
SP
348
349@deftp Probe slowasin (double @var{$arg1}, double @var{$arg2})
d35f1e80
WN
350This probe is triggered when the @code{asin} function is called with
351an input that results in multiple precision computation with precision
35232. Argument @var{$arg1} is the input to the function and @var{$arg2}
353is the computed result.
f3fd2628
SP
354@end deftp
355
356@deftp Probe slowacos (double @var{$arg1}, double @var{$arg2})
d35f1e80
WN
357This probe is triggered when the @code{acos} function is called with
358an input that results in multiple precision computation with precision
35932. Argument @var{$arg1} is the input to the function and @var{$arg2}
360is the computed result.
f3fd2628
SP
361@end deftp
362
363@deftp Probe slowsin (double @var{$arg1}, double @var{$arg2})
d35f1e80
WN
364This probe is triggered when the @code{sin} function is called with an
365input that results in multiple precision computation with precision
36632. Argument @var{$arg1} is the input to the function and @var{$arg2}
367is the computed result.
f3fd2628
SP
368@end deftp
369
370@deftp Probe slowcos (double @var{$arg1}, double @var{$arg2})
d35f1e80
WN
371This probe is triggered when the @code{cos} function is called with an
372input that results in multiple precision computation with precision
37332. Argument @var{$arg1} is the input to the function and @var{$arg2}
374is 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
378This probe is triggered when the @code{sin} function is called with an
379input that results in multiple precision computation with precision
38032. Argument @var{$arg1} is the input to the function, @var{$arg2} is
381the 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
385This probe is triggered when the @code{cos} function is called with an
386input that results in multiple precision computation with precision
38732. Argument @var{$arg1} is the input to the function, @var{$arg2} is
388the 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
394These 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})
398This probe is triggered whenever @code{setjmp} or @code{sigsetjmp} is
399called. Argument @var{$arg1} is a pointer to the @code{jmp_buf}
400passed as the first argument of @code{setjmp} or @code{sigsetjmp},
401@var{$arg2} is the second argument of @code{sigsetjmp} or zero if this
402is a call to @code{setjmp} and @var{$arg3} is a pointer to the return
403address 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})
407This probe is triggered whenever @code{longjmp} or @code{siglongjmp}
cf822e3c 408is called. Argument @var{$arg1} is a pointer to the @code{jmp_buf}
7b3436d4
WN
409passed 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
412the return address @code{longjmp} or @code{siglongjmp} will return to.
413
414The @code{longjmp} probe is triggered at a point where the registers
415have not yet been restored to the values in the @code{jmp_buf} and
416unwinding 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})
421This probe is triggered under the same conditions and with the same
422arguments as the @code{longjmp} probe.
423
424The @code{longjmp_target} probe is triggered at a point where the
425registers have been restored to the values in the @code{jmp_buf} and
426unwinding will show a call stack including the caller of @code{setjmp}
427or @code{sigsetjmp}.
428@end deftp