This commit includes a number of changes to enable loading of PIE executables: - The loader in srv.init checks for a `PT_INTERP` segment in the program its loading, and if it exists, loads the specified interpreter and passes control to it instead of the program itself. - Added ld.so the dynamic linker executable and set it as the interpreter for all user-target programs. - Program initial stack changed again to now contain a number of possible tagged structures, including a new one for ld.so's arguments, and for passing handles tagged with protocol ids. - Added a stub for a new VFS protocol. Unused so far, but srv.init will need to serve VFS requests from ld.so once I transition libraries to shared libs for user-target programs. (Right now all executables are PIE but statically linked, so they only need internal relocations.) - Added 16 and 8 bit variants of `util::bitset`. This ended up not being used, but could be useful.
16 lines
191 B
YAML
16 lines
191 B
YAML
---
|
|
location: jsix
|
|
init: srv.init
|
|
initrd:
|
|
name: initrd.dat
|
|
format: zstd
|
|
panic:
|
|
- panic.serial
|
|
services:
|
|
- srv.logger
|
|
- testapp
|
|
drivers:
|
|
- drv.uart
|
|
- drv.uefi_fb
|
|
tools:
|
|
- ld.so |