comparison usr/src/cmd/mdb/common/mdb/mdb_gcore.h @ 14167:7ac6fb740bcf

3946 ::gcore (fix sparc build)
author Christopher Siden <chris.siden@delphix.com>
date Tue, 27 Aug 2013 10:51:34 -0800
parents
children
comparison
equal deleted inserted replaced
14166:6b7f159a0cf1 14167:7ac6fb740bcf
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 (c) 2013 by Delphix. All rights reserved.
13 */
14
15 #ifndef _MDB_GCORE_H
16 #define _MDB_GCORE_H
17
18 /*
19 * The kernel has its own definition of exit which has a different signature
20 * than the user space definition. This seems to be the standard way to deal
21 * with this.
22 */
23 #define exit kern_exit
24
25 #include <sys/cpuvar.h>
26 #include <sys/cred_impl.h>
27 #include <sys/procfs.h>
28 #include <vm/anon.h>
29
30 #undef exit
31
32 /* mdb versions of kernel structures used for ctf read calls */
33 typedef struct mdb_proc {
34 uintptr_t p_as;
35 uintptr_t p_brkbase;
36 size_t p_brksize;
37 uintptr_t p_usrstack;
38 size_t p_stksize;
39 user_t p_user;
40 uintptr_t p_agenttp;
41 uintptr_t p_tlist;
42 uintptr_t p_zone;
43 uintptr_t p_ldt;
44 kcondvar_t p_holdlwps;
45 int p_lwpcnt;
46 uintptr_t p_lwpdir;
47 uint_t p_lwpdir_sz;
48 uintptr_t p_cred;
49 uint_t p_flag;
50 int p_zombcnt;
51 uintptr_t p_pidp;
52 pid_t p_ppid;
53 uintptr_t p_pgidp;
54 uintptr_t p_sessp;
55 uintptr_t p_task;
56 uintptr_t p_pool;
57 model_t p_model;
58 char p_wcode;
59 ushort_t p_ldtlimit;
60 uintptr_t p_exec;
61 uint_t p_proc_flag;
62 ushort_t p_pidflag;
63 k_sigset_t p_ignore;
64 k_sigset_t p_siginfo;
65 k_sigset_t p_sig;
66 k_sigset_t p_sigmask;
67 k_fltset_t p_fltmask;
68 int p_wdata;
69 } mdb_proc_t;
70
71 typedef struct mdb_kthread {
72 ushort_t t_proc_flag;
73 uint_t t_state;
74 lwpchan_t t_lwpchan;
75 ushort_t t_whystop;
76 uint8_t t_dtrace_stop;
77 uintptr_t t_forw;
78 uintptr_t t_lwp;
79 id_t t_tid;
80 short t_sysnum;
81 pri_t t_pri;
82 time_t t_start;
83 id_t t_cid;
84 uintptr_t t_cpu;
85 int t_bind_pset;
86 short t_bind_cpu;
87 uintptr_t t_lpl;
88 ushort_t t_schedflag;
89 ushort_t t_whatstop;
90 k_sigset_t t_sig;
91 uintptr_t t_schedctl;
92 k_sigset_t t_hold;
93 hrtime_t t_stoptime;
94 } mdb_kthread_t;
95
96 typedef struct mdb_seg {
97 uintptr_t s_base;
98 size_t s_size;
99 uintptr_t s_ops;
100 uintptr_t s_data;
101 uintptr_t s_as;
102 } mdb_seg_t;
103
104 typedef struct mdb_as {
105 uintptr_t a_proc;
106 } mdb_as_t;
107
108 typedef struct mdb_segvn_data {
109 uintptr_t vp;
110 uint64_t offset;
111 uint16_t flags;
112 uint8_t pageprot;
113 uint8_t prot;
114 uintptr_t amp;
115 struct vpage *vpage;
116 uint64_t anon_index;
117 uint8_t type;
118 } mdb_segvn_data_t;
119
120 typedef struct mdb_vnode {
121 enum vtype v_type;
122 uintptr_t v_data;
123 uintptr_t v_op;
124 uintptr_t v_path;
125 } mdb_vnode_t;
126
127 typedef struct mdb_znode {
128 uint64_t z_size;
129 } mdb_znode_t;
130
131 typedef struct mdb_tmpnode {
132 vattr_t tn_attr;
133 } mdb_tmpnode_t;
134
135 typedef struct mdb_vnodeops {
136 uintptr_t vnop_name;
137 } mdb_vnodeops_t;
138
139 typedef struct mdb_shm_data {
140 uintptr_t shm_sptseg;
141 } mdb_shm_data_t;
142
143 typedef struct mdb_watched_page {
144 uintptr_t wp_vaddr;
145 uint8_t wp_oprot;
146 } mdb_watched_page_t;
147
148 typedef struct mdb_pid {
149 pid_t pid_id;
150 } mdb_pid_t;
151
152 typedef struct mdb_sess {
153 uintptr_t s_sidp;
154 } mdb_sess_t;
155
156 typedef struct mdb_task {
157 taskid_t tk_tkid;
158 uintptr_t tk_proj;
159 } mdb_task_t;
160
161 typedef struct mdb_kproject {
162 projid_t kpj_id;
163 } mdb_kproject_t;
164
165 typedef struct mdb_zone {
166 zoneid_t zone_id;
167 uintptr_t zone_name;
168 } mdb_zone_t;
169
170 typedef struct mdb_sc_shared {
171 char sc_sigblock;
172 } mdb_sc_shared_t;
173
174 typedef struct mdb_klwp {
175 uintptr_t lwp_regs;
176 struct pcb lwp_pcb;
177 uchar_t lwp_asleep;
178 uchar_t lwp_cursig;
179 uintptr_t lwp_curinfo;
180 k_siginfo_t lwp_siginfo;
181 stack_t lwp_sigaltstack;
182 uintptr_t lwp_oldcontext;
183 short lwp_badpriv;
184 uintptr_t lwp_ustack;
185 char lwp_eosys;
186 } mdb_klwp_t;
187
188 typedef struct mdb_cpu {
189 processorid_t cpu_id;
190 } mdb_cpu_t;
191
192 typedef struct mdb_lpl {
193 lgrp_id_t lpl_lgrpid;
194 } mdb_lpl_t;
195
196 typedef struct mdb_sigqueue {
197 k_siginfo_t sq_info;
198 } mdb_sigqueue_t;
199
200 typedef struct mdb_pool {
201 poolid_t pool_id;
202 } mdb_pool_t;
203
204 typedef struct mdb_amp {
205 uintptr_t ahp;
206 } mdb_amp_t;
207
208 typedef struct mdb_anon_hdr {
209 pgcnt_t size;
210 uintptr_t array_chunk;
211 int flags;
212 } mdb_anon_hdr_t;
213
214 typedef struct mdb_anon {
215 uintptr_t an_vp;
216 anoff_t an_off;
217 } mdb_anon_t;
218
219 /* Used to construct a linked list of prmap_ts */
220 typedef struct prmap_node {
221 struct prmap_node *next;
222 prmap_t m;
223 } prmap_node_t;
224
225 /* Fields common to psinfo_t and pstatus_t */
226 typedef struct pcommon {
227 int pc_nlwp;
228 int pc_nzomb;
229 pid_t pc_pid;
230 pid_t pc_ppid;
231 pid_t pc_pgid;
232 pid_t pc_sid;
233 taskid_t pc_taskid;
234 projid_t pc_projid;
235 zoneid_t pc_zoneid;
236 char pc_dmodel;
237 } pcommon_t;
238
239 /* AVL walk callback structures */
240 typedef struct read_maps_cbarg {
241 mdb_proc_t *p;
242 uintptr_t brkseg;
243 uintptr_t stkseg;
244 prmap_node_t *map_head;
245 prmap_node_t *map_tail;
246 int map_len;
247 } read_maps_cbarg_t;
248
249 typedef struct as_segat_cbarg {
250 uintptr_t addr;
251 uintptr_t res;
252 } as_segat_cbarg_t;
253
254 typedef struct getwatchprot_cbarg {
255 uintptr_t wp_vaddr;
256 mdb_watched_page_t wp;
257 boolean_t found;
258 } getwatchprot_cbarg_t;
259
260 struct gcore_segops;
261 typedef struct gcore_seg {
262 mdb_seg_t *gs_seg;
263 void *gs_data;
264 struct gcore_segops *gs_ops;
265 } gcore_seg_t;
266
267 /*
268 * These are the ISA-dependent functions that need to be
269 * implemented for ::gcore.
270 */
271 extern uintptr_t gcore_prgetstackbase(mdb_proc_t *);
272 extern int gcore_prfetchinstr(mdb_klwp_t *, ulong_t *);
273 extern int gcore_prisstep(mdb_klwp_t *);
274 extern void gcore_getgregs(mdb_klwp_t *, gregset_t);
275 extern int gcore_prgetrvals(mdb_klwp_t *, long *, long *);
276
277 #endif /* _MDB_GCORE_H */