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