| Age | Commit message (Collapse) | Author |
|
|
|
+ At least by my standards. Some amount of scripting going on, but
should still be fine.
Effectively, source.mk contains information to build the test,
check.mk checks the generated log from running the test. As a results,
check.mk should output OK into reports/$TEST/OK if everything went
well, and anything else otherwise. The user can then look at
reports/$TEST/log to see what went wrong.
I expect to add some more features, such as starting QEMU with gdb and
running a single test a bit easier than right now (same limitation as
in the top level makefile, i.e. you have to specify
make -f scripts/makefile $TEST
from within `tests` and you must have ran `make check` at that point
so that `tests.mk` is fully generated. Not huge issues, but slightly
annoying, somewhat unsure how to work around them properly but we'll
see.
|
|
|
|
+ Anything extern is right out as LLVM doesn't produce correct code for
them. Maybe if I added some extra attributes but I'm skeptical.
Replaced with static variables and getters/setters.
+ Inline ASM is apparently a bit buggy, so use an assembly stub when jumping to init.
+ Minimize work done in main() to minimize chance of LLVM doing something silly.
Still not 100% certain that I shouldn't just write the main() as an assembly stub
in arch/riscv64 to be absolutely sure everything works as intended.
+ Make .kernel.start section SHF_ALLOC, otherwise lld complains about
pc-relative addressing
Probably some other stuff as well that I'm forgetting right now. But at least with
LLVM14 LTO seems to work, which is pretty cool?
|
|
+ Took some fairly significant changes, for one the kernel is no longer
relocated at the start of a boot, instead it sits wherever the user
decides the kernel should sit. Similarly, the initial kernel stack and
page table are stored within the binary, slightly bloating the size
but making it much safer to boot since there's really no chance of us
overwriting the fdt or initrd in memory.
|
|
+ Compiling for size emits memcpy() calls after they've already been
removed by LTO, so add __used attribute to counteract this.
Newer versions of GCC seem to prefer `-flto=auto` to just `-flto`, so
use that.
printf format %d -> %ld
|
|
+ First part generates deps.mk, second part reads it.
Allows us to use both bmake and gmake with the same makefiles.
Only drawback seems to be that the first makefile considers all
individual files as 'finished' targets, meaning that it's more
difficult to do something like
make kernel.elf
though I haven't found this to be an issue.
|
|
+ Both kind of go hand in hand, made sense to do both at the same time.
Some parts feel slightly hacky, the loader works by placing everything
on the stack and avoiding global values. Still, seems to work?
|
|
|
|
|
|
|
|
+ Next step, start documenting contents of each file.
|
|
+ Turns out I had a dumb debugging echo that was messing up my variables. Oh well.
+ I'd still like to get riscv64-unknown-elf-gcc to compile, currently I've only managed with riscv64--netbsd-gcc, weird. Also, I have learned that BSD make doesn't use $< for some reason, so all rules should reference the full file name henceforth. BSD make does use $@, but for consistency I did away with it as well.
|
|
+ Doesn't quite compile all the way unfortunately, building the GNU toolchain on NetBSD is a bit more difficult than I was expecting. LLVM does compile, but fails to link for some reason.
|
|
|
|
|
|
|
|
+ Runs a syntax check on all files of the selected arch
|
|
This reverts commit 69d13626a37e33f31627a1144605a8fb93684d25.
|
|
+ Not sure if I should go with noinit or init, fuck
|
|
|
|
|
|
+ Will probably still need a fair bit of tweakind and documentation
improvements, but seems to work outside of the kernel. Also no valgrind
errors, which is quite promising I guess.
|
|
|
|
|
|
|