diff --git a/kernel/include/misc/utils.h b/kernel/include/misc/utils.h index 2d009e19..0a97b1ff 100644 --- a/kernel/include/misc/utils.h +++ b/kernel/include/misc/utils.h @@ -7,4 +7,5 @@ namespace Utilities uint64_t size); // Returns how many blocks of size blocksize does size occupy. uint64_t get_rflags(); + uint64_t get_top_of_stack(uint64_t bottom, uint64_t stack_pages); } \ No newline at end of file diff --git a/kernel/src/misc/utils.cpp b/kernel/src/misc/utils.cpp index 26e58673..404deab5 100644 --- a/kernel/src/misc/utils.cpp +++ b/kernel/src/misc/utils.cpp @@ -1,5 +1,9 @@ #include "misc/utils.h" +#ifndef PAGE_SIZE +#define PAGE_SIZE 4096 +#endif + uint64_t Utilities::get_blocks_from_size(uint64_t blocksize, uint64_t size) { return (size + (blocksize - 1)) / blocksize; @@ -9,4 +13,9 @@ extern "C" uint64_t asm_get_rflags(); uint64_t Utilities::get_rflags() { return asm_get_rflags(); +} + +uint64_t Utilities::get_top_of_stack(uint64_t bottom, uint64_t stack_pages) +{ + return bottom + (stack_pages * PAGE_SIZE) - sizeof(uintptr_t); } \ No newline at end of file