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         &timestruc_layout,
 400         &utsname_layout,
 401         &prfdinfo_layout,
 402 };
 403 
 404 
 405 const sl_arch_layout_t *
 406 struct_layout_sparc(void)
 407 {
 408         return (&layout_sparc);
 409 }