143051d27SRobert Mustacchi.\"
243051d27SRobert Mustacchi.\" This file and its contents are supplied under the terms of the
343051d27SRobert Mustacchi.\" Common Development and Distribution License ("CDDL"), version 1.0.
443051d27SRobert Mustacchi.\" You may only use this file in accordance with the terms of version
543051d27SRobert Mustacchi.\" 1.0 of the CDDL.
643051d27SRobert Mustacchi.\"
743051d27SRobert Mustacchi.\" A full copy of the text of the CDDL should have accompanied this
843051d27SRobert Mustacchi.\" source.  A copy of the CDDL is also available via the Internet at
943051d27SRobert Mustacchi.\" http://www.illumos.org/license/CDDL.
1043051d27SRobert Mustacchi.\"
1143051d27SRobert Mustacchi.\"
1243051d27SRobert Mustacchi.\" Copyright 2015 Joyent, Inc.
1343051d27SRobert Mustacchi.\"
1443051d27SRobert Mustacchi.Dd May 11, 2016
1543051d27SRobert Mustacchi.Dt PSTACK_ITER 3PROC
1643051d27SRobert Mustacchi.Os
1743051d27SRobert Mustacchi.Sh NAME
1843051d27SRobert Mustacchi.Nm Pstack_iter
1943051d27SRobert Mustacchi.Nd iterate process stack frames
20ab618543SJohn Levon.Sh LIBRARY
2143051d27SRobert Mustacchi.Lb libproc
22ab618543SJohn Levon.Sh SYNOPSIS
2343051d27SRobert Mustacchi.In libproc.h
2443051d27SRobert Mustacchi.Ft int
2543051d27SRobert Mustacchi.Fo Pstack_iter
2643051d27SRobert Mustacchi.Fa "struct ps_prochandle *P"
2743051d27SRobert Mustacchi.Fa "const prgregset_t regs"
2843051d27SRobert Mustacchi.Fa "proc_stack_f *func"
2943051d27SRobert Mustacchi.Fa "void *data"
3043051d27SRobert Mustacchi.Fc
3143051d27SRobert Mustacchi.Sh DESCRIPTION
3243051d27SRobert MustacchiThe
3343051d27SRobert Mustacchi.Fn Pstack_iter
3443051d27SRobert Mustacchifunction iterates over the stack frames in the process
3543051d27SRobert Mustacchi.Fa P
3643051d27SRobert Mustacchistarting at the point defined by
3743051d27SRobert Mustacchi.Fa regs .
3843051d27SRobert Mustacchi.Pp
3943051d27SRobert MustacchiFor each valid stack frame encountered, the callback function
4043051d27SRobert Mustacchi.Fa func
4143051d27SRobert Mustacchiis invoked with
4243051d27SRobert Mustacchi.Fa data
4372d3dbb9SYuri Pankovpassed as argument.
4472d3dbb9SYuri PankovThe full signature of
4543051d27SRobert Mustacchi.Ft proc_stack_f
4643051d27SRobert Mustacchiis defined in
4743051d27SRobert Mustacchi.Xr libproc 3LIB .
4843051d27SRobert MustacchiWith each callback, a register set, argument set, and argument count
4972d3dbb9SYuri Pankovwill be provided.
5072d3dbb9SYuri PankovIn that register set, only a subset of the registers will be valid, which
5172d3dbb9SYuri Pankovinclude the frame pointer, program counter, and on SPARC systems, the next
5272d3dbb9SYuri Pankovprogram counter.
5372d3dbb9SYuri PankovThese registers can be accessed with the constants
5443051d27SRobert Mustacchi.Sy R_FP ,
5543051d27SRobert Mustacchi.Sy R_PC ,
5643051d27SRobert Mustacchiand
5743051d27SRobert Mustacchi.Sy R_nPC
5872d3dbb9SYuri Pankovrespectively.
5972d3dbb9SYuri PankovThese correspond to the registers
6043051d27SRobert Mustacchi.Em %ebp
6143051d27SRobert Mustacchiand
6243051d27SRobert Mustacchi.Em %eip
6343051d27SRobert Mustacchion i386,
6443051d27SRobert Mustacchi.Em %rbp
6543051d27SRobert Mustacchiand
6643051d27SRobert Mustacchi.Em %rip
6743051d27SRobert Mustacchion amd64,
6843051d27SRobert Mustacchi.Em %fp ,
6943051d27SRobert Mustacchi.Em %pc ,
7043051d27SRobert Mustacchiand
7143051d27SRobert Mustacchi.Em %npc
7243051d27SRobert Mustacchion both SPARC and SPARCv9.
7343051d27SRobert Mustacchi.Pp
7443051d27SRobert MustacchiCallers will receive a callback for the first stack frame indicated by
7543051d27SRobert Mustacchi.Fa regs
7643051d27SRobert Mustacchiand then will receive a subsequent callback for each caller of that
7772d3dbb9SYuri Pankovframe until no such frame can be found.
7872d3dbb9SYuri PankovStack frames that logically come after the frame indicated by
7943051d27SRobert Mustacchi.Fa regs
8043051d27SRobert Mustacchiwill not receive callbacks.
8143051d27SRobert Mustacchi.Pp
8272d3dbb9SYuri PankovThe compiler can either facilitate or stymie the iteration of the stack.
8372d3dbb9SYuri PankovPrograms that have been compiled in such a way as to omit the frame pointer will
8472d3dbb9SYuri Pankovresult in truncated stacks.
8572d3dbb9SYuri PankovSimilarly, if the initial set of registers passed in via
8643051d27SRobert Mustacchi.Fa regs
8743051d27SRobert Mustacchiis invalid, then the ability to iterate the stack will be limited.
8843051d27SRobert MustacchiThe return value of
8943051d27SRobert Mustacchi.Fa func
9072d3dbb9SYuri Pankovcontrols whether or not iteration continues.
9172d3dbb9SYuri PankovIf
9243051d27SRobert Mustacchi.Fa func
9343051d27SRobert Mustacchireturns
9443051d27SRobert Mustacchi.Sy 0
9572d3dbb9SYuri Pankovthen iteration continues.
9672d3dbb9SYuri PankovHowever, if
9743051d27SRobert Mustacchi.Fa func
9843051d27SRobert Mustacchireturns non-zero, then iteration will halt and that value will be used
9943051d27SRobert Mustacchias the return value of the
10043051d27SRobert Mustacchi.Fn Pstack_iter
10172d3dbb9SYuri Pankovfunction.
10272d3dbb9SYuri PankovBecause
10343051d27SRobert Mustacchi.Fn Pstack_iter
10443051d27SRobert Mustacchireturns
10543051d27SRobert Mustacchi.Sy -1
10643051d27SRobert Mustacchion internal failure it is recommended the callback function not return
10743051d27SRobert Mustacchi.Sy -1
10872d3dbb9SYuri Pankovto indicate an error.
10972d3dbb9SYuri PankovThus the caller may distinguish between the failure of the callback function and
11072d3dbb9SYuri Pankovthe failure of the
11143051d27SRobert Mustacchi.Fn Pstack_iter
11243051d27SRobert Mustacchifunction.
11343051d27SRobert Mustacchi.Sh RETURN VALUES
11443051d27SRobert MustacchiUpon successful completion, the
11543051d27SRobert Mustacchi.Fn Pstack_iter
11643051d27SRobert Mustacchifunction returns
11743051d27SRobert Mustacchi.Sy 0.
11843051d27SRobert MustacchiIf there was an internal error then
11943051d27SRobert Mustacchi.Sy -1
12072d3dbb9SYuri Pankovis returned.
12172d3dbb9SYuri PankovOtherwise, if the callback function
12243051d27SRobert Mustacchi.Fa func
12343051d27SRobert Mustacchireturns non-zero, then its return value will be returned instead.
12443051d27SRobert Mustacchi.Sh INTERFACE STABILITY
12543051d27SRobert Mustacchi.Sy Uncommitted
12643051d27SRobert Mustacchi.Sh MT-LEVEL
12743051d27SRobert MustacchiSee
12843051d27SRobert Mustacchi.Sy LOCKING
12943051d27SRobert Mustacchiin
13043051d27SRobert Mustacchi.Xr libproc 3LIB .
13143051d27SRobert Mustacchi.Sh SEE ALSO
13243051d27SRobert Mustacchi.Xr libproc 3LIB ,
133*bbf21555SRichard Lowe.Xr proc 5
134