changeset 524:4e99f8fcd4b9

include: added 31-bit and 64-bit definitions of ELF program segment headers Signed-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
author Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
date Mon, 25 Apr 2011 20:54:32 -0400
parents b887ac39536d
children 42f3a76e6535
files include/binfmt_elf.h
diffstat 1 files changed, 50 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/include/binfmt_elf.h	Mon Apr 25 20:52:01 2011 -0400
+++ b/include/binfmt_elf.h	Mon Apr 25 20:54:32 2011 -0400
@@ -73,6 +73,25 @@
 #define SHT_LOUSER		0x80000000
 #define SHT_HIUSER		0xffffffff
 
+#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
+#define PT_LOOS		0x60000000
+#define PT_HIOS		0x6fffffff
+#define PT_LOPROC	0x70000000
+#define PT_HIPROC	0x7fffffff
+
+#define PF_X		0x1
+#define PF_W		0x2
+#define PF_R		0x4
+#define PF_MASKOS	0x0ff00000
+#define PF_MAKSPROC	0xf0000000
+
 typedef u32 Elf32_Addr;
 typedef u32 Elf32_Off;
 typedef u16 Elf32_Half;
@@ -165,4 +184,35 @@
 	Elf64_Shdr z;
 } Elf_Shdr;
 
+/*
+ * ELF program header
+ */
+typedef struct {
+	Elf32_Word	p_type;			/* Segment type */
+	Elf32_Off	p_offset;		/* Segment file offset */
+	Elf32_Addr	p_vaddr;		/* Segment virt. addr */
+	Elf32_Addr	p_paddr;		/* <undefined> */
+	Elf32_Word	p_filesz;		/* Segment size in file */
+	Elf32_Word	p_memsz;		/* Segment size in mem */
+	Elf32_Word	p_flags;		/* Segment flags */
+	Elf32_Word	p_align;		/* Segment alignment */
+} Elf32_Phdr;
+
+typedef struct {
+	Elf64_Word	p_type;			/* Segment type */
+	Elf64_Word	p_flags;		/* Segment file offset */
+	Elf64_Off	p_offset;		/* Segment virt. addr */
+	Elf64_Addr	p_vaddr;		/* <undefined> */
+	Elf64_Addr	p_paddr;		/* Segment size in file */
+	Elf64_Xword	p_filesz;		/* Segment size in mem */
+	Elf64_Xword	p_memsz;		/* Segment flags */
+	Elf64_Xword	p_align;		/* Segment alignment */
+} Elf64_Phdr;
+
+/* combined header for easy pointer casting */
+typedef union {
+	Elf32_Phdr s390;
+	Elf64_Phdr z;
+} Elf_Phdr;
+
 #endif