summaryrefslogtreecommitdiffstats
path: root/src/core/hle/kernel/vm_manager.h (follow)
Commit message (Collapse)AuthorAgeFilesLines
* vm_manager: Correct ordering of last two struct members of MemoryInfoLioncash2018-12-121-2/+2
| | | | These should be swapped.
* vm_manager: Amend the returned values for invalid memory queries in QueryMemory()Lioncash2018-12-121-0/+3
| | | | | | The kernel returns a memory info instance with the base address set to the end of the address space, and the size of said block as 0 - address_space_end, it doesn't set both of said members to zero.
* vm_manager: Migrate memory querying to the VMManager interfaceLioncash2018-12-121-1/+9
| | | | | Gets rid of the need to directly access the managed VMAs outside of the memory manager itself just for querying memory.
* vm_manager: Migrate MemoryInfo and PageInfo to vm_manager.hLioncash2018-12-121-0/+15
| | | | | | | | | Gets the two structures out of an unrelated header and places them with the rest of the memory management code. This also corrects the structures. PageInfo appears to only contain a 32-bit flags member, and the extra padding word in MemoryInfo isn't necessary.
* vm_manager: Amend MemoryState enum membersLioncash2018-12-121-21/+105
| | | | | | | | Amends the MemoryState enum to use the same values like the actual kernel does. Also provides the necessary operators to operate on them. This will be necessary in the future for implementing svcSetMemoryAttribute, as memory block state is checked before applying the attribute.
* vm_manager: Make vma_map privateLioncash2018-12-061-10/+16
| | | | | | | | | | | This was only ever public so that code could check whether or not a handle was valid or not. Instead of exposing the object directly and allowing external code to potentially mess with the map contents, we just provide a member function that allows checking whether or not a handle is valid. This makes all member variables of the VMManager class private except for the page table.
* ldr_ro: Add error check for memory allocation failureZach Hilman2018-11-181-1/+2
|
* kernel/process: Migrate heap-related memory management out of the process class and into the vm managerLioncash2018-11-131-0/+15
| | | | | Avoids a breach of responsibilities in the interface and keeps the direct code for memory management within the VMManager class.
* Kernel/Memory: Added a function to first a suitable guest address at which to allocate a region of a given size.bunnei2018-10-261-0/+8
|
* svc: Add missing sanitizing checks for MapSharedMemory/UnmapSharedMemoryLioncash2018-10-181-0/+3
| | | | | | | | Now that the changes clarifying the address spaces has been merged, we can wrap the checks that the kernel performs when mapping shared memory (and other forms of memory) into its own helper function and then use those within MapSharedMemory and UnmapSharedMemory to complete the sanitizing checks that are supposed to be done.
* svc: Clarify enum values for AddressSpaceBaseAddr and AddressSpaceSize in svcGetInfo()Lioncash2018-10-151-0/+12
| | | | | | | | | | | | | So, one thing that's puzzled me is why the kernel seemed to *not* use the direct code address ranges in some cases for some service functions. For example, in svcMapMemory, the full address space width is compared against for validity, but for svcMapSharedMemory, it compares against 0xFFE00000, 0xFF8000000, and 0x7FF8000000 as upper bounds, and uses either 0x200000 or 0x8000000 as the lower-bounds as the beginning of the compared range. Coincidentally, these exact same values are also used in svcGetInfo, and also when initializing the user address space, so this is actually retrieving the ASLR extents, not the extents of the address space in general.
* svc: Report correct memory-related values within some of the cases in svcGetInfo()Lioncash2018-09-251-9/+6
| | | | | | Previously, these were reporting hardcoded values, but given the regions can change depending on the requested address spaces, these need to report the values that the memory manager contains.
* memory: Dehardcode the use of a 36-bit address spaceLioncash2018-09-251-0/+3
| | | | | Given games can also request a 32-bit or 39-bit address space, we shouldn't be hardcoding the address space range as 36-bit.
* process/vm_manager: Amend API to allow reading parameters from NPDM metadataLioncash2018-09-241-2/+82
| | | | | | | | | Rather than hard-code the address range to be 36-bit, we can derive the parameters from supplied NPDM metadata if the supplied exectuable supports it. This is the bare minimum necessary for this to be possible. The following commits will rework the memory code further to adjust to this.
* Port #4182 from Citra: "Prefix all size_t with std::"fearlessTobi2018-09-151-2/+2
|
* kernel/vm_manager: Use const where applicableLioncash2018-08-021-4/+4
| | | | Makes our immutable state explicit.
* core: Replace usages of LOG_GENERIC with new fmt-capable equivalentsLioncash2018-04-271-1/+1
|
* svc: Use more correct values for GetInfo MapRegion and NewMapRegion.bunnei2018-03-161-9/+0
|
* MemoryState: Add additional memory states and improve naming.bunnei2018-03-161-10/+19
|
* memory: Replace all memory hooking with Special regionsMerryMage2018-01-271-3/+3
|
* svc: Fix svcGetInfo MapRegionBaseAddr.bunnei2018-01-191-0/+3
|
* vm_manager: Use a more reasonable MAX_ADDRESS size.bunnei2018-01-031-5/+4
|
* vm_manager: Stub out a bunch of interfaces used by svcGetInfo.bunnei2018-01-011-0/+18
|
* hle: Fix QueryMemory response for MemoryInfo.bunnei2017-10-201-11/+8
|
* Merge remote-tracking branch 'upstream/master' into nxbunnei2017-10-101-1/+5
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | # Conflicts: # src/core/CMakeLists.txt # src/core/arm/dynarmic/arm_dynarmic.cpp # src/core/arm/dyncom/arm_dyncom.cpp # src/core/hle/kernel/process.cpp # src/core/hle/kernel/thread.cpp # src/core/hle/kernel/thread.h # src/core/hle/kernel/vm_manager.cpp # src/core/loader/3dsx.cpp # src/core/loader/elf.cpp # src/core/loader/ncch.cpp # src/core/memory.cpp # src/core/memory.h # src/core/memory_setup.h
| * Kernel/Memory: Give each Process its own page table.Subv2017-09-101-1/+5
| | | | | | | | The loader is in charge of setting the newly created process's page table as the main one during the loading process.
* | core: Various changes to support 64-bit addressing.bunnei2017-09-301-10/+10
|/
* Kernel: Centralize error definitions in errors.hYuri Kunde Schlesner2017-05-251-8/+0
|
* Remove empty newlines in #include blocks.Emmanuel Gil Peyrot2016-09-211-2/+0
| | | | | | | This makes clang-format useful on those. Also add a bunch of forgotten transitive includes, which otherwise prevented compilation.
* Sources: Run clang-format on everything.Emmanuel Gil Peyrot2016-09-181-10/+11
|
* Memory: Implement MMIOMerryMage2016-01-301-1/+4
|
* Kernel: Properly implement ControlMemory FREE and COMMITYuri Kunde Schlesner2015-08-161-3/+21
|
* VMManager: Introduce names for used ResultCodesYuri Kunde Schlesner2015-08-161-0/+8
|
* VMManager: Make LogLayout log level configurable as a parameterYuri Kunde Schlesner2015-08-161-1/+1
|
* VMManager: Change block offsets to size_tYuri Kunde Schlesner2015-08-161-2/+2
|
* Core: Properly configure address space when loading a binaryYuri Kunde Schlesner2015-07-121-1/+5
| | | | | | The code now properly configures the process image to match the loaded binary segments (code, rodata, data) instead of just blindly allocating a large chunk of dummy memory.
* Core: Cleanup core includes.Emmanuel Gil Peyrot2015-06-281-1/+0
|
* Kernel: Add VMManager to manage process address spacesYuri Kunde Schlesner2015-05-271-0/+200
This enables more dynamic management of the process address space, compared to just directly configuring the page table for major areas. This will serve as the foundation upon which the rest of the Kernel memory management functions will be built.