summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Makefile1
-rw-r--r--apps/init/arch/x86_64/load.c3
-rwxr-xr-xinitrd/files/bin/initbin20800 -> 20816 bytes
m---------kernel0
-rw-r--r--lib/libelf/include/elf.h133
-rw-r--r--lib/libjove/heap/heap.c4
6 files changed, 137 insertions, 4 deletions
diff --git a/Makefile b/Makefile
index cbb52f4..b9a4dd3 100644
--- a/Makefile
+++ b/Makefile
@@ -37,6 +37,7 @@ $(SYSROOTDIR)/usr/include:
cp -r $(LIBDIR)/libc/include $(SYSROOTDIR)/usr/include
cp -r $(KERNELDIR)/include/ $(SYSROOTDIR)/usr/include/kernel
cp -r $(LIBDIR)/libjove/include $(SYSROOTDIR)/usr/include/jove
+ cp $(LIBDIR)/libelf/include/elf.h $(SYSROOTDIR)/usr/include/elf.h
$(SYSROOTDIR): $(SYSROOTDIR)/usr/include
diff --git a/apps/init/arch/x86_64/load.c b/apps/init/arch/x86_64/load.c
new file mode 100644
index 0000000..c318428
--- /dev/null
+++ b/apps/init/arch/x86_64/load.c
@@ -0,0 +1,3 @@
+#include <elf.h>
+
+
diff --git a/initrd/files/bin/init b/initrd/files/bin/init
index 40e3105..a4ad338 100755
--- a/initrd/files/bin/init
+++ b/initrd/files/bin/init
Binary files differ
diff --git a/kernel b/kernel
-Subproject 772717dc22e04b4d168d0f77bee6b6357118768
+Subproject d26eb8b54969e79d933a8e20f2725343cd42dea
diff --git a/lib/libelf/include/elf.h b/lib/libelf/include/elf.h
new file mode 100644
index 0000000..2eda7ae
--- /dev/null
+++ b/lib/libelf/include/elf.h
@@ -0,0 +1,133 @@
+#ifndef _LIBELF_ELF_H
+#define _LIBELF_ELF_H 1
+
+#include <stdint.h>
+
+#define ET_NONE 0
+#define ET_REL 1
+#define ET_EXEC 2
+#define ET_DYN 3
+#define ET_CORE 4
+
+#define EM_X86_64 62
+
+#define EI_NIDENT 16
+#define EI_MAG0 0
+#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_ABIVERSION 8
+#define EI_PAD 9
+
+#define ELFMAG0 0x7F
+#define ELFMAG1 'E'
+#define ELFMAG2 'L'
+#define ELFMAG3 'F'
+
+#define ELFCLASSNONE 0
+#define ELFCLASS32 1
+#define ELFCLASS64 2
+
+#define ELFDATANONE 0
+#define ELFDATA2LSB 1
+#define ELFDATA2MSB 2
+
+#define ELFOSABI_NONE 0
+#define ELFOSABI_JOVE 15
+
+#define EV_NONE 0
+#define EV_CURRENT 1
+
+typedef struct
+{
+ unsigned char e_ident[EI_NIDENT];
+ uint16_t e_type;
+ uint16_t e_machine;
+ uint32_t e_version;
+ uintptr_t e_entry;
+ intptr_t e_phoff;
+ intptr_t e_shoff;
+ uint32_t e_flags;
+ uint16_t e_ehsize;
+ uint16_t e_phentsize;
+ uint16_t e_phnum;
+ uint16_t e_shentsize;
+ uint16_t e_shnum;
+uint16_t e_shstrndx;
+} Elf64_Ehdr;
+
+#define SHT_NULL 0
+#define SHT_PROGBITS 1
+#define SHT_SYMTAB 2
+#define SHT_STRTAB 3
+#define SHT_NOBITS 8
+#define SHT_DYNSYM 11
+#define SHT_INIT_ARRAY 14
+#define SHT_FINI_ARRAY 15
+#define SHT_PREINIT_ARRAY 16
+#define SHT_SYMTAB_SHNDX 18
+
+#define SHF_WRITE 0b1
+#define SHF_ALLOC 0b10
+#define SHF_EXECINSTR 0b100
+#define SHF_MERGE 0b1000
+#define SHF_STRINGS 0b10000
+#define SHF_INFO_LINK 0b100000
+#define SHF_LINK_ORDER 0b1000000
+#define SHF_OS_NONCONF 0b10000000
+#define SHF_GROUP 0b100000000
+#define SHF_TLS 0b1000000000
+#define SHF_MASKOS 0x0FF00000
+#define SHF_MASKPROC 0xF0000000
+
+typedef struct
+{
+ uint32_t sh_name;
+ uint32_t sh_type;
+ uint64_t sh_flags;
+ uintptr_t sh_addr;
+ intptr_t sh_offset;
+ uint64_t sh_size;
+ uint32_t sh_link;
+ uint32_t sh_info;
+ uint64_t sh_addralign;
+ uint64_t sh_entsize;
+} Elf64_Shdr;
+
+#define ELF64_ST_BIND(i) ((i) >> 4)
+#define ELF64_ST_TYPE(i) ((i)&0xF)
+#define ELF64_ST_INFO(b,t) (((b)<<4)+((t)&0xF))
+
+#define ELF64_ST_VISIBILITY(o) ((o)&0x3)
+
+#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 STV_DEFAULT 0
+#define STV_INTERNAL 1
+#define STV_HIDDEN 2
+#define STV_PROTECTED 3
+
+typedef struct {
+ uint32_t st_name;
+ unsigned char st_info;
+ unsigned char st_other;
+ uint16_t st_shndx;
+ uintptr_t st_value;
+ uint64_t st_size;
+} Elf64_Sym;
+
+#endif
diff --git a/lib/libjove/heap/heap.c b/lib/libjove/heap/heap.c
index ab313ae..179f7fc 100644
--- a/lib/libjove/heap/heap.c
+++ b/lib/libjove/heap/heap.c
@@ -64,7 +64,6 @@ heap_split(heap_bin_t *bin, size_t splitsize)
size_t newsize = size_diff - sizeof(heap_bin_t) - sizeof(uintptr_t);
uintptr_t newat = ((uintptr_t)bin->data) + splitsize + sizeof(uintptr_t);
- jove_kprintf("Split %p to %p [%x]\n", bin, newat, newsize);
bin->size_taken = splitsize;
freelist_tail = heap_newbin(newat, newsize, freelist_tail);
@@ -86,7 +85,6 @@ heap_alloc(size_t size)
size_t bestsize = bestfit->size_taken;
if(bestsize < size) {
- jove_kprintf("Growing bin %p [%x] to %x\n", bestfit, bestsize, size);
heap_newbin((uintptr_t)bestfit, size, NULL);
}else if(bestsize > size) {
heap_split(bestfit, size);
@@ -113,7 +111,6 @@ start_merge_loop: {
if((uintptr_t)prevbin >= __heap_start) {
if(!HEAP_BIN_TAKEN(prevbin)) {
- jove_kprintf("Merge back bin %p into %p\n", bin, prevbin);
freelist_tail = prevbin;
prevbin->size_taken += bin->size_taken + sizeof(heap_bin_t) + sizeof(uintptr_t);
bin = prevbin;
@@ -122,7 +119,6 @@ start_merge_loop: {
}
if((uintptr_t)nextbin < __heap_end) {
if(!HEAP_BIN_TAKEN(nextbin)) {
- jove_kprintf("Merge forward bin %p into %p\n", bin, nextbin);
if(bin->next == nextbin) bin->next = nextbin->next;
bin->size_taken += nextbin->size_taken + sizeof(heap_bin_t) + sizeof(uintptr_t);
goto start_merge_loop;