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")
|
if("${ARCH}" MATCHES "x86_64")
|
||||||
set(ASM_SOURCES
|
set(ASM_SOURCES
|
||||||
src/arch/x86_64/CPU.asm
|
src/arch/x86_64/CPU.asm
|
||||||
|
src/arch/x86_64/Entry.asm
|
||||||
)
|
)
|
||||||
add_library(moon-asm STATIC ${ASM_SOURCES})
|
add_library(moon-asm STATIC ${ASM_SOURCES})
|
||||||
target_link_libraries(moon moon-asm)
|
target_link_libraries(moon moon-asm)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
ENTRY(_start)
|
ENTRY(_main)
|
||||||
OUTPUT_FORMAT(elf64-x86-64)
|
OUTPUT_FORMAT(elf64-x86-64)
|
||||||
|
|
||||||
mmio = 0xfffffffff8000000; /* these are configurable for level 2 loaders */
|
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 {};
|
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()
|
u64 free()
|
||||||
{
|
{
|
||||||
return free_mem;
|
return free_mem;
|
||||||
|
@ -17,6 +17,9 @@ namespace MemoryManager
|
|||||||
Result<void> remap(u64 address, usize count, int flags);
|
Result<void> remap(u64 address, usize count, int flags);
|
||||||
Result<void> remap_unaligned(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 free();
|
||||||
u64 used();
|
u64 used();
|
||||||
u64 reserved();
|
u64 reserved();
|
||||||
|
@ -104,6 +104,13 @@ template <typename T> class Result
|
|||||||
return other;
|
return other;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool try_set_value(T& ref)
|
||||||
|
{
|
||||||
|
if (!has_value()) return false;
|
||||||
|
ref = m_storage.fetch_reference();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
T release_value()
|
T release_value()
|
||||||
{
|
{
|
||||||
check(has_value());
|
check(has_value());
|
||||||
|
Loading…
Reference in New Issue
Block a user