forked from eden-emu/eden
kernel: add KPageTableBase
Co-authored-by: Kelebek1 <eeeedddccc@hotmail.co.uk>
This commit is contained in:
parent
2f9487cd38
commit
2a255b2d61
31 changed files with 7202 additions and 4877 deletions
|
|
@ -29,7 +29,8 @@ constexpr bool IsValidAddressRange(u64 address, u64 size) {
|
|||
// Helper function that performs the common sanity checks for svcMapMemory
|
||||
// and svcUnmapMemory. This is doable, as both functions perform their sanitizing
|
||||
// in the same order.
|
||||
Result MapUnmapMemorySanityChecks(const KPageTable& manager, u64 dst_addr, u64 src_addr, u64 size) {
|
||||
Result MapUnmapMemorySanityChecks(const KProcessPageTable& manager, u64 dst_addr, u64 src_addr,
|
||||
u64 size) {
|
||||
if (!Common::Is4KBAligned(dst_addr)) {
|
||||
LOG_ERROR(Kernel_SVC, "Destination address is not aligned to 4KB, 0x{:016X}", dst_addr);
|
||||
R_THROW(ResultInvalidAddress);
|
||||
|
|
@ -123,7 +124,8 @@ Result SetMemoryAttribute(Core::System& system, u64 address, u64 size, u32 mask,
|
|||
R_UNLESS(page_table.Contains(address, size), ResultInvalidCurrentMemory);
|
||||
|
||||
// Set the memory attribute.
|
||||
R_RETURN(page_table.SetMemoryAttribute(address, size, mask, attr));
|
||||
R_RETURN(page_table.SetMemoryAttribute(address, size, static_cast<KMemoryAttribute>(mask),
|
||||
static_cast<KMemoryAttribute>(attr)));
|
||||
}
|
||||
|
||||
/// Maps a memory range into a different range.
|
||||
|
|
|
|||
|
|
@ -16,7 +16,14 @@ Result SetHeapSize(Core::System& system, u64* out_address, u64 size) {
|
|||
R_UNLESS(size < MainMemorySizeMax, ResultInvalidSize);
|
||||
|
||||
// Set the heap size.
|
||||
R_RETURN(GetCurrentProcess(system.Kernel()).GetPageTable().SetHeapSize(out_address, size));
|
||||
KProcessAddress address{};
|
||||
R_TRY(GetCurrentProcess(system.Kernel())
|
||||
.GetPageTable()
|
||||
.SetHeapSize(std::addressof(address), size));
|
||||
|
||||
// We succeeded.
|
||||
*out_address = GetInteger(address);
|
||||
R_SUCCEED();
|
||||
}
|
||||
|
||||
/// Maps memory at a desired address
|
||||
|
|
|
|||
|
|
@ -247,8 +247,7 @@ Result UnmapProcessCodeMemory(Core::System& system, Handle process_handle, u64 d
|
|||
R_THROW(ResultInvalidCurrentMemory);
|
||||
}
|
||||
|
||||
R_RETURN(page_table.UnmapCodeMemory(dst_address, src_address, size,
|
||||
KPageTable::ICacheInvalidationStrategy::InvalidateAll));
|
||||
R_RETURN(page_table.UnmapCodeMemory(dst_address, src_address, size));
|
||||
}
|
||||
|
||||
Result SetProcessMemoryPermission64(Core::System& system, Handle process_handle, uint64_t address,
|
||||
|
|
|
|||
|
|
@ -31,12 +31,12 @@ Result QueryProcessMemory(Core::System& system, uint64_t out_memory_info, PageIn
|
|||
}
|
||||
|
||||
auto& current_memory{GetCurrentMemory(system.Kernel())};
|
||||
const auto memory_info{process->GetPageTable().QueryInfo(address).GetSvcMemoryInfo()};
|
||||
|
||||
current_memory.WriteBlock(out_memory_info, std::addressof(memory_info), sizeof(memory_info));
|
||||
KMemoryInfo mem_info;
|
||||
R_TRY(process->GetPageTable().QueryInfo(std::addressof(mem_info), out_page_info, address));
|
||||
|
||||
//! This is supposed to be part of the QueryInfo call.
|
||||
*out_page_info = {};
|
||||
const auto svc_mem_info = mem_info.GetSvcMemoryInfo();
|
||||
current_memory.WriteBlock(out_memory_info, std::addressof(svc_mem_info), sizeof(svc_mem_info));
|
||||
|
||||
R_SUCCEED();
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue