1 /*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21
22 /*
23 * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
25 */
26 /*
27 * Copyright 2012 DEY Storage Systems, Inc. All rights reserved.
28 */
29 #include <struct_layout.h>
30
31
32 static const sl_auxv_layout_t auxv_layout = {
33 { 0, 8, 0, 0 }, /* sizeof (auxv_t) */
34 { 0, 4, 0, 1 }, /* a_type */
35 { 4, 4, 0, 1 }, /* a_un.a_val */
36 { 4, 4, 0, 0 }, /* a_un.a_ptr */
37 { 4, 4, 0, 0 }, /* a_un.a_fcn */
38 };
39
40
41 static const sl_prgregset_layout_t prgregset_layout = {
42 { 0, 152, 0, 0 }, /* sizeof (prgregset_t) */
43 { 0, 4, 38, 0 }, /* elt0 */
44 };
45
46
47 static const sl_lwpstatus_layout_t lwpstatus_layout = {
48 { 0, 896, 0, 0 }, /* sizeof (lwpstatus_t) */
49 { 0, 4, 0, 0 }, /* pr_flags */
50 { 4, 4, 0, 0 }, /* pr_lwpid */
51 { 8, 2, 0, 0 }, /* pr_why */
52 { 10, 2, 0, 0 }, /* pr_what */
53 { 12, 2, 0, 0 }, /* pr_cursig */
54 { 16, 128, 0, 0 }, /* pr_info */
55 { 144, 16, 0, 0 }, /* pr_lwppend */
56 { 160, 16, 0, 0 }, /* pr_lwphold */
57 { 176, 32, 0, 0 }, /* pr_action */
58 { 208, 12, 0, 0 }, /* pr_altstack */
59 { 220, 4, 0, 0 }, /* pr_oldcontext */
60 { 224, 2, 0, 0 }, /* pr_syscall */
61 { 226, 2, 0, 0 }, /* pr_nsysarg */
62 { 228, 4, 0, 0 }, /* pr_errno */
63 { 232, 4, 8, 0 }, /* pr_sysarg[] */
64 { 264, 4, 0, 0 }, /* pr_rval1 */
65 { 268, 4, 0, 0 }, /* pr_rval2 */
66 { 272, 1, 8, 0 }, /* pr_clname[] */
67 { 280, 8, 0, 0 }, /* pr_tstamp */
68 { 288, 8, 0, 0 }, /* pr_utime */
69 { 296, 8, 0, 0 }, /* pr_stime */
70 { 332, 4, 0, 0 }, /* pr_errpriv */
71 { 336, 4, 0, 0 }, /* pr_ustack */
72 { 340, 4, 0, 0 }, /* pr_instr */
73 { 344, 152, 0, 0 }, /* pr_reg */
74 { 496, 400, 0, 0 }, /* pr_fpreg */
75 };
76
77
78 static const sl_pstatus_layout_t pstatus_layout = {
79 { 0, 1232, 0, 0 }, /* sizeof (pstatus_t) */
80 { 0, 4, 0, 1 }, /* pr_flags */
81 { 4, 4, 0, 1 }, /* pr_nlwp */
82 { 8, 4, 0, 0 }, /* pr_pid */
83 { 12, 4, 0, 0 }, /* pr_ppid */
84 { 16, 4, 0, 0 }, /* pr_pgid */
85 { 20, 4, 0, 0 }, /* pr_sid */
86 { 24, 4, 0, 1 }, /* pr_aslwpid */
87 { 28, 4, 0, 1 }, /* pr_agentid */
88 { 32, 16, 0, 0 }, /* pr_sigpend */
89 { 48, 4, 0, 0 }, /* pr_brkbase */
90 { 52, 4, 0, 0 }, /* pr_brksize */
91 { 56, 4, 0, 0 }, /* pr_stkbase */
92 { 60, 4, 0, 0 }, /* pr_stksize */
93 { 64, 8, 0, 0 }, /* pr_utime */
94 { 72, 8, 0, 0 }, /* pr_stime */
95 { 80, 8, 0, 0 }, /* pr_cutime */
96 { 88, 8, 0, 0 }, /* pr_cstime */
97 { 96, 16, 0, 0 }, /* pr_sigtrace */
98 { 112, 16, 0, 0 }, /* pr_flttrace */
99 { 128, 64, 0, 0 }, /* pr_sysentry */
100 { 192, 64, 0, 0 }, /* pr_sysexit */
101 { 256, 1, 0, 0 }, /* pr_dmodel */
102 { 260, 4, 0, 1 }, /* pr_taskid */
103 { 264, 4, 0, 1 }, /* pr_projid */
104 { 268, 4, 0, 1 }, /* pr_nzomb */
105 { 272, 4, 0, 1 }, /* pr_zoneid */
106 { 336, 896, 0, 0 }, /* pr_lwp */
107 };
108
109
110 static const sl_prstatus_layout_t prstatus_layout = {
111 { 0, 508, 0, 0 }, /* sizeof (prstatus_t) */
112 { 0, 4, 0, 1 }, /* pr_flags */
113 { 4, 2, 0, 1 }, /* pr_why */
114 { 6, 2, 0, 1 }, /* pr_what */
115 { 8, 128, 0, 0 }, /* pr_info */
116 { 136, 2, 0, 1 }, /* pr_cursig */
117 { 138, 2, 0, 0 }, /* pr_nlwp */
118 { 140, 16, 0, 0 }, /* pr_sigpend */
119 { 156, 16, 0, 0 }, /* pr_sighold */
120 { 172, 12, 0, 0 }, /* pr_altstack */
121 { 184, 32, 0, 0 }, /* pr_action */
122 { 216, 4, 0, 0 }, /* pr_pid */
123 { 220, 4, 0, 0 }, /* pr_ppid */
124 { 224, 4, 0, 0 }, /* pr_pgrp */
125 { 228, 4, 0, 0 }, /* pr_sid */
126 { 232, 8, 0, 0 }, /* pr_utime */
127 { 240, 8, 0, 0 }, /* pr_stime */
128 { 248, 8, 0, 0 }, /* pr_cutime */
129 { 256, 8, 0, 0 }, /* pr_cstime */
130 { 264, 1, 8, 0 }, /* pr_clname[] */
131 { 272, 2, 0, 1 }, /* pr_syscall */
132 { 274, 2, 0, 1 }, /* pr_nsysarg */
133 { 276, 4, 8, 1 }, /* pr_sysarg[] */
134 { 308, 4, 0, 0 }, /* pr_who */
135 { 312, 16, 0, 0 }, /* pr_lwppend */
136 { 328, 4, 0, 0 }, /* pr_oldcontext */
137 { 332, 4, 0, 0 }, /* pr_brkbase */
138 { 336, 4, 0, 0 }, /* pr_brksize */
139 { 340, 4, 0, 0 }, /* pr_stkbase */
140 { 344, 4, 0, 0 }, /* pr_stksize */
141 { 348, 2, 0, 1 }, /* pr_processor */
142 { 350, 2, 0, 1 }, /* pr_bind */
143 { 352, 4, 0, 1 }, /* pr_instr */
144 { 356, 152, 0, 0 }, /* pr_reg */
145 };
146
147
148 static const sl_psinfo_layout_t psinfo_layout = {
149 { 0, 336, 0, 0 }, /* sizeof (psinfo_t) */
150 { 0, 4, 0, 1 }, /* pr_flag */
151 { 4, 4, 0, 1 }, /* pr_nlwp */
152 { 8, 4, 0, 0 }, /* pr_pid */
153 { 12, 4, 0, 0 }, /* pr_ppid */
154 { 16, 4, 0, 0 }, /* pr_pgid */
155 { 20, 4, 0, 0 }, /* pr_sid */
156 { 24, 4, 0, 0 }, /* pr_uid */
157 { 28, 4, 0, 0 }, /* pr_euid */
158 { 32, 4, 0, 0 }, /* pr_gid */
159 { 36, 4, 0, 0 }, /* pr_egid */
160 { 40, 4, 0, 0 }, /* pr_addr */
161 { 44, 4, 0, 0 }, /* pr_size */
162 { 48, 4, 0, 0 }, /* pr_rssize */
163 { 56, 4, 0, 0 }, /* pr_ttydev */
164 { 60, 2, 0, 0 }, /* pr_pctcpu */
165 { 62, 2, 0, 0 }, /* pr_pctmem */
166 { 64, 8, 0, 0 }, /* pr_start */
167 { 72, 8, 0, 0 }, /* pr_time */
168 { 80, 8, 0, 0 }, /* pr_ctime */
169 { 88, 1, 16, 0 }, /* pr_fname[] */
170 { 104, 1, 80, 0 }, /* pr_psargs[] */
171 { 184, 4, 0, 1 }, /* pr_wstat */
172 { 188, 4, 0, 1 }, /* pr_argc */
173 { 192, 4, 0, 0 }, /* pr_argv */
174 { 196, 4, 0, 0 }, /* pr_envp */
175 { 200, 1, 0, 0 }, /* pr_dmodel */
176 { 204, 4, 0, 0 }, /* pr_taskid */
177 { 208, 4, 0, 0 }, /* pr_projid */
178 { 212, 4, 0, 1 }, /* pr_nzomb */
179 { 216, 4, 0, 0 }, /* pr_poolid */
180 { 220, 4, 0, 0 }, /* pr_zoneid */
181 { 224, 4, 0, 0 }, /* pr_contract */
182 { 232, 104, 0, 0 }, /* pr_lwp */
183 };
184
185
186 static const sl_prpsinfo_layout_t prpsinfo_layout = {
187 { 0, 260, 0, 0 }, /* sizeof (prpsinfo_t) */
188 { 0, 1, 0, 0 }, /* pr_state */
189 { 1, 1, 0, 0 }, /* pr_sname */
190 { 2, 1, 0, 0 }, /* pr_zomb */
191 { 3, 1, 0, 0 }, /* pr_nice */
192 { 4, 4, 0, 0 }, /* pr_flag */
193 { 8, 4, 0, 0 }, /* pr_uid */
194 { 12, 4, 0, 0 }, /* pr_gid */
195 { 16, 4, 0, 0 }, /* pr_pid */
196 { 20, 4, 0, 0 }, /* pr_ppid */
197 { 24, 4, 0, 0 }, /* pr_pgrp */
198 { 28, 4, 0, 0 }, /* pr_sid */
199 { 32, 4, 0, 0 }, /* pr_addr */
200 { 36, 4, 0, 0 }, /* pr_size */
201 { 40, 4, 0, 0 }, /* pr_rssize */
202 { 44, 4, 0, 0 }, /* pr_wchan */
203 { 48, 8, 0, 0 }, /* pr_start */
204 { 56, 8, 0, 0 }, /* pr_time */
205 { 64, 4, 0, 1 }, /* pr_pri */
206 { 68, 1, 0, 0 }, /* pr_oldpri */
207 { 69, 1, 0, 0 }, /* pr_cpu */
208 { 70, 2, 0, 0 }, /* pr_ottydev */
209 { 72, 4, 0, 0 }, /* pr_lttydev */
210 { 76, 1, 8, 0 }, /* pr_clname[] */
211 { 84, 1, 16, 0 }, /* pr_fname[] */
212 { 100, 1, 80, 0 }, /* pr_psargs[] */
213 { 180, 2, 0, 1 }, /* pr_syscall */
214 { 184, 8, 0, 0 }, /* pr_ctime */
215 { 192, 4, 0, 0 }, /* pr_bysize */
216 { 196, 4, 0, 0 }, /* pr_byrssize */
217 { 200, 4, 0, 1 }, /* pr_argc */
218 { 204, 4, 0, 0 }, /* pr_argv */
219 { 208, 4, 0, 0 }, /* pr_envp */
220 { 212, 4, 0, 1 }, /* pr_wstat */
221 { 216, 2, 0, 0 }, /* pr_pctcpu */
222 { 218, 2, 0, 0 }, /* pr_pctmem */
223 { 220, 4, 0, 0 }, /* pr_euid */
224 { 224, 4, 0, 0 }, /* pr_egid */
225 { 228, 4, 0, 0 }, /* pr_aslwpid */
226 { 232, 1, 0, 0 }, /* pr_dmodel */
227 };
228
229
230 static const sl_lwpsinfo_layout_t lwpsinfo_layout = {
231 { 0, 104, 0, 0 }, /* sizeof (lwpsinfo_t) */
232 { 0, 4, 0, 1 }, /* pr_flag */
233 { 4, 4, 0, 0 }, /* pr_lwpid */
234 { 8, 4, 0, 0 }, /* pr_addr */
235 { 12, 4, 0, 0 }, /* pr_wchan */
236 { 16, 1, 0, 0 }, /* pr_stype */
237 { 17, 1, 0, 0 }, /* pr_state */
238 { 18, 1, 0, 0 }, /* pr_sname */
239 { 19, 1, 0, 0 }, /* pr_nice */
240 { 20, 2, 0, 0 }, /* pr_syscall */
241 { 22, 1, 0, 0 }, /* pr_oldpri */
242 { 23, 1, 0, 0 }, /* pr_cpu */
243 { 24, 4, 0, 1 }, /* pr_pri */
244 { 28, 2, 0, 0 }, /* pr_pctcpu */
245 { 32, 8, 0, 0 }, /* pr_start */
246 { 40, 8, 0, 0 }, /* pr_time */
247 { 48, 1, 8, 0 }, /* pr_clname[] */
248 { 56, 1, 16, 0 }, /* pr_name[] */
249 { 72, 4, 0, 1 }, /* pr_onpro */
250 { 76, 4, 0, 1 }, /* pr_bindpro */
251 { 80, 4, 0, 1 }, /* pr_bindpset */
252 { 84, 4, 0, 1 }, /* pr_lgrp */
253 };
254
255
256 static const sl_prcred_layout_t prcred_layout = {
257 { 0, 32, 0, 0 }, /* sizeof (prcred_t) */
258 { 0, 4, 0, 0 }, /* pr_euid */
259 { 4, 4, 0, 0 }, /* pr_ruid */
260 { 8, 4, 0, 0 }, /* pr_suid */
261 { 12, 4, 0, 0 }, /* pr_egid */
262 { 16, 4, 0, 0 }, /* pr_rgid */
263 { 20, 4, 0, 0 }, /* pr_sgid */
264 { 24, 4, 0, 1 }, /* pr_ngroups */
265 { 28, 4, 1, 0 }, /* pr_groups[] */
266 };
267
268
269 static const sl_prpriv_layout_t prpriv_layout = {
270 { 0, 16, 0, 0 }, /* sizeof (prpriv_t) */
271 { 0, 4, 0, 0 }, /* pr_nsets */
272 { 4, 4, 0, 0 }, /* pr_setsize */
273 { 8, 4, 0, 0 }, /* pr_infosize */
274 { 12, 4, 1, 0 }, /* pr_sets[] */
275 };
276
277
278 static const sl_priv_impl_info_layout_t priv_impl_info_layout = {
279 { 0, 28, 0, 0 }, /* sizeof (priv_impl_info_t) */
280 { 0, 4, 0, 0 }, /* priv_headersize */
281 { 4, 4, 0, 0 }, /* priv_flags */
282 { 8, 4, 0, 0 }, /* priv_nsets */
283 { 12, 4, 0, 0 }, /* priv_setsize */
284 { 16, 4, 0, 0 }, /* priv_max */
285 { 20, 4, 0, 0 }, /* priv_infosize */
286 { 24, 4, 0, 0 }, /* priv_globalinfosize */
287 };
288
289
290 static const sl_fltset_layout_t fltset_layout = {
291 { 0, 16, 0, 0 }, /* sizeof (fltset_t) */
292 { 0, 4, 4, 0 }, /* word[] */
293 };
294
295
296 static const sl_siginfo_layout_t siginfo_layout = {
297 { 0, 128, 0, 0 }, /* sizeof (siginfo_t) */
298 { 0, 4, 0, 0 }, /* si_signo */
299 { 8, 4, 0, 0 }, /* si_errno */
300 { 4, 4, 0, 1 }, /* si_code */
301 { 20, 4, 0, 0 }, /* si_value.sival_int */
302 { 20, 4, 0, 0 }, /* si_value.sival_ptr */
303 { 12, 4, 0, 0 }, /* si_pid */
304 { 16, 4, 0, 0 }, /* si_uid */
305 { 28, 4, 0, 0 }, /* si_ctid */
306 { 32, 4, 0, 0 }, /* si_zoneid */
307 { 12, 4, 0, 0 }, /* si_entity */
308 { 12, 4, 0, 0 }, /* si_addr */
309 { 20, 4, 0, 0 }, /* si_status */
310 { 16, 4, 0, 0 }, /* si_band */
311 };
312
313
314 static const sl_sigset_layout_t sigset_layout = {
315 { 0, 16, 0, 0 }, /* sizeof (sigset_t) */
316 { 0, 4, 4, 0 }, /* __sigbits[] */
317 };
318
319
320 static const sl_sigaction_layout_t sigaction_layout = {
321 { 0, 32, 0, 0 }, /* sizeof (struct sigaction) */
322 { 0, 4, 0, 0 }, /* sa_flags */
323 { 4, 4, 0, 0 }, /* sa_handler */
324 { 4, 4, 0, 0 }, /* sa_sigaction */
325 { 8, 16, 0, 0 }, /* sa_mask */
326 };
327
328
329 static const sl_stack_layout_t stack_layout = {
330 { 0, 12, 0, 0 }, /* sizeof (stack_t) */
331 { 0, 4, 0, 0 }, /* ss_sp */
332 { 4, 4, 0, 0 }, /* ss_size */
333 { 8, 4, 0, 0 }, /* ss_flags */
334 };
335
336
337 static const sl_sysset_layout_t sysset_layout = {
338 { 0, 64, 0, 0 }, /* sizeof (sysset_t) */
339 { 0, 4, 16, 0 }, /* word[] */
340 };
341
342
343 static const sl_timestruc_layout_t timestruc_layout = {
344 { 0, 8, 0, 0 }, /* sizeof (timestruc_t) */
345 { 0, 4, 0, 0 }, /* tv_sec */
346 { 4, 4, 0, 0 }, /* tv_nsec */
347 };
348
349
350 static const sl_utsname_layout_t utsname_layout = {
351 { 0, 1285, 0, 0 }, /* sizeof (struct utsname) */
352 { 0, 1, 257, 0 }, /* sysname[] */
353 { 257, 1, 257, 0 }, /* nodename[] */
354 { 514, 1, 257, 0 }, /* release[] */
355 { 771, 1, 257, 0 }, /* version[] */
356 { 1028, 1, 257, 0 }, /* machine[] */
357 };
358
359
360 static const sl_prfdinfo_layout_t prfdinfo_layout = {
361 { 0, 1088, 0, 0 }, /* sizeof (prfdinfo_t) */
362 { 0, 4, 0, 0 }, /* pr_fd */
363 { 4, 4, 0, 0 }, /* pr_mode */
364 { 8, 4, 0, 0 }, /* pr_uid */
365 { 12, 4, 0, 0 }, /* pr_gid */
366 { 16, 4, 0, 0 }, /* pr_major */
367 { 20, 4, 0, 0 }, /* pr_minor */
368 { 24, 4, 0, 0 }, /* pr_rmajor */
369 { 28, 4, 0, 0 }, /* pr_rminor */
370 { 32, 8, 0, 0 }, /* pr_ino */
371 { 40, 8, 0, 0 }, /* pr_offset */
372 { 48, 8, 0, 0 }, /* pr_size */
373 { 56, 4, 0, 0 }, /* pr_fileflags */
374 { 60, 4, 0, 0 }, /* pr_fdflags */
375 { 64, 1, 1024, 0 }, /* pr_path[] */
376 };
377
378
379
380
381 static const sl_arch_layout_t layout_sparc = {
382 &auxv_layout,
383 &fltset_layout,
384 &lwpsinfo_layout,
385 &lwpstatus_layout,
386 &prcred_layout,
387 &priv_impl_info_layout,
388 &prpriv_layout,
389 &psinfo_layout,
390 &pstatus_layout,
391 &prgregset_layout,
392 &prpsinfo_layout,
393 &prstatus_layout,
394 &sigaction_layout,
395 &siginfo_layout,
396 &sigset_layout,
397 &stack_layout,
398 &sysset_layout,
399 ×truc_layout,
400 &utsname_layout,
401 &prfdinfo_layout,
402 };
403
404
405 const sl_arch_layout_t *
struct_layout_sparc(void)406 struct_layout_sparc(void)
407 {
408 return (&layout_sparc);
409 }
410