Add elf.h to newlib
This is copied from musl (MIT license). This is newer and more thorough than that of FreeBSD currently shipped only on Cygwin. Signed-off-by: Yaakov Selkowitz <yselkowi@redhat.com>
This commit is contained in:
		
							
								
								
									
										3146
									
								
								newlib/libc/include/elf.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3146
									
								
								newlib/libc/include/elf.h
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,41 +0,0 @@ | ||||
| /*- | ||||
|  * Copyright (c) 2001 David E. O'Brien. | ||||
|  * All rights reserved. | ||||
|  * | ||||
|  * Redistribution and use in source and binary forms, with or without | ||||
|  * modification, are permitted provided that the following conditions | ||||
|  * are met: | ||||
|  * 1. Redistributions of source code must retain the above copyright | ||||
|  *    notice, this list of conditions and the following disclaimer. | ||||
|  * 2. Redistributions in binary form must reproduce the above copyright | ||||
|  *    notice, this list of conditions and the following disclaimer in the | ||||
|  *    documentation and/or other materials provided with the distribution. | ||||
|  * | ||||
|  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND | ||||
|  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||||
|  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||||
|  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE | ||||
|  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||||
|  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||||
|  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||||
|  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | ||||
|  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | ||||
|  * SUCH DAMAGE. | ||||
|  * | ||||
|  * $FreeBSD$ | ||||
|  */ | ||||
|  | ||||
| /* | ||||
|  * This is a Solaris compatibility header | ||||
|  */ | ||||
|  | ||||
| #ifndef	_ELF_H_ | ||||
| #define	_ELF_H_ | ||||
|  | ||||
| #include <sys/types.h> | ||||
| #include <machine/elf.h> | ||||
| #include <sys/elf32.h> | ||||
| #include <sys/elf64.h> | ||||
|  | ||||
| #endif /* !_ELF_H_ */ | ||||
| @@ -1,117 +0,0 @@ | ||||
| /*- | ||||
|  * Copyright (c) 1996-1997 John D. Polstra. | ||||
|  * All rights reserved. | ||||
|  * | ||||
|  * Redistribution and use in source and binary forms, with or without | ||||
|  * modification, are permitted provided that the following conditions | ||||
|  * are met: | ||||
|  * 1. Redistributions of source code must retain the above copyright | ||||
|  *    notice, this list of conditions and the following disclaimer. | ||||
|  * 2. Redistributions in binary form must reproduce the above copyright | ||||
|  *    notice, this list of conditions and the following disclaimer in the | ||||
|  *    documentation and/or other materials provided with the distribution. | ||||
|  * | ||||
|  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND | ||||
|  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||||
|  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||||
|  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE | ||||
|  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||||
|  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||||
|  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||||
|  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | ||||
|  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | ||||
|  * SUCH DAMAGE. | ||||
|  * | ||||
|  * $FreeBSD$ | ||||
|  */ | ||||
|  | ||||
| #ifndef _MACHINE_ELF_H_ | ||||
| #define	_MACHINE_ELF_H_ 1 | ||||
|  | ||||
| /* | ||||
|  * ELF definitions for the i386 architecture. | ||||
|  */ | ||||
|  | ||||
| #include <sys/elf32.h>	/* Definitions common to all 32 bit architectures. */ | ||||
| #if defined(__ELF_WORD_SIZE) && __ELF_WORD_SIZE == 64 | ||||
| #include <sys/elf64.h>	/* Definitions common to all 64 bit architectures. */ | ||||
| #endif | ||||
|  | ||||
| #ifndef __ELF_WORD_SIZE | ||||
| #define	__ELF_WORD_SIZE	32	/* Used by <sys/elf_generic.h> */ | ||||
| #endif | ||||
|  | ||||
| #include <sys/elf_generic.h> | ||||
|  | ||||
| #define	ELF_ARCH	EM_386 | ||||
|  | ||||
| #define	ELF_MACHINE_OK(x) ((x) == EM_386 || (x) == EM_486) | ||||
|  | ||||
| /* | ||||
|  * Auxiliary vector entries for passing information to the interpreter. | ||||
|  * | ||||
|  * The i386 supplement to the SVR4 ABI specification names this "auxv_t", | ||||
|  * but POSIX lays claim to all symbols ending with "_t". | ||||
|  */ | ||||
|  | ||||
| typedef struct {	/* Auxiliary vector entry on initial stack */ | ||||
| 	int	a_type;			/* Entry type. */ | ||||
| 	union { | ||||
| 		long	a_val;		/* Integer value. */ | ||||
| 		void	*a_ptr;		/* Address. */ | ||||
| 		void	(*a_fcn)(void);	/* Function pointer (not used). */ | ||||
| 	} a_un; | ||||
| } Elf32_Auxinfo; | ||||
|  | ||||
| #if __ELF_WORD_SIZE == 64 | ||||
| /* Fake for amd64 loader support */ | ||||
| typedef struct { | ||||
| 	int fake; | ||||
| } Elf64_Auxinfo; | ||||
| #endif | ||||
|  | ||||
| __ElfType(Auxinfo); | ||||
|  | ||||
| /* Values for a_type. */ | ||||
| #define	AT_NULL		0	/* Terminates the vector. */ | ||||
| #define	AT_IGNORE	1	/* Ignored entry. */ | ||||
| #define	AT_EXECFD	2	/* File descriptor of program to load. */ | ||||
| #define	AT_PHDR		3	/* Program header of program already loaded. */ | ||||
| #define	AT_PHENT	4	/* Size of each program header entry. */ | ||||
| #define	AT_PHNUM	5	/* Number of program header entries. */ | ||||
| #define	AT_PAGESZ	6	/* Page size in bytes. */ | ||||
| #define	AT_BASE		7	/* Interpreter's base address. */ | ||||
| #define	AT_FLAGS	8	/* Flags (unused for i386). */ | ||||
| #define	AT_ENTRY	9	/* Where interpreter should transfer control. */ | ||||
| #define	AT_NOTELF	10	/* Program is not ELF ?? */ | ||||
| #define	AT_UID		11	/* Real uid. */ | ||||
| #define	AT_EUID		12	/* Effective uid. */ | ||||
| #define	AT_GID		13	/* Real gid. */ | ||||
| #define	AT_EGID		14	/* Effective gid. */ | ||||
| #define	AT_EXECPATH	15	/* Path to the executable. */ | ||||
| #define	AT_CANARY	16	/* Canary for SSP. */ | ||||
| #define	AT_CANARYLEN	17	/* Length of the canary. */ | ||||
| #define	AT_OSRELDATE	18	/* OSRELDATE. */ | ||||
| #define	AT_NCPUS	19	/* Number of CPUs. */ | ||||
| #define	AT_PAGESIZES	20	/* Pagesizes. */ | ||||
| #define	AT_PAGESIZESLEN	21	/* Number of pagesizes. */ | ||||
| #define	AT_STACKPROT	23	/* Initial stack protection. */ | ||||
|  | ||||
| #define	AT_COUNT	24	/* Count of defined aux entry types. */ | ||||
|  | ||||
| /* | ||||
|  * Relocation types. | ||||
|  */ | ||||
|  | ||||
| #define	R_386_COUNT	38	/* Count of defined relocation types. */ | ||||
|  | ||||
| /* Define "machine" characteristics */ | ||||
| #define	ELF_TARG_CLASS	ELFCLASS32 | ||||
| #define	ELF_TARG_DATA	ELFDATA2LSB | ||||
| #define	ELF_TARG_MACH	EM_386 | ||||
| #define	ELF_TARG_VER	1 | ||||
|  | ||||
| #define	ET_DYN_LOAD_ADDR 0x01001000 | ||||
|  | ||||
| #endif /* !_MACHINE_ELF_H_ */ | ||||
| @@ -1,41 +0,0 @@ | ||||
| /*- | ||||
|  * Copyright (c) 2001 David E. O'Brien. | ||||
|  * All rights reserved. | ||||
|  * | ||||
|  * Redistribution and use in source and binary forms, with or without | ||||
|  * modification, are permitted provided that the following conditions | ||||
|  * are met: | ||||
|  * 1. Redistributions of source code must retain the above copyright | ||||
|  *    notice, this list of conditions and the following disclaimer. | ||||
|  * 2. Redistributions in binary form must reproduce the above copyright | ||||
|  *    notice, this list of conditions and the following disclaimer in the | ||||
|  *    documentation and/or other materials provided with the distribution. | ||||
|  * | ||||
|  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND | ||||
|  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||||
|  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||||
|  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE | ||||
|  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||||
|  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||||
|  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||||
|  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | ||||
|  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | ||||
|  * SUCH DAMAGE. | ||||
|  * | ||||
|  * $FreeBSD$ | ||||
|  */ | ||||
|  | ||||
| /* | ||||
|  * This is a Solaris compatibility header | ||||
|  */ | ||||
|  | ||||
| #ifndef	_SYS_ELF_H_ | ||||
| #define	_SYS_ELF_H_ | ||||
|  | ||||
| #include <sys/types.h> | ||||
| #include <machine/elf.h> | ||||
| #include <sys/elf32.h> | ||||
| #include <sys/elf64.h> | ||||
|  | ||||
| #endif /* !_SYS_ELF_H_ */ | ||||
| @@ -1,245 +0,0 @@ | ||||
| /*- | ||||
|  * Copyright (c) 1996-1998 John D. Polstra. | ||||
|  * All rights reserved. | ||||
|  * | ||||
|  * Redistribution and use in source and binary forms, with or without | ||||
|  * modification, are permitted provided that the following conditions | ||||
|  * are met: | ||||
|  * 1. Redistributions of source code must retain the above copyright | ||||
|  *    notice, this list of conditions and the following disclaimer. | ||||
|  * 2. Redistributions in binary form must reproduce the above copyright | ||||
|  *    notice, this list of conditions and the following disclaimer in the | ||||
|  *    documentation and/or other materials provided with the distribution. | ||||
|  * | ||||
|  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND | ||||
|  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||||
|  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||||
|  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE | ||||
|  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||||
|  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||||
|  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||||
|  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | ||||
|  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | ||||
|  * SUCH DAMAGE. | ||||
|  * | ||||
|  * $FreeBSD$ | ||||
|  */ | ||||
|  | ||||
| #ifndef _SYS_ELF32_H_ | ||||
| #define _SYS_ELF32_H_ 1 | ||||
|  | ||||
| #include <sys/elf_common.h> | ||||
|  | ||||
| /* | ||||
|  * ELF definitions common to all 32-bit architectures. | ||||
|  */ | ||||
|  | ||||
| typedef uint32_t	Elf32_Addr; | ||||
| typedef uint16_t	Elf32_Half; | ||||
| typedef uint32_t	Elf32_Off; | ||||
| typedef int32_t		Elf32_Sword; | ||||
| typedef uint32_t	Elf32_Word; | ||||
| typedef uint64_t	Elf32_Lword; | ||||
|  | ||||
| typedef Elf32_Word	Elf32_Hashelt; | ||||
|  | ||||
| /* Non-standard class-dependent datatype used for abstraction. */ | ||||
| typedef Elf32_Word	Elf32_Size; | ||||
| typedef Elf32_Sword	Elf32_Ssize; | ||||
|  | ||||
| /* | ||||
|  * ELF header. | ||||
|  */ | ||||
|  | ||||
| typedef struct { | ||||
| 	unsigned char	e_ident[EI_NIDENT];	/* File identification. */ | ||||
| 	Elf32_Half	e_type;		/* File type. */ | ||||
| 	Elf32_Half	e_machine;	/* Machine architecture. */ | ||||
| 	Elf32_Word	e_version;	/* ELF format version. */ | ||||
| 	Elf32_Addr	e_entry;	/* Entry point. */ | ||||
| 	Elf32_Off	e_phoff;	/* Program header file offset. */ | ||||
| 	Elf32_Off	e_shoff;	/* Section header file offset. */ | ||||
| 	Elf32_Word	e_flags;	/* Architecture-specific flags. */ | ||||
| 	Elf32_Half	e_ehsize;	/* Size of ELF header in bytes. */ | ||||
| 	Elf32_Half	e_phentsize;	/* Size of program header entry. */ | ||||
| 	Elf32_Half	e_phnum;	/* Number of program header entries. */ | ||||
| 	Elf32_Half	e_shentsize;	/* Size of section header entry. */ | ||||
| 	Elf32_Half	e_shnum;	/* Number of section header entries. */ | ||||
| 	Elf32_Half	e_shstrndx;	/* Section name strings section. */ | ||||
| } Elf32_Ehdr; | ||||
|  | ||||
| /* | ||||
|  * Section header. | ||||
|  */ | ||||
|  | ||||
| typedef struct { | ||||
| 	Elf32_Word	sh_name;	/* Section name (index into the | ||||
| 					   section header string table). */ | ||||
| 	Elf32_Word	sh_type;	/* Section type. */ | ||||
| 	Elf32_Word	sh_flags;	/* Section flags. */ | ||||
| 	Elf32_Addr	sh_addr;	/* Address in memory image. */ | ||||
| 	Elf32_Off	sh_offset;	/* Offset in file. */ | ||||
| 	Elf32_Word	sh_size;	/* Size in bytes. */ | ||||
| 	Elf32_Word	sh_link;	/* Index of a related section. */ | ||||
| 	Elf32_Word	sh_info;	/* Depends on section type. */ | ||||
| 	Elf32_Word	sh_addralign;	/* Alignment in bytes. */ | ||||
| 	Elf32_Word	sh_entsize;	/* Size of each entry in section. */ | ||||
| } Elf32_Shdr; | ||||
|  | ||||
| /* | ||||
|  * Program header. | ||||
|  */ | ||||
|  | ||||
| typedef struct { | ||||
| 	Elf32_Word	p_type;		/* Entry type. */ | ||||
| 	Elf32_Off	p_offset;	/* File offset of contents. */ | ||||
| 	Elf32_Addr	p_vaddr;	/* Virtual address in memory image. */ | ||||
| 	Elf32_Addr	p_paddr;	/* Physical address (not used). */ | ||||
| 	Elf32_Word	p_filesz;	/* Size of contents in file. */ | ||||
| 	Elf32_Word	p_memsz;	/* Size of contents in memory. */ | ||||
| 	Elf32_Word	p_flags;	/* Access permission flags. */ | ||||
| 	Elf32_Word	p_align;	/* Alignment in memory and file. */ | ||||
| } Elf32_Phdr; | ||||
|  | ||||
| /* | ||||
|  * Dynamic structure.  The ".dynamic" section contains an array of them. | ||||
|  */ | ||||
|  | ||||
| typedef struct { | ||||
| 	Elf32_Sword	d_tag;		/* Entry type. */ | ||||
| 	union { | ||||
| 		Elf32_Word	d_val;	/* Integer value. */ | ||||
| 		Elf32_Addr	d_ptr;	/* Address value. */ | ||||
| 	} d_un; | ||||
| } Elf32_Dyn; | ||||
|  | ||||
| /* | ||||
|  * Relocation entries. | ||||
|  */ | ||||
|  | ||||
| /* Relocations that don't need an addend field. */ | ||||
| typedef struct { | ||||
| 	Elf32_Addr	r_offset;	/* Location to be relocated. */ | ||||
| 	Elf32_Word	r_info;		/* Relocation type and symbol index. */ | ||||
| } Elf32_Rel; | ||||
|  | ||||
| /* Relocations that need an addend field. */ | ||||
| typedef struct { | ||||
| 	Elf32_Addr	r_offset;	/* Location to be relocated. */ | ||||
| 	Elf32_Word	r_info;		/* Relocation type and symbol index. */ | ||||
| 	Elf32_Sword	r_addend;	/* Addend. */ | ||||
| } Elf32_Rela; | ||||
|  | ||||
| /* Macros for accessing the fields of r_info. */ | ||||
| #define ELF32_R_SYM(info)	((info) >> 8) | ||||
| #define ELF32_R_TYPE(info)	((unsigned char)(info)) | ||||
|  | ||||
| /* Macro for constructing r_info from field values. */ | ||||
| #define ELF32_R_INFO(sym, type)	(((sym) << 8) + (unsigned char)(type)) | ||||
|  | ||||
| /* | ||||
|  *	Note entry header | ||||
|  */ | ||||
| typedef Elf_Note Elf32_Nhdr; | ||||
|  | ||||
| /* | ||||
|  *	Move entry | ||||
|  */ | ||||
| typedef struct { | ||||
| 	Elf32_Lword	m_value;	/* symbol value */ | ||||
| 	Elf32_Word 	m_info;		/* size + index */ | ||||
| 	Elf32_Word	m_poffset;	/* symbol offset */ | ||||
| 	Elf32_Half	m_repeat;	/* repeat count */ | ||||
| 	Elf32_Half	m_stride;	/* stride info */ | ||||
| } Elf32_Move; | ||||
|  | ||||
| /* | ||||
|  *	The macros compose and decompose values for Move.r_info | ||||
|  * | ||||
|  *	sym = ELF32_M_SYM(M.m_info) | ||||
|  *	size = ELF32_M_SIZE(M.m_info) | ||||
|  *	M.m_info = ELF32_M_INFO(sym, size) | ||||
|  */ | ||||
| #define	ELF32_M_SYM(info)	((info)>>8) | ||||
| #define	ELF32_M_SIZE(info)	((unsigned char)(info)) | ||||
| #define	ELF32_M_INFO(sym, size)	(((sym)<<8)+(unsigned char)(size)) | ||||
|  | ||||
| /* | ||||
|  *	Hardware/Software capabilities entry | ||||
|  */ | ||||
| typedef struct { | ||||
| 	Elf32_Word	c_tag;		/* how to interpret value */ | ||||
| 	union { | ||||
| 		Elf32_Word	c_val; | ||||
| 		Elf32_Addr	c_ptr; | ||||
| 	} c_un; | ||||
| } Elf32_Cap; | ||||
|  | ||||
| /* | ||||
|  * Symbol table entries. | ||||
|  */ | ||||
|  | ||||
| typedef struct { | ||||
| 	Elf32_Word	st_name;	/* String table index of name. */ | ||||
| 	Elf32_Addr	st_value;	/* Symbol value. */ | ||||
| 	Elf32_Word	st_size;	/* Size of associated object. */ | ||||
| 	unsigned char	st_info;	/* Type and binding information. */ | ||||
| 	unsigned char	st_other;	/* Reserved (not used). */ | ||||
| 	Elf32_Half	st_shndx;	/* Section index of symbol. */ | ||||
| } Elf32_Sym; | ||||
|  | ||||
| /* Macros for accessing the fields of st_info. */ | ||||
| #define ELF32_ST_BIND(info)		((info) >> 4) | ||||
| #define ELF32_ST_TYPE(info)		((info) & 0xf) | ||||
|  | ||||
| /* Macro for constructing st_info from field values. */ | ||||
| #define ELF32_ST_INFO(bind, type)	(((bind) << 4) + ((type) & 0xf)) | ||||
|  | ||||
| /* Macro for accessing the fields of st_other. */ | ||||
| #define ELF32_ST_VISIBILITY(oth)	((oth) & 0x3) | ||||
|  | ||||
| /* Structures used by Sun & GNU symbol versioning. */ | ||||
| typedef struct | ||||
| { | ||||
| 	Elf32_Half	vd_version; | ||||
| 	Elf32_Half	vd_flags; | ||||
| 	Elf32_Half	vd_ndx; | ||||
| 	Elf32_Half	vd_cnt; | ||||
| 	Elf32_Word	vd_hash; | ||||
| 	Elf32_Word	vd_aux; | ||||
| 	Elf32_Word	vd_next; | ||||
| } Elf32_Verdef; | ||||
|  | ||||
| typedef struct | ||||
| { | ||||
| 	Elf32_Word	vda_name; | ||||
| 	Elf32_Word	vda_next; | ||||
| } Elf32_Verdaux; | ||||
|  | ||||
| typedef struct | ||||
| { | ||||
| 	Elf32_Half	vn_version; | ||||
| 	Elf32_Half	vn_cnt; | ||||
| 	Elf32_Word	vn_file; | ||||
| 	Elf32_Word	vn_aux; | ||||
| 	Elf32_Word	vn_next; | ||||
| } Elf32_Verneed; | ||||
|  | ||||
| typedef struct | ||||
| { | ||||
| 	Elf32_Word	vna_hash; | ||||
| 	Elf32_Half	vna_flags; | ||||
| 	Elf32_Half	vna_other; | ||||
| 	Elf32_Word	vna_name; | ||||
| 	Elf32_Word	vna_next; | ||||
| } Elf32_Vernaux; | ||||
|  | ||||
| typedef Elf32_Half Elf32_Versym; | ||||
|  | ||||
| typedef struct { | ||||
| 	Elf32_Half	si_boundto;	/* direct bindings - symbol bound to */ | ||||
| 	Elf32_Half	si_flags;	/* per symbol flags */ | ||||
| } Elf32_Syminfo; | ||||
|  | ||||
| #endif /* !_SYS_ELF32_H_ */ | ||||
| @@ -1,248 +0,0 @@ | ||||
| /*- | ||||
|  * Copyright (c) 1996-1998 John D. Polstra. | ||||
|  * All rights reserved. | ||||
|  * | ||||
|  * Redistribution and use in source and binary forms, with or without | ||||
|  * modification, are permitted provided that the following conditions | ||||
|  * are met: | ||||
|  * 1. Redistributions of source code must retain the above copyright | ||||
|  *    notice, this list of conditions and the following disclaimer. | ||||
|  * 2. Redistributions in binary form must reproduce the above copyright | ||||
|  *    notice, this list of conditions and the following disclaimer in the | ||||
|  *    documentation and/or other materials provided with the distribution. | ||||
|  * | ||||
|  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND | ||||
|  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||||
|  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||||
|  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE | ||||
|  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||||
|  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||||
|  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||||
|  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | ||||
|  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | ||||
|  * SUCH DAMAGE. | ||||
|  * | ||||
|  * $FreeBSD$ | ||||
|  */ | ||||
|  | ||||
| #ifndef _SYS_ELF64_H_ | ||||
| #define _SYS_ELF64_H_ 1 | ||||
|  | ||||
| #include <sys/elf_common.h> | ||||
|  | ||||
| /* | ||||
|  * ELF definitions common to all 64-bit architectures. | ||||
|  */ | ||||
|  | ||||
| typedef uint64_t	Elf64_Addr; | ||||
| typedef uint16_t	Elf64_Half; | ||||
| typedef uint64_t	Elf64_Off; | ||||
| typedef int32_t		Elf64_Sword; | ||||
| typedef int64_t		Elf64_Sxword; | ||||
| typedef uint32_t	Elf64_Word; | ||||
| typedef uint64_t	Elf64_Lword; | ||||
| typedef uint64_t	Elf64_Xword; | ||||
|  | ||||
| /* | ||||
|  * Types of dynamic symbol hash table bucket and chain elements. | ||||
|  * | ||||
|  * This is inconsistent among 64 bit architectures, so a machine dependent | ||||
|  * typedef is required. | ||||
|  */ | ||||
|  | ||||
| typedef Elf64_Word	Elf64_Hashelt; | ||||
|  | ||||
| /* Non-standard class-dependent datatype used for abstraction. */ | ||||
| typedef Elf64_Xword	Elf64_Size; | ||||
| typedef Elf64_Sxword	Elf64_Ssize; | ||||
|  | ||||
| /* | ||||
|  * ELF header. | ||||
|  */ | ||||
|  | ||||
| typedef struct { | ||||
| 	unsigned char	e_ident[EI_NIDENT];	/* File identification. */ | ||||
| 	Elf64_Half	e_type;		/* File type. */ | ||||
| 	Elf64_Half	e_machine;	/* Machine architecture. */ | ||||
| 	Elf64_Word	e_version;	/* ELF format version. */ | ||||
| 	Elf64_Addr	e_entry;	/* Entry point. */ | ||||
| 	Elf64_Off	e_phoff;	/* Program header file offset. */ | ||||
| 	Elf64_Off	e_shoff;	/* Section header file offset. */ | ||||
| 	Elf64_Word	e_flags;	/* Architecture-specific flags. */ | ||||
| 	Elf64_Half	e_ehsize;	/* Size of ELF header in bytes. */ | ||||
| 	Elf64_Half	e_phentsize;	/* Size of program header entry. */ | ||||
| 	Elf64_Half	e_phnum;	/* Number of program header entries. */ | ||||
| 	Elf64_Half	e_shentsize;	/* Size of section header entry. */ | ||||
| 	Elf64_Half	e_shnum;	/* Number of section header entries. */ | ||||
| 	Elf64_Half	e_shstrndx;	/* Section name strings section. */ | ||||
| } Elf64_Ehdr; | ||||
|  | ||||
| /* | ||||
|  * Section header. | ||||
|  */ | ||||
|  | ||||
| typedef struct { | ||||
| 	Elf64_Word	sh_name;	/* Section name (index into the | ||||
| 					   section header string table). */ | ||||
| 	Elf64_Word	sh_type;	/* Section type. */ | ||||
| 	Elf64_Xword	sh_flags;	/* Section flags. */ | ||||
| 	Elf64_Addr	sh_addr;	/* Address in memory image. */ | ||||
| 	Elf64_Off	sh_offset;	/* Offset in file. */ | ||||
| 	Elf64_Xword	sh_size;	/* Size in bytes. */ | ||||
| 	Elf64_Word	sh_link;	/* Index of a related section. */ | ||||
| 	Elf64_Word	sh_info;	/* Depends on section type. */ | ||||
| 	Elf64_Xword	sh_addralign;	/* Alignment in bytes. */ | ||||
| 	Elf64_Xword	sh_entsize;	/* Size of each entry in section. */ | ||||
| } Elf64_Shdr; | ||||
|  | ||||
| /* | ||||
|  * Program header. | ||||
|  */ | ||||
|  | ||||
| typedef struct { | ||||
| 	Elf64_Word	p_type;		/* Entry type. */ | ||||
| 	Elf64_Word	p_flags;	/* Access permission flags. */ | ||||
| 	Elf64_Off	p_offset;	/* File offset of contents. */ | ||||
| 	Elf64_Addr	p_vaddr;	/* Virtual address in memory image. */ | ||||
| 	Elf64_Addr	p_paddr;	/* Physical address (not used). */ | ||||
| 	Elf64_Xword	p_filesz;	/* Size of contents in file. */ | ||||
| 	Elf64_Xword	p_memsz;	/* Size of contents in memory. */ | ||||
| 	Elf64_Xword	p_align;	/* Alignment in memory and file. */ | ||||
| } Elf64_Phdr; | ||||
|  | ||||
| /* | ||||
|  * Dynamic structure.  The ".dynamic" section contains an array of them. | ||||
|  */ | ||||
|  | ||||
| typedef struct { | ||||
| 	Elf64_Sxword	d_tag;		/* Entry type. */ | ||||
| 	union { | ||||
| 		Elf64_Xword	d_val;	/* Integer value. */ | ||||
| 		Elf64_Addr	d_ptr;	/* Address value. */ | ||||
| 	} d_un; | ||||
| } Elf64_Dyn; | ||||
|  | ||||
| /* | ||||
|  * Relocation entries. | ||||
|  */ | ||||
|  | ||||
| /* Relocations that don't need an addend field. */ | ||||
| typedef struct { | ||||
| 	Elf64_Addr	r_offset;	/* Location to be relocated. */ | ||||
| 	Elf64_Xword	r_info;		/* Relocation type and symbol index. */ | ||||
| } Elf64_Rel; | ||||
|  | ||||
| /* Relocations that need an addend field. */ | ||||
| typedef struct { | ||||
| 	Elf64_Addr	r_offset;	/* Location to be relocated. */ | ||||
| 	Elf64_Xword	r_info;		/* Relocation type and symbol index. */ | ||||
| 	Elf64_Sxword	r_addend;	/* Addend. */ | ||||
| } Elf64_Rela; | ||||
|  | ||||
| /* Macros for accessing the fields of r_info. */ | ||||
| #define	ELF64_R_SYM(info)	((info) >> 32) | ||||
| #define	ELF64_R_TYPE(info)	((info) & 0xffffffffL) | ||||
|  | ||||
| /* Macro for constructing r_info from field values. */ | ||||
| #define	ELF64_R_INFO(sym, type)	(((sym) << 32) + ((type) & 0xffffffffL)) | ||||
|  | ||||
| #define	ELF64_R_TYPE_DATA(info)	(((Elf64_Xword)(info)<<32)>>40) | ||||
| #define	ELF64_R_TYPE_ID(info)	(((Elf64_Xword)(info)<<56)>>56) | ||||
| #define	ELF64_R_TYPE_INFO(data, type)	\ | ||||
| 				(((Elf64_Xword)(data)<<8)+(Elf64_Xword)(type)) | ||||
|  | ||||
| /* | ||||
|  *	Note entry header | ||||
|  */ | ||||
| typedef Elf_Note Elf64_Nhdr; | ||||
|  | ||||
| /* | ||||
|  *	Move entry | ||||
|  */ | ||||
| typedef struct { | ||||
| 	Elf64_Lword	m_value;	/* symbol value */ | ||||
| 	Elf64_Xword 	m_info;		/* size + index */ | ||||
| 	Elf64_Xword	m_poffset;	/* symbol offset */ | ||||
| 	Elf64_Half	m_repeat;	/* repeat count */ | ||||
| 	Elf64_Half	m_stride;	/* stride info */ | ||||
| } Elf64_Move; | ||||
|  | ||||
| #define	ELF64_M_SYM(info)	((info)>>8) | ||||
| #define	ELF64_M_SIZE(info)	((unsigned char)(info)) | ||||
| #define	ELF64_M_INFO(sym, size)	(((sym)<<8)+(unsigned char)(size)) | ||||
|  | ||||
| /* | ||||
|  *	Hardware/Software capabilities entry | ||||
|  */ | ||||
| typedef struct { | ||||
| 	Elf64_Xword	c_tag;		/* how to interpret value */ | ||||
| 	union { | ||||
| 		Elf64_Xword	c_val; | ||||
| 		Elf64_Addr	c_ptr; | ||||
| 	} c_un; | ||||
| } Elf64_Cap; | ||||
|  | ||||
| /* | ||||
|  * Symbol table entries. | ||||
|  */ | ||||
|  | ||||
| typedef struct { | ||||
| 	Elf64_Word	st_name;	/* String table index of name. */ | ||||
| 	unsigned char	st_info;	/* Type and binding information. */ | ||||
| 	unsigned char	st_other;	/* Reserved (not used). */ | ||||
| 	Elf64_Half	st_shndx;	/* Section index of symbol. */ | ||||
| 	Elf64_Addr	st_value;	/* Symbol value. */ | ||||
| 	Elf64_Xword	st_size;	/* Size of associated object. */ | ||||
| } Elf64_Sym; | ||||
|  | ||||
| /* Macros for accessing the fields of st_info. */ | ||||
| #define	ELF64_ST_BIND(info)		((info) >> 4) | ||||
| #define	ELF64_ST_TYPE(info)		((info) & 0xf) | ||||
|  | ||||
| /* Macro for constructing st_info from field values. */ | ||||
| #define	ELF64_ST_INFO(bind, type)	(((bind) << 4) + ((type) & 0xf)) | ||||
|  | ||||
| /* Macro for accessing the fields of st_other. */ | ||||
| #define	ELF64_ST_VISIBILITY(oth)	((oth) & 0x3) | ||||
|  | ||||
| /* Structures used by Sun & GNU-style symbol versioning. */ | ||||
| typedef struct { | ||||
| 	Elf64_Half	vd_version; | ||||
| 	Elf64_Half	vd_flags; | ||||
| 	Elf64_Half	vd_ndx; | ||||
| 	Elf64_Half	vd_cnt; | ||||
| 	Elf64_Word	vd_hash; | ||||
| 	Elf64_Word	vd_aux; | ||||
| 	Elf64_Word	vd_next; | ||||
| } Elf64_Verdef; | ||||
|  | ||||
| typedef struct { | ||||
| 	Elf64_Word	vda_name; | ||||
| 	Elf64_Word	vda_next; | ||||
| } Elf64_Verdaux; | ||||
|  | ||||
| typedef struct { | ||||
| 	Elf64_Half	vn_version; | ||||
| 	Elf64_Half	vn_cnt; | ||||
| 	Elf64_Word	vn_file; | ||||
| 	Elf64_Word	vn_aux; | ||||
| 	Elf64_Word	vn_next; | ||||
| } Elf64_Verneed; | ||||
|  | ||||
| typedef struct { | ||||
| 	Elf64_Word	vna_hash; | ||||
| 	Elf64_Half	vna_flags; | ||||
| 	Elf64_Half	vna_other; | ||||
| 	Elf64_Word	vna_name; | ||||
| 	Elf64_Word	vna_next; | ||||
| } Elf64_Vernaux; | ||||
|  | ||||
| typedef Elf64_Half Elf64_Versym; | ||||
|  | ||||
| typedef struct { | ||||
| 	Elf64_Half	si_boundto;	/* direct bindings - symbol bound to */ | ||||
| 	Elf64_Half	si_flags;	/* per symbol flags */ | ||||
| } Elf64_Syminfo; | ||||
|  | ||||
| #endif /* !_SYS_ELF64_H_ */ | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -1,88 +0,0 @@ | ||||
| /*- | ||||
|  * Copyright (c) 1998 John D. Polstra. | ||||
|  * All rights reserved. | ||||
|  * | ||||
|  * Redistribution and use in source and binary forms, with or without | ||||
|  * modification, are permitted provided that the following conditions | ||||
|  * are met: | ||||
|  * 1. Redistributions of source code must retain the above copyright | ||||
|  *    notice, this list of conditions and the following disclaimer. | ||||
|  * 2. Redistributions in binary form must reproduce the above copyright | ||||
|  *    notice, this list of conditions and the following disclaimer in the | ||||
|  *    documentation and/or other materials provided with the distribution. | ||||
|  * | ||||
|  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND | ||||
|  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||||
|  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | ||||
|  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE | ||||
|  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL | ||||
|  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||||
|  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||||
|  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||||
|  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | ||||
|  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | ||||
|  * SUCH DAMAGE. | ||||
|  * | ||||
|  * $FreeBSD$ | ||||
|  */ | ||||
|  | ||||
| #ifndef _SYS_ELF_GENERIC_H_ | ||||
| #define	_SYS_ELF_GENERIC_H_ 1 | ||||
|  | ||||
| #include <sys/cdefs.h> | ||||
|  | ||||
| /* | ||||
|  * Definitions of generic ELF names which relieve applications from | ||||
|  * needing to know the word size. | ||||
|  */ | ||||
|  | ||||
| #if __ELF_WORD_SIZE != 32 && __ELF_WORD_SIZE != 64 | ||||
| #error "__ELF_WORD_SIZE must be defined as 32 or 64" | ||||
| #endif | ||||
|  | ||||
| #define	ELF_CLASS	__CONCAT(ELFCLASS,__ELF_WORD_SIZE) | ||||
|  | ||||
| #if BYTE_ORDER == LITTLE_ENDIAN | ||||
| #define	ELF_DATA	ELFDATA2LSB | ||||
| #elif BYTE_ORDER == BIG_ENDIAN | ||||
| #define	ELF_DATA	ELFDATA2MSB | ||||
| #else | ||||
| #error "Unknown byte order" | ||||
| #endif | ||||
|  | ||||
| #define	__elfN(x)	__CONCAT(__CONCAT(__CONCAT(elf,__ELF_WORD_SIZE),_),x) | ||||
| #define	__ElfN(x)	__CONCAT(__CONCAT(__CONCAT(Elf,__ELF_WORD_SIZE),_),x) | ||||
| #define	__ELFN(x)	__CONCAT(__CONCAT(__CONCAT(ELF,__ELF_WORD_SIZE),_),x) | ||||
| #define	__ElfType(x)	typedef __ElfN(x) __CONCAT(Elf_,x) | ||||
|  | ||||
| __ElfType(Addr); | ||||
| __ElfType(Half); | ||||
| __ElfType(Off); | ||||
| __ElfType(Sword); | ||||
| __ElfType(Word); | ||||
| __ElfType(Ehdr); | ||||
| __ElfType(Shdr); | ||||
| __ElfType(Phdr); | ||||
| __ElfType(Dyn); | ||||
| __ElfType(Rel); | ||||
| __ElfType(Rela); | ||||
| __ElfType(Sym); | ||||
| __ElfType(Verdef); | ||||
| __ElfType(Verdaux); | ||||
| __ElfType(Verneed); | ||||
| __ElfType(Vernaux); | ||||
| __ElfType(Versym); | ||||
|  | ||||
| /* Non-standard ELF types. */ | ||||
| __ElfType(Hashelt); | ||||
| __ElfType(Size); | ||||
| __ElfType(Ssize); | ||||
|  | ||||
| #define	ELF_R_SYM	__ELFN(R_SYM) | ||||
| #define	ELF_R_TYPE	__ELFN(R_TYPE) | ||||
| #define	ELF_R_INFO	__ELFN(R_INFO) | ||||
| #define	ELF_ST_BIND	__ELFN(ST_BIND) | ||||
| #define	ELF_ST_TYPE	__ELFN(ST_TYPE) | ||||
| #define	ELF_ST_INFO	__ELFN(ST_INFO) | ||||
|  | ||||
| #endif /* !_SYS_ELF_GENERIC_H_ */ | ||||
		Reference in New Issue
	
	Block a user