diff options
| author | 2021-02-12 17:02:51 -0800 | |
|---|---|---|
| committer | 2021-02-18 16:16:25 -0800 | |
| commit | 65e0178cc09299550aee949d7b89e211017bddee (patch) | |
| tree | 97abf71a48320fc5628b4946d793191f2fb9dbb0 /src/core/hle/service | |
| parent | hle: kernel: Migrate SlabHeap to KSlabHeap. (diff) | |
| download | yuzu-65e0178cc09299550aee949d7b89e211017bddee.tar.gz yuzu-65e0178cc09299550aee949d7b89e211017bddee.tar.xz yuzu-65e0178cc09299550aee949d7b89e211017bddee.zip | |
hle: kernel: Migrate to KMemoryBlock, KMemoryBlockManager, and others.
Diffstat (limited to 'src/core/hle/service')
| -rw-r--r-- | src/core/hle/service/ldr/ldr.cpp | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/src/core/hle/service/ldr/ldr.cpp b/src/core/hle/service/ldr/ldr.cpp index d3cd25ff8..b42184a3b 100644 --- a/src/core/hle/service/ldr/ldr.cpp +++ b/src/core/hle/service/ldr/ldr.cpp | |||
| @@ -289,10 +289,10 @@ public: | |||
| 289 | 289 | ||
| 290 | bool ValidateRegionForMap(Kernel::Memory::PageTable& page_table, VAddr start, | 290 | bool ValidateRegionForMap(Kernel::Memory::PageTable& page_table, VAddr start, |
| 291 | std::size_t size) const { | 291 | std::size_t size) const { |
| 292 | constexpr std::size_t padding_size{4 * Kernel::Memory::PageSize}; | 292 | constexpr std::size_t padding_size{4 * Kernel::PageSize}; |
| 293 | const auto start_info{page_table.QueryInfo(start - 1)}; | 293 | const auto start_info{page_table.QueryInfo(start - 1)}; |
| 294 | 294 | ||
| 295 | if (start_info.state != Kernel::Memory::MemoryState::Free) { | 295 | if (start_info.state != Kernel::KMemoryState::Free) { |
| 296 | return {}; | 296 | return {}; |
| 297 | } | 297 | } |
| 298 | 298 | ||
| @@ -302,7 +302,7 @@ public: | |||
| 302 | 302 | ||
| 303 | const auto end_info{page_table.QueryInfo(start + size)}; | 303 | const auto end_info{page_table.QueryInfo(start + size)}; |
| 304 | 304 | ||
| 305 | if (end_info.state != Kernel::Memory::MemoryState::Free) { | 305 | if (end_info.state != Kernel::KMemoryState::Free) { |
| 306 | return {}; | 306 | return {}; |
| 307 | } | 307 | } |
| 308 | 308 | ||
| @@ -312,11 +312,10 @@ public: | |||
| 312 | VAddr GetRandomMapRegion(const Kernel::Memory::PageTable& page_table, std::size_t size) const { | 312 | VAddr GetRandomMapRegion(const Kernel::Memory::PageTable& page_table, std::size_t size) const { |
| 313 | VAddr addr{}; | 313 | VAddr addr{}; |
| 314 | const std::size_t end_pages{(page_table.GetAliasCodeRegionSize() - size) >> | 314 | const std::size_t end_pages{(page_table.GetAliasCodeRegionSize() - size) >> |
| 315 | Kernel::Memory::PageBits}; | 315 | Kernel::PageBits}; |
| 316 | do { | 316 | do { |
| 317 | addr = page_table.GetAliasCodeRegionStart() + | 317 | addr = page_table.GetAliasCodeRegionStart() + |
| 318 | (Kernel::KSystemControl::GenerateRandomRange(0, end_pages) | 318 | (Kernel::KSystemControl::GenerateRandomRange(0, end_pages) << Kernel::PageBits); |
| 319 | << Kernel::Memory::PageBits); | ||
| 320 | } while (!page_table.IsInsideAddressSpace(addr, size) || | 319 | } while (!page_table.IsInsideAddressSpace(addr, size) || |
| 321 | page_table.IsInsideHeapRegion(addr, size) || | 320 | page_table.IsInsideHeapRegion(addr, size) || |
| 322 | page_table.IsInsideAliasRegion(addr, size)); | 321 | page_table.IsInsideAliasRegion(addr, size)); |
| @@ -387,7 +386,7 @@ public: | |||
| 387 | const VAddr data_start{start + nro_header.segment_headers[DATA_INDEX].memory_offset}; | 386 | const VAddr data_start{start + nro_header.segment_headers[DATA_INDEX].memory_offset}; |
| 388 | const VAddr bss_start{data_start + nro_header.segment_headers[DATA_INDEX].memory_size}; | 387 | const VAddr bss_start{data_start + nro_header.segment_headers[DATA_INDEX].memory_size}; |
| 389 | const VAddr bss_end_addr{ | 388 | const VAddr bss_end_addr{ |
| 390 | Common::AlignUp(bss_start + nro_header.bss_size, Kernel::Memory::PageSize)}; | 389 | Common::AlignUp(bss_start + nro_header.bss_size, Kernel::PageSize)}; |
| 391 | 390 | ||
| 392 | auto CopyCode{[&](VAddr src_addr, VAddr dst_addr, u64 size) { | 391 | auto CopyCode{[&](VAddr src_addr, VAddr dst_addr, u64 size) { |
| 393 | std::vector<u8> source_data(size); | 392 | std::vector<u8> source_data(size); |
| @@ -402,12 +401,12 @@ public: | |||
| 402 | nro_header.segment_headers[DATA_INDEX].memory_size); | 401 | nro_header.segment_headers[DATA_INDEX].memory_size); |
| 403 | 402 | ||
| 404 | CASCADE_CODE(process->PageTable().SetCodeMemoryPermission( | 403 | CASCADE_CODE(process->PageTable().SetCodeMemoryPermission( |
| 405 | text_start, ro_start - text_start, Kernel::Memory::MemoryPermission::ReadAndExecute)); | 404 | text_start, ro_start - text_start, Kernel::KMemoryPermission::ReadAndExecute)); |
| 406 | CASCADE_CODE(process->PageTable().SetCodeMemoryPermission( | 405 | CASCADE_CODE(process->PageTable().SetCodeMemoryPermission(ro_start, data_start - ro_start, |
| 407 | ro_start, data_start - ro_start, Kernel::Memory::MemoryPermission::Read)); | 406 | Kernel::KMemoryPermission::Read)); |
| 408 | 407 | ||
| 409 | return process->PageTable().SetCodeMemoryPermission( | 408 | return process->PageTable().SetCodeMemoryPermission( |
| 410 | data_start, bss_end_addr - data_start, Kernel::Memory::MemoryPermission::ReadAndWrite); | 409 | data_start, bss_end_addr - data_start, Kernel::KMemoryPermission::ReadAndWrite); |
| 411 | } | 410 | } |
| 412 | 411 | ||
| 413 | void LoadNro(Kernel::HLERequestContext& ctx) { | 412 | void LoadNro(Kernel::HLERequestContext& ctx) { |