summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/common.h9
-rw-r--r--include/elf.h47
-rw-r--r--include/mem.h2
-rw-r--r--include/types.h25
4 files changed, 79 insertions, 4 deletions
diff --git a/include/common.h b/include/common.h
index 86f1f9c..88ee8c4 100644
--- a/include/common.h
+++ b/include/common.h
@@ -16,4 +16,11 @@ static inline int strcmp(const char *str1, const char* str2) {
return *(const unsigned char *)str1 - *(const unsigned char *)str2;
}
-
+static inline void *memcpy(void *restrict dest, const void* restrict src, size_t size) {
+ unsigned char *d = (unsigned char *)dest;
+ unsigned char *s = (unsigned char *)src;
+ for (size_t i = 0; i < size; i++) {
+ d[i] = s[i];
+ }
+ return d;
+}
diff --git a/include/elf.h b/include/elf.h
new file mode 100644
index 0000000..ad8c550
--- /dev/null
+++ b/include/elf.h
@@ -0,0 +1,47 @@
+#pragma once
+#include <types.h>
+
+#define ELF_MAGIC_LE 0x464C457F
+#define ELF_PAD 0
+
+#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_ABI_VERSION 8
+
+struct elf_header {
+ uint8_t e_ident[16];
+ uint8_t e_type;
+ uint8_t e_machine;
+ uint8_t e_version;
+ uint8_t e_entry;
+ uint8_t e_phoff;
+ uint8_t e_shoff;
+ uint8_t e_flags;
+ uint8_t e_ehsize;
+ uint8_t e_phentsize;
+ uint8_t e_phnum;
+ uint8_t e_shentsize;
+ uint8_t e_shnum;
+ uint8_t e_shstrndx;
+};
+
+struct elf_section_header {
+ uint32_t sh_name;
+ uint32_t sh_type;
+ uint32_t sh_flags;
+ uint32_t sh_addr;
+ uint32_t sh_offset;
+ uint32_t sh_size;
+ uint32_t sh_link;
+ uint32_t sh_info;
+ uint32_t sh_addralign;
+ uint32_t sh_entsize;
+};
+
+int elf_chk_header(struct elf_header *header);
diff --git a/include/mem.h b/include/mem.h
index edba547..bd6c911 100644
--- a/include/mem.h
+++ b/include/mem.h
@@ -20,7 +20,5 @@ void* kmalloc(size_t size);
void* kzalloc(size_t size);
void kfree(void* ptr);
-void* memcpy(void* to, const void* from, size_t size);
-
void km_init(struct mem_info *info);
diff --git a/include/types.h b/include/types.h
index 4c7965c..821e108 100644
--- a/include/types.h
+++ b/include/types.h
@@ -7,7 +7,30 @@
#define uint16_t __wk_uint16_t
#define uint32_t __wk_uint32_t
#define uint64_t __wk_uint64_t
-#define be32_to_cpu(x) __builtin_bswap32(x)
+
+#define htole
+
+#ifdef __SYS_LITTLE_ENDIAN__
+ #define ltohs(x) x
+ #define ltohi(x) x
+ #define htols(x) x
+ #define htoli(x) x
+
+ #define btohs(x) __builtin_bswap16(x)
+ #define btohi(x) __builtin_bswap32(x)
+ #define htobs(x) __builtin_bswap16(x)
+ #define htobi(x) __builtin_bswap32(x)
+#else
+ #define ltohs(x) __builtin_bswap16(x)
+ #define ltohi(x) __builtin_bswap32(x)
+ #define htols(x) __builtin_bswap16(x)
+ #define htoli(x) __builtin_bswap32(x)
+
+ #define btohs(x) x
+ #define btohi(x) x
+ #define htobs(x) x
+ #define htobi(x) x
+#endif
typedef __UINTPTR_TYPE__ __wk_size_t;
typedef __UINT8_TYPE__ __wk_uint8_t;