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