mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-11-04 07:38:47 +00:00 
			
		
		
		
	Memory: move memory chunk into pImpl and make them dynamically allocated
Otherwise MSVC would give out-of-memory error on compile time
This commit is contained in:
		
							parent
							
								
									ac1cda21c3
								
							
						
					
					
						commit
						7e8ba6ed8e
					
				
					 6 changed files with 64 additions and 36 deletions
				
			
		| 
						 | 
				
			
			@ -188,10 +188,10 @@ ResultVal<VAddr> Process::HeapAllocate(VAddr target, u32 size, VMAPermission per
 | 
			
		|||
        u32 interval_size = interval.upper() - interval.lower();
 | 
			
		||||
        LOG_DEBUG(Kernel, "Allocated FCRAM region lower={:08X}, upper={:08X}", interval.lower(),
 | 
			
		||||
                  interval.upper());
 | 
			
		||||
        std::fill(kernel.memory.fcram.begin() + interval.lower(),
 | 
			
		||||
                  kernel.memory.fcram.begin() + interval.upper(), 0);
 | 
			
		||||
        std::fill(kernel.memory.GetFCRAMPointer(interval.lower()),
 | 
			
		||||
                  kernel.memory.GetFCRAMPointer(interval.upper()), 0);
 | 
			
		||||
        auto vma = vm_manager.MapBackingMemory(interval_target,
 | 
			
		||||
                                               kernel.memory.fcram.data() + interval.lower(),
 | 
			
		||||
                                               kernel.memory.GetFCRAMPointer(interval.lower()),
 | 
			
		||||
                                               interval_size, memory_state);
 | 
			
		||||
        ASSERT(vma.Succeeded());
 | 
			
		||||
        vm_manager.Reprotect(vma.Unwrap(), perms);
 | 
			
		||||
| 
						 | 
				
			
			@ -263,7 +263,7 @@ ResultVal<VAddr> Process::LinearAllocate(VAddr target, u32 size, VMAPermission p
 | 
			
		|||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    u8* backing_memory = kernel.memory.fcram.data() + physical_offset;
 | 
			
		||||
    u8* backing_memory = kernel.memory.GetFCRAMPointer(physical_offset);
 | 
			
		||||
 | 
			
		||||
    std::fill(backing_memory, backing_memory + size, 0);
 | 
			
		||||
    auto vma = vm_manager.MapBackingMemory(target, backing_memory, size, MemoryState::Continuous);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -43,8 +43,8 @@ ResultVal<SharedPtr<SharedMemory>> KernelSystem::CreateSharedMemory(
 | 
			
		|||
 | 
			
		||||
        ASSERT_MSG(offset, "Not enough space in region to allocate shared memory!");
 | 
			
		||||
 | 
			
		||||
        std::fill(memory.fcram.data() + *offset, memory.fcram.data() + *offset + size, 0);
 | 
			
		||||
        shared_memory->backing_blocks = {{memory.fcram.data() + *offset, size}};
 | 
			
		||||
        std::fill(memory.GetFCRAMPointer(*offset), memory.GetFCRAMPointer(*offset + size), 0);
 | 
			
		||||
        shared_memory->backing_blocks = {{memory.GetFCRAMPointer(*offset), size}};
 | 
			
		||||
        shared_memory->holding_memory += MemoryRegionInfo::Interval(*offset, *offset + size);
 | 
			
		||||
        shared_memory->linear_heap_phys_offset = *offset;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -86,8 +86,8 @@ SharedPtr<SharedMemory> KernelSystem::CreateSharedMemoryForApplet(
 | 
			
		|||
    shared_memory->other_permissions = other_permissions;
 | 
			
		||||
    for (const auto& interval : backing_blocks) {
 | 
			
		||||
        shared_memory->backing_blocks.push_back(
 | 
			
		||||
            {memory.fcram.data() + interval.lower(), interval.upper() - interval.lower()});
 | 
			
		||||
        std::fill(memory.fcram.data() + interval.lower(), memory.fcram.data() + interval.upper(),
 | 
			
		||||
            {memory.GetFCRAMPointer(interval.lower()), interval.upper() - interval.lower()});
 | 
			
		||||
        std::fill(memory.GetFCRAMPointer(interval.lower()), memory.GetFCRAMPointer(interval.upper()),
 | 
			
		||||
                  0);
 | 
			
		||||
    }
 | 
			
		||||
    shared_memory->base_address = Memory::HEAP_VADDR + offset;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -355,7 +355,7 @@ ResultVal<SharedPtr<Thread>> KernelSystem::CreateThread(std::string name, VAddr
 | 
			
		|||
 | 
			
		||||
        // Map the page to the current process' address space.
 | 
			
		||||
        vm_manager.MapBackingMemory(Memory::TLS_AREA_VADDR + available_page * Memory::PAGE_SIZE,
 | 
			
		||||
                                    memory.fcram.data() + *offset, Memory::PAGE_SIZE,
 | 
			
		||||
                                    memory.GetFCRAMPointer(*offset), Memory::PAGE_SIZE,
 | 
			
		||||
                                    MemoryState::Locked);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue