Compare commits
3 Commits
883a1da0d7
...
047f445651
Author | SHA1 | Date | |
---|---|---|---|
047f445651 | |||
424b069d55 | |||
db3e34b2ba |
@ -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)
|
||||
|
@ -1,4 +1,4 @@
|
||||
ENTRY(_start)
|
||||
ENTRY(_main)
|
||||
OUTPUT_FORMAT(elf64-x86-64)
|
||||
|
||||
mmio = 0xfffffffff8000000; /* these are configurable for level 2 loaders */
|
||||
|
6
kernel/src/arch/x86_64/Entry.asm
Normal file
6
kernel/src/arch/x86_64/Entry.asm
Normal file
@ -0,0 +1,6 @@
|
||||
global _main
|
||||
extern _start
|
||||
|
||||
_main:
|
||||
xor rbp, rbp
|
||||
call _start
|
@ -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;
|
||||
|
@ -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();
|
||||
|
@ -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());
|
||||
|
Loading…
Reference in New Issue
Block a user