diff options
Diffstat (limited to 'include/linux/elf.h')
| -rw-r--r-- | include/linux/elf.h | 414 | 
1 files changed, 1 insertions, 413 deletions
diff --git a/include/linux/elf.h b/include/linux/elf.h index 59ef40650e1..8c9048e3346 100644 --- a/include/linux/elf.h +++ b/include/linux/elf.h @@ -1,420 +1,9 @@  #ifndef _LINUX_ELF_H  #define _LINUX_ELF_H -#include <linux/types.h> -#include <linux/elf-em.h> -#ifdef __KERNEL__  #include <asm/elf.h> -#endif - -/* 32-bit ELF base types. */ -typedef __u32	Elf32_Addr; -typedef __u16	Elf32_Half; -typedef __u32	Elf32_Off; -typedef __s32	Elf32_Sword; -typedef __u32	Elf32_Word; - -/* 64-bit ELF base types. */ -typedef __u64	Elf64_Addr; -typedef __u16	Elf64_Half; -typedef __s16	Elf64_SHalf; -typedef __u64	Elf64_Off; -typedef __s32	Elf64_Sword; -typedef __u32	Elf64_Word; -typedef __u64	Elf64_Xword; -typedef __s64	Elf64_Sxword; - -/* These constants are for the segment types stored in the image headers */ -#define PT_NULL    0 -#define PT_LOAD    1 -#define PT_DYNAMIC 2 -#define PT_INTERP  3 -#define PT_NOTE    4 -#define PT_SHLIB   5 -#define PT_PHDR    6 -#define PT_TLS     7               /* Thread local storage segment */ -#define PT_LOOS    0x60000000      /* OS-specific */ -#define PT_HIOS    0x6fffffff      /* OS-specific */ -#define PT_LOPROC  0x70000000 -#define PT_HIPROC  0x7fffffff -#define PT_GNU_EH_FRAME		0x6474e550 - -#define PT_GNU_STACK	(PT_LOOS + 0x474e551) - -/* - * Extended Numbering - * - * If the real number of program header table entries is larger than - * or equal to PN_XNUM(0xffff), it is set to sh_info field of the - * section header at index 0, and PN_XNUM is set to e_phnum - * field. Otherwise, the section header at index 0 is zero - * initialized, if it exists. - * - * Specifications are available in: - * - * - Sun microsystems: Linker and Libraries. - *   Part No: 817-1984-17, September 2008. - *   URL: http://docs.sun.com/app/docs/doc/817-1984 - * - * - System V ABI AMD64 Architecture Processor Supplement - *   Draft Version 0.99., - *   May 11, 2009. - *   URL: http://www.x86-64.org/ - */ -#define PN_XNUM 0xffff - -/* These constants define the different elf file types */ -#define ET_NONE   0 -#define ET_REL    1 -#define ET_EXEC   2 -#define ET_DYN    3 -#define ET_CORE   4 -#define ET_LOPROC 0xff00 -#define ET_HIPROC 0xffff - -/* This is the info that is needed to parse the dynamic section of the file */ -#define DT_NULL		0 -#define DT_NEEDED	1 -#define DT_PLTRELSZ	2 -#define DT_PLTGOT	3 -#define DT_HASH		4 -#define DT_STRTAB	5 -#define DT_SYMTAB	6 -#define DT_RELA		7 -#define DT_RELASZ	8 -#define DT_RELAENT	9 -#define DT_STRSZ	10 -#define DT_SYMENT	11 -#define DT_INIT		12 -#define DT_FINI		13 -#define DT_SONAME	14 -#define DT_RPATH 	15 -#define DT_SYMBOLIC	16 -#define DT_REL	        17 -#define DT_RELSZ	18 -#define DT_RELENT	19 -#define DT_PLTREL	20 -#define DT_DEBUG	21 -#define DT_TEXTREL	22 -#define DT_JMPREL	23 -#define DT_ENCODING	32 -#define OLD_DT_LOOS	0x60000000 -#define DT_LOOS		0x6000000d -#define DT_HIOS		0x6ffff000 -#define DT_VALRNGLO	0x6ffffd00 -#define DT_VALRNGHI	0x6ffffdff -#define DT_ADDRRNGLO	0x6ffffe00 -#define DT_ADDRRNGHI	0x6ffffeff -#define DT_VERSYM	0x6ffffff0 -#define DT_RELACOUNT	0x6ffffff9 -#define DT_RELCOUNT	0x6ffffffa -#define DT_FLAGS_1	0x6ffffffb -#define DT_VERDEF	0x6ffffffc -#define	DT_VERDEFNUM	0x6ffffffd -#define DT_VERNEED	0x6ffffffe -#define	DT_VERNEEDNUM	0x6fffffff -#define OLD_DT_HIOS     0x6fffffff -#define DT_LOPROC	0x70000000 -#define DT_HIPROC	0x7fffffff - -/* This info is needed when parsing the symbol table */ -#define STB_LOCAL  0 -#define STB_GLOBAL 1 -#define STB_WEAK   2 - -#define STT_NOTYPE  0 -#define STT_OBJECT  1 -#define STT_FUNC    2 -#define STT_SECTION 3 -#define STT_FILE    4 -#define STT_COMMON  5 -#define STT_TLS     6 - -#define ELF_ST_BIND(x)		((x) >> 4) -#define ELF_ST_TYPE(x)		(((unsigned int) x) & 0xf) -#define ELF32_ST_BIND(x)	ELF_ST_BIND(x) -#define ELF32_ST_TYPE(x)	ELF_ST_TYPE(x) -#define ELF64_ST_BIND(x)	ELF_ST_BIND(x) -#define ELF64_ST_TYPE(x)	ELF_ST_TYPE(x) - -typedef struct dynamic{ -  Elf32_Sword d_tag; -  union{ -    Elf32_Sword	d_val; -    Elf32_Addr	d_ptr; -  } d_un; -} Elf32_Dyn; - -typedef struct { -  Elf64_Sxword d_tag;		/* entry tag value */ -  union { -    Elf64_Xword d_val; -    Elf64_Addr d_ptr; -  } d_un; -} Elf64_Dyn; - -/* The following are used with relocations */ -#define ELF32_R_SYM(x) ((x) >> 8) -#define ELF32_R_TYPE(x) ((x) & 0xff) - -#define ELF64_R_SYM(i)			((i) >> 32) -#define ELF64_R_TYPE(i)			((i) & 0xffffffff) - -typedef struct elf32_rel { -  Elf32_Addr	r_offset; -  Elf32_Word	r_info; -} Elf32_Rel; - -typedef struct elf64_rel { -  Elf64_Addr r_offset;	/* Location at which to apply the action */ -  Elf64_Xword r_info;	/* index and type of relocation */ -} Elf64_Rel; - -typedef struct elf32_rela{ -  Elf32_Addr	r_offset; -  Elf32_Word	r_info; -  Elf32_Sword	r_addend; -} Elf32_Rela; - -typedef struct elf64_rela { -  Elf64_Addr r_offset;	/* Location at which to apply the action */ -  Elf64_Xword r_info;	/* index and type of relocation */ -  Elf64_Sxword r_addend;	/* Constant addend used to compute value */ -} Elf64_Rela; - -typedef struct elf32_sym{ -  Elf32_Word	st_name; -  Elf32_Addr	st_value; -  Elf32_Word	st_size; -  unsigned char	st_info; -  unsigned char	st_other; -  Elf32_Half	st_shndx; -} Elf32_Sym; - -typedef struct elf64_sym { -  Elf64_Word st_name;		/* Symbol name, index in string tbl */ -  unsigned char	st_info;	/* Type and binding attributes */ -  unsigned char	st_other;	/* No defined meaning, 0 */ -  Elf64_Half st_shndx;		/* Associated section index */ -  Elf64_Addr st_value;		/* Value of the symbol */ -  Elf64_Xword st_size;		/* Associated symbol size */ -} Elf64_Sym; - - -#define EI_NIDENT	16 - -typedef struct elf32_hdr{ -  unsigned char	e_ident[EI_NIDENT]; -  Elf32_Half	e_type; -  Elf32_Half	e_machine; -  Elf32_Word	e_version; -  Elf32_Addr	e_entry;  /* Entry point */ -  Elf32_Off	e_phoff; -  Elf32_Off	e_shoff; -  Elf32_Word	e_flags; -  Elf32_Half	e_ehsize; -  Elf32_Half	e_phentsize; -  Elf32_Half	e_phnum; -  Elf32_Half	e_shentsize; -  Elf32_Half	e_shnum; -  Elf32_Half	e_shstrndx; -} Elf32_Ehdr; - -typedef struct elf64_hdr { -  unsigned char	e_ident[EI_NIDENT];	/* ELF "magic number" */ -  Elf64_Half e_type; -  Elf64_Half e_machine; -  Elf64_Word e_version; -  Elf64_Addr e_entry;		/* Entry point virtual address */ -  Elf64_Off e_phoff;		/* Program header table file offset */ -  Elf64_Off e_shoff;		/* Section header table file offset */ -  Elf64_Word e_flags; -  Elf64_Half e_ehsize; -  Elf64_Half e_phentsize; -  Elf64_Half e_phnum; -  Elf64_Half e_shentsize; -  Elf64_Half e_shnum; -  Elf64_Half e_shstrndx; -} Elf64_Ehdr; - -/* These constants define the permissions on sections in the program -   header, p_flags. */ -#define PF_R		0x4 -#define PF_W		0x2 -#define PF_X		0x1 - -typedef struct elf32_phdr{ -  Elf32_Word	p_type; -  Elf32_Off	p_offset; -  Elf32_Addr	p_vaddr; -  Elf32_Addr	p_paddr; -  Elf32_Word	p_filesz; -  Elf32_Word	p_memsz; -  Elf32_Word	p_flags; -  Elf32_Word	p_align; -} Elf32_Phdr; - -typedef struct elf64_phdr { -  Elf64_Word p_type; -  Elf64_Word p_flags; -  Elf64_Off p_offset;		/* Segment file offset */ -  Elf64_Addr p_vaddr;		/* Segment virtual address */ -  Elf64_Addr p_paddr;		/* Segment physical address */ -  Elf64_Xword p_filesz;		/* Segment size in file */ -  Elf64_Xword p_memsz;		/* Segment size in memory */ -  Elf64_Xword p_align;		/* Segment alignment, file & memory */ -} Elf64_Phdr; - -/* sh_type */ -#define SHT_NULL	0 -#define SHT_PROGBITS	1 -#define SHT_SYMTAB	2 -#define SHT_STRTAB	3 -#define SHT_RELA	4 -#define SHT_HASH	5 -#define SHT_DYNAMIC	6 -#define SHT_NOTE	7 -#define SHT_NOBITS	8 -#define SHT_REL		9 -#define SHT_SHLIB	10 -#define SHT_DYNSYM	11 -#define SHT_NUM		12 -#define SHT_LOPROC	0x70000000 -#define SHT_HIPROC	0x7fffffff -#define SHT_LOUSER	0x80000000 -#define SHT_HIUSER	0xffffffff - -/* sh_flags */ -#define SHF_WRITE	0x1 -#define SHF_ALLOC	0x2 -#define SHF_EXECINSTR	0x4 -#define SHF_MASKPROC	0xf0000000 - -/* special section indexes */ -#define SHN_UNDEF	0 -#define SHN_LORESERVE	0xff00 -#define SHN_LOPROC	0xff00 -#define SHN_HIPROC	0xff1f -#define SHN_ABS		0xfff1 -#define SHN_COMMON	0xfff2 -#define SHN_HIRESERVE	0xffff -  -typedef struct elf32_shdr { -  Elf32_Word	sh_name; -  Elf32_Word	sh_type; -  Elf32_Word	sh_flags; -  Elf32_Addr	sh_addr; -  Elf32_Off	sh_offset; -  Elf32_Word	sh_size; -  Elf32_Word	sh_link; -  Elf32_Word	sh_info; -  Elf32_Word	sh_addralign; -  Elf32_Word	sh_entsize; -} Elf32_Shdr; - -typedef struct elf64_shdr { -  Elf64_Word sh_name;		/* Section name, index in string tbl */ -  Elf64_Word sh_type;		/* Type of section */ -  Elf64_Xword sh_flags;		/* Miscellaneous section attributes */ -  Elf64_Addr sh_addr;		/* Section virtual addr at execution */ -  Elf64_Off sh_offset;		/* Section file offset */ -  Elf64_Xword sh_size;		/* Size of section in bytes */ -  Elf64_Word sh_link;		/* Index of another section */ -  Elf64_Word sh_info;		/* Additional section information */ -  Elf64_Xword sh_addralign;	/* Section alignment */ -  Elf64_Xword sh_entsize;	/* Entry size if section holds table */ -} Elf64_Shdr; - -#define	EI_MAG0		0		/* e_ident[] indexes */ -#define	EI_MAG1		1 -#define	EI_MAG2		2 -#define	EI_MAG3		3 -#define	EI_CLASS	4 -#define	EI_DATA		5 -#define	EI_VERSION	6 -#define	EI_OSABI	7 -#define	EI_PAD		8 - -#define	ELFMAG0		0x7f		/* EI_MAG */ -#define	ELFMAG1		'E' -#define	ELFMAG2		'L' -#define	ELFMAG3		'F' -#define	ELFMAG		"\177ELF" -#define	SELFMAG		4 - -#define	ELFCLASSNONE	0		/* EI_CLASS */ -#define	ELFCLASS32	1 -#define	ELFCLASS64	2 -#define	ELFCLASSNUM	3 - -#define ELFDATANONE	0		/* e_ident[EI_DATA] */ -#define ELFDATA2LSB	1 -#define ELFDATA2MSB	2 - -#define EV_NONE		0		/* e_version, EI_VERSION */ -#define EV_CURRENT	1 -#define EV_NUM		2 - -#define ELFOSABI_NONE	0 -#define ELFOSABI_LINUX	3 - -#ifndef ELF_OSABI -#define ELF_OSABI ELFOSABI_NONE -#endif - -/* - * Notes used in ET_CORE. Architectures export some of the arch register sets - * using the corresponding note types via the PTRACE_GETREGSET and - * PTRACE_SETREGSET requests. - */ -#define NT_PRSTATUS	1 -#define NT_PRFPREG	2 -#define NT_PRPSINFO	3 -#define NT_TASKSTRUCT	4 -#define NT_AUXV		6 -/* - * Note to userspace developers: size of NT_SIGINFO note may increase - * in the future to accomodate more fields, don't assume it is fixed! - */ -#define NT_SIGINFO      0x53494749 -#define NT_FILE         0x46494c45 -#define NT_PRXFPREG     0x46e62b7f      /* copied from gdb5.1/include/elf/common.h */ -#define NT_PPC_VMX	0x100		/* PowerPC Altivec/VMX registers */ -#define NT_PPC_SPE	0x101		/* PowerPC SPE/EVR registers */ -#define NT_PPC_VSX	0x102		/* PowerPC VSX registers */ -#define NT_386_TLS	0x200		/* i386 TLS slots (struct user_desc) */ -#define NT_386_IOPERM	0x201		/* x86 io permission bitmap (1=deny) */ -#define NT_X86_XSTATE	0x202		/* x86 extended state using xsave */ -#define NT_S390_HIGH_GPRS	0x300	/* s390 upper register halves */ -#define NT_S390_TIMER	0x301		/* s390 timer register */ -#define NT_S390_TODCMP	0x302		/* s390 TOD clock comparator register */ -#define NT_S390_TODPREG	0x303		/* s390 TOD programmable register */ -#define NT_S390_CTRS	0x304		/* s390 control registers */ -#define NT_S390_PREFIX	0x305		/* s390 prefix register */ -#define NT_S390_LAST_BREAK	0x306	/* s390 breaking event address */ -#define NT_S390_SYSTEM_CALL	0x307	/* s390 system call restart data */ -#define NT_S390_TDB	0x308		/* s390 transaction diagnostic block */ -#define NT_ARM_VFP	0x400		/* ARM VFP/NEON registers */ -#define NT_ARM_TLS	0x401		/* ARM TLS register */ -#define NT_ARM_HW_BREAK	0x402		/* ARM hardware breakpoint registers */ -#define NT_ARM_HW_WATCH	0x403		/* ARM hardware watchpoint registers */ - - -/* Note header in a PT_NOTE section */ -typedef struct elf32_note { -  Elf32_Word	n_namesz;	/* Name size */ -  Elf32_Word	n_descsz;	/* Content size */ -  Elf32_Word	n_type;		/* Content type */ -} Elf32_Nhdr; - -/* Note header in a PT_NOTE section */ -typedef struct elf64_note { -  Elf64_Word n_namesz;	/* Name size */ -  Elf64_Word n_descsz;	/* Content size */ -  Elf64_Word n_type;	/* Content type */ -} Elf64_Nhdr; +#include <uapi/linux/elf.h> -#ifdef __KERNEL__  #ifndef elf_read_implies_exec    /* Executables for which elf_read_implies_exec() returns TRUE will       have the READ_IMPLIES_EXEC personality flag set automatically. @@ -455,5 +44,4 @@ static inline int elf_coredump_extra_notes_write(struct file *file,  extern int elf_coredump_extra_notes_size(void);  extern int elf_coredump_extra_notes_write(struct file *file, loff_t *foffset);  #endif -#endif /* __KERNEL__ */  #endif /* _LINUX_ELF_H */  |