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