summaryrefslogtreecommitdiff
path: root/src/user/lib/include
diff options
context:
space:
mode:
Diffstat (limited to 'src/user/lib/include')
-rw-r--r--src/user/lib/include/bits/panic.h5
-rw-r--r--src/user/lib/include/draw.h24
-rw-r--r--src/user/lib/include/elfload.h14
-rw-r--r--src/user/lib/include/esemaphore.h12
l---------src/user/lib/include/getopt.h1
l---------src/user/lib/include/malloc.h1
-rw-r--r--src/user/lib/include/setjmp.h2
-rw-r--r--src/user/lib/include/stdlib.h2
-rw-r--r--src/user/lib/include/thread.h9
-rw-r--r--src/user/lib/include/unistd.h2
10 files changed, 69 insertions, 3 deletions
diff --git a/src/user/lib/include/bits/panic.h b/src/user/lib/include/bits/panic.h
new file mode 100644
index 0000000..91aec5f
--- /dev/null
+++ b/src/user/lib/include/bits/panic.h
@@ -0,0 +1,5 @@
+#pragma once
+#include <stdio.h>
+#include <stdlib.h>
+
+#define __libc_panic(...) do { fprintf(stderr, "__libc_panic @ %s:", __func__); fprintf(stderr, __VA_ARGS__); fprintf(stderr, "\n"); abort(); } while (0)
diff --git a/src/user/lib/include/draw.h b/src/user/lib/include/draw.h
new file mode 100644
index 0000000..5e614be
--- /dev/null
+++ b/src/user/lib/include/draw.h
@@ -0,0 +1,24 @@
+#pragma once
+#include <camellia/types.h>
+#include <stddef.h>
+#include <stdint.h>
+
+struct framebuf {
+ size_t len, width, height, pitch;
+ uint8_t bpp;
+ char *b;
+
+ hid_t fd;
+};
+
+struct rect { uint32_t x1, y1, x2, y2; };
+void dirty_reset(struct rect *d);
+void dirty_mark(struct rect *d, uint32_t x, uint32_t y);
+void dirty_flush(struct rect *d, struct framebuf *fb);
+
+int fb_setup(struct framebuf *fb, const char *base);
+int fb_anon(struct framebuf *fb, size_t w, size_t h);
+uint32_t *fb_pixel(struct framebuf *fb, uint32_t x, uint32_t y);
+void fb_cpy(
+ struct framebuf *dest, const struct framebuf *src,
+ size_t xd, size_t yd, size_t xs, size_t ys, size_t w, size_t h);
diff --git a/src/user/lib/include/elfload.h b/src/user/lib/include/elfload.h
new file mode 100644
index 0000000..825f765
--- /dev/null
+++ b/src/user/lib/include/elfload.h
@@ -0,0 +1,14 @@
+#pragma once
+#include <bits/file.h>
+
+struct execdata {
+ int argc;
+ char **argv, **envp;
+ char *cwd;
+};
+
+void elf_execf(FILE *f, char **argv, char **envp);
+void elf_exec(void *base, char **argv, char **envp);
+void *elf_partialexec(void *elf); /* returns pointer to entry point */
+
+void elf_selfreloc(void); // elfreloc.c
diff --git a/src/user/lib/include/esemaphore.h b/src/user/lib/include/esemaphore.h
new file mode 100644
index 0000000..9cc85e0
--- /dev/null
+++ b/src/user/lib/include/esemaphore.h
@@ -0,0 +1,12 @@
+#pragma once
+#include <camellia/types.h>
+
+struct evil_sem {
+ hid_t wait, signal;
+};
+
+void esem_signal(struct evil_sem *sem);
+void esem_wait(struct evil_sem *sem);
+
+struct evil_sem *esem_new(int value);
+void esem_free(struct evil_sem *sem);
diff --git a/src/user/lib/include/getopt.h b/src/user/lib/include/getopt.h
new file mode 120000
index 0000000..4890ceb
--- /dev/null
+++ b/src/user/lib/include/getopt.h
@@ -0,0 +1 @@
+../vendor/getopt/getopt.h \ No newline at end of file
diff --git a/src/user/lib/include/malloc.h b/src/user/lib/include/malloc.h
new file mode 120000
index 0000000..80b9bf5
--- /dev/null
+++ b/src/user/lib/include/malloc.h
@@ -0,0 +1 @@
+../vendor/dlmalloc/malloc.h \ No newline at end of file
diff --git a/src/user/lib/include/setjmp.h b/src/user/lib/include/setjmp.h
index 298939c..6d05d79 100644
--- a/src/user/lib/include/setjmp.h
+++ b/src/user/lib/include/setjmp.h
@@ -1,5 +1,5 @@
#pragma once
-#include <user/lib/panic.h>
+#include <bits/panic.h>
typedef uint64_t jmp_buf[8]; /* rbx, rsp, rbp, r12, r13, r14, r15, rip */
typedef char sigjmp_buf[1];
diff --git a/src/user/lib/include/stdlib.h b/src/user/lib/include/stdlib.h
index 050ca80..4a44bf6 100644
--- a/src/user/lib/include/stdlib.h
+++ b/src/user/lib/include/stdlib.h
@@ -3,7 +3,7 @@
#include <stdlib.h>
#ifndef NO_MALLOC_H
-#include <user/lib/vendor/dlmalloc/malloc.h>
+#include <malloc.h>
#endif
#define EXIT_SUCCESS 0
diff --git a/src/user/lib/include/thread.h b/src/user/lib/include/thread.h
new file mode 100644
index 0000000..5a5ddc0
--- /dev/null
+++ b/src/user/lib/include/thread.h
@@ -0,0 +1,9 @@
+#pragma once
+#include <stdlib.h>
+
+void thread_creates(int flags, void (*fn)(void*), void *arg, void *stack);
+
+static inline void thread_create(int flags, void (*fn)(void*), void *arg) {
+ /* error checking is for WIMPS. */
+ thread_creates(flags, fn, arg, malloc(4096) + 4096);
+}
diff --git a/src/user/lib/include/unistd.h b/src/user/lib/include/unistd.h
index c55cd29..a1c18e8 100644
--- a/src/user/lib/include/unistd.h
+++ b/src/user/lib/include/unistd.h
@@ -1,6 +1,6 @@
#pragma once
#include <camellia/types.h> // TODO only needed because of hid_t
-#include <user/lib/vendor/getopt/getopt.h>
+#include <getopt.h>
int fork(void);
int close(hid_t h);