Print this page
8158 Want named threads API
9857 proc manpages should have LIBRARY section
Split |
Close |
Expand all |
Collapse all |
--- old/usr/src/cmd/sgs/elfdump/common/struct_layout.h
+++ new/usr/src/cmd/sgs/elfdump/common/struct_layout.h
1 1 /*
2 2 * CDDL HEADER START
3 3 *
4 4 * The contents of this file are subject to the terms of the
5 5 * Common Development and Distribution License (the "License").
6 6 * You may not use this file except in compliance with the License.
7 7 *
8 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 9 * or http://www.opensolaris.org/os/licensing.
10 10 * See the License for the specific language governing permissions
11 11 * and limitations under the License.
12 12 *
13 13 * When distributing Covered Code, include this CDDL HEADER in each
14 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 15 * If applicable, add the following below this CDDL HEADER, with the
16 16 * fields enclosed by brackets "[]" replaced with your own identifying
17 17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 18 *
↓ open down ↓ |
18 lines elided |
↑ open up ↑ |
19 19 * CDDL HEADER END
20 20 */
21 21
22 22 /*
23 23 * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
24 24 * Use is subject to license terms.
25 25 */
26 26
27 27 /*
28 28 * Copyright 2012 DEY Storage Systems, Inc. All rights reserved.
29 + * Copyright 2018 Joyent, Inc.
29 30 */
30 31
31 32 #ifndef _STRUCT_LAYOUT_H
32 33 #define _STRUCT_LAYOUT_H
33 34
34 35 #include <conv.h>
35 36 #include <_machelf.h>
36 37
37 38 /*
38 39 * Local include file for elfdump, used to define structure layout
39 40 * definitions for various system structs.
40 41 */
41 42
42 43 #ifdef __cplusplus
43 44 extern "C" {
44 45 #endif
45 46
46 47
47 48 /*
48 49 * Solaris defines system structs that elfdump needs to display
49 50 * data from. We have a variety of hurdles to overcome in doing this:
50 51 *
51 52 * - The size of system types can differ between ELFCLASS32 and
52 53 * ELFCLASS64.
53 54 * - Stucture layout can differ between architectures, so a given
54 55 * field can have a different struct offset than is native
55 56 * for the system running elfdump. Depending on the struct
56 57 * in question, the layout for one platform may be impossible
57 58 * to achieve on another.
58 59 * - The byte order of the core object can differ from that
59 60 * of the system running elfdump.
60 61 *
61 62 * The result is that in the fully general case, each architecture
62 63 * can have a slightly different definition of these structures.
63 64 * The usual approach of assigning a pointer of the desired structure
64 65 * type and then accessing fields through that pointer cannot be used
65 66 * here. That approach can only be used to access structures with the
66 67 * native layout of the elfdump host. We want any instance of elfdump
67 68 * to be able to examine a Solaris object for any supported architecture,
68 69 * so we need a more flexible approach.
69 70 *
70 71 * The solution to this problem lies in the fact that the binary
71 72 * layout of these public types cannot be changed, except in backward
72 73 * compatible ways. They are written to core files or published in
73 74 * other ways such that we can't make changes that would make it
74 75 * impossible to analyze old files. This means that we can build
75 76 * table of offsets and sizes for each field of each struct, on
76 77 * a per-archecture basis. These tables can be used to access the
77 78 * struct fields directly from the note desc data, and elfdump
78 79 * on any host can read the data from any other host.
79 80 *
80 81 * When reading these tables, it can be very helpful to examine
81 82 * the struct definition at the same time.
82 83 */
83 84
84 85 /*
85 86 * sl_field_t is used to describe a struct field
86 87 */
87 88 typedef struct {
88 89 ushort_t slf_offset; /* Offset from start of struct */
89 90 ushort_t slf_eltlen; /* Size of datum, in bytes */
90 91 ushort_t slf_nelts; /* 0 for scalar, # of els for array */
↓ open down ↓ |
52 lines elided |
↑ open up ↑ |
91 92 uchar_t slf_sign; /* True (1) if signed quantity */
92 93 } sl_field_t;
93 94
94 95 /*
95 96 * This type is used to extract and manipulate data described by
96 97 * sl_field_t. We rely on the C guarantee that all the fields in
97 98 * a union have offset 0.
98 99 */
99 100 typedef union {
100 101 char sld_i8;
101 - uchar_t sld_ui8;
102 + uchar_t sld_ui8;
102 103 short sld_i16;
103 104 ushort_t sld_ui16;
104 105 int32_t sld_i32;
105 106 uint32_t sld_ui32;
106 107 int64_t sld_i64;
107 108 uint64_t sld_ui64;
108 109 } sl_data_t;
109 110
110 111 /*
111 112 * Buffer large enough to format any integral value in a field
112 113 */
113 114 typedef char sl_fmtbuf_t[CONV_INV_BUFSIZE * 2];
114 115
115 116 /*
116 117 * Types of formatting done by fmt_num()
117 118 */
118 119 typedef enum {
119 120 SL_FMT_NUM_DEC = 0, /* Decimal integer */
120 121 SL_FMT_NUM_HEX = 1, /* Hex integer, with natural width */
121 122 SL_FMT_NUM_ZHEX = 2, /* Hex integer, fixed width with zero fill */
122 123 } sl_fmt_num_t;
123 124
124 125
125 126
126 127
127 128 /*
128 129 * Layout description of auxv_t, from <sys/auxv.h>.
129 130 */
130 131 typedef struct {
131 132 sl_field_t sizeof_struct;
132 133 sl_field_t a_type;
133 134 sl_field_t a_val;
134 135 sl_field_t a_ptr;
135 136 sl_field_t a_fcn;
136 137 } sl_auxv_layout_t;
137 138
138 139 /*
139 140 * Layout description of prgregset_t, an architecture specific
140 141 * array of general register c values
141 142 */
142 143 typedef struct {
143 144 sl_field_t sizeof_struct;
144 145 sl_field_t elt0;
145 146 } sl_prgregset_layout_t;
146 147
147 148 /*
148 149 * Layout description of lwpstatus_t, from <sys/procfs.h>.
149 150 */
150 151 typedef struct {
151 152 sl_field_t sizeof_struct;
152 153 sl_field_t pr_flags;
153 154 sl_field_t pr_lwpid;
154 155 sl_field_t pr_why;
155 156 sl_field_t pr_what;
156 157 sl_field_t pr_cursig;
157 158 sl_field_t pr_info;
158 159 sl_field_t pr_lwppend;
159 160 sl_field_t pr_lwphold;
160 161 sl_field_t pr_action;
161 162 sl_field_t pr_altstack;
162 163 sl_field_t pr_oldcontext;
163 164 sl_field_t pr_syscall;
164 165 sl_field_t pr_nsysarg;
165 166 sl_field_t pr_errno;
166 167 sl_field_t pr_sysarg;
167 168 sl_field_t pr_rval1;
168 169 sl_field_t pr_rval2;
169 170 sl_field_t pr_clname;
170 171 sl_field_t pr_tstamp;
171 172 sl_field_t pr_utime;
172 173 sl_field_t pr_stime;
173 174 sl_field_t pr_errpriv;
174 175 sl_field_t pr_ustack;
175 176 sl_field_t pr_instr;
176 177 sl_field_t pr_reg;
177 178 sl_field_t pr_fpreg;
178 179 } sl_lwpstatus_layout_t;
179 180
180 181 /*
181 182 * Layout description of pstatus_t, from <sys/procfs.h>.
182 183 */
183 184 typedef struct {
184 185 sl_field_t sizeof_struct;
185 186 sl_field_t pr_flags;
186 187 sl_field_t pr_nlwp;
187 188 sl_field_t pr_pid;
188 189 sl_field_t pr_ppid;
189 190 sl_field_t pr_pgid;
190 191 sl_field_t pr_sid;
191 192 sl_field_t pr_aslwpid;
192 193 sl_field_t pr_agentid;
193 194 sl_field_t pr_sigpend;
194 195 sl_field_t pr_brkbase;
195 196 sl_field_t pr_brksize;
196 197 sl_field_t pr_stkbase;
197 198 sl_field_t pr_stksize;
198 199 sl_field_t pr_utime;
199 200 sl_field_t pr_stime;
200 201 sl_field_t pr_cutime;
201 202 sl_field_t pr_cstime;
202 203 sl_field_t pr_sigtrace;
203 204 sl_field_t pr_flttrace;
204 205 sl_field_t pr_sysentry;
205 206 sl_field_t pr_sysexit;
206 207 sl_field_t pr_dmodel;
207 208 sl_field_t pr_taskid;
208 209 sl_field_t pr_projid;
209 210 sl_field_t pr_nzomb;
210 211 sl_field_t pr_zoneid;
211 212 sl_field_t pr_lwp;
212 213 } sl_pstatus_layout_t;
213 214
214 215 /*
215 216 * Layout description of prstatus_t, from <sys/old_procfs.h>.
216 217 */
217 218 typedef struct {
218 219 sl_field_t sizeof_struct;
219 220 sl_field_t pr_flags;
220 221 sl_field_t pr_why;
221 222 sl_field_t pr_what;
222 223 sl_field_t pr_info;
223 224 sl_field_t pr_cursig;
224 225 sl_field_t pr_nlwp;
225 226 sl_field_t pr_sigpend;
226 227 sl_field_t pr_sighold;
227 228 sl_field_t pr_altstack;
228 229 sl_field_t pr_action;
229 230 sl_field_t pr_pid;
230 231 sl_field_t pr_ppid;
231 232 sl_field_t pr_pgrp;
232 233 sl_field_t pr_sid;
233 234 sl_field_t pr_utime;
234 235 sl_field_t pr_stime;
235 236 sl_field_t pr_cutime;
236 237 sl_field_t pr_cstime;
237 238 sl_field_t pr_clname;
238 239 sl_field_t pr_syscall;
239 240 sl_field_t pr_nsysarg;
240 241 sl_field_t pr_sysarg;
241 242 sl_field_t pr_who;
242 243 sl_field_t pr_lwppend;
243 244 sl_field_t pr_oldcontext;
244 245 sl_field_t pr_brkbase;
245 246 sl_field_t pr_brksize;
246 247 sl_field_t pr_stkbase;
247 248 sl_field_t pr_stksize;
248 249 sl_field_t pr_processor;
249 250 sl_field_t pr_bind;
250 251 sl_field_t pr_instr;
251 252 sl_field_t pr_reg;
252 253 } sl_prstatus_layout_t;
253 254
254 255 /*
255 256 * Layout description of psinfo_t, from <sys/procfs.h>.
256 257 */
257 258 typedef struct {
258 259 sl_field_t sizeof_struct;
259 260 sl_field_t pr_flag;
260 261 sl_field_t pr_nlwp;
261 262 sl_field_t pr_pid;
262 263 sl_field_t pr_ppid;
263 264 sl_field_t pr_pgid;
264 265 sl_field_t pr_sid;
265 266 sl_field_t pr_uid;
266 267 sl_field_t pr_euid;
267 268 sl_field_t pr_gid;
268 269 sl_field_t pr_egid;
269 270 sl_field_t pr_addr;
270 271 sl_field_t pr_size;
271 272 sl_field_t pr_rssize;
272 273 sl_field_t pr_ttydev;
273 274 sl_field_t pr_pctcpu;
274 275 sl_field_t pr_pctmem;
275 276 sl_field_t pr_start;
276 277 sl_field_t pr_time;
277 278 sl_field_t pr_ctime;
278 279 sl_field_t pr_fname;
279 280 sl_field_t pr_psargs;
280 281 sl_field_t pr_wstat;
281 282 sl_field_t pr_argc;
282 283 sl_field_t pr_argv;
283 284 sl_field_t pr_envp;
284 285 sl_field_t pr_dmodel;
285 286 sl_field_t pr_taskid;
286 287 sl_field_t pr_projid;
287 288 sl_field_t pr_nzomb;
288 289 sl_field_t pr_poolid;
289 290 sl_field_t pr_zoneid;
290 291 sl_field_t pr_contract;
291 292 sl_field_t pr_lwp;
292 293 } sl_psinfo_layout_t;
293 294
294 295 /*
295 296 * Layout description of prpsinfo_t, from <sys/old_procfs.h>.
296 297 */
297 298 typedef struct {
298 299 sl_field_t sizeof_struct;
299 300 sl_field_t pr_state;
300 301 sl_field_t pr_sname;
301 302 sl_field_t pr_zomb;
302 303 sl_field_t pr_nice;
303 304 sl_field_t pr_flag;
304 305 sl_field_t pr_uid;
305 306 sl_field_t pr_gid;
306 307 sl_field_t pr_pid;
307 308 sl_field_t pr_ppid;
308 309 sl_field_t pr_pgrp;
309 310 sl_field_t pr_sid;
310 311 sl_field_t pr_addr;
311 312 sl_field_t pr_size;
312 313 sl_field_t pr_rssize;
313 314 sl_field_t pr_wchan;
314 315 sl_field_t pr_start;
315 316 sl_field_t pr_time;
316 317 sl_field_t pr_pri;
317 318 sl_field_t pr_oldpri;
318 319 sl_field_t pr_cpu;
319 320 sl_field_t pr_ottydev;
320 321 sl_field_t pr_lttydev;
321 322 sl_field_t pr_clname;
322 323 sl_field_t pr_fname;
323 324 sl_field_t pr_psargs;
324 325 sl_field_t pr_syscall;
325 326 sl_field_t pr_ctime;
326 327 sl_field_t pr_bysize;
327 328 sl_field_t pr_byrssize;
328 329 sl_field_t pr_argc;
329 330 sl_field_t pr_argv;
330 331 sl_field_t pr_envp;
331 332 sl_field_t pr_wstat;
332 333 sl_field_t pr_pctcpu;
333 334 sl_field_t pr_pctmem;
334 335 sl_field_t pr_euid;
335 336 sl_field_t pr_egid;
336 337 sl_field_t pr_aslwpid;
337 338 sl_field_t pr_dmodel;
338 339 } sl_prpsinfo_layout_t;
339 340
340 341 /*
341 342 * Layout description of lwpsinfo_t, from <sys/procfs.h>.
342 343 */
343 344 typedef struct {
344 345 sl_field_t sizeof_struct;
345 346 sl_field_t pr_flag;
346 347 sl_field_t pr_lwpid;
347 348 sl_field_t pr_addr;
348 349 sl_field_t pr_wchan;
349 350 sl_field_t pr_stype;
350 351 sl_field_t pr_state;
351 352 sl_field_t pr_sname;
352 353 sl_field_t pr_nice;
353 354 sl_field_t pr_syscall;
354 355 sl_field_t pr_oldpri;
355 356 sl_field_t pr_cpu;
356 357 sl_field_t pr_pri;
357 358 sl_field_t pr_pctcpu;
358 359 sl_field_t pr_start;
359 360 sl_field_t pr_time;
360 361 sl_field_t pr_clname;
361 362 sl_field_t pr_name;
362 363 sl_field_t pr_onpro;
363 364 sl_field_t pr_bindpro;
364 365 sl_field_t pr_bindpset;
365 366 sl_field_t pr_lgrp;
366 367 } sl_lwpsinfo_layout_t;
367 368
368 369 /*
369 370 * Layout description of prcred_t, from <sys/procfs.h>.
370 371 */
371 372 typedef struct {
372 373 sl_field_t sizeof_struct;
373 374 sl_field_t pr_euid;
374 375 sl_field_t pr_ruid;
375 376 sl_field_t pr_suid;
376 377 sl_field_t pr_egid;
377 378 sl_field_t pr_rgid;
378 379 sl_field_t pr_sgid;
379 380 sl_field_t pr_ngroups;
380 381 sl_field_t pr_groups;
381 382 } sl_prcred_layout_t;
382 383
383 384 /*
384 385 * Layout description of prpriv_t, from <sys/procfs.h>.
385 386 */
386 387 typedef struct {
387 388 sl_field_t sizeof_struct;
388 389 sl_field_t pr_nsets;
389 390 sl_field_t pr_setsize;
390 391 sl_field_t pr_infosize;
391 392 sl_field_t pr_sets;
392 393 } sl_prpriv_layout_t;
393 394
394 395 /*
395 396 * Layout description of priv_impl_info_t, from <sys/priv.h>.
396 397 */
397 398 typedef struct {
398 399 sl_field_t sizeof_struct;
399 400 sl_field_t priv_headersize;
400 401 sl_field_t priv_flags;
401 402 sl_field_t priv_nsets;
402 403 sl_field_t priv_setsize;
403 404 sl_field_t priv_max;
404 405 sl_field_t priv_infosize;
405 406 sl_field_t priv_globalinfosize;
406 407 } sl_priv_impl_info_layout_t;
407 408
408 409 /*
409 410 * Layout description of fltset_t, from <sys/fault.h>.
410 411 */
411 412 typedef struct {
412 413 sl_field_t sizeof_struct;
413 414 sl_field_t word;
414 415 } sl_fltset_layout_t;
415 416
416 417 /*
417 418 * Layout description of siginfo_t, from <sys/siginfo.h>.
418 419 *
419 420 * siginfo_t is unusual, in that it contains a large union
420 421 * full of private fields. There are macros defined to give
421 422 * access to these fields via the names documented in the
422 423 * siginfo manpage. We stick to the documented names
423 424 * rather than try to unravel the undocumented blob. Hence,
424 425 * the layout description below is a "logical" view of siginfo_t.
425 426 * The fields below are not necessarily in the same order as
426 427 * they appear in siginfo_t, nor are they everything that is in
427 428 * that struct. They may also overlap each other, if they are
428 429 * contained within of the union.
429 430 *
430 431 * The f_ prefixes are used to prevent our field names from
431 432 * clashing with the macros defined in siginfo.h.
432 433 */
433 434 typedef struct {
434 435 sl_field_t sizeof_struct;
435 436 sl_field_t f_si_signo;
436 437 sl_field_t f_si_errno;
437 438 sl_field_t f_si_code;
438 439 sl_field_t f_si_value_int;
439 440 sl_field_t f_si_value_ptr;
440 441 sl_field_t f_si_pid;
441 442 sl_field_t f_si_uid;
442 443 sl_field_t f_si_ctid;
443 444 sl_field_t f_si_zoneid;
444 445 sl_field_t f_si_entity;
445 446 sl_field_t f_si_addr;
446 447 sl_field_t f_si_status;
447 448 sl_field_t f_si_band;
448 449 } sl_siginfo_layout_t;
449 450
450 451 /*
451 452 * Layout description of sigset_t, from <sys/signal.h>.
452 453 */
453 454 typedef struct {
454 455 sl_field_t sizeof_struct;
455 456 sl_field_t sigbits;
456 457 } sl_sigset_layout_t;
457 458
458 459 /*
459 460 * Layout description of struct sigaction, from <sys/signal.h>.
460 461 */
461 462 typedef struct {
462 463 sl_field_t sizeof_struct;
463 464 sl_field_t sa_flags;
464 465 sl_field_t sa_hand;
465 466 sl_field_t sa_sigact;
466 467 sl_field_t sa_mask;
467 468 } sl_sigaction_layout_t;
468 469
469 470 /*
470 471 * Layout description of stack_t, from <sys/signal.h>.
471 472 */
472 473 typedef struct {
473 474 sl_field_t sizeof_struct;
474 475 sl_field_t ss_sp;
475 476 sl_field_t ss_size;
476 477 sl_field_t ss_flags;
477 478 } sl_stack_layout_t;
478 479
479 480 /*
480 481 * Layout description of sysset_t, from <sys/syscall.h>.
481 482 */
482 483 typedef struct {
483 484 sl_field_t sizeof_struct;
484 485 sl_field_t word;
485 486 } sl_sysset_layout_t;
486 487
487 488 /*
488 489 * Layout description of timestruc_t, from <sys/time_impl.h>.
489 490 */
490 491 typedef struct {
491 492 sl_field_t sizeof_struct;
492 493 sl_field_t tv_sec;
493 494 sl_field_t tv_nsec;
494 495 } sl_timestruc_layout_t;
495 496
496 497 /*
497 498 * Layout description of struct utsname, from <sys/utsname.h>.
498 499 */
499 500 typedef struct {
500 501 sl_field_t sizeof_struct;
501 502 sl_field_t sysname;
502 503 sl_field_t nodename;
503 504 sl_field_t release;
504 505 sl_field_t version;
505 506 sl_field_t machine;
506 507 } sl_utsname_layout_t;
507 508
508 509 /*
509 510 * Layout description of prdinfo_t, from <sys/procfs.h>.
510 511 */
511 512 typedef struct {
512 513 sl_field_t sizeof_struct;
513 514 sl_field_t pr_fd;
514 515 sl_field_t pr_mode;
515 516 sl_field_t pr_uid;
516 517 sl_field_t pr_gid;
517 518 sl_field_t pr_major;
518 519 sl_field_t pr_minor;
519 520 sl_field_t pr_rmajor;
520 521 sl_field_t pr_rminor;
521 522 sl_field_t pr_ino;
522 523 sl_field_t pr_offset;
523 524 sl_field_t pr_size;
524 525 sl_field_t pr_fileflags;
525 526 sl_field_t pr_fdflags;
526 527 sl_field_t pr_path;
527 528 } sl_prfdinfo_layout_t;
↓ open down ↓ |
416 lines elided |
↑ open up ↑ |
528 529
529 530 typedef struct {
530 531 sl_field_t sizeof_struct;
531 532 sl_field_t pr_version;
532 533 sl_field_t pr_effective;
533 534 sl_field_t pr_inherit;
534 535 sl_field_t pr_lower;
535 536 sl_field_t pr_upper;
536 537 } sl_prsecflags_layout_t;
537 538
539 +typedef struct {
540 + sl_field_t sizeof_struct;
541 + sl_field_t pr_lwpid;
542 + sl_field_t pr_lwpname;
543 +} sl_prlwpname_layout_t;
544 +
538 545 /*
539 546 * This type collects all of the layout definitions for
540 547 * a given architecture.
541 548 */
542 549 typedef struct {
543 550 const sl_auxv_layout_t *auxv; /* auxv_t */
544 551 const sl_fltset_layout_t *fltset; /* fltset_t */
545 552 const sl_lwpsinfo_layout_t *lwpsinfo; /* lwpsinfo_t */
546 553 const sl_lwpstatus_layout_t *lwpstatus; /* lwpstatus_t */
547 554 const sl_prcred_layout_t *prcred; /* prcred_t */
548 555 const sl_priv_impl_info_layout_t *priv_impl_info; /* priv_impl_info_t */
549 556 const sl_prpriv_layout_t *prpriv; /* prpriv_t */
550 557 const sl_psinfo_layout_t *psinfo; /* psinfo_t */
551 558 const sl_pstatus_layout_t *pstatus; /* pstatus_t */
552 559 const sl_prgregset_layout_t *prgregset; /* prgregset_t */
553 560 const sl_prpsinfo_layout_t *prpsinfo; /* prpsinfo_t */
↓ open down ↓ |
6 lines elided |
↑ open up ↑ |
554 561 const sl_prstatus_layout_t *prstatus; /* prstatus_t */
555 562 const sl_sigaction_layout_t *sigaction; /* struct sigaction */
556 563 const sl_siginfo_layout_t *siginfo; /* siginfo_t */
557 564 const sl_sigset_layout_t *sigset; /* sigset_t */
558 565 const sl_stack_layout_t *stack; /* stack_t */
559 566 const sl_sysset_layout_t *sysset; /* sysset_t */
560 567 const sl_timestruc_layout_t *timestruc; /* timestruc_t */
561 568 const sl_utsname_layout_t *utsname; /* struct utsname */
562 569 const sl_prfdinfo_layout_t *prfdinfo; /* prdinfo_t */
563 570 const sl_prsecflags_layout_t *prsecflags; /* prsecflags_t */
571 + const sl_prlwpname_layout_t *prlwpname; /* prlwpname_t */
564 572 } sl_arch_layout_t;
565 573
566 574
567 575
568 576 extern void sl_extract_num_field(const char *data, int do_swap,
569 577 const sl_field_t *fdesc, sl_data_t *field_data);
570 578 extern Word sl_extract_as_word(const char *data, int do_swap,
571 579 const sl_field_t *fdesc);
572 580 extern Lword sl_extract_as_lword(const char *data, int do_swap,
573 581 const sl_field_t *fdesc);
574 582 extern Sword sl_extract_as_sword(const char *data, int do_swap,
575 583 const sl_field_t *fdesc);
576 584 extern const char *sl_fmt_num(const char *data, int do_swap,
577 585 const sl_field_t *fdesc, sl_fmt_num_t fmt_type,
578 586 sl_fmtbuf_t buf);
579 587
580 588
581 589 extern const sl_arch_layout_t *sl_mach(Half);
582 590 extern const sl_arch_layout_t *struct_layout_i386(void);
583 591 extern const sl_arch_layout_t *struct_layout_amd64(void);
584 592 extern const sl_arch_layout_t *struct_layout_sparc(void);
585 593 extern const sl_arch_layout_t *struct_layout_sparcv9(void);
586 594
587 595
588 596
589 597 #ifdef __cplusplus
590 598 }
591 599 #endif
592 600
593 601 #endif /* _STRUCT_LAYOUT_H */
↓ open down ↓ |
20 lines elided |
↑ open up ↑ |
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX