commit | 53e7cd1bb7ab772d4e921444bc9788926fba50e4 | [log] [tgz] |
---|---|---|
author | swissChili <swisschili@fastmail.com> | Mon Aug 02 21:55:53 2021 -0700 |
committer | swissChili <swisschili@fastmail.com> | Mon Aug 02 21:55:53 2021 -0700 |
tree | a6b1143a0421526d1797501029f88d53de9b0a0d | |
parent | 9d87678dfc65db11975a3a06922c887e41acb2a0 [diff] |
Fix segfault in Lisp when calling variadic function. Originally a segfault could occur due to an issue with how arguments were cleaned up after a variadic function call. After the function call the following assembly was generated: add esp, nargs Where nargs was the number of arguments passed to the function. This did not take in to account that for variadic functions, the last several arguments are CONS'd into one argument, meaning that calling a variadic function with <>1 variadic argument would result in a broken stack. Specifically this issue came up in the implementation of REDUCE, which relied on the variadic FUNCALL.
Bluejay is a preemptive kernel for x86. It is inspired by modern day UNIX-like systems and 80's Lisp machines. The goal is to create a fully usable kernel and graphical Lisp environment.
While Bluejay is inspired by both UNIX and Lisp machines, it seeks to replicate neither. No attempt is made to conform to POSIX or even follow UNIX conventions. However, the "UNIX philosophy" of doing one thing and doing it well is certainly a consideration.
Photo by Erin Minuskin on Unsplash
fsck
)sbrk
, mmap
, etc)spawn_process
, spawn_thread
, etc)The Bluejay manual contains out dated documentation. A complete manual will be available before the 1.0 release. For now there isn't a ton to document as the user-space API is non-existent.