Home | History | Annotate | Download | only in common
      1  6635  ab196087 /*
      2  6635  ab196087  * CDDL HEADER START
      3  6635  ab196087  *
      4  6635  ab196087  * The contents of this file are subject to the terms of the
      5  6635  ab196087  * Common Development and Distribution License (the "License").
      6  6635  ab196087  * You may not use this file except in compliance with the License.
      7  6635  ab196087  *
      8  6635  ab196087  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
      9  6635  ab196087  * or http://www.opensolaris.org/os/licensing.
     10  6635  ab196087  * See the License for the specific language governing permissions
     11  6635  ab196087  * and limitations under the License.
     12  6635  ab196087  *
     13  6635  ab196087  * When distributing Covered Code, include this CDDL HEADER in each
     14  6635  ab196087  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
     15  6635  ab196087  * If applicable, add the following below this CDDL HEADER, with the
     16  6635  ab196087  * fields enclosed by brackets "[]" replaced with your own identifying
     17  6635  ab196087  * information: Portions Copyright [yyyy] [name of copyright owner]
     18  6635  ab196087  *
     19  6635  ab196087  * CDDL HEADER END
     20  6635  ab196087  */
     21  6635  ab196087 
     22  6635  ab196087 /*
     23  6635  ab196087  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
     24  6635  ab196087  * Use is subject to license terms.
     25  6635  ab196087  */
     26  6635  ab196087 #pragma ident	"%Z%%M%	%I%	%E% SMI"
     27  6635  ab196087 
     28  6635  ab196087 
     29  6635  ab196087 #include <stdlib.h>
     30  6635  ab196087 #include <stddef.h>
     31  6635  ab196087 #include <stdio.h>
     32  6635  ab196087 #include <string.h>
     33  6635  ab196087 #include <fcntl.h>
     34  6635  ab196087 #include <sys/types.h>
     35  6635  ab196087 #include <sys/stat.h>
     36  6635  ab196087 #include <unistd.h>
     37  6635  ab196087 #include <sys/sysmacros.h>
     38  6635  ab196087 #include <sys/corectl.h>
     39  6635  ab196087 #include <procfs.h>
     40  6635  ab196087 #include <sys/auxv.h>
     41  6635  ab196087 #include <sys/old_procfs.h>
     42  6635  ab196087 #include <sys/utsname.h>
     43  6635  ab196087 
     44  6635  ab196087 
     45  6635  ab196087 
     46  6635  ab196087 /*
     47  6635  ab196087  * This standalone program is used to generate the contents
     48  6635  ab196087  * of the struct_layout_XXX.c files that contain per-archtecture
     49  6635  ab196087  * structure layout information.
     50  6635  ab196087  *
     51  6635  ab196087  * Although not part of elfdump, it is built by the makefile
     52  6635  ab196087  * along with it.
     53  6635  ab196087  * To use it:
     54  6635  ab196087  *
     55  6635  ab196087  *	1) Run it, capturing the output in a file.
     56  6635  ab196087  *	2) If this is a replacement for an existing file,
     57  6635  ab196087  *		diff the new and old copies to ensure only
     58  6635  ab196087  *		the changes you expected are present.
     59  6635  ab196087  *	3) Put the new file in the common directory under the name
     60  6635  ab196087  *		struct_layout_XXX.c, where XXX is the name of
     61  6635  ab196087  *		the architecture (i386, amd64, sparc, sparcv9, etc).
     62  6635  ab196087  *	2) Add any necessary header and copyright comments.
     63  6635  ab196087  *	3) If this is a new architecture:
     64  6635  ab196087  *		- Add an extern statement for struct_layout_XXX()
     65  6635  ab196087  *			to struct_layout.h
     66  6635  ab196087  *		- Add a case for it to the function sl_struct_layout()
     67  6635  ab196087  *			in struct_layout.c.
     68  6635  ab196087  */
     69  6635  ab196087 
     70  6635  ab196087 
     71  6635  ab196087 /*
     72  6635  ab196087  * Which machine is this build for?
     73  6635  ab196087  */
     74  6635  ab196087 #if defined(__i386)
     75  6635  ab196087 
     76  6635  ab196087 #define	MACH	"i386"
     77  6635  ab196087 
     78  6635  ab196087 #elif defined(__amd64)
     79  6635  ab196087 
     80  6635  ab196087 #define	MACH	"amd64"
     81  6635  ab196087 
     82  6635  ab196087 #elif defined(__sparcv9)
     83  6635  ab196087 
     84  6635  ab196087 #define	MACH	"sparcv9"
     85  6635  ab196087 
     86  6635  ab196087 #elif defined(__sparc)
     87  6635  ab196087 
     88  6635  ab196087 #define	MACH	"sparc"
     89  6635  ab196087 
     90  6635  ab196087 #else
     91  6635  ab196087 
     92  6635  ab196087 #error "unrecognized build host type"
     93  6635  ab196087 
     94  6635  ab196087 #endif
     95  6635  ab196087 
     96  6635  ab196087 
     97  6635  ab196087 /*
     98  6635  ab196087  * START and END bracket a struct layout definition. They issue
     99  6635  ab196087  * the typedef boilerplate, and the standard first element (sizeof)
    100  6635  ab196087  * which captures the overall size of the structure.
    101  6635  ab196087  *
    102  6635  ab196087  * SCALAR_FIELD is for scalar struct fields
    103  6635  ab196087  *
    104  6635  ab196087  * ARRAY_FIELD is for  array struct fields
    105  6635  ab196087  *
    106  6635  ab196087  * ARRAY is for plain (non-struct) array types
    107  6635  ab196087  */
    108  6635  ab196087 #define	START(_name, _type) \
    109  6635  ab196087 	(void) printf("\n\nstatic const sl_" #_name \
    110  6635  ab196087 	    "_layout_t " #_name "_layout = {\n"); \
    111  6635  ab196087 	(void) printf("\t{ 0,\t%d,\t0,\t0 },\t\t/* sizeof (%s) */\n", \
    112  6635  ab196087 	    sizeof (_type), #_type)
    113  6635  ab196087 #define	SCALAR_FIELD(_type, _field, _sign) \
    114  6635  ab196087 	(void) printf("\t{ %d,\t%d,\t0,\t%d },\t\t/* " #_field " */\n", \
    115  6635  ab196087 	    offsetof(_type, _field), sizeof (((_type *)0)->_field), _sign)
    116  6635  ab196087 #define	ARRAY_FIELD(_type, _field, _sign) \
    117  6635  ab196087 	(void) printf("\t{ %d,\t%d,\t%d,\t%d },\t\t/* " #_field "[] */\n", \
    118  6635  ab196087 	    offsetof(_type, _field), sizeof (((_type *)0)->_field[0]), \
    119  6635  ab196087 	    sizeof (((_type *)0)->_field) / sizeof (((_type *)0)->_field[0]), \
    120  6635  ab196087 	    _sign)
    121  6635  ab196087 #define	ARRAY(_type, _sign) \
    122  6635  ab196087 	(void) printf("\t{ 0,\t%d,\t%d,\t%d },\t\t/* elt0 */\n", \
    123  6635  ab196087 	    sizeof (*((_type *)0)[0]), \
    124  6635  ab196087 	    sizeof (_type) / sizeof (*((_type *)0)[0]), _sign)
    125  6635  ab196087 #define	END (void) printf("};\n")
    126  6635  ab196087 
    127  6635  ab196087 
    128  6635  ab196087 /* auxv_t, <sys/auxv.h> */
    129  6635  ab196087 static void
    130  6635  ab196087 gen_auxv(void)
    131  6635  ab196087 {
    132  6635  ab196087 	START(auxv, auxv_t);
    133  6635  ab196087 
    134  6635  ab196087 	SCALAR_FIELD(auxv_t,	a_type,	1);
    135  6635  ab196087 	SCALAR_FIELD(auxv_t,	a_un.a_val,	1);
    136  6635  ab196087 	SCALAR_FIELD(auxv_t,	a_un.a_ptr,	0);
    137  6635  ab196087 	SCALAR_FIELD(auxv_t,	a_un.a_fcn,	0);
    138  6635  ab196087 
    139  6635  ab196087 	END;
    140  6635  ab196087 }
    141  6635  ab196087 
    142  6635  ab196087 
    143  6635  ab196087 /* prgregset_t, <sys/prgregset.h> */
    144  6635  ab196087 static void
    145  6635  ab196087 gen_prgregset(void)
    146  6635  ab196087 {
    147  6635  ab196087 	START(prgregset, prgregset_t);
    148  6635  ab196087 
    149  6635  ab196087 	ARRAY(prgregset_t,	0);
    150  6635  ab196087 
    151  6635  ab196087 	END;
    152  6635  ab196087 }
    153  6635  ab196087 
    154  6635  ab196087 
    155  6635  ab196087 /* lwpstatus_t, <sys/procfs.h> */
    156  6635  ab196087 static void
    157  6635  ab196087 gen_lwpstatus(void)
    158  6635  ab196087 {
    159  6635  ab196087 	START(lwpstatus, lwpstatus_t);
    160  6635  ab196087 
    161  6635  ab196087 	SCALAR_FIELD(lwpstatus_t,	pr_flags,	0);
    162  6635  ab196087 	SCALAR_FIELD(lwpstatus_t,	pr_lwpid,	0);
    163  6635  ab196087 	SCALAR_FIELD(lwpstatus_t,	pr_why,		0);
    164  6635  ab196087 	SCALAR_FIELD(lwpstatus_t,	pr_what,	0);
    165  6635  ab196087 	SCALAR_FIELD(lwpstatus_t,	pr_cursig,	0);
    166  6635  ab196087 	SCALAR_FIELD(lwpstatus_t,	pr_info,	0);
    167  6635  ab196087 	SCALAR_FIELD(lwpstatus_t,	pr_lwppend,	0);
    168  6635  ab196087 	SCALAR_FIELD(lwpstatus_t,	pr_lwphold,	0);
    169  6635  ab196087 	SCALAR_FIELD(lwpstatus_t,	pr_action,	0);
    170  6635  ab196087 	SCALAR_FIELD(lwpstatus_t,	pr_altstack,	0);
    171  6635  ab196087 	SCALAR_FIELD(lwpstatus_t,	pr_oldcontext,	0);
    172  6635  ab196087 	SCALAR_FIELD(lwpstatus_t,	pr_syscall,	0);
    173  6635  ab196087 	SCALAR_FIELD(lwpstatus_t,	pr_nsysarg,	0);
    174  6635  ab196087 	SCALAR_FIELD(lwpstatus_t,	pr_errno,	0);
    175  6635  ab196087 	ARRAY_FIELD(lwpstatus_t,	pr_sysarg,	0);
    176  6635  ab196087 	SCALAR_FIELD(lwpstatus_t,	pr_rval1,	0);
    177  6635  ab196087 	SCALAR_FIELD(lwpstatus_t,	pr_rval2,	0);
    178  6635  ab196087 	ARRAY_FIELD(lwpstatus_t,	pr_clname,	0);
    179  6635  ab196087 	SCALAR_FIELD(lwpstatus_t,	pr_tstamp,	0);
    180  6635  ab196087 	SCALAR_FIELD(lwpstatus_t,	pr_utime,	0);
    181  6635  ab196087 	SCALAR_FIELD(lwpstatus_t,	pr_stime,	0);
    182  6635  ab196087 	SCALAR_FIELD(lwpstatus_t,	pr_errpriv,	0);
    183  6635  ab196087 	SCALAR_FIELD(lwpstatus_t,	pr_ustack,	0);
    184  6635  ab196087 	SCALAR_FIELD(lwpstatus_t,	pr_instr,	0);
    185  6635  ab196087 	SCALAR_FIELD(lwpstatus_t,	pr_reg,		0);
    186  6635  ab196087 	SCALAR_FIELD(lwpstatus_t,	pr_fpreg,	0);
    187  6635  ab196087 
    188  6635  ab196087 	END;
    189  6635  ab196087 }
    190  6635  ab196087 
    191  6635  ab196087 
    192  6635  ab196087 /* pstatus_t, <sys/procfs.h> */
    193  6635  ab196087 static void
    194  6635  ab196087 gen_pstatus(void)
    195  6635  ab196087 {
    196  6635  ab196087 	START(pstatus, pstatus_t);
    197  6635  ab196087 
    198  6635  ab196087 	SCALAR_FIELD(pstatus_t,		pr_flags,	1);
    199  6635  ab196087 	SCALAR_FIELD(pstatus_t,		pr_nlwp,	1);
    200  6635  ab196087 	SCALAR_FIELD(pstatus_t,		pr_pid,		0);
    201  6635  ab196087 	SCALAR_FIELD(pstatus_t,		pr_ppid,	0);
    202  6635  ab196087 	SCALAR_FIELD(pstatus_t,		pr_pgid,	0);
    203  6635  ab196087 	SCALAR_FIELD(pstatus_t,		pr_sid,		0);
    204  6635  ab196087 	SCALAR_FIELD(pstatus_t,		pr_aslwpid,	1);
    205  6635  ab196087 	SCALAR_FIELD(pstatus_t,		pr_agentid,	1);
    206  6635  ab196087 	SCALAR_FIELD(pstatus_t,		pr_sigpend,	0);
    207  6635  ab196087 	SCALAR_FIELD(pstatus_t,		pr_brkbase,	0);
    208  6635  ab196087 	SCALAR_FIELD(pstatus_t,		pr_brksize,	0);
    209  6635  ab196087 	SCALAR_FIELD(pstatus_t,		pr_stkbase,	0);
    210  6635  ab196087 	SCALAR_FIELD(pstatus_t,		pr_stksize,	0);
    211  6635  ab196087 	SCALAR_FIELD(pstatus_t,		pr_utime,	0);
    212  6635  ab196087 	SCALAR_FIELD(pstatus_t,		pr_stime,	0);
    213  6635  ab196087 	SCALAR_FIELD(pstatus_t,		pr_cutime,	0);
    214  6635  ab196087 	SCALAR_FIELD(pstatus_t,		pr_cstime,	0);
    215  6635  ab196087 	SCALAR_FIELD(pstatus_t,		pr_sigtrace,	0);
    216  6635  ab196087 	SCALAR_FIELD(pstatus_t,		pr_flttrace,	0);
    217  6635  ab196087 	SCALAR_FIELD(pstatus_t,		pr_sysentry,	0);
    218  6635  ab196087 	SCALAR_FIELD(pstatus_t,		pr_sysexit,	0);
    219  6635  ab196087 	SCALAR_FIELD(pstatus_t,		pr_dmodel,	0);
    220  6635  ab196087 	SCALAR_FIELD(pstatus_t,		pr_taskid,	1);
    221  6635  ab196087 	SCALAR_FIELD(pstatus_t,		pr_projid,	1);
    222  6635  ab196087 	SCALAR_FIELD(pstatus_t,		pr_nzomb,	1);
    223  6635  ab196087 	SCALAR_FIELD(pstatus_t,		pr_zoneid,	1);
    224  6635  ab196087 	SCALAR_FIELD(pstatus_t,		pr_lwp,		0);
    225  6635  ab196087 
    226  6635  ab196087 	END;
    227  6635  ab196087 }
    228  6635  ab196087 
    229  6635  ab196087 
    230  6635  ab196087 /* prstatus_t, <sys/old_procfs.h> */
    231  6635  ab196087 static void
    232  6635  ab196087 gen_prstatus(void)
    233  6635  ab196087 {
    234  6635  ab196087 	START(prstatus, prstatus_t);
    235  6635  ab196087 
    236  6635  ab196087 	SCALAR_FIELD(prstatus_t,	pr_flags,	1);
    237  6635  ab196087 	SCALAR_FIELD(prstatus_t,	pr_why,		1);
    238  6635  ab196087 	SCALAR_FIELD(prstatus_t,	pr_what,	1);
    239  6635  ab196087 	SCALAR_FIELD(prstatus_t,	pr_info,	0);
    240  6635  ab196087 	SCALAR_FIELD(prstatus_t,	pr_cursig,	1);
    241  6635  ab196087 	SCALAR_FIELD(prstatus_t,	pr_nlwp,	0);
    242  6635  ab196087 	SCALAR_FIELD(prstatus_t,	pr_sigpend,	0);
    243  6635  ab196087 	SCALAR_FIELD(prstatus_t,	pr_sighold,	0);
    244  6635  ab196087 	SCALAR_FIELD(prstatus_t,	pr_altstack,	0);
    245  6635  ab196087 	SCALAR_FIELD(prstatus_t,	pr_action,	0);
    246  6635  ab196087 	SCALAR_FIELD(prstatus_t,	pr_pid,		0);
    247  6635  ab196087 	SCALAR_FIELD(prstatus_t,	pr_ppid,	0);
    248  6635  ab196087 	SCALAR_FIELD(prstatus_t,	pr_pgrp,	0);
    249  6635  ab196087 	SCALAR_FIELD(prstatus_t,	pr_sid,		0);
    250  6635  ab196087 	SCALAR_FIELD(prstatus_t,	pr_utime,	0);
    251  6635  ab196087 	SCALAR_FIELD(prstatus_t,	pr_stime,	0);
    252  6635  ab196087 	SCALAR_FIELD(prstatus_t,	pr_cutime,	0);
    253  6635  ab196087 	SCALAR_FIELD(prstatus_t,	pr_cstime,	0);
    254  6635  ab196087 	ARRAY_FIELD(prstatus_t,		pr_clname,	0);
    255  6635  ab196087 	SCALAR_FIELD(prstatus_t,	pr_syscall,	1);
    256  6635  ab196087 	SCALAR_FIELD(prstatus_t,	pr_nsysarg,	1);
    257  6635  ab196087 	ARRAY_FIELD(prstatus_t,		pr_sysarg,	1);
    258  6635  ab196087 	SCALAR_FIELD(prstatus_t,	pr_who,		0);
    259  6635  ab196087 	SCALAR_FIELD(prstatus_t,	pr_lwppend,	0);
    260  6635  ab196087 	SCALAR_FIELD(prstatus_t,	pr_oldcontext,	0);
    261  6635  ab196087 	SCALAR_FIELD(prstatus_t,	pr_brkbase,	0);
    262  6635  ab196087 	SCALAR_FIELD(prstatus_t,	pr_brksize,	0);
    263  6635  ab196087 	SCALAR_FIELD(prstatus_t,	pr_stkbase,	0);
    264  6635  ab196087 	SCALAR_FIELD(prstatus_t,	pr_stksize,	0);
    265  6635  ab196087 	SCALAR_FIELD(prstatus_t,	pr_processor,	1);
    266  6635  ab196087 	SCALAR_FIELD(prstatus_t,	pr_bind,	1);
    267  6635  ab196087 	SCALAR_FIELD(prstatus_t,	pr_instr,	1);
    268  6635  ab196087 	SCALAR_FIELD(prstatus_t,	pr_reg,		0);
    269  6635  ab196087 
    270  6635  ab196087 	END;
    271  6635  ab196087 }
    272  6635  ab196087 
    273  6635  ab196087 
    274  6635  ab196087 /* psinfo_t, <sys/procfs.h> */
    275  6635  ab196087 static void
    276  6635  ab196087 gen_psinfo(void)
    277  6635  ab196087 {
    278  6635  ab196087 	START(psinfo, psinfo_t);
    279  6635  ab196087 
    280  6635  ab196087 	SCALAR_FIELD(psinfo_t,		pr_flag,	1);
    281  6635  ab196087 	SCALAR_FIELD(psinfo_t,		pr_nlwp,	1);
    282  6635  ab196087 	SCALAR_FIELD(psinfo_t,		pr_pid,		0);
    283  6635  ab196087 	SCALAR_FIELD(psinfo_t,		pr_ppid,	0);
    284  6635  ab196087 	SCALAR_FIELD(psinfo_t,		pr_pgid,	0);
    285  6635  ab196087 	SCALAR_FIELD(psinfo_t,		pr_sid,		0);
    286  6635  ab196087 	SCALAR_FIELD(psinfo_t,		pr_uid,		0);
    287  6635  ab196087 	SCALAR_FIELD(psinfo_t,		pr_euid,	0);
    288  6635  ab196087 	SCALAR_FIELD(psinfo_t,		pr_gid,		0);
    289  6635  ab196087 	SCALAR_FIELD(psinfo_t,		pr_egid,	0);
    290  6635  ab196087 	SCALAR_FIELD(psinfo_t,		pr_addr,	0);
    291  6635  ab196087 	SCALAR_FIELD(psinfo_t,		pr_size,	0);
    292  6635  ab196087 	SCALAR_FIELD(psinfo_t,		pr_rssize,	0);
    293  6635  ab196087 	SCALAR_FIELD(psinfo_t,		pr_ttydev,	0);
    294  6635  ab196087 	SCALAR_FIELD(psinfo_t,		pr_pctcpu,	0);
    295  6635  ab196087 	SCALAR_FIELD(psinfo_t,		pr_pctmem,	0);
    296  6635  ab196087 	SCALAR_FIELD(psinfo_t,		pr_start,	0);
    297  6635  ab196087 	SCALAR_FIELD(psinfo_t,		pr_time,	0);
    298  6635  ab196087 	SCALAR_FIELD(psinfo_t,		pr_ctime,	0);
    299  6635  ab196087 	ARRAY_FIELD(psinfo_t,		pr_fname,	0);
    300  6635  ab196087 	ARRAY_FIELD(psinfo_t,		pr_psargs,	0);
    301  6635  ab196087 	SCALAR_FIELD(psinfo_t,		pr_wstat,	1);
    302  6635  ab196087 	SCALAR_FIELD(psinfo_t,		pr_argc,	1);
    303  6635  ab196087 	SCALAR_FIELD(psinfo_t,		pr_argv,	0);
    304  6635  ab196087 	SCALAR_FIELD(psinfo_t,		pr_envp,	0);
    305  6635  ab196087 	SCALAR_FIELD(psinfo_t,		pr_dmodel,	0);
    306  6635  ab196087 	SCALAR_FIELD(psinfo_t,		pr_taskid,	0);
    307  6635  ab196087 	SCALAR_FIELD(psinfo_t,		pr_projid,	0);
    308  6635  ab196087 	SCALAR_FIELD(psinfo_t,		pr_nzomb,	1);
    309  6635  ab196087 	SCALAR_FIELD(psinfo_t,		pr_poolid,	0);
    310  6635  ab196087 	SCALAR_FIELD(psinfo_t,		pr_zoneid,	0);
    311  6635  ab196087 	SCALAR_FIELD(psinfo_t,		pr_contract,	0);
    312  6635  ab196087 	SCALAR_FIELD(psinfo_t,		pr_lwp,		0);
    313  6635  ab196087 
    314  6635  ab196087 	END;
    315  6635  ab196087 }
    316  6635  ab196087 
    317  6635  ab196087 /* prpsinfo_t, <sys/old_procfs.h> */
    318  6635  ab196087 static void
    319  6635  ab196087 gen_prpsinfo(void)
    320  6635  ab196087 {
    321  6635  ab196087 	START(prpsinfo, prpsinfo_t);
    322  6635  ab196087 
    323  6635  ab196087 	SCALAR_FIELD(prpsinfo_t,	pr_state,	0);
    324  6635  ab196087 	SCALAR_FIELD(prpsinfo_t,	pr_sname,	0);
    325  6635  ab196087 	SCALAR_FIELD(prpsinfo_t,	pr_zomb,	0);
    326  6635  ab196087 	SCALAR_FIELD(prpsinfo_t,	pr_nice,	0);
    327  6635  ab196087 	SCALAR_FIELD(prpsinfo_t,	pr_flag,	0);
    328  6635  ab196087 	SCALAR_FIELD(prpsinfo_t,	pr_uid,		0);
    329  6635  ab196087 	SCALAR_FIELD(prpsinfo_t,	pr_gid,		0);
    330  6635  ab196087 	SCALAR_FIELD(prpsinfo_t,	pr_pid,		0);
    331  6635  ab196087 	SCALAR_FIELD(prpsinfo_t,	pr_ppid,	0);
    332  6635  ab196087 	SCALAR_FIELD(prpsinfo_t,	pr_pgrp,	0);
    333  6635  ab196087 	SCALAR_FIELD(prpsinfo_t,	pr_sid,		0);
    334  6635  ab196087 	SCALAR_FIELD(prpsinfo_t,	pr_addr,	0);
    335  6635  ab196087 	SCALAR_FIELD(prpsinfo_t,	pr_size,	0);
    336  6635  ab196087 	SCALAR_FIELD(prpsinfo_t,	pr_rssize,	0);
    337  6635  ab196087 	SCALAR_FIELD(prpsinfo_t,	pr_wchan,	0);
    338  6635  ab196087 	SCALAR_FIELD(prpsinfo_t,	pr_start,	0);
    339  6635  ab196087 	SCALAR_FIELD(prpsinfo_t,	pr_time,	0);
    340  6635  ab196087 	SCALAR_FIELD(prpsinfo_t,	pr_pri,		1);
    341  6635  ab196087 	SCALAR_FIELD(prpsinfo_t,	pr_oldpri,	0);
    342  6635  ab196087 	SCALAR_FIELD(prpsinfo_t,	pr_cpu,		0);
    343  6635  ab196087 	SCALAR_FIELD(prpsinfo_t,	pr_ottydev,	0);
    344  6635  ab196087 	SCALAR_FIELD(prpsinfo_t,	pr_lttydev,	0);
    345  6635  ab196087 	ARRAY_FIELD(prpsinfo_t,		pr_clname,	0);
    346  6635  ab196087 	ARRAY_FIELD(prpsinfo_t,		pr_fname,	0);
    347  6635  ab196087 	ARRAY_FIELD(prpsinfo_t,		pr_psargs,	0);
    348  6635  ab196087 	SCALAR_FIELD(prpsinfo_t,	pr_syscall,	1);
    349  6635  ab196087 	SCALAR_FIELD(prpsinfo_t,	pr_ctime,	0);
    350  6635  ab196087 	SCALAR_FIELD(prpsinfo_t,	pr_bysize,	0);
    351  6635  ab196087 	SCALAR_FIELD(prpsinfo_t,	pr_byrssize,	0);
    352  6635  ab196087 	SCALAR_FIELD(prpsinfo_t,	pr_argc,	1);
    353  6635  ab196087 	SCALAR_FIELD(prpsinfo_t,	pr_argv,	0);
    354  6635  ab196087 	SCALAR_FIELD(prpsinfo_t,	pr_envp,	0);
    355  6635  ab196087 	SCALAR_FIELD(prpsinfo_t,	pr_wstat,	1);
    356  6635  ab196087 	SCALAR_FIELD(prpsinfo_t,	pr_pctcpu,	0);
    357  6635  ab196087 	SCALAR_FIELD(prpsinfo_t,	pr_pctmem,	0);
    358  6635  ab196087 	SCALAR_FIELD(prpsinfo_t,	pr_euid,	0);
    359  6635  ab196087 	SCALAR_FIELD(prpsinfo_t,	pr_egid,	0);
    360  6635  ab196087 	SCALAR_FIELD(prpsinfo_t,	pr_aslwpid,	0);
    361  6635  ab196087 	SCALAR_FIELD(prpsinfo_t,	pr_dmodel,	0);
    362  6635  ab196087 
    363  6635  ab196087 	END;
    364  6635  ab196087 }
    365  6635  ab196087 
    366  6635  ab196087 /* lwpsinfo_t, <sys/procfs.h> */
    367  6635  ab196087 static void
    368  6635  ab196087 gen_lwpsinfo(void)
    369  6635  ab196087 {
    370  6635  ab196087 	START(lwpsinfo, lwpsinfo_t);
    371  6635  ab196087 
    372  6635  ab196087 	SCALAR_FIELD(lwpsinfo_t,	pr_flag,	1);
    373  6635  ab196087 	SCALAR_FIELD(lwpsinfo_t,	pr_lwpid,	0);
    374  6635  ab196087 	SCALAR_FIELD(lwpsinfo_t,	pr_addr,	0);
    375  6635  ab196087 	SCALAR_FIELD(lwpsinfo_t,	pr_wchan,	0);
    376  6635  ab196087 	SCALAR_FIELD(lwpsinfo_t,	pr_stype,	0);
    377  6635  ab196087 	SCALAR_FIELD(lwpsinfo_t,	pr_state,	0);
    378  6635  ab196087 	SCALAR_FIELD(lwpsinfo_t,	pr_sname,	0);
    379  6635  ab196087 	SCALAR_FIELD(lwpsinfo_t,	pr_nice,	0);
    380  6635  ab196087 	SCALAR_FIELD(lwpsinfo_t,	pr_syscall,	0);
    381  6635  ab196087 	SCALAR_FIELD(lwpsinfo_t,	pr_oldpri,	0);
    382  6635  ab196087 	SCALAR_FIELD(lwpsinfo_t,	pr_cpu,		0);
    383  6635  ab196087 	SCALAR_FIELD(lwpsinfo_t,	pr_pri,		1);
    384  6635  ab196087 	SCALAR_FIELD(lwpsinfo_t,	pr_pctcpu,	0);
    385  6635  ab196087 	SCALAR_FIELD(lwpsinfo_t,	pr_start,	0);
    386  6635  ab196087 	SCALAR_FIELD(lwpsinfo_t,	pr_time,	0);
    387  6635  ab196087 	ARRAY_FIELD(lwpsinfo_t,		pr_clname,	0);
    388  6635  ab196087 	ARRAY_FIELD(lwpsinfo_t,		pr_name,	0);
    389  6635  ab196087 	SCALAR_FIELD(lwpsinfo_t,	pr_onpro,	1);
    390  6635  ab196087 	SCALAR_FIELD(lwpsinfo_t,	pr_bindpro,	1);
    391  6635  ab196087 	SCALAR_FIELD(lwpsinfo_t,	pr_bindpset,	1);
    392  6635  ab196087 	SCALAR_FIELD(lwpsinfo_t,	pr_lgrp,	1);
    393  6635  ab196087 
    394  6635  ab196087 	END;
    395  6635  ab196087 }
    396  6635  ab196087 
    397  6635  ab196087 /* prcred_t, <sys/procfs.h> */
    398  6635  ab196087 static void
    399  6635  ab196087 gen_prcred(void)
    400  6635  ab196087 {
    401  6635  ab196087 	START(prcred, prcred_t);
    402  6635  ab196087 
    403  6635  ab196087 	SCALAR_FIELD(prcred_t,		pr_euid,	0);
    404  6635  ab196087 	SCALAR_FIELD(prcred_t,		pr_ruid,	0);
    405  6635  ab196087 	SCALAR_FIELD(prcred_t,		pr_suid,	0);
    406  6635  ab196087 	SCALAR_FIELD(prcred_t,		pr_egid,	0);
    407  6635  ab196087 	SCALAR_FIELD(prcred_t,		pr_rgid,	0);
    408  6635  ab196087 	SCALAR_FIELD(prcred_t,		pr_sgid,	0);
    409  6635  ab196087 	SCALAR_FIELD(prcred_t,		pr_ngroups,	1);
    410  6635  ab196087 	ARRAY_FIELD(prcred_t,		pr_groups,	0);
    411  6635  ab196087 
    412  6635  ab196087 	END;
    413  6635  ab196087 }
    414  6635  ab196087 
    415  6635  ab196087 /* prpriv_t, <sys/procfs.h> */
    416  6635  ab196087 static void
    417  6635  ab196087 gen_prpriv(void)
    418  6635  ab196087 {
    419  6635  ab196087 	START(prpriv, prpriv_t);
    420  6635  ab196087 
    421  6635  ab196087 	SCALAR_FIELD(prpriv_t,		pr_nsets,	0);
    422  6635  ab196087 	SCALAR_FIELD(prpriv_t,		pr_setsize,	0);
    423  6635  ab196087 	SCALAR_FIELD(prpriv_t,		pr_infosize,	0);
    424  6635  ab196087 	ARRAY_FIELD(prpriv_t,		pr_sets,	0);
    425  6635  ab196087 
    426  6635  ab196087 	END;
    427  6635  ab196087 }
    428  6635  ab196087 
    429  6635  ab196087 
    430  6635  ab196087 /* priv_impl_info_t, <sys/priv.h> */
    431  6635  ab196087 static void
    432  6635  ab196087 gen_priv_impl_info(void)
    433  6635  ab196087 {
    434  6635  ab196087 	START(priv_impl_info, priv_impl_info_t);
    435  6635  ab196087 
    436  6635  ab196087 	SCALAR_FIELD(priv_impl_info_t,	priv_headersize,	0);
    437  6635  ab196087 	SCALAR_FIELD(priv_impl_info_t,	priv_flags,		0);
    438  6635  ab196087 	SCALAR_FIELD(priv_impl_info_t,	priv_nsets,		0);
    439  6635  ab196087 	SCALAR_FIELD(priv_impl_info_t,	priv_setsize,		0);
    440  6635  ab196087 	SCALAR_FIELD(priv_impl_info_t,	priv_max,		0);
    441  6635  ab196087 	SCALAR_FIELD(priv_impl_info_t,	priv_infosize,		0);
    442  6635  ab196087 	SCALAR_FIELD(priv_impl_info_t,	priv_globalinfosize,	0);
    443  6635  ab196087 
    444  6635  ab196087 	END;
    445  6635  ab196087 }
    446  6635  ab196087 
    447  6635  ab196087 
    448  6635  ab196087 /* fltset_t, <sys/fault.h> */
    449  6635  ab196087 static void
    450  6635  ab196087 gen_fltset(void)
    451  6635  ab196087 {
    452  6635  ab196087 	START(fltset, fltset_t);
    453  6635  ab196087 
    454  6635  ab196087 	ARRAY_FIELD(fltset_t,	word,	0);
    455  6635  ab196087 
    456  6635  ab196087 	END;
    457  6635  ab196087 }
    458  6635  ab196087 
    459  6635  ab196087 /* Layout description of siginfo_t, <sys/siginfo.h> */
    460  6635  ab196087 static void
    461  6635  ab196087 gen_siginfo(void)
    462  6635  ab196087 {
    463  6635  ab196087 	START(siginfo, siginfo_t);
    464  6635  ab196087 
    465  6635  ab196087 	SCALAR_FIELD(siginfo_t,		si_signo,		0);
    466  6635  ab196087 	SCALAR_FIELD(siginfo_t,		si_errno,		0);
    467  6635  ab196087 	SCALAR_FIELD(siginfo_t,		si_code,		1);
    468  6635  ab196087 	SCALAR_FIELD(siginfo_t,		si_value.sival_int,	0);
    469  6635  ab196087 	SCALAR_FIELD(siginfo_t,		si_value.sival_ptr,	0);
    470  6635  ab196087 	SCALAR_FIELD(siginfo_t,		si_pid,			0);
    471  6635  ab196087 	SCALAR_FIELD(siginfo_t,		si_uid,			0);
    472  6635  ab196087 	SCALAR_FIELD(siginfo_t,		si_ctid,		0);
    473  6635  ab196087 	SCALAR_FIELD(siginfo_t,		si_zoneid,		0);
    474  6635  ab196087 	SCALAR_FIELD(siginfo_t,		si_entity,		0);
    475  6635  ab196087 	SCALAR_FIELD(siginfo_t,		si_addr,		0);
    476  6635  ab196087 	SCALAR_FIELD(siginfo_t,		si_status,		0);
    477  6635  ab196087 	SCALAR_FIELD(siginfo_t,		si_band,		0);
    478  6635  ab196087 
    479  6635  ab196087 	END;
    480  6635  ab196087 }
    481  6635  ab196087 
    482  6635  ab196087 /* sigset_t, <sys/signal.h> */
    483  6635  ab196087 static void
    484  6635  ab196087 gen_sigset(void)
    485  6635  ab196087 {
    486  6635  ab196087 	START(sigset, sigset_t);
    487  6635  ab196087 
    488  6635  ab196087 	ARRAY_FIELD(sigset_t,	__sigbits,	0);
    489  6635  ab196087 
    490  6635  ab196087 	END;
    491  6635  ab196087 }
    492  6635  ab196087 
    493  6635  ab196087 
    494  6635  ab196087 /* struct sigaction, <sys/signal.h> */
    495  6635  ab196087 static void
    496  6635  ab196087 gen_sigaction(void)
    497  6635  ab196087 {
    498  6635  ab196087 	START(sigaction, struct sigaction);
    499  6635  ab196087 
    500  6635  ab196087 	SCALAR_FIELD(struct sigaction,	sa_flags,	0);
    501  6635  ab196087 	SCALAR_FIELD(struct sigaction,	sa_handler,	0);
    502  6635  ab196087 	SCALAR_FIELD(struct sigaction,	sa_sigaction,	0);
    503  6635  ab196087 	SCALAR_FIELD(struct sigaction,	sa_mask,	0);
    504  6635  ab196087 
    505  6635  ab196087 	END;
    506  6635  ab196087 }
    507  6635  ab196087 
    508  6635  ab196087 /* stack_t, <sys/signal.h> */
    509  6635  ab196087 static void
    510  6635  ab196087 gen_stack(void)
    511  6635  ab196087 {
    512  6635  ab196087 	START(stack, stack_t);
    513  6635  ab196087 
    514  6635  ab196087 	SCALAR_FIELD(stack_t,	ss_sp,		0);
    515  6635  ab196087 	SCALAR_FIELD(stack_t,	ss_size,	0);
    516  6635  ab196087 	SCALAR_FIELD(stack_t,	ss_flags,	0);
    517  6635  ab196087 
    518  6635  ab196087 	END;
    519  6635  ab196087 }
    520  6635  ab196087 
    521  6635  ab196087 /* sysset_t, <sys/syscall.h> */
    522  6635  ab196087 static void
    523  6635  ab196087 gen_sysset(void)
    524  6635  ab196087 {
    525  6635  ab196087 	START(sysset, sysset_t);
    526  6635  ab196087 
    527  6635  ab196087 	ARRAY_FIELD(sysset_t,	word,	0);
    528  6635  ab196087 
    529  6635  ab196087 	END;
    530  6635  ab196087 }
    531  6635  ab196087 
    532  6635  ab196087 /* timestruc_t, <sys/time_impl.h> */
    533  6635  ab196087 static void
    534  6635  ab196087 gen_timestruc(void)
    535  6635  ab196087 {
    536  6635  ab196087 	START(timestruc, timestruc_t);
    537  6635  ab196087 
    538  6635  ab196087 	SCALAR_FIELD(timestruc_t,	tv_sec,		0);
    539  6635  ab196087 	SCALAR_FIELD(timestruc_t,	tv_nsec,	0);
    540  6635  ab196087 
    541  6635  ab196087 	END;
    542  6635  ab196087 }
    543  6635  ab196087 
    544  6635  ab196087 /* struct utsname, <sys/utsname.h> */
    545  6635  ab196087 static void
    546  6635  ab196087 gen_utsname(void)
    547  6635  ab196087 {
    548  6635  ab196087 	START(utsname, struct utsname);
    549  6635  ab196087 
    550  6635  ab196087 	ARRAY_FIELD(struct utsname,	sysname,	0);
    551  6635  ab196087 	ARRAY_FIELD(struct utsname,	nodename,	0);
    552  6635  ab196087 	ARRAY_FIELD(struct utsname,	release,	0);
    553  6635  ab196087 	ARRAY_FIELD(struct utsname,	version,	0);
    554  6635  ab196087 	ARRAY_FIELD(struct utsname,	machine,	0);
    555  6635  ab196087 
    556  6635  ab196087 	END;
    557  6635  ab196087 }
    558  6635  ab196087 
    559  6635  ab196087 
    560  6635  ab196087 /*ARGSUSED*/
    561  6635  ab196087 int
    562  6635  ab196087 main(int argc, char *argv[])
    563  6635  ab196087 {
    564  6635  ab196087 	const char *fmt = "\t&%s_layout,\n";
    565  6635  ab196087 
    566  6635  ab196087 	printf("#include <struct_layout.h>\n");
    567  6635  ab196087 
    568  6635  ab196087 	gen_auxv();
    569  6635  ab196087 	gen_prgregset();
    570  6635  ab196087 	gen_lwpstatus();
    571  6635  ab196087 	gen_pstatus();
    572  6635  ab196087 	gen_prstatus();
    573  6635  ab196087 	gen_psinfo();
    574  6635  ab196087 	gen_prpsinfo();
    575  6635  ab196087 	gen_lwpsinfo();
    576  6635  ab196087 	gen_prcred();
    577  6635  ab196087 	gen_prpriv();
    578  6635  ab196087 	gen_priv_impl_info();
    579  6635  ab196087 	gen_fltset();
    580  6635  ab196087 	gen_siginfo();
    581  6635  ab196087 	gen_sigset();
    582  6635  ab196087 	gen_sigaction();
    583  6635  ab196087 	gen_stack();
    584  6635  ab196087 	gen_sysset();
    585  6635  ab196087 	gen_timestruc();
    586  6635  ab196087 	gen_utsname();
    587  6635  ab196087 
    588  6635  ab196087 
    589  6635  ab196087 	/*
    590  6635  ab196087 	 * Generate the full arch_layout description
    591  6635  ab196087 	 */
    592  6635  ab196087 	(void) printf(
    593  6635  ab196087 	    "\n\n\n\nstatic const sl_arch_layout_t layout_%s = {\n",
    594  6635  ab196087 	    MACH);
    595  6635  ab196087 	(void) printf(fmt, "auxv");
    596  6635  ab196087 	(void) printf(fmt, "fltset");
    597  6635  ab196087 	(void) printf(fmt, "lwpsinfo");
    598  6635  ab196087 	(void) printf(fmt, "lwpstatus");
    599  6635  ab196087 	(void) printf(fmt, "prcred");
    600  6635  ab196087 	(void) printf(fmt, "priv_impl_info");
    601  6635  ab196087 	(void) printf(fmt, "prpriv");
    602  6635  ab196087 	(void) printf(fmt, "psinfo");
    603  6635  ab196087 	(void) printf(fmt, "pstatus");
    604  6635  ab196087 	(void) printf(fmt, "prgregset");
    605  6635  ab196087 	(void) printf(fmt, "prpsinfo");
    606  6635  ab196087 	(void) printf(fmt, "prstatus");
    607  6635  ab196087 	(void) printf(fmt, "sigaction");
    608  6635  ab196087 	(void) printf(fmt, "siginfo");
    609  6635  ab196087 	(void) printf(fmt, "sigset");
    610  6635  ab196087 	(void) printf(fmt, "stack");
    611  6635  ab196087 	(void) printf(fmt, "sysset");
    612  6635  ab196087 	(void) printf(fmt, "timestruc");
    613  6635  ab196087 	(void) printf(fmt, "utsname");
    614  6635  ab196087 	(void) printf("};\n");
    615  6635  ab196087 
    616  6635  ab196087 	/*
    617  6635  ab196087 	 * A public function, to make the information available
    618  6635  ab196087 	 */
    619  6635  ab196087 	(void) printf("\n\nconst sl_arch_layout_t *\n");
    620  6635  ab196087 	(void) printf("struct_layout_%s(void)\n", MACH);
    621  6635  ab196087 	(void) printf("{\n\treturn (&layout_%s);\n}\n", MACH);
    622  6635  ab196087 
    623  6635  ab196087 	return (0);
    624  6635  ab196087 }
    625