xref: /openbsd-src/gnu/lib/libexecinfo/backtrace.3 (revision 55e684b42dc5507fa83a4fed61faa97ce984bbf7)
1*55e684b4Sjmc.\"	$OpenBSD: backtrace.3,v 1.3 2021/06/11 19:36:00 jmc Exp $
2771fbea0Smortimer.\"
3771fbea0Smortimer.\" Copyright (c) 2021 Todd Mortimer <mortimer@openbsd.org>
4771fbea0Smortimer.\" Copyright (c) 2012 The NetBSD Foundation, Inc.
5771fbea0Smortimer.\" All rights reserved.
6771fbea0Smortimer.\"
7771fbea0Smortimer.\" This code is derived from software contributed to The NetBSD Foundation
8771fbea0Smortimer.\" by Christos Zoulas
9771fbea0Smortimer.\"
10771fbea0Smortimer.\" Redistribution and use in source and binary forms, with or without
11771fbea0Smortimer.\" modification, are permitted provided that the following conditions
12771fbea0Smortimer.\" are met:
13771fbea0Smortimer.\" 1. Redistributions of source code must retain the above copyright
14771fbea0Smortimer.\"    notice, this list of conditions and the following disclaimer.
15771fbea0Smortimer.\" 2. Redistributions in binary form must reproduce the above copyright
16771fbea0Smortimer.\"    notice, this list of conditions and the following disclaimer in the
17771fbea0Smortimer.\"    documentation and/or other materials provided with the distribution.
18771fbea0Smortimer.\"
19771fbea0Smortimer.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20771fbea0Smortimer.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21771fbea0Smortimer.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22771fbea0Smortimer.\" PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23771fbea0Smortimer.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24771fbea0Smortimer.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25771fbea0Smortimer.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26771fbea0Smortimer.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27771fbea0Smortimer.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28771fbea0Smortimer.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29771fbea0Smortimer.\" POSSIBILITY OF SUCH DAMAGE.
30771fbea0Smortimer.\"
31*55e684b4Sjmc.Dd $Mdocdate: June 11 2021 $
32771fbea0Smortimer.Dt BACKTRACE 3
33771fbea0Smortimer.Os
34771fbea0Smortimer.Sh NAME
35771fbea0Smortimer.Nm backtrace ,
36771fbea0Smortimer.Nm backtrace_symbols ,
37771fbea0Smortimer.Nm backtrace_symbols_fd ,
38771fbea0Smortimer.Nm backtrace_symbols_fmt ,
39771fbea0Smortimer.Nm backtrace_symbols_fd_fmt
40771fbea0Smortimer.Nd fill in the backtrace of the currently executing thread
41771fbea0Smortimer.Sh SYNOPSIS
42771fbea0Smortimer.In execinfo.h
43771fbea0Smortimer.Ft size_t
44771fbea0Smortimer.Fn backtrace "void **addrlist" "size_t len"
45771fbea0Smortimer.Ft "char **"
46771fbea0Smortimer.Fn backtrace_symbols "void * const *addrlist" "size_t len"
47771fbea0Smortimer.Ft int
48771fbea0Smortimer.Fn backtrace_symbols_fd "void * const *addrlist" "size_t len" "int fd"
49771fbea0Smortimer.Ft "char **"
50771fbea0Smortimer.Fn backtrace_symbols_fmt "void * const *addrlist" "size_t len" "const char *fmt"
51771fbea0Smortimer.Ft int
52771fbea0Smortimer.Fn backtrace_symbols_fd_fmt "void * const *addrlist" "size_t len" "int fd" "const char *fmt"
53771fbea0Smortimer.Sh DESCRIPTION
54771fbea0SmortimerThe
55771fbea0Smortimer.Fn backtrace
56771fbea0Smortimerfunction places into the array pointed by
57771fbea0Smortimer.Fa addrlist
58771fbea0Smortimerthe array of the values of the program counter for each frame called up to
59771fbea0Smortimer.Fa len
60771fbea0Smortimerframes.
61771fbea0SmortimerThe number of frames found (which can be fewer than
62771fbea0Smortimer.Fa len )
63771fbea0Smortimeris returned.
64771fbea0Smortimer.Pp
65771fbea0SmortimerThe
66771fbea0Smortimer.Fn backtrace_symbols_fmt
67771fbea0Smortimerfunction takes an array of previously filled addresses from
68771fbea0Smortimer.Fn backtrace
69771fbea0Smortimerin
70771fbea0Smortimer.Fa addrlist
71771fbea0Smortimerof
72771fbea0Smortimer.Fa len
73771fbea0Smortimerelements, and uses
74771fbea0Smortimer.Fa fmt
75771fbea0Smortimerto format them.
76771fbea0SmortimerThe formatting characters available are:
77771fbea0Smortimer.Bl -tag -width a -offset indent
78771fbea0Smortimer.It Dv a
79771fbea0SmortimerThe numeric address of each element as would be printed using %p.
80771fbea0Smortimer.It Dv n
81771fbea0SmortimerThe name of the nearest function symbol (smaller than the address element)
82771fbea0Smortimeras determined by
83771fbea0Smortimer.Xr dladdr 3
84771fbea0Smortimer.It Dv d
85771fbea0SmortimerThe difference of the symbol address and the address element printed
86771fbea0Smortimerusing 0x%tx.
87771fbea0Smortimer.It Dv D
88771fbea0SmortimerThe difference of the symbol address and the address element printed using
89771fbea0Smortimer+0x%tx if non-zero, or nothing if zero.
90771fbea0Smortimer.It Dv f
91771fbea0SmortimerThe filename of the symbol as determined by
92771fbea0Smortimer.Xr dladdr 3 .
93771fbea0Smortimer.El
94771fbea0Smortimer.Pp
95771fbea0SmortimerThe array of formatted strings is returned as a contiguous memory address which
96771fbea0Smortimercan be freed by a single
97771fbea0Smortimer.Xr free 3 .
98771fbea0Smortimer.Pp
99771fbea0SmortimerThe
100771fbea0Smortimer.Fn backtrace_symbols
101771fbea0Smortimerfunction is equivalent of calling
102771fbea0Smortimer.Fn backtrace_symbols_fmt
103771fbea0Smortimerwith a format argument of
104771fbea0Smortimer.Dq "%a <%n%D> at %f"
105771fbea0Smortimer.Pp
106771fbea0SmortimerThe
107771fbea0Smortimer.Fn backtrace_symbols_fd
108771fbea0Smortimerand
109771fbea0Smortimer.Fn backtrace_symbols_fd_fmt
110771fbea0Smortimerare similar to the non _fd named functions, only instead of returning
111771fbea0Smortimeran array of strings, they print a new-line separated array of strings in
112771fbea0Smortimerfd, and return
113771fbea0Smortimer.Dv 0
114771fbea0Smortimeron success and
115771fbea0Smortimer.Dv \-1
116771fbea0Smortimeron failure.
117771fbea0Smortimer.Sh RETURN VALUES
118771fbea0SmortimerThe
119771fbea0Smortimer.Fn backtrace
120771fbea0Smortimerfunction returns the number of elements that were filled in the backtrace.
121771fbea0SmortimerThe
122771fbea0Smortimer.Fn backtrace_symbols
123771fbea0Smortimerand
124771fbea0Smortimer.Fn backtrace_symbols_fmt
125771fbea0Smortimerreturn a string array on success, and
126771fbea0Smortimer.Dv NULL
127771fbea0Smortimeron failure, setting
128771fbea0Smortimer.Va errno .
129771fbea0Smortimer.Sh SEE ALSO
130daca582aSjca.Xr dladdr 3
131771fbea0Smortimer.Sh HISTORY
132771fbea0SmortimerThe
133771fbea0Smortimer.Fn backtrace
134771fbea0Smortimerlibrary of functions first appeared in
135771fbea0Smortimer.Nx 7.0
136771fbea0Smortimerand was imported into
137771fbea0Smortimer.Ox 7.0 .
138771fbea0Smortimer.Sh BUGS
139771fbea0Smortimer.Bl -enum
140771fbea0Smortimer.It
141771fbea0SmortimerOnly unwinding with libunwind is supported.
142771fbea0SmortimerOn architectures without libunwind the
143771fbea0Smortimer.Fn backtrace
144771fbea0Smortimerfunction simply returns 0.
145771fbea0Smortimer.It
146771fbea0SmortimerSince
147771fbea0Smortimer.Xr dladdr 3
148771fbea0Smortimeronly deals with dynamic symbols, local symbols from the main
149771fbea0Smortimerportion of the program are not printed.
150771fbea0Smortimer.El
151