1 .\" 2 .\" This file and its contents are supplied under the terms of the 3 .\" Common Development and Distribution License ("CDDL"), version 1.0. 4 .\" You may only use this file in accordance with the terms of version 5 .\" 1.0 of the CDDL. 6 .\" 7 .\" A full copy of the text of the CDDL should have accompanied this 8 .\" source. A copy of the CDDL is also available via the Internet at 9 .\" http://www.illumos.org/license/CDDL. 10 .\" 11 .\" 12 .\" Copyright 2015 Joyent, Inc. 13 .\" 14 .Dd May 11, 2016 15 .Dt PSTACK_ITER 3PROC 16 .Os 17 .Sh NAME 18 .Nm Pstack_iter 19 .Nd iterate process stack frames 20 .Sh LIBRARY 21 .Lb libproc 22 .Sh SYNOPSIS 23 .In libproc.h 24 .Ft int 25 .Fo Pstack_iter 26 .Fa "struct ps_prochandle *P" 27 .Fa "const prgregset_t regs" 28 .Fa "proc_stack_f *func" 29 .Fa "void *data" 30 .Fc 31 .Sh DESCRIPTION 32 The 33 .Fn Pstack_iter 34 function iterates over the stack frames in the process 35 .Fa P 36 starting at the point defined by 37 .Fa regs . 38 .Pp 39 For each valid stack frame encountered, the callback function 40 .Fa func 41 is invoked with 42 .Fa data 43 passed as argument. 44 The full signature of 45 .Ft proc_stack_f 46 is defined in 47 .Xr libproc 3LIB . 48 With each callback, a register set, argument set, and argument count 49 will be provided. 50 In that register set, only a subset of the registers will be valid, which 51 include the frame pointer, program counter, and on SPARC systems, the next 52 program counter. 53 These registers can be accessed with the constants 54 .Sy R_FP , 55 .Sy R_PC , 56 and 57 .Sy R_nPC 58 respectively. 59 These correspond to the registers 60 .Em %ebp 61 and 62 .Em %eip 63 on i386, 64 .Em %rbp 65 and 66 .Em %rip 67 on amd64, 68 .Em %fp , 69 .Em %pc , 70 and 71 .Em %npc 72 on both SPARC and SPARCv9. 73 .Pp 74 Callers will receive a callback for the first stack frame indicated by 75 .Fa regs 76 and then will receive a subsequent callback for each caller of that 77 frame until no such frame can be found. 78 Stack frames that logically come after the frame indicated by 79 .Fa regs 80 will not receive callbacks. 81 .Pp 82 The compiler can either facilitate or stymie the iteration of the stack. 83 Programs that have been compiled in such a way as to omit the frame pointer will 84 result in truncated stacks. 85 Similarly, if the initial set of registers passed in via 86 .Fa regs 87 is invalid, then the ability to iterate the stack will be limited. 88 The return value of 89 .Fa func 90 controls whether or not iteration continues. 91 If 92 .Fa func 93 returns 94 .Sy 0 95 then iteration continues. 96 However, if 97 .Fa func 98 returns non-zero, then iteration will halt and that value will be used 99 as the return value of the 100 .Fn Pstack_iter 101 function. 102 Because 103 .Fn Pstack_iter 104 returns 105 .Sy -1 106 on internal failure it is recommended the callback function not return 107 .Sy -1 108 to indicate an error. 109 Thus the caller may distinguish between the failure of the callback function and 110 the failure of the 111 .Fn Pstack_iter 112 function. 113 .Sh RETURN VALUES 114 Upon successful completion, the 115 .Fn Pstack_iter 116 function returns 117 .Sy 0. 118 If there was an internal error then 119 .Sy -1 120 is returned. 121 Otherwise, if the callback function 122 .Fa func 123 returns non-zero, then its return value will be returned instead. 124 .Sh INTERFACE STABILITY 125 .Sy Uncommitted 126 .Sh MT-LEVEL 127 See 128 .Sy LOCKING 129 in 130 .Xr libproc 3LIB . 131 .Sh SEE ALSO 132 .Xr libproc 3LIB , 133 .Xr proc 4