removes external dependency on tinf by replacing the compression algorithm with a simpler, faster, smaller and more auditable fixed-width LZ77 encoding purpose-tailored to x86 code mixed with data.
before: decompressor.bin 2,492 bytes (tinf dependency) with .text 0x875 and .rodata 0x13c bytes each.
after: decompressor.bin consists only of .text, 0xe6-byte decompressor; 90.8% reduction in decompressor volume.
the dependency on gzip during compile-time is replaced by host/limlzpack.c, a Lempel-Ziv encoder in 275 SLoC that uses a suffix array matchfinder (prefix-doubling in mathcal O(n log^2 n) and Storer-Szymanski backwards parse. the fixed-width formats packets as [F][LLLL][MMM], favouring a literal-skewed distribution with F switching between one-byte and two-byte offsets (favouring recent statistics).
integrity checking is done via crc32 with the polynomial 0xEDB88320, reflected.
the effective loss in compression ratio by using a tremendously simpler and less packed with edge cases algorithm causes a compression ratio hit well below 1KB, factoring in the stub sizes.
also adds new machinery for host cc detection per review.
* protos/limine: Add dtb_path config option
* test: Add a device tree and dtb_path to the config
* docs: Add dtb_path configuration information
* protos/limine: Fix missing argument for dtb_path for x86
* protos/limine: Correct panic message argument
* protos/limine: Use freadall instead of freadall_mode
This inits a flake.nix into the repository that exports a convenient Nix shell.
When using `$ nix develop`, users will get a shell with all relevant tools to
build the repository. If one uses a "direnv" integration into their shell, the
environment is automatically loaded.
* initial riscv64 port
* enable Paging Mode feature for all architectures
* riscv: add missing protocol docs
* riscv: fix tests
* docs: clarify `LIMINE_PAGING_MODE_DEFAULT` macro
* build: fix whitespace in common/GNUmakefile
* riscv: default to Sv48 paging when supported
* vmm: make `VMM_MAX_LEVEL` 1-indexed
* limine: do not call `reported_addr()` before finaling paging mode
smp/riscv: do not overwrite the argument passed to APs
* limine/riscv: update default paging mode in limine.h
* test/riscv: pad OVMF.fd when downloading it