Home | History | Annotate | Download | only in sys
      1     0    stevel /*
      2     0    stevel  * CDDL HEADER START
      3     0    stevel  *
      4     0    stevel  * The contents of this file are subject to the terms of the
      5  1976  ab196087  * Common Development and Distribution License (the "License").
      6  1976  ab196087  * You may not use this file except in compliance with the License.
      7     0    stevel  *
      8     0    stevel  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
      9     0    stevel  * or http://www.opensolaris.org/os/licensing.
     10     0    stevel  * See the License for the specific language governing permissions
     11     0    stevel  * and limitations under the License.
     12     0    stevel  *
     13     0    stevel  * When distributing Covered Code, include this CDDL HEADER in each
     14     0    stevel  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
     15     0    stevel  * If applicable, add the following below this CDDL HEADER, with the
     16     0    stevel  * fields enclosed by brackets "[]" replaced with your own identifying
     17     0    stevel  * information: Portions Copyright [yyyy] [name of copyright owner]
     18     0    stevel  *
     19     0    stevel  * CDDL HEADER END
     20     0    stevel  */
     21     0    stevel /*
     22  9085       Ali  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
     23     0    stevel  * Use is subject to license terms.
     24     0    stevel  */
     25     0    stevel 
     26     0    stevel /*	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T	*/
     27     0    stevel /*	  All Rights Reserved  	*/
     28     0    stevel 
     29     0    stevel 
     30     0    stevel #ifndef _SYS_ELF_H
     31     0    stevel #define	_SYS_ELF_H
     32     0    stevel 
     33     0    stevel #include <sys/elftypes.h>
     34     0    stevel 
     35     0    stevel #ifdef	__cplusplus
     36     0    stevel extern "C" {
     37     0    stevel #endif
     38     0    stevel 
     39     0    stevel #define	ELF32_FSZ_ADDR	4
     40     0    stevel #define	ELF32_FSZ_HALF	2
     41     0    stevel #define	ELF32_FSZ_OFF	4
     42     0    stevel #define	ELF32_FSZ_SWORD	4
     43     0    stevel #define	ELF32_FSZ_WORD	4
     44     0    stevel 
     45     0    stevel #define	ELF64_FSZ_ADDR	8
     46     0    stevel #define	ELF64_FSZ_HALF	2
     47     0    stevel #define	ELF64_FSZ_OFF	8
     48     0    stevel #define	ELF64_FSZ_SWORD	4
     49     0    stevel #define	ELF64_FSZ_WORD	4
     50     0    stevel #define	ELF64_FSZ_SXWORD 8
     51     0    stevel #define	ELF64_FSZ_XWORD	8
     52     0    stevel 
     53     0    stevel /*
     54     0    stevel  *	"Enumerations" below use ...NUM as the number of
     55     0    stevel  *	values in the list.  It should be 1 greater than the
     56     0    stevel  *	highest "real" value.
     57     0    stevel  */
     58     0    stevel 
     59     0    stevel /*
     60     0    stevel  *	ELF header
     61     0    stevel  */
     62     0    stevel 
     63     0    stevel #define	EI_NIDENT	16
     64     0    stevel 
     65     0    stevel typedef struct {
     66     0    stevel 	unsigned char	e_ident[EI_NIDENT];	/* ident bytes */
     67     0    stevel 	Elf32_Half	e_type;			/* file type */
     68     0    stevel 	Elf32_Half	e_machine;		/* target machine */
     69     0    stevel 	Elf32_Word	e_version;		/* file version */
     70     0    stevel 	Elf32_Addr	e_entry;		/* start address */
     71     0    stevel 	Elf32_Off	e_phoff;		/* phdr file offset */
     72     0    stevel 	Elf32_Off	e_shoff;		/* shdr file offset */
     73     0    stevel 	Elf32_Word	e_flags;		/* file flags */
     74     0    stevel 	Elf32_Half	e_ehsize;		/* sizeof ehdr */
     75     0    stevel 	Elf32_Half	e_phentsize;		/* sizeof phdr */
     76     0    stevel 	Elf32_Half	e_phnum;		/* number phdrs */
     77     0    stevel 	Elf32_Half	e_shentsize;		/* sizeof shdr */
     78     0    stevel 	Elf32_Half	e_shnum;		/* number shdrs */
     79     0    stevel 	Elf32_Half	e_shstrndx;		/* shdr string index */
     80     0    stevel } Elf32_Ehdr;
     81     0    stevel 
     82     0    stevel #if defined(_LP64) || defined(_LONGLONG_TYPE)
     83     0    stevel typedef struct {
     84     0    stevel 	unsigned char	e_ident[EI_NIDENT];	/* ident bytes */
     85     0    stevel 	Elf64_Half	e_type;			/* file type */
     86     0    stevel 	Elf64_Half	e_machine;		/* target machine */
     87     0    stevel 	Elf64_Word	e_version;		/* file version */
     88     0    stevel 	Elf64_Addr	e_entry;		/* start address */
     89     0    stevel 	Elf64_Off	e_phoff;		/* phdr file offset */
     90     0    stevel 	Elf64_Off	e_shoff;		/* shdr file offset */
     91     0    stevel 	Elf64_Word	e_flags;		/* file flags */
     92     0    stevel 	Elf64_Half	e_ehsize;		/* sizeof ehdr */
     93     0    stevel 	Elf64_Half	e_phentsize;		/* sizeof phdr */
     94     0    stevel 	Elf64_Half	e_phnum;		/* number phdrs */
     95     0    stevel 	Elf64_Half	e_shentsize;		/* sizeof shdr */
     96     0    stevel 	Elf64_Half	e_shnum;		/* number shdrs */
     97     0    stevel 	Elf64_Half	e_shstrndx;		/* shdr string index */
     98     0    stevel } Elf64_Ehdr;
     99     0    stevel #endif	/* defined(_LP64) || defined(_LONGLONG_TYPE) */
    100     0    stevel 
    101     0    stevel 
    102     0    stevel #define	EI_MAG0		0	/* e_ident[] indexes */
    103     0    stevel #define	EI_MAG1		1
    104     0    stevel #define	EI_MAG2		2
    105     0    stevel #define	EI_MAG3		3
    106     0    stevel #define	EI_CLASS	4	/* File class */
    107     0    stevel #define	EI_DATA		5	/* Data encoding */
    108     0    stevel #define	EI_VERSION	6	/* File version */
    109     0    stevel #define	EI_OSABI	7	/* Operating system/ABI identification */
    110     0    stevel #define	EI_ABIVERSION	8	/* ABI version */
    111     0    stevel #define	EI_PAD		9	/* Start of padding bytes */
    112     0    stevel 
    113     0    stevel #define	ELFMAG0		0x7f		/* EI_MAG */
    114     0    stevel #define	ELFMAG1		'E'
    115     0    stevel #define	ELFMAG2		'L'
    116     0    stevel #define	ELFMAG3		'F'
    117     0    stevel #define	ELFMAG		"\177ELF"
    118     0    stevel #define	SELFMAG		4
    119     0    stevel 
    120     0    stevel #define	ELFCLASSNONE	0		/* EI_CLASS */
    121     0    stevel #define	ELFCLASS32	1
    122     0    stevel #define	ELFCLASS64	2
    123     0    stevel #define	ELFCLASSNUM	3
    124     0    stevel 
    125     0    stevel #define	ELFDATANONE	0		/* EI_DATA */
    126     0    stevel #define	ELFDATA2LSB	1
    127     0    stevel #define	ELFDATA2MSB	2
    128     0    stevel #define	ELFDATANUM	3
    129     0    stevel 
    130     0    stevel #define	ET_NONE		0		/* e_type */
    131     0    stevel #define	ET_REL		1
    132     0    stevel #define	ET_EXEC		2
    133     0    stevel #define	ET_DYN		3
    134     0    stevel #define	ET_CORE		4
    135     0    stevel #define	ET_NUM		5
    136     0    stevel #define	ET_LOOS		0xfe00		/* OS specific range */
    137     0    stevel #define	ET_LOSUNW	0xfeff
    138     0    stevel #define	ET_SUNWPSEUDO	0xfeff
    139     0    stevel #define	ET_HISUNW	0xfeff
    140     0    stevel #define	ET_HIOS		0xfeff
    141     0    stevel #define	ET_LOPROC	0xff00		/* processor specific range */
    142     0    stevel #define	ET_HIPROC	0xffff
    143     0    stevel 
    144     0    stevel #define	ET_LOPROC	0xff00		/* processor specific range */
    145     0    stevel #define	ET_HIPROC	0xffff
    146     0    stevel 
    147     0    stevel #define	EM_NONE		0		/* e_machine */
    148     0    stevel #define	EM_M32		1		/* AT&T WE 32100 */
    149     0    stevel #define	EM_SPARC	2		/* Sun SPARC */
    150     0    stevel #define	EM_386		3		/* Intel 80386 */
    151     0    stevel #define	EM_68K		4		/* Motorola 68000 */
    152     0    stevel #define	EM_88K		5		/* Motorola 88000 */
    153     0    stevel #define	EM_486		6		/* Intel 80486 */
    154     0    stevel #define	EM_860		7		/* Intel i860 */
    155     0    stevel #define	EM_MIPS		8		/* MIPS RS3000 Big-Endian */
    156     0    stevel #define	EM_S370		9		/* IBM System/370 Processor */
    157     0    stevel #define	EM_MIPS_RS3_LE	10		/* MIPS RS3000 Little-Endian */
    158     0    stevel #define	EM_RS6000	11		/* RS6000 */
    159     0    stevel #define	EM_UNKNOWN12	12
    160     0    stevel #define	EM_UNKNOWN13	13
    161     0    stevel #define	EM_UNKNOWN14	14
    162     0    stevel #define	EM_PA_RISC	15		/* PA-RISC */
    163  2802  ab196087 #define	EM_PARISC	EM_PA_RISC	/* Alias: GNU compatibility */
    164     0    stevel #define	EM_nCUBE	16		/* nCUBE */
    165     0    stevel #define	EM_VPP500	17		/* Fujitsu VPP500 */
    166     0    stevel #define	EM_SPARC32PLUS	18		/* Sun SPARC 32+ */
    167     0    stevel #define	EM_960		19		/* Intel 80960 */
    168     0    stevel #define	EM_PPC		20		/* PowerPC */
    169     0    stevel #define	EM_PPC64	21		/* 64-bit PowerPC */
    170  2802  ab196087 #define	EM_S390		22		/* IBM System/390 Processor */
    171  2802  ab196087 #define	EM_UNKNOWN22	EM_S390		/* Alias: Older published name */
    172     0    stevel #define	EM_UNKNOWN23	23
    173     0    stevel #define	EM_UNKNOWN24	24
    174     0    stevel #define	EM_UNKNOWN25	25
    175     0    stevel #define	EM_UNKNOWN26	26
    176     0    stevel #define	EM_UNKNOWN27	27
    177     0    stevel #define	EM_UNKNOWN28	28
    178     0    stevel #define	EM_UNKNOWN29	29
    179     0    stevel #define	EM_UNKNOWN30	30
    180     0    stevel #define	EM_UNKNOWN31	31
    181     0    stevel #define	EM_UNKNOWN32	32
    182     0    stevel #define	EM_UNKNOWN33	33
    183     0    stevel #define	EM_UNKNOWN34	34
    184     0    stevel #define	EM_UNKNOWN35	35
    185     0    stevel #define	EM_V800		36		/* NEX V800 */
    186     0    stevel #define	EM_FR20		37		/* Fujitsu FR20 */
    187     0    stevel #define	EM_RH32		38		/* TRW RH-32 */
    188     0    stevel #define	EM_RCE		39		/* Motorola RCE */
    189     0    stevel #define	EM_ARM		40		/* Advanced RISC Marchines ARM */
    190     0    stevel #define	EM_ALPHA	41		/* Digital Alpha */
    191     0    stevel #define	EM_SH		42		/* Hitachi SH */
    192     0    stevel #define	EM_SPARCV9	43		/* Sun SPARC V9 (64-bit) */
    193     0    stevel #define	EM_TRICORE	44		/* Siemens Tricore embedded processor */
    194     0    stevel #define	EM_ARC		45		/* Argonaut RISC Core, */
    195     0    stevel 					/*	Argonaut Technologies Inc. */
    196     0    stevel #define	EM_H8_300	46		/* Hitachi H8/300 */
    197     0    stevel #define	EM_H8_300H	47		/* Hitachi H8/300H */
    198     0    stevel #define	EM_H8S		48		/* Hitachi H8S */
    199     0    stevel #define	EM_H8_500	49		/* Hitachi H8/500 */
    200     0    stevel #define	EM_IA_64	50		/* Intel IA64 */
    201     0    stevel #define	EM_MIPS_X	51		/* Stanford MIPS-X */
    202     0    stevel #define	EM_COLDFIRE	52		/* Motorola ColdFire */
    203     0    stevel #define	EM_68HC12	53		/* Motorola M68HC12 */
    204     0    stevel #define	EM_MMA		54		/* Fujitsu MMA Mulimedia Accelerator */
    205     0    stevel #define	EM_PCP		55		/* Siemens PCP */
    206     0    stevel #define	EM_NCPU		56		/* Sony nCPU embedded RISC processor */
    207     0    stevel #define	EM_NDR1		57		/* Denso NDR1 microprocessor */
    208     0    stevel #define	EM_STARCORE	58		/* Motorola Star*Core processor */
    209     0    stevel #define	EM_ME16		59		/* Toyota ME16 processor */
    210     0    stevel #define	EM_ST100	60		/* STMicroelectronics ST100 processor */
    211     0    stevel #define	EM_TINYJ	61		/* Advanced Logic Corp. TinyJ */
    212     0    stevel 					/*	embedded processor family */
    213     0    stevel #define	EM_AMD64	62		/* AMDs x86-64 architecture */
    214     0    stevel #define	EM_X86_64	EM_AMD64	/* (compatibility) */
    215     0    stevel 
    216     0    stevel #define	EM_PDSP		63		/* Sony DSP Processor */
    217     0    stevel #define	EM_UNKNOWN64	64
    218     0    stevel #define	EM_UNKNOWN65	65
    219     0    stevel #define	EM_FX66		66		/* Siemens FX66 microcontroller */
    220     0    stevel #define	EM_ST9PLUS	67		/* STMicroelectronics ST9+8/16 bit */
    221     0    stevel 					/*	microcontroller */
    222     0    stevel #define	EM_ST7		68		/* STMicroelectronics ST7 8-bit */
    223     0    stevel 					/*	microcontroller */
    224     0    stevel #define	EM_68HC16	69		/* Motorola MC68HC16 Microcontroller */
    225     0    stevel #define	EM_68HC11	70		/* Motorola MC68HC11 Microcontroller */
    226     0    stevel #define	EM_68HC08	71		/* Motorola MC68HC08 Microcontroller */
    227     0    stevel #define	EM_68HC05	72		/* Motorola MC68HC05 Microcontroller */
    228     0    stevel #define	EM_SVX		73		/* Silicon Graphics SVx */
    229     0    stevel #define	EM_ST19		74		/* STMicroelectronics ST19 8-bit */
    230     0    stevel 					/*	microcontroller */
    231     0    stevel #define	EM_VAX		75		/* Digital VAX */
    232     0    stevel #define	EM_CRIS		76		/* Axis Communications 32-bit */
    233     0    stevel 					/*	embedded processor */
    234     0    stevel #define	EM_JAVELIN	77		/* Infineon Technologies 32-bit */
    235     0    stevel 					/*	embedded processor */
    236     0    stevel #define	EM_FIREPATH	78		/* Element 14 64-bit DSP Processor */
    237     0    stevel #define	EM_ZSP		79		/* LSI Logic 16-bit DSP Processor */
    238     0    stevel #define	EM_MMIX		80		/* Donald Knuth's educational */
    239     0    stevel 					/*	64-bit processor */
    240     0    stevel #define	EM_HUANY	81		/* Harvard University */
    241     0    stevel 					/*	machine-independent */
    242     0    stevel 					/*	object files */
    243     0    stevel #define	EM_PRISM	82		/* SiTera Prism */
    244     0    stevel #define	EM_AVR		83		/* Atmel AVR 8-bit microcontroller */
    245     0    stevel #define	EM_FR30		84		/* Fujitsu FR30 */
    246     0    stevel #define	EM_D10V		85		/* Mitsubishi D10V */
    247     0    stevel #define	EM_D30V		86		/* Mitsubishi D30V */
    248     0    stevel #define	EM_V850		87		/* NEC v850 */
    249     0    stevel #define	EM_M32R		88		/* Mitsubishi M32R */
    250     0    stevel #define	EM_MN10300	89		/* Matsushita MN10300 */
    251     0    stevel #define	EM_MN10200	90		/* Matsushita MN10200 */
    252     0    stevel #define	EM_PJ		91		/* picoJava */
    253     0    stevel #define	EM_OPENRISC	92		/* OpenRISC 32-bit embedded processor */
    254     0    stevel #define	EM_ARC_A5	93		/* ARC Cores Tangent-A5 */
    255     0    stevel #define	EM_XTENSA	94		/* Tensilica Xtensa architecture */
    256     0    stevel #define	EM_NUM		95
    257     0    stevel 
    258     0    stevel #define	EV_NONE		0		/* e_version, EI_VERSION */
    259     0    stevel #define	EV_CURRENT	1
    260     0    stevel #define	EV_NUM		2
    261     0    stevel 
    262     0    stevel 
    263     0    stevel #define	ELFOSABI_NONE		0	/* No extensions or unspecified */
    264  2802  ab196087 #define	ELFOSABI_SYSV		ELFOSABI_NONE
    265     0    stevel #define	ELFOSABI_HPUX		1	/* Hewlett-Packard HP-UX */
    266     0    stevel #define	ELFOSABI_NETBSD		2	/* NetBSD */
    267     0    stevel #define	ELFOSABI_LINUX		3	/* Linux */
    268     0    stevel #define	ELFOSABI_UNKNOWN4	4
    269     0    stevel #define	ELFOSABI_UNKNOWN5	5
    270     0    stevel #define	ELFOSABI_SOLARIS	6	/* Sun Solaris */
    271     0    stevel #define	ELFOSABI_AIX		7	/* AIX */
    272     0    stevel #define	ELFOSABI_IRIX		8	/* IRIX */
    273     0    stevel #define	ELFOSABI_FREEBSD	9	/* FreeBSD */
    274     0    stevel #define	ELFOSABI_TRU64		10	/* Compaq TRU64 UNIX */
    275     0    stevel #define	ELFOSABI_MODESTO	11	/* Novell Modesto */
    276     0    stevel #define	ELFOSABI_OPENBSD	12	/* Open BSD */
    277  2802  ab196087 #define	ELFOSABI_OPENVMS	13	/* Open VMS */
    278  2802  ab196087 #define	ELFOSABI_NSK		14	/* Hewlett-Packard Non-Stop Kernel */
    279  2802  ab196087 #define	ELFOSABI_AROS		15	/* Amiga Research OS */
    280  2802  ab196087 #define	ELFOSABI_ARM		97	/* ARM */
    281  2802  ab196087 #define	ELFOSABI_STANDALONE	255	/* standalone (embedded) application */
    282     0    stevel 
    283  9273       Ali #define	EAV_SUNW_NONE		0	/* EI_ABIVERSION */
    284  9273       Ali #define	EAV_SUNW_CURRENT	1
    285  9273       Ali #define	EAV_SUNW_NUM		2
    286  9273       Ali 
    287  9273       Ali 
    288     0    stevel /*
    289     0    stevel  *	Program header
    290     0    stevel  */
    291     0    stevel 
    292     0    stevel typedef struct {
    293     0    stevel 	Elf32_Word	p_type;		/* entry type */
    294     0    stevel 	Elf32_Off	p_offset;	/* file offset */
    295     0    stevel 	Elf32_Addr	p_vaddr;	/* virtual address */
    296     0    stevel 	Elf32_Addr	p_paddr;	/* physical address */
    297     0    stevel 	Elf32_Word	p_filesz;	/* file size */
    298     0    stevel 	Elf32_Word	p_memsz;	/* memory size */
    299     0    stevel 	Elf32_Word	p_flags;	/* entry flags */
    300     0    stevel 	Elf32_Word	p_align;	/* memory/file alignment */
    301     0    stevel } Elf32_Phdr;
    302     0    stevel 
    303     0    stevel #if defined(_LP64) || defined(_LONGLONG_TYPE)
    304     0    stevel typedef struct {
    305     0    stevel 	Elf64_Word	p_type;		/* entry type */
    306     0    stevel 	Elf64_Word	p_flags;	/* entry flags */
    307     0    stevel 	Elf64_Off	p_offset;	/* file offset */
    308     0    stevel 	Elf64_Addr	p_vaddr;	/* virtual address */
    309     0    stevel 	Elf64_Addr	p_paddr;	/* physical address */
    310     0    stevel 	Elf64_Xword	p_filesz;	/* file size */
    311     0    stevel 	Elf64_Xword	p_memsz;	/* memory size */
    312     0    stevel 	Elf64_Xword	p_align;	/* memory/file alignment */
    313     0    stevel } Elf64_Phdr;
    314     0    stevel #endif	/* defined(_LP64) || defined(_LONGLONG_TYPE) */
    315     0    stevel 
    316     0    stevel 
    317     0    stevel #define	PT_NULL		0		/* p_type */
    318     0    stevel #define	PT_LOAD		1
    319     0    stevel #define	PT_DYNAMIC	2
    320     0    stevel #define	PT_INTERP	3
    321     0    stevel #define	PT_NOTE		4
    322     0    stevel #define	PT_SHLIB	5
    323     0    stevel #define	PT_PHDR		6
    324     0    stevel #define	PT_TLS		7
    325     0    stevel #define	PT_NUM		8
    326     0    stevel 
    327     0    stevel #define	PT_LOOS		0x60000000	/* OS specific range */
    328     0    stevel 
    329     0    stevel /*
    330  9085       Ali  * PT_SUNW_UNWIND and PT_SUNW_EH_FRAME perform the same function,
    331  9085       Ali  * providing access to the .eh_frame_hdr section of the object.
    332  9085       Ali  * PT_SUNW_UNWIND is the original value, while PT_SUNW_EH_FRAME is
    333  9085       Ali  * required by the amd64 psABI. The Solaris link-editor (ld) tags output
    334  9085       Ali  * objects with PT_SUNW_UNWIND, but the Solaris runtime linker (ld.so.1)
    335  9085       Ali  * will accept and use either value.
    336     0    stevel  */
    337  9085       Ali #define	PT_SUNW_UNWIND		0x6464e550
    338  9085       Ali #define	PT_SUNW_EH_FRAME	0x6474e550
    339  9085       Ali #define	PT_GNU_EH_FRAME		PT_SUNW_EH_FRAME
    340     0    stevel 
    341  9085       Ali /*
    342  9085       Ali  * Linux specific program headers not currently used by Solaris
    343  9085       Ali  */
    344  9085       Ali #define	PT_GNU_STACK	0x6474e551	/* Indicates stack executability */
    345  9085       Ali #define	PT_GNU_RELRO	0x6474e552	/* Read-only after relocation */
    346     0    stevel 
    347     0    stevel #define	PT_LOSUNW	0x6ffffffa
    348  8159       Ali #define	PT_SUNWBSS	0x6ffffffa	/* Sun Specific segment (unused) */
    349     0    stevel #define	PT_SUNWSTACK	0x6ffffffb	/* describes the stack segment */
    350     0    stevel #define	PT_SUNWDTRACE	0x6ffffffc	/* private */
    351     0    stevel #define	PT_SUNWCAP	0x6ffffffd	/* hard/soft capabilities segment */
    352     0    stevel #define	PT_HISUNW	0x6fffffff
    353     0    stevel #define	PT_HIOS		0x6fffffff
    354     0    stevel 
    355     0    stevel #define	PT_LOPROC	0x70000000	/* processor specific range */
    356     0    stevel #define	PT_HIPROC	0x7fffffff
    357     0    stevel 
    358     0    stevel #define	PF_R		0x4		/* p_flags */
    359     0    stevel #define	PF_W		0x2
    360     0    stevel #define	PF_X		0x1
    361     0    stevel 
    362     0    stevel #define	PF_MASKOS	0x0ff00000	/* OS specific values */
    363     0    stevel #define	PF_MASKPROC	0xf0000000	/* processor specific values */
    364     0    stevel 
    365     0    stevel #define	PF_SUNW_FAILURE	0x00100000	/* mapping absent due to failure */
    366     0    stevel 
    367   942       ahl #define	PN_XNUM		0xffff		/* extended program header index */
    368   942       ahl 
    369     0    stevel /*
    370     0    stevel  *	Section header
    371     0    stevel  */
    372     0    stevel 
    373     0    stevel typedef struct {
    374     0    stevel 	Elf32_Word	sh_name;	/* section name */
    375     0    stevel 	Elf32_Word	sh_type;	/* SHT_... */
    376     0    stevel 	Elf32_Word	sh_flags;	/* SHF_... */
    377     0    stevel 	Elf32_Addr	sh_addr;	/* virtual address */
    378     0    stevel 	Elf32_Off	sh_offset;	/* file offset */
    379     0    stevel 	Elf32_Word	sh_size;	/* section size */
    380     0    stevel 	Elf32_Word	sh_link;	/* misc info */
    381     0    stevel 	Elf32_Word	sh_info;	/* misc info */
    382     0    stevel 	Elf32_Word	sh_addralign;	/* memory alignment */
    383     0    stevel 	Elf32_Word	sh_entsize;	/* entry size if table */
    384     0    stevel } Elf32_Shdr;
    385     0    stevel 
    386     0    stevel #if defined(_LP64) || defined(_LONGLONG_TYPE)
    387     0    stevel typedef struct {
    388     0    stevel 	Elf64_Word	sh_name;	/* section name */
    389     0    stevel 	Elf64_Word	sh_type;	/* SHT_... */
    390     0    stevel 	Elf64_Xword	sh_flags;	/* SHF_... */
    391     0    stevel 	Elf64_Addr	sh_addr;	/* virtual address */
    392     0    stevel 	Elf64_Off	sh_offset;	/* file offset */
    393     0    stevel 	Elf64_Xword	sh_size;	/* section size */
    394     0    stevel 	Elf64_Word	sh_link;	/* misc info */
    395     0    stevel 	Elf64_Word	sh_info;	/* misc info */
    396     0    stevel 	Elf64_Xword	sh_addralign;	/* memory alignment */
    397     0    stevel 	Elf64_Xword	sh_entsize;	/* entry size if table */
    398     0    stevel } Elf64_Shdr;
    399     0    stevel #endif	/* defined(_LP64) || defined(_LONGLONG_TYPE) */
    400     0    stevel 
    401     0    stevel #define	SHT_NULL		0		/* sh_type */
    402     0    stevel #define	SHT_PROGBITS		1
    403     0    stevel #define	SHT_SYMTAB		2
    404     0    stevel #define	SHT_STRTAB		3
    405     0    stevel #define	SHT_RELA		4
    406     0    stevel #define	SHT_HASH		5
    407     0    stevel #define	SHT_DYNAMIC		6
    408     0    stevel #define	SHT_NOTE		7
    409     0    stevel #define	SHT_NOBITS		8
    410     0    stevel #define	SHT_REL			9
    411     0    stevel #define	SHT_SHLIB		10
    412     0    stevel #define	SHT_DYNSYM		11
    413     0    stevel #define	SHT_UNKNOWN12		12
    414     0    stevel #define	SHT_UNKNOWN13		13
    415     0    stevel #define	SHT_INIT_ARRAY		14
    416     0    stevel #define	SHT_FINI_ARRAY		15
    417     0    stevel #define	SHT_PREINIT_ARRAY	16
    418     0    stevel #define	SHT_GROUP		17
    419     0    stevel #define	SHT_SYMTAB_SHNDX	18
    420     0    stevel #define	SHT_NUM			19
    421     0    stevel 
    422  2802  ab196087 /* Solaris ABI specific values */
    423     0    stevel #define	SHT_LOOS		0x60000000	/* OS specific range */
    424  3492  ab196087 #define	SHT_LOSUNW		0x6ffffff1
    425  3492  ab196087 #define	SHT_SUNW_symsort	0x6ffffff1
    426  3492  ab196087 #define	SHT_SUNW_tlssort	0x6ffffff2
    427  2766  ab196087 #define	SHT_SUNW_LDYNSYM	0x6ffffff3
    428     0    stevel #define	SHT_SUNW_dof		0x6ffffff4
    429     0    stevel #define	SHT_SUNW_cap		0x6ffffff5
    430     0    stevel #define	SHT_SUNW_SIGNATURE	0x6ffffff6
    431     0    stevel #define	SHT_SUNW_ANNOTATE	0x6ffffff7
    432     0    stevel #define	SHT_SUNW_DEBUGSTR	0x6ffffff8
    433     0    stevel #define	SHT_SUNW_DEBUG		0x6ffffff9
    434     0    stevel #define	SHT_SUNW_move		0x6ffffffa
    435     0    stevel #define	SHT_SUNW_COMDAT		0x6ffffffb
    436     0    stevel #define	SHT_SUNW_syminfo	0x6ffffffc
    437     0    stevel #define	SHT_SUNW_verdef		0x6ffffffd
    438  9085       Ali #define	SHT_GNU_verdef		SHT_SUNW_verdef
    439     0    stevel #define	SHT_SUNW_verneed	0x6ffffffe
    440  9085       Ali #define	SHT_GNU_verneed		SHT_SUNW_verneed
    441     0    stevel #define	SHT_SUNW_versym		0x6fffffff
    442  9085       Ali #define	SHT_GNU_versym		SHT_SUNW_versym
    443     0    stevel #define	SHT_HISUNW		0x6fffffff
    444     0    stevel #define	SHT_HIOS		0x6fffffff
    445  2802  ab196087 
    446  9085       Ali /*
    447  9085       Ali  * GNU/Linux OSABI specific values with different meanings than under Solaris.
    448  9085       Ali  * Due to the overlap in assigned values with the Solaris OSABI, correct
    449  9085       Ali  * interpretation of these values requires knowledge of the OSABI used by
    450  9085       Ali  * the object.
    451  9085       Ali  */
    452  9085       Ali #define	SHT_GNU_ATTRIBUTES	0x6ffffff5	/* Object attributes */
    453  9085       Ali #define	SHT_GNU_HASH		0x6ffffff6	/* GNU-style hash table */
    454  9085       Ali #define	SHT_GNU_LIBLIST		0x6ffffff7	/* Prelink library list */
    455  9085       Ali #define	SHT_CHECKSUM		0x6ffffff8	/* Checksum for DSO content */
    456     0    stevel 
    457     0    stevel #define	SHT_LOPROC	0x70000000	/* processor specific range */
    458     0    stevel #define	SHT_HIPROC	0x7fffffff
    459     0    stevel 
    460     0    stevel #define	SHT_LOUSER	0x80000000
    461     0    stevel #define	SHT_HIUSER	0xffffffff
    462     0    stevel 
    463     0    stevel #define	SHF_WRITE		0x01		/* sh_flags */
    464     0    stevel #define	SHF_ALLOC		0x02
    465     0    stevel #define	SHF_EXECINSTR		0x04
    466     0    stevel #define	SHF_MERGE		0x10
    467     0    stevel #define	SHF_STRINGS		0x20
    468     0    stevel #define	SHF_INFO_LINK		0x40
    469     0    stevel #define	SHF_LINK_ORDER		0x80
    470     0    stevel #define	SHF_OS_NONCONFORMING	0x100
    471     0    stevel #define	SHF_GROUP		0x200
    472     0    stevel #define	SHF_TLS			0x400
    473     0    stevel 
    474     0    stevel #define	SHF_MASKOS	0x0ff00000	/* OS specific values */
    475     0    stevel 
    476     0    stevel 
    477     0    stevel #define	SHF_MASKPROC	0xf0000000	/* processor specific values */
    478     0    stevel 
    479     0    stevel #define	SHN_UNDEF	0		/* special section numbers */
    480     0    stevel #define	SHN_LORESERVE	0xff00
    481     0    stevel #define	SHN_LOPROC	0xff00		/* processor specific range */
    482     0    stevel #define	SHN_HIPROC	0xff1f
    483     0    stevel #define	SHN_LOOS	0xff20		/* OS specific range */
    484     0    stevel #define	SHN_LOSUNW	0xff3f
    485     0    stevel #define	SHN_SUNW_IGNORE	0xff3f
    486     0    stevel #define	SHN_HISUNW	0xff3f
    487     0    stevel #define	SHN_HIOS	0xff3f
    488     0    stevel #define	SHN_ABS		0xfff1
    489     0    stevel #define	SHN_COMMON	0xfff2
    490     0    stevel #define	SHN_XINDEX	0xffff		/* extended sect index */
    491     0    stevel #define	SHN_HIRESERVE	0xffff
    492     0    stevel 
    493     0    stevel 
    494     0    stevel 
    495     0    stevel /*
    496     0    stevel  *	Symbol table
    497     0    stevel  */
    498     0    stevel 
    499     0    stevel typedef struct {
    500     0    stevel 	Elf32_Word	st_name;
    501     0    stevel 	Elf32_Addr	st_value;
    502     0    stevel 	Elf32_Word	st_size;
    503     0    stevel 	unsigned char	st_info;	/* bind, type: ELF_32_ST_... */
    504     0    stevel 	unsigned char	st_other;
    505     0    stevel 	Elf32_Half	st_shndx;	/* SHN_... */
    506     0    stevel } Elf32_Sym;
    507     0    stevel 
    508     0    stevel #if defined(_LP64) || defined(_LONGLONG_TYPE)
    509     0    stevel typedef struct {
    510     0    stevel 	Elf64_Word	st_name;
    511     0    stevel 	unsigned char	st_info;	/* bind, type: ELF_64_ST_... */
    512     0    stevel 	unsigned char	st_other;
    513     0    stevel 	Elf64_Half	st_shndx;	/* SHN_... */
    514     0    stevel 	Elf64_Addr	st_value;
    515     0    stevel 	Elf64_Xword	st_size;
    516     0    stevel } Elf64_Sym;
    517     0    stevel #endif	/* defined(_LP64) || defined(_LONGLONG_TYPE) */
    518     0    stevel 
    519     0    stevel #define	STN_UNDEF	0
    520     0    stevel 
    521     0    stevel /*
    522     0    stevel  *	The macros compose and decompose values for S.st_info
    523     0    stevel  *
    524     0    stevel  *	bind = ELF32_ST_BIND(S.st_info)
    525     0    stevel  *	type = ELF32_ST_TYPE(S.st_info)
    526     0    stevel  *	S.st_info = ELF32_ST_INFO(bind, type)
    527     0    stevel  */
    528     0    stevel 
    529     0    stevel #define	ELF32_ST_BIND(info)		((info) >> 4)
    530     0    stevel #define	ELF32_ST_TYPE(info)		((info) & 0xf)
    531     0    stevel #define	ELF32_ST_INFO(bind, type)	(((bind)<<4)+((type)&0xf))
    532     0    stevel 
    533     0    stevel #define	ELF64_ST_BIND(info)		((info) >> 4)
    534     0    stevel #define	ELF64_ST_TYPE(info)		((info) & 0xf)
    535     0    stevel #define	ELF64_ST_INFO(bind, type)	(((bind)<<4)+((type)&0xf))
    536     0    stevel 
    537     0    stevel 
    538     0    stevel #define	STB_LOCAL	0		/* BIND */
    539     0    stevel #define	STB_GLOBAL	1
    540     0    stevel #define	STB_WEAK	2
    541     0    stevel #define	STB_NUM		3
    542     0    stevel 
    543     0    stevel #define	STB_LOPROC	13		/* processor specific range */
    544     0    stevel #define	STB_HIPROC	15
    545     0    stevel 
    546  9085       Ali #define	STT_NOTYPE	0		/* symbol type is unspecified */
    547  9085       Ali #define	STT_OBJECT	1		/* data object */
    548  9085       Ali #define	STT_FUNC	2		/* code object */
    549  9085       Ali #define	STT_SECTION	3		/* symbol identifies an ELF section */
    550  9085       Ali #define	STT_FILE	4		/* symbol's name is file name */
    551  9085       Ali #define	STT_COMMON	5		/* common data object */
    552  9085       Ali #define	STT_TLS		6		/* thread-local data object */
    553  9900       Ali #define	STT_NUM		7		/* # defined types in generic range */
    554  9085       Ali #define	STT_LOOS	10		/* OS specific range */
    555  9085       Ali #define	STT_HIOS	12
    556     0    stevel #define	STT_LOPROC	13		/* processor specific range */
    557     0    stevel #define	STT_HIPROC	15
    558     0    stevel 
    559     0    stevel /*
    560     0    stevel  *	The macros decompose values for S.st_other
    561     0    stevel  *
    562     0    stevel  *	visibility = ELF32_ST_VISIBILITY(S.st_other)
    563     0    stevel  */
    564  5220       rie #define	ELF32_ST_VISIBILITY(other)	((other)&0x7)
    565  5220       rie #define	ELF64_ST_VISIBILITY(other)	((other)&0x7)
    566     0    stevel 
    567     0    stevel #define	STV_DEFAULT	0
    568     0    stevel #define	STV_INTERNAL	1
    569     0    stevel #define	STV_HIDDEN	2
    570     0    stevel #define	STV_PROTECTED	3
    571  5220       rie #define	STV_EXPORTED	4
    572  5220       rie #define	STV_SINGLETON	5
    573  5220       rie #define	STV_ELIMINATE	6
    574     0    stevel 
    575  5220       rie #define	STV_NUM		7
    576     0    stevel 
    577     0    stevel /*
    578     0    stevel  *	Relocation
    579     0    stevel  */
    580     0    stevel 
    581     0    stevel typedef struct {
    582     0    stevel 	Elf32_Addr	r_offset;
    583     0    stevel 	Elf32_Word	r_info;		/* sym, type: ELF32_R_... */
    584     0    stevel } Elf32_Rel;
    585     0    stevel 
    586     0    stevel typedef struct {
    587     0    stevel 	Elf32_Addr	r_offset;
    588     0    stevel 	Elf32_Word	r_info;		/* sym, type: ELF32_R_... */
    589     0    stevel 	Elf32_Sword	r_addend;
    590     0    stevel } Elf32_Rela;
    591     0    stevel 
    592     0    stevel #if defined(_LP64) || defined(_LONGLONG_TYPE)
    593     0    stevel typedef struct {
    594     0    stevel 	Elf64_Addr	r_offset;
    595     0    stevel 	Elf64_Xword	r_info;		/* sym, type: ELF64_R_... */
    596     0    stevel } Elf64_Rel;
    597     0    stevel 
    598     0    stevel typedef struct {
    599     0    stevel 	Elf64_Addr	r_offset;
    600     0    stevel 	Elf64_Xword	r_info;		/* sym, type: ELF64_R_... */
    601     0    stevel 	Elf64_Sxword	r_addend;
    602     0    stevel } Elf64_Rela;
    603     0    stevel #endif	/* defined(_LP64) || defined(_LONGLONG_TYPE) */
    604     0    stevel 
    605     0    stevel 
    606     0    stevel /*
    607     0    stevel  *	The macros compose and decompose values for Rel.r_info, Rela.f_info
    608     0    stevel  *
    609     0    stevel  *	sym = ELF32_R_SYM(R.r_info)
    610     0    stevel  *	type = ELF32_R_TYPE(R.r_info)
    611     0    stevel  *	R.r_info = ELF32_R_INFO(sym, type)
    612     0    stevel  */
    613     0    stevel 
    614     0    stevel #define	ELF32_R_SYM(info)	((info)>>8)
    615     0    stevel #define	ELF32_R_TYPE(info)	((unsigned char)(info))
    616     0    stevel #define	ELF32_R_INFO(sym, type)	(((sym)<<8)+(unsigned char)(type))
    617     0    stevel 
    618     0    stevel #define	ELF64_R_SYM(info)	((info)>>32)
    619     0    stevel #define	ELF64_R_TYPE(info)    	((Elf64_Word)(info))
    620     0    stevel #define	ELF64_R_INFO(sym, type)	(((Elf64_Xword)(sym)<<32)+(Elf64_Xword)(type))
    621     0    stevel 
    622     0    stevel 
    623     0    stevel /*
    624     0    stevel  * The r_info field is composed of two 32-bit components: the symbol
    625     0    stevel  * table index and the relocation type.  The relocation type for SPARC V9
    626     0    stevel  * is further decomposed into an 8-bit type identifier and a 24-bit type
    627     0    stevel  * dependent data field.  For the existing Elf32 relocation types,
    628     0    stevel  * that data field is zero.
    629     0    stevel  */
    630     0    stevel #define	ELF64_R_TYPE_DATA(info)	(((Elf64_Xword)(info)<<32)>>40)
    631     0    stevel #define	ELF64_R_TYPE_ID(info)	(((Elf64_Xword)(info)<<56)>>56)
    632     0    stevel #define	ELF64_R_TYPE_INFO(data, type)	\
    633     0    stevel 		(((Elf64_Xword)(data)<<8)+(Elf64_Xword)(type))
    634     0    stevel 
    635     0    stevel 
    636     0    stevel /*
    637     0    stevel  * Section Group Flags (SHT_GROUP)
    638     0    stevel  */
    639     0    stevel #define	GRP_COMDAT	0x01
    640     0    stevel 
    641     0    stevel 
    642     0    stevel /*
    643     0    stevel  *	Note entry header
    644     0    stevel  */
    645     0    stevel 
    646     0    stevel typedef struct {
    647     0    stevel 	Elf32_Word	n_namesz;	/* length of note's name */
    648     0    stevel 	Elf32_Word	n_descsz;	/* length of note's "desc" */
    649     0    stevel 	Elf32_Word	n_type;		/* type of note */
    650     0    stevel } Elf32_Nhdr;
    651     0    stevel 
    652     0    stevel #if defined(_LP64) || defined(_LONGLONG_TYPE)
    653     0    stevel typedef struct {
    654     0    stevel 	Elf64_Word	n_namesz;	/* length of note's name */
    655     0    stevel 	Elf64_Word	n_descsz;	/* length of note's "desc" */
    656     0    stevel 	Elf64_Word	n_type;		/* type of note */
    657     0    stevel } Elf64_Nhdr;
    658     0    stevel #endif	/* defined(_LP64) || defined(_LONGLONG_TYPE) */
    659     0    stevel 
    660     0    stevel /*
    661     0    stevel  *	Move entry
    662     0    stevel  */
    663     0    stevel #if defined(_LP64) || defined(_LONGLONG_TYPE)
    664     0    stevel typedef struct {
    665     0    stevel 	Elf32_Lword	m_value;	/* symbol value */
    666     0    stevel 	Elf32_Word 	m_info;		/* size + index */
    667     0    stevel 	Elf32_Word	m_poffset;	/* symbol offset */
    668     0    stevel 	Elf32_Half	m_repeat;	/* repeat count */
    669     0    stevel 	Elf32_Half	m_stride;	/* stride info */
    670     0    stevel } Elf32_Move;
    671     0    stevel 
    672     0    stevel /*
    673     0    stevel  *	The macros compose and decompose values for Move.r_info
    674     0    stevel  *
    675     0    stevel  *	sym = ELF32_M_SYM(M.m_info)
    676     0    stevel  *	size = ELF32_M_SIZE(M.m_info)
    677     0    stevel  *	M.m_info = ELF32_M_INFO(sym, size)
    678     0    stevel  */
    679     0    stevel #define	ELF32_M_SYM(info)	((info)>>8)
    680     0    stevel #define	ELF32_M_SIZE(info)	((unsigned char)(info))
    681     0    stevel #define	ELF32_M_INFO(sym, size)	(((sym)<<8)+(unsigned char)(size))
    682     0    stevel 
    683     0    stevel typedef struct {
    684     0    stevel 	Elf64_Lword	m_value;	/* symbol value */
    685     0    stevel 	Elf64_Xword 	m_info;		/* size + index */
    686     0    stevel 	Elf64_Xword	m_poffset;	/* symbol offset */
    687     0    stevel 	Elf64_Half	m_repeat;	/* repeat count */
    688     0    stevel 	Elf64_Half	m_stride;	/* stride info */
    689     0    stevel } Elf64_Move;
    690     0    stevel #define	ELF64_M_SYM(info)	((info)>>8)
    691     0    stevel #define	ELF64_M_SIZE(info)	((unsigned char)(info))
    692     0    stevel #define	ELF64_M_INFO(sym, size)	(((sym)<<8)+(unsigned char)(size))
    693     0    stevel 
    694     0    stevel #endif	/* defined(_LP64) || defined(_LONGLONG_TYPE) */
    695     0    stevel 
    696     0    stevel 
    697     0    stevel /*
    698     0    stevel  *	Hardware/Software capabilities entry
    699     0    stevel  */
    700     0    stevel #ifndef	_ASM
    701     0    stevel typedef struct {
    702     0    stevel 	Elf32_Word	c_tag;		/* how to interpret value */
    703     0    stevel 	union {
    704     0    stevel 		Elf32_Word	c_val;
    705     0    stevel 		Elf32_Addr	c_ptr;
    706     0    stevel 	} c_un;
    707     0    stevel } Elf32_Cap;
    708     0    stevel 
    709     0    stevel #if defined(_LP64) || defined(_LONGLONG_TYPE)
    710     0    stevel typedef struct {
    711     0    stevel 	Elf64_Xword	c_tag;		/* how to interpret value */
    712     0    stevel 	union {
    713     0    stevel 		Elf64_Xword	c_val;
    714     0    stevel 		Elf64_Addr	c_ptr;
    715     0    stevel 	} c_un;
    716     0    stevel } Elf64_Cap;
    717     0    stevel #endif	/* defined(_LP64) || defined(_LONGLONG_TYPE) */
    718     0    stevel #endif
    719     0    stevel 
    720     0    stevel #define	CA_SUNW_NULL	0
    721     0    stevel #define	CA_SUNW_HW_1	1		/* first hardware capabilities entry */
    722     0    stevel #define	CA_SUNW_SF_1	2		/* first software capabilities entry */
    723     0    stevel 
    724     0    stevel /*
    725     0    stevel  * Define software capabilities (CA_SUNW_SF_1 values).  Note, hardware
    726     0    stevel  * capabilities (CA_SUNW_HW_1 values) are taken directly from sys/auxv_$MACH.h.
    727     0    stevel  */
    728  7833       Rod #define	SF1_SUNW_FPKNWN	0x001		/* frame pointer usage is known */
    729  7833       Rod #define	SF1_SUNW_FPUSED	0x002		/* frame pointer is in use */
    730  7833       Rod #define	SF1_SUNW_ADDR32	0x004		/* 32-bit address space requirement */
    731  7833       Rod #define	SF1_SUNW_MASK	0x007		/* known software capabilities mask */
    732     0    stevel 
    733     0    stevel /*
    734     0    stevel  *	Known values for note entry types (e_type == ET_CORE)
    735     0    stevel  */
    736     0    stevel 
    737     0    stevel #define	NT_PRSTATUS	1	/* prstatus_t	<sys/old_procfs.h>	*/
    738     0    stevel #define	NT_PRFPREG	2	/* prfpregset_t	<sys/old_procfs.h>	*/
    739     0    stevel #define	NT_PRPSINFO	3	/* prpsinfo_t	<sys/old_procfs.h>	*/
    740     0    stevel #define	NT_PRXREG	4	/* prxregset_t	<sys/procfs.h>		*/
    741     0    stevel #define	NT_PLATFORM	5	/* string from sysinfo(SI_PLATFORM)	*/
    742     0    stevel #define	NT_AUXV		6	/* auxv_t array	<sys/auxv.h>		*/
    743     0    stevel #define	NT_GWINDOWS	7	/* gwindows_t	SPARC only		*/
    744     0    stevel #define	NT_ASRS		8	/* asrset_t	SPARC V9 only		*/
    745     0    stevel #define	NT_LDT		9	/* ssd array	<sys/sysi86.h> IA32 only */
    746     0    stevel #define	NT_PSTATUS	10	/* pstatus_t	<sys/procfs.h>		*/
    747     0    stevel #define	NT_PSINFO	13	/* psinfo_t	<sys/procfs.h>		*/
    748     0    stevel #define	NT_PRCRED	14	/* prcred_t	<sys/procfs.h>		*/
    749     0    stevel #define	NT_UTSNAME	15	/* struct utsname <sys/utsname.h>	*/
    750     0    stevel #define	NT_LWPSTATUS	16	/* lwpstatus_t	<sys/procfs.h>		*/
    751     0    stevel #define	NT_LWPSINFO	17	/* lwpsinfo_t	<sys/procfs.h>		*/
    752     0    stevel #define	NT_PRPRIV	18	/* prpriv_t	<sys/procfs.h>		*/
    753     0    stevel #define	NT_PRPRIVINFO	19	/* priv_impl_info_t <sys/priv.h>	*/
    754     0    stevel #define	NT_CONTENT	20	/* core_content_t <sys/corectl.h>	*/
    755     0    stevel #define	NT_ZONENAME	21	/* string from getzonenamebyid(3C)	*/
    756  6635  ab196087 #define	NT_NUM		21
    757  6635  ab196087 
    758     0    stevel 
    759     0    stevel #ifdef _KERNEL
    760     0    stevel /*
    761     0    stevel  * The following routine checks the processor-specific
    762     0    stevel  * fields of an ELF header.
    763     0    stevel  */
    764     0    stevel int	elfheadcheck(unsigned char, Elf32_Half, Elf32_Word);
    765     0    stevel #endif
    766     0    stevel 
    767     0    stevel #ifdef	__cplusplus
    768     0    stevel }
    769     0    stevel #endif
    770     0    stevel 
    771     0    stevel #if defined(ELF_TARGET_ALL) || defined(ELF_TARGET_SPARC)
    772     0    stevel #include <sys/elf_SPARC.h>
    773     0    stevel #endif
    774     0    stevel 
    775     0    stevel #if defined(ELF_TARGET_ALL) || defined(ELF_TARGET_386)
    776     0    stevel #include <sys/elf_386.h>
    777     0    stevel #endif
    778     0    stevel 
    779     0    stevel #if defined(ELF_TARGET_ALL) || defined(ELF_TARGET_AMD64)
    780     0    stevel #include <sys/elf_amd64.h>
    781     0    stevel #endif
    782     0    stevel 
    783     0    stevel #endif	/* _SYS_ELF_H */
    784