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 
  33 static 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 
  42 static const sl_prgregset_layout_t prgregset_layout = {
  43         { 0,    224,    0,      0 },            /* sizeof (prgregset_t) */
  44         { 0,    8,      28,     0 },            /* elt0 */
  45 };
  46 
  47 
  48 static 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 
  79 static 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 
 111 static 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 
 149 static 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 
 187 static 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 
 231 static 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 
 257 static 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 
 270 static 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 
 279 static 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 
 291 static const sl_fltset_layout_t fltset_layout = {
 292         { 0,    16,     0,      0 },            /* sizeof (fltset_t) */
 293         { 0,    4,      4,      0 },            /* word[] */
 294 };
 295 
 296 
 297 static 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 
 315 static const sl_sigset_layout_t sigset_layout = {
 316         { 0,    16,     0,      0 },            /* sizeof (sigset_t) */
 317         { 0,    4,      4,      0 },            /* __sigbits[] */
 318 };
 319 
 320 
 321 static 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 
 330 static 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 
 338 static const sl_sysset_layout_t sysset_layout = {
 339         { 0,    64,     0,      0 },            /* sizeof (sysset_t) */
 340         { 0,    4,      16,     0 },            /* word[] */
 341 };
 342 
 343 
 344 static 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 
 351 static 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 
 361 static 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 
 382 static 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 
 406 const sl_arch_layout_t *
 407 struct_layout_amd64(void)
 408 {
 409         return (&layout_amd64);
 410 }