From fca80df9e638a7d68147d91cbffda95aed96ab5c Mon Sep 17 00:00:00 2001 From: dzwdz Date: Thu, 23 Feb 2023 20:07:59 +0100 Subject: build: don't -Isrc/ in user code --- Makefile | 10 +++--- src/kernel/arch/amd64/driver/util.h | 2 +- src/shared/container/ring.c | 60 ------------------------------------ src/shared/container/ring.h | 23 -------------- src/shared/include/shared/mem.h | 18 +++++++++++ src/shared/include/shared/printf.h | 6 ++++ src/shared/include/shared/ring.h | 23 ++++++++++++++ src/shared/mem.h | 18 ----------- src/shared/printf.h | 6 ---- src/shared/ring.c | 60 ++++++++++++++++++++++++++++++++++++ src/user/app/drawmouse/drawmouse.c | 4 +-- src/user/app/dvd/dvd.c | 2 +- src/user/app/init/driver/ps2.c | 2 +- src/user/app/netdog/nd.c | 2 +- src/user/app/netstack/netstack.c | 2 +- src/user/app/netstack/tcp.c | 2 +- src/user/app/tests/kernel/threads.c | 4 +-- src/user/app/tests/libc/esemaphore.c | 2 +- src/user/app/tests/shared/ringbuf.c | 2 +- src/user/app/vterm/vterm.h | 2 +- src/user/bootstrap/main.c | 2 +- src/user/lib/_start2.c | 2 +- src/user/lib/draw/draw.c | 2 +- src/user/lib/draw/draw.h | 24 --------------- src/user/lib/draw/flush.c | 2 +- src/user/lib/elfload.c | 4 +-- src/user/lib/elfload.h | 14 --------- src/user/lib/elfreloc.c | 2 +- src/user/lib/esemaphore.c | 2 +- src/user/lib/esemaphore.h | 12 -------- src/user/lib/include/bits/panic.h | 5 +++ src/user/lib/include/draw.h | 24 +++++++++++++++ src/user/lib/include/elfload.h | 14 +++++++++ src/user/lib/include/esemaphore.h | 12 ++++++++ src/user/lib/include/getopt.h | 1 + src/user/lib/include/malloc.h | 1 + src/user/lib/include/setjmp.h | 2 +- src/user/lib/include/stdlib.h | 2 +- src/user/lib/include/thread.h | 9 ++++++ src/user/lib/include/unistd.h | 2 +- src/user/lib/math.c | 2 +- src/user/lib/panic.h | 5 --- src/user/lib/stdio/file.c | 2 +- src/user/lib/stdlib.c | 2 +- src/user/lib/string/string.c | 2 +- src/user/lib/thread.h | 9 ------ src/user/lib/unistd.c | 2 +- 47 files changed, 207 insertions(+), 205 deletions(-) delete mode 100644 src/shared/container/ring.c delete mode 100644 src/shared/container/ring.h create mode 100644 src/shared/include/shared/mem.h create mode 100644 src/shared/include/shared/printf.h create mode 100644 src/shared/include/shared/ring.h delete mode 100644 src/shared/mem.h delete mode 100644 src/shared/printf.h create mode 100644 src/shared/ring.c delete mode 100644 src/user/lib/draw/draw.h delete mode 100644 src/user/lib/elfload.h delete mode 100644 src/user/lib/esemaphore.h create mode 100644 src/user/lib/include/bits/panic.h create mode 100644 src/user/lib/include/draw.h create mode 100644 src/user/lib/include/elfload.h create mode 100644 src/user/lib/include/esemaphore.h create mode 120000 src/user/lib/include/getopt.h create mode 120000 src/user/lib/include/malloc.h create mode 100644 src/user/lib/include/thread.h delete mode 100644 src/user/lib/panic.h delete mode 100644 src/user/lib/thread.h diff --git a/Makefile b/Makefile index a917131..714abab 100644 --- a/Makefile +++ b/Makefile @@ -8,13 +8,13 @@ CHECK = sparse CFLAGS += -g -std=gnu99 -O2 -ftrack-macro-expansion=0 CFLAGS += -Wall -Wextra -Wold-style-definition -Werror=implicit-function-declaration CFLAGS += -Wno-address-of-packed-member -Werror=incompatible-pointer-types -CFLAGS += -Isrc/ -Isrc/shared/include/ +CFLAGS += -Isrc/shared/include/ -KERNEL_CFLAGS = $(CFLAGS) -ffreestanding -mno-sse -mgeneral-regs-only -LIBC_CFLAGS = $(CFLAGS) -Isrc/user/lib/include/ -ffreestanding +KERNEL_CFLAGS = $(CFLAGS) -ffreestanding -mno-sse -mgeneral-regs-only -Isrc/ +LIBC_CFLAGS = $(CFLAGS) -Isrc/user/lib/include/ -ffreestanding -Isrc/ USER_CFLAGS = $(CFLAGS) -Isrc/user/lib/include/ -SPARSEFLAGS = -Wno-non-pointer-null +SPARSEFLAGS = -$(KERNEL_CFLAGS) -Wno-non-pointer-null LFLAGS = -ffreestanding -O2 -nostdlib -lgcc -Wl,-zmax-page-size=4096 -Wl,--no-warn-mismatch # TODO optimize memory use QFLAGS = -no-reboot -m 1g -gdb tcp::12366 @@ -62,7 +62,7 @@ test: all @cat out/qemu.out check: $(shell find src/kernel/ -type f -name *.c) - @echo $^ | xargs -n 1 sparse $(CFLAGS) $(SPARSEFLAGS) + @echo $^ | xargs -n 1 sparse $(SPARSEFLAGS) @tools/linter/main.rb clean: diff --git a/src/kernel/arch/amd64/driver/util.h b/src/kernel/arch/amd64/driver/util.h index 0f7db7a..4b8bb04 100644 --- a/src/kernel/arch/amd64/driver/util.h +++ b/src/kernel/arch/amd64/driver/util.h @@ -1,6 +1,6 @@ #pragma once #include -#include +#include #include #include diff --git a/src/shared/container/ring.c b/src/shared/container/ring.c deleted file mode 100644 index 9bf8d61..0000000 --- a/src/shared/container/ring.c +++ /dev/null @@ -1,60 +0,0 @@ -#include -#include -#include - -static bool at_end(ring_t *r) { - return r->_head + 1 == r->_tail - || (r->_head + 1 == r->capacity && r->_tail == 0); -} - -size_t ring_used(ring_t *r) { - if (r->_head >= r->_tail) - return r->_head - r->_tail; - else - return r->_head + r->capacity - r->_tail; -} - -size_t ring_avail(ring_t *r) { - return r->capacity - ring_used(r); -} - -void ring_put(ring_t *r, const void *buf, size_t len) { - // TODO do something similar to ring_get - for (size_t i = 0; i < len; i++) - ring_put1b(r, ((uint8_t*)buf)[i]); -} - -void ring_put1b(ring_t *r, uint8_t byte) { - if (at_end(r)) return; - r->buf[r->_head++] = byte; - if (r->_head >= r->capacity) r->_head = 0; -} - -size_t ring_get(ring_t *r, void *buf, size_t len) { - size_t read = 0; - size_t plen; - void *pbuf; - for (size_t i = 0; i < 2; i++) { - plen = len - read; - pbuf = ring_contig(r, &plen); - if (buf) memcpy(buf + read, pbuf, plen); - read += plen; - } - return read; -} - -void *ring_contig(ring_t *r, size_t *len) { - void *ret = &r->buf[r->_tail]; - size_t avail; - if (r->_head >= r->_tail) - avail = r->_head - r->_tail; - else - avail = r->capacity - r->_tail; - - if (*len > avail) - *len = avail; - - r->_tail += *len; - if (r->_tail >= r->capacity) r->_tail = 0; - return ret; -} diff --git a/src/shared/container/ring.h b/src/shared/container/ring.h deleted file mode 100644 index dbaf331..0000000 --- a/src/shared/container/ring.h +++ /dev/null @@ -1,23 +0,0 @@ -#pragma once -#include -#include - -typedef struct { - char *buf; - size_t capacity; - size_t _head, _tail; -} ring_t; - -/** Returns amount of bytes stored in the buffer. */ -size_t ring_used(ring_t*); -/** Returns amount of space left in the buffer. */ -size_t ring_avail(ring_t*); - -void ring_put(ring_t*, const void*, size_t); -void ring_put1b(ring_t*, uint8_t); - -size_t ring_get(ring_t*, void*, size_t); - -/** Consumes up to `len` bytes, and returns a pointer to the buffer where it's stored. - * Not thread-safe. */ -void* ring_contig(ring_t*, size_t *len); diff --git a/src/shared/include/shared/mem.h b/src/shared/include/shared/mem.h new file mode 100644 index 0000000..3597edf --- /dev/null +++ b/src/shared/include/shared/mem.h @@ -0,0 +1,18 @@ +#pragma once +#include +#include + +/* note: (partially) tested in the userland tests */ + +void *memchr(const void *s, int c, size_t n); +int memcmp(const void *s1, const void *s2, size_t n); + +void *memcpy(void *dest, const void *src, size_t n); +void *memmove(void *dest, const void *src, size_t n); +void *memset(void *s, int c, size_t n); + +int strcmp(const char *s1, const char *s2); +size_t strlen(const char *s); + +int snprintf(char *restrict str, size_t len, const char *restrict fmt, ...); +int vsnprintf(char *restrict str, size_t len, const char *restrict fmt, va_list ap); diff --git a/src/shared/include/shared/printf.h b/src/shared/include/shared/printf.h new file mode 100644 index 0000000..45fd358 --- /dev/null +++ b/src/shared/include/shared/printf.h @@ -0,0 +1,6 @@ +#pragma once +#include +#include + +int __printf_internal(const char *fmt, va_list argp, + void (*back)(void*, const char*, size_t), void *back_arg); diff --git a/src/shared/include/shared/ring.h b/src/shared/include/shared/ring.h new file mode 100644 index 0000000..dbaf331 --- /dev/null +++ b/src/shared/include/shared/ring.h @@ -0,0 +1,23 @@ +#pragma once +#include +#include + +typedef struct { + char *buf; + size_t capacity; + size_t _head, _tail; +} ring_t; + +/** Returns amount of bytes stored in the buffer. */ +size_t ring_used(ring_t*); +/** Returns amount of space left in the buffer. */ +size_t ring_avail(ring_t*); + +void ring_put(ring_t*, const void*, size_t); +void ring_put1b(ring_t*, uint8_t); + +size_t ring_get(ring_t*, void*, size_t); + +/** Consumes up to `len` bytes, and returns a pointer to the buffer where it's stored. + * Not thread-safe. */ +void* ring_contig(ring_t*, size_t *len); diff --git a/src/shared/mem.h b/src/shared/mem.h deleted file mode 100644 index 3597edf..0000000 --- a/src/shared/mem.h +++ /dev/null @@ -1,18 +0,0 @@ -#pragma once -#include -#include - -/* note: (partially) tested in the userland tests */ - -void *memchr(const void *s, int c, size_t n); -int memcmp(const void *s1, const void *s2, size_t n); - -void *memcpy(void *dest, const void *src, size_t n); -void *memmove(void *dest, const void *src, size_t n); -void *memset(void *s, int c, size_t n); - -int strcmp(const char *s1, const char *s2); -size_t strlen(const char *s); - -int snprintf(char *restrict str, size_t len, const char *restrict fmt, ...); -int vsnprintf(char *restrict str, size_t len, const char *restrict fmt, va_list ap); diff --git a/src/shared/printf.h b/src/shared/printf.h deleted file mode 100644 index 45fd358..0000000 --- a/src/shared/printf.h +++ /dev/null @@ -1,6 +0,0 @@ -#pragma once -#include -#include - -int __printf_internal(const char *fmt, va_list argp, - void (*back)(void*, const char*, size_t), void *back_arg); diff --git a/src/shared/ring.c b/src/shared/ring.c new file mode 100644 index 0000000..44c73f6 --- /dev/null +++ b/src/shared/ring.c @@ -0,0 +1,60 @@ +#include +#include +#include + +static bool at_end(ring_t *r) { + return r->_head + 1 == r->_tail + || (r->_head + 1 == r->capacity && r->_tail == 0); +} + +size_t ring_used(ring_t *r) { + if (r->_head >= r->_tail) + return r->_head - r->_tail; + else + return r->_head + r->capacity - r->_tail; +} + +size_t ring_avail(ring_t *r) { + return r->capacity - ring_used(r); +} + +void ring_put(ring_t *r, const void *buf, size_t len) { + // TODO do something similar to ring_get + for (size_t i = 0; i < len; i++) + ring_put1b(r, ((uint8_t*)buf)[i]); +} + +void ring_put1b(ring_t *r, uint8_t byte) { + if (at_end(r)) return; + r->buf[r->_head++] = byte; + if (r->_head >= r->capacity) r->_head = 0; +} + +size_t ring_get(ring_t *r, void *buf, size_t len) { + size_t read = 0; + size_t plen; + void *pbuf; + for (size_t i = 0; i < 2; i++) { + plen = len - read; + pbuf = ring_contig(r, &plen); + if (buf) memcpy(buf + read, pbuf, plen); + read += plen; + } + return read; +} + +void *ring_contig(ring_t *r, size_t *len) { + void *ret = &r->buf[r->_tail]; + size_t avail; + if (r->_head >= r->_tail) + avail = r->_head - r->_tail; + else + avail = r->capacity - r->_tail; + + if (*len > avail) + *len = avail; + + r->_tail += *len; + if (r->_tail >= r->capacity) r->_tail = 0; + return ret; +} diff --git a/src/user/app/drawmouse/drawmouse.c b/src/user/app/drawmouse/drawmouse.c index 24aa55e..31a1255 100644 --- a/src/user/app/drawmouse/drawmouse.c +++ b/src/user/app/drawmouse/drawmouse.c @@ -1,11 +1,11 @@ #include #include -#include +#include #include #include #include #include -#include +#include #define MOUSE_SIZE 10 diff --git a/src/user/app/dvd/dvd.c b/src/user/app/dvd/dvd.c index 70adc8b..a15b440 100644 --- a/src/user/app/dvd/dvd.c +++ b/src/user/app/dvd/dvd.c @@ -4,7 +4,7 @@ #include #include #include -#include +#include #define eprintf(fmt, ...) fprintf(stderr, "vterm: "fmt"\n" __VA_OPT__(,) __VA_ARGS__) diff --git a/src/user/app/init/driver/ps2.c b/src/user/app/init/driver/ps2.c index a5cdb07..4fee60a 100644 --- a/src/user/app/init/driver/ps2.c +++ b/src/user/app/init/driver/ps2.c @@ -1,6 +1,6 @@ #include "driver.h" #include -#include +#include #include #include #include diff --git a/src/user/app/netdog/nd.c b/src/user/app/netdog/nd.c index fdc8361..af5c264 100644 --- a/src/user/app/netdog/nd.c +++ b/src/user/app/netdog/nd.c @@ -2,7 +2,7 @@ #include #include #include -#include +#include #define eprintf(fmt, ...) fprintf(stderr, "netdog: "fmt"\n" __VA_OPT__(,) __VA_ARGS__) diff --git a/src/user/app/netstack/netstack.c b/src/user/app/netstack/netstack.c index c2e9223..296fee2 100644 --- a/src/user/app/netstack/netstack.c +++ b/src/user/app/netstack/netstack.c @@ -6,7 +6,7 @@ #include #include #include -#include +#include struct net_state state = { // TODO dynamically get mac diff --git a/src/user/app/netstack/tcp.c b/src/user/app/netstack/tcp.c index 490ad5b..d1adeab 100644 --- a/src/user/app/netstack/tcp.c +++ b/src/user/app/netstack/tcp.c @@ -5,7 +5,7 @@ #include "proto.h" #include "util.h" #include -#include +#include enum { SrcPort = 0, diff --git a/src/user/app/tests/kernel/threads.c b/src/user/app/tests/kernel/threads.c index abca41c..b3c1c06 100644 --- a/src/user/app/tests/kernel/threads.c +++ b/src/user/app/tests/kernel/threads.c @@ -2,8 +2,8 @@ #include #include #include -#include -#include +#include +#include int global_n; static void basic_thread(void *sem) { diff --git a/src/user/app/tests/libc/esemaphore.c b/src/user/app/tests/libc/esemaphore.c index 2f1d4bc..f089f4f 100644 --- a/src/user/app/tests/libc/esemaphore.c +++ b/src/user/app/tests/libc/esemaphore.c @@ -4,7 +4,7 @@ #include #include #include -#include +#include static void odd(hid_t out, struct evil_sem *sem1, struct evil_sem *sem2) { _sys_write(out, "1", 1, -1, 0); diff --git a/src/user/app/tests/shared/ringbuf.c b/src/user/app/tests/shared/ringbuf.c index d4e8dc9..d2a35a1 100644 --- a/src/user/app/tests/shared/ringbuf.c +++ b/src/user/app/tests/shared/ringbuf.c @@ -1,5 +1,5 @@ #include "../tests.h" -#include +#include #include static void test_ringbuf(void) { diff --git a/src/user/app/vterm/vterm.h b/src/user/app/vterm/vterm.h index b006ede..72c1fd0 100644 --- a/src/user/app/vterm/vterm.h +++ b/src/user/app/vterm/vterm.h @@ -2,7 +2,7 @@ #include #include #include -#include +#include #define eprintf(fmt, ...) fprintf(stderr, "vterm: "fmt"\n" __VA_OPT__(,) __VA_ARGS__) diff --git a/src/user/bootstrap/main.c b/src/user/bootstrap/main.c index b6d30f4..c12989e 100644 --- a/src/user/bootstrap/main.c +++ b/src/user/bootstrap/main.c @@ -3,7 +3,7 @@ #include #include #include -#include +#include #include #include "tar.h" diff --git a/src/user/lib/_start2.c b/src/user/lib/_start2.c index 648c0c6..954fcb4 100644 --- a/src/user/lib/_start2.c +++ b/src/user/lib/_start2.c @@ -5,7 +5,7 @@ #include #include #include -#include +#include int main(int argc, char **argv, char **envp); diff --git a/src/user/lib/draw/draw.c b/src/user/lib/draw/draw.c index 3fb6a99..1c2a371 100644 --- a/src/user/lib/draw/draw.c +++ b/src/user/lib/draw/draw.c @@ -4,7 +4,7 @@ #include #include #include -#include +#include void dirty_reset(struct rect *d) { d->x1 = ~0; d->y1 = ~0; diff --git a/src/user/lib/draw/draw.h b/src/user/lib/draw/draw.h deleted file mode 100644 index 5e614be..0000000 --- a/src/user/lib/draw/draw.h +++ /dev/null @@ -1,24 +0,0 @@ -#pragma once -#include -#include -#include - -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/draw/flush.c b/src/user/lib/draw/flush.c index 3b4a978..88bf3d6 100644 --- a/src/user/lib/draw/flush.c +++ b/src/user/lib/draw/flush.c @@ -1,6 +1,6 @@ #include #include -#include +#include static void flush_combined(struct rect pix, struct framebuf *fb) { size_t low = fb->pitch * pix.y1 + 4 * pix.x1; diff --git a/src/user/lib/elfload.c b/src/user/lib/elfload.c index 3862534..7b92d35 100644 --- a/src/user/lib/elfload.c +++ b/src/user/lib/elfload.c @@ -6,8 +6,8 @@ #include #include #include -#include -#include +#include "elf.h" +#include void elf_execf(FILE *f, char **argv, char **envp) { void *buf; diff --git a/src/user/lib/elfload.h b/src/user/lib/elfload.h deleted file mode 100644 index 825f765..0000000 --- a/src/user/lib/elfload.h +++ /dev/null @@ -1,14 +0,0 @@ -#pragma once -#include - -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/elfreloc.c b/src/user/lib/elfreloc.c index b6e3844..cf740f5 100644 --- a/src/user/lib/elfreloc.c +++ b/src/user/lib/elfreloc.c @@ -1,5 +1,5 @@ #include -#include +#include "elf.h" __attribute__((visibility("hidden"))) extern struct Elf64_Dyn _DYNAMIC[]; diff --git a/src/user/lib/esemaphore.c b/src/user/lib/esemaphore.c index 3a3aa7f..2707d11 100644 --- a/src/user/lib/esemaphore.c +++ b/src/user/lib/esemaphore.c @@ -2,7 +2,7 @@ #include #include #include -#include +#include void esem_signal(struct evil_sem *sem) { _sys_write(sem->signal, NULL, 0, 0, 0); diff --git a/src/user/lib/esemaphore.h b/src/user/lib/esemaphore.h deleted file mode 100644 index 9cc85e0..0000000 --- a/src/user/lib/esemaphore.h +++ /dev/null @@ -1,12 +0,0 @@ -#pragma once -#include - -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/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 +#include + +#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 +#include +#include + +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 + +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 + +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 +#include 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 #ifndef NO_MALLOC_H -#include +#include #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 + +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 // TODO only needed because of hid_t -#include +#include int fork(void); int close(hid_t h); diff --git a/src/user/lib/math.c b/src/user/lib/math.c index bf7c039..4f8eda4 100644 --- a/src/user/lib/math.c +++ b/src/user/lib/math.c @@ -1,5 +1,5 @@ #include -#include +#include // TODO port a libm #pragma GCC diagnostic ignored "-Wunused-parameter" diff --git a/src/user/lib/panic.h b/src/user/lib/panic.h deleted file mode 100644 index 91aec5f..0000000 --- a/src/user/lib/panic.h +++ /dev/null @@ -1,5 +0,0 @@ -#pragma once -#include -#include - -#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/stdio/file.c b/src/user/lib/stdio/file.c index 49ff861..cbacfdd 100644 --- a/src/user/lib/stdio/file.c +++ b/src/user/lib/stdio/file.c @@ -6,7 +6,7 @@ #include #include #include -#include +#include static FILE _stdin_null = { .fd = STDIN_FILENO }; static FILE _stdout_null = { .fd = STDOUT_FILENO }; diff --git a/src/user/lib/stdlib.c b/src/user/lib/stdlib.c index 85afb25..2d1f224 100644 --- a/src/user/lib/stdlib.c +++ b/src/user/lib/stdlib.c @@ -3,7 +3,7 @@ #include #include #include -#include +#include _Noreturn void abort(void) { _sys_exit(1); diff --git a/src/user/lib/string/string.c b/src/user/lib/string/string.c index 126d175..8fdc7c7 100644 --- a/src/user/lib/string/string.c +++ b/src/user/lib/string/string.c @@ -48,7 +48,7 @@ long strtol(const char *restrict s, char **restrict end, int base) { return res * sign; } -#include +#include double strtod(const char *restrict s, char **restrict end) { (void)s; (void)end; __libc_panic("unimplemented"); diff --git a/src/user/lib/thread.h b/src/user/lib/thread.h deleted file mode 100644 index 5a5ddc0..0000000 --- a/src/user/lib/thread.h +++ /dev/null @@ -1,9 +0,0 @@ -#pragma once -#include - -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/unistd.c b/src/user/lib/unistd.c index f8edd25..f81e7d8 100644 --- a/src/user/lib/unistd.c +++ b/src/user/lib/unistd.c @@ -6,7 +6,7 @@ #include #include #include -#include +#include int errno = 0; -- cgit v1.2.3