summaryrefslogtreecommitdiff
path: root/fs/elf.c
diff options
context:
space:
mode:
authorMichal Idziorek <m.i@gmx.at>2014-12-01 21:49:22 +0100
committerMichal Idziorek <m.i@gmx.at>2014-12-01 21:49:22 +0100
commitd8331335ff1720ce28eba45afe1a02814b38b033 (patch)
treef671279d258477321699d158765f576512851e3a /fs/elf.c
parent100be313c22bd6116b1adc5eb30f5db56f4b0772 (diff)
finally implemented fork() syscall
Diffstat (limited to 'fs/elf.c')
-rw-r--r--fs/elf.c64
1 files changed, 64 insertions, 0 deletions
diff --git a/fs/elf.c b/fs/elf.c
new file mode 100644
index 0000000..3b2f2b3
--- /dev/null
+++ b/fs/elf.c
@@ -0,0 +1,64 @@
+#include <stdint.h>
+
+#define EI_NIDENT 16
+
+
+typedef uint32_t Elf32_Addr;
+typedef uint32_t Elf32_Off;
+typedef uint16_t Elf32_Section;
+typedef uint16_t Elf32_Versym;
+typedef unsigned char Elf_Byte;
+typedef uint16_t Elf32_Half;
+typedef int32_t Elf32_Sword;
+typedef uint32_t Elf32_Word;
+typedef int64_t Elf32_Sxword;
+typedef uint64_t Elf32_Xword;
+
+
+typedef struct
+{
+
+ unsigned char e_ident[EI_NIDENT];
+ Elf32_Half e_type;
+ Elf32_Half e_machine;
+ Elf32_Word e_version;
+ Elf32_Addr e_entry;
+ 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 {
+ 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 {
+
+ 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;