Compare commits

...

3 Commits

Author SHA1 Message Date
047f445651 Kernel: Add helpers to validate memory addresses 2022-11-19 18:38:47 +01:00
424b069d55 Kernel: Start the call stack with a null RBP on x86_64 2022-11-19 18:38:32 +01:00
db3e34b2ba Result: Add try_set_value()
This helper returns true if the Result contains a value, or false if it doesn't.
Additionally, if it has a value, it sets the passed reference to it.
2022-11-19 18:38:01 +01:00
6 changed files with 33 additions and 1 deletions

View File

@ -21,6 +21,7 @@ add_executable(moon ${SOURCES})
if("${ARCH}" MATCHES "x86_64")
set(ASM_SOURCES
src/arch/x86_64/CPU.asm
src/arch/x86_64/Entry.asm
)
add_library(moon-asm STATIC ${ASM_SOURCES})
target_link_libraries(moon moon-asm)

View File

@ -1,4 +1,4 @@
ENTRY(_start)
ENTRY(_main)
OUTPUT_FORMAT(elf64-x86-64)
mmio = 0xfffffffff8000000; /* these are configurable for level 2 loaders */

View File

@ -0,0 +1,6 @@
global _main
extern _start
_main:
xor rbp, rbp
call _start

View File

@ -184,6 +184,21 @@ namespace MemoryManager
return {};
}
bool validate_readable_page(u64 address)
{
auto rc = MMU::get_flags(address);
if (rc.has_error()) return false;
return true;
}
bool validate_writable_page(u64 address)
{
auto rc = MMU::get_flags(address);
if (rc.has_error()) return false;
if (rc.release_value() & MMU::ReadWrite) return true;
return false;
}
u64 free()
{
return free_mem;

View File

@ -17,6 +17,9 @@ namespace MemoryManager
Result<void> remap(u64 address, usize count, int flags);
Result<void> remap_unaligned(u64 address, usize count, int flags);
bool validate_readable_page(u64 address);
bool validate_writable_page(u64 address);
u64 free();
u64 used();
u64 reserved();

View File

@ -104,6 +104,13 @@ template <typename T> class Result
return other;
}
bool try_set_value(T& ref)
{
if (!has_value()) return false;
ref = m_storage.fetch_reference();
return true;
}
T release_value()
{
check(has_value());