diff options
author | Benji Dial <benji6283@gmail.com> | 2020-09-06 00:48:07 -0400 |
---|---|---|
committer | Benji Dial <benji6283@gmail.com> | 2020-09-06 00:48:07 -0400 |
commit | e8c6577617bffa4402c07c7aa20e3c24f03c1c20 (patch) | |
tree | 2fb9230b62d2344a44453117de9e656892219788 /src/user/knob/quit.c | |
parent | 7ff724fe8f709440da9c730fdb8dcbaa4f989ed5 (diff) | |
download | portland-os-e8c6577617bffa4402c07c7aa20e3c24f03c1c20.tar.gz |
program loading, others
big kernel additions: paging, elf loading, separate kernel and user page allocation
it now properly loads and runs sd0:bin/init.elf
still need to determine which disk was booted from, and start the init on that disk
Diffstat (limited to 'src/user/knob/quit.c')
-rw-r--r-- | src/user/knob/quit.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/user/knob/quit.c b/src/user/knob/quit.c new file mode 100644 index 0000000..a2ef5aa --- /dev/null +++ b/src/user/knob/quit.c @@ -0,0 +1,29 @@ +#include <pland/syscall.h> +#include <knob/heap.h> + +struct quit_list_node { + struct quit_list_node *prev; + void (*f)(); +}; + +static struct quit_list_node head = { + .f = &_exit_task +}; + +static struct quit_list_node *last = &head; + +void on_quit(void (*run_f)()) { + struct quit_list_node *new = get_block(sizeof(struct quit_list_node)); + new->prev = last; + new->f = run_f; + last = new; +} + +__attribute__ ((noreturn)) +void quit() { + struct quit_list_node *node = last; + while (1) { + node->f(); + node = node->prev; + } +}
\ No newline at end of file |