|
The Pedigree Project 0.1
|
#include <MemoryMappedFile.h>
Inheritance diagram for AnonymousMemoryMap:
Collaboration diagram for AnonymousMemoryMap:Classes | |
| struct | Page |
Public Member Functions | |
| AnonymousMemoryMap (uintptr_t address, size_t length, Permissions perms) | |
| virtual MemoryMappedObject * | clone () override |
| virtual MemoryMappedObject * | split (uintptr_t at) override |
| MemoryMappedObject * | stageSlice (uintptr_t source, size_t sourceLength, uintptr_t destination, size_t destinationLength) override |
| void | releaseDetachedPage (uintptr_t oldAddress, const VirtualAddressSpace::DetachedPage &page) override |
| void | discardRange (VirtualAddressSpace &space, uintptr_t base, size_t length) override |
| virtual bool | remove (size_t length) override |
| virtual void | setPermissions (MemoryMappedObject::Permissions perms) override |
| virtual void | unmap () override |
| virtual bool | trap (VirtualAddressSpace &space, uintptr_t address, bool bWrite, PopulationStatus *population=nullptr) override |
| bool | supportsPageOut (VirtualAddressSpace &space, uintptr_t address) override |
| SwapStatus | pageOutAt (VirtualAddressSpace &space, uintptr_t address, bool &released) override |
| bool | reclaimAnonymousPage (VirtualAddressSpace &space) override |
| SwapStatus | restoreSwapPages (VirtualAddressSpace &space) override |
| PopulationStatus | prepareResidentAccess (VirtualAddressSpace &space, uintptr_t address) override |
Public Member Functions inherited from MemoryMappedObject | |
| MemoryMappedObject (uintptr_t address, bool bCopyOnWrite, size_t length, Permissions perms, Permissions maximumPerms=Read|Write|Exec) | |
| void | setMappingOwnership (bool ownsMappings) |
| virtual File * | backingFile () const |
| virtual bool | backingRangeValid (uintptr_t source, size_t length) const |
| virtual bool | resident (VirtualAddressSpace &space, uintptr_t address, FileResidencyAccess access, void *credentials) |
| virtual bool | preparePermissions (uintptr_t base, size_t length, Permissions perms) |
| virtual bool | sync (uintptr_t at, bool async) |
| virtual bool | syncRange (uintptr_t at, size_t length, bool async) |
| virtual void | invalidate (uintptr_t at) |
| virtual bool | sharedBacking (uintptr_t at, uintptr_t &identity, size_t &offset) const |
| virtual bool | usesBacking (uintptr_t identity) const |
| virtual bool | beyondBackingEnd (uintptr_t at) const |
| virtual void | discardFilePages (VirtualAddressSpace &space, size_t end) |
| PopulationStatus | populatePage (VirtualAddressSpace &space, uintptr_t address) |
| MemoryLockMode | lockMode () const |
| virtual bool | compact () |
| bool | matches (uintptr_t address) |
| uintptr_t | address () const |
| size_t | length () const |
| Permissions | permissions () const |
| Permissions | maximumPermissions () const |
Private Member Functions | |
| bool | pageOut (VirtualAddressSpace &space) |
| SwapStatus | restorePage (VirtualAddressSpace &space, Page &page) |
| SwapStatus | restoreAll (VirtualAddressSpace &space) |
| void | unmapUnlocked () |
Static Private Member Functions | |
| static bool | initialisePhysicalPage (physical_uintptr_t physical) |
Private Attributes | |
| Tree< uintptr_t, Page > | m_Mappings |
Static Private Attributes | |
| static physical_uintptr_t | m_Zero = 0 |
Friends | |
| class | MemoryMapManager |
Additional Inherited Members | |
Public Types inherited from MemoryMappedObject | |
| typedef int | Permissions |
Static Public Attributes inherited from MemoryMappedObject | |
| static const int | None = 0x0 |
| static const int | Read = 0x1 |
| static const int | Write = 0x2 |
| static const int | Exec = 0x4 |
Protected Attributes inherited from MemoryMappedObject | |
| bool | m_bCopyOnWrite |
| uintptr_t | m_Address |
| size_t | m_Length |
| Permissions | m_Permissions |
| Permissions | m_MaximumPermissions |
| SharedPointer< MappingAttachment > | m_Attachment |
| Process * | m_OwnerProcess |
| bool | m_OwnsMappings |
| MemoryLockMode | m_LockMode |
Anonymous memory map object.
Anonymous memory maps do not map back to an actual file; they back onto a common page full of zeroes with forced copy-on-write. This is perfect for mapping in large .bss sections in binaries or for getting huge amounts of zeroed memory.
Definition at line 382 of file MemoryMappedFile.h.
| AnonymousMemoryMap::AnonymousMemoryMap | ( | uintptr_t | address, |
| size_t | length, | ||
| MemoryMappedObject::Permissions | perms | ||
| ) |
Definition at line 140 of file MemoryMappedFile.cc.
|
overridevirtual |
Definition at line 60 of file MemoryMappedAnonymous.cc.
|
overridevirtual |
Clones the existing metadata of this object into another.
Returns a MemoryMappedObject that exactly matches this one, but which can be used for reference in a new address space. Used for address space clones.
Note that mappings are automatically cloned - only clone metadata in this method.
Implements MemoryMappedObject.
Definition at line 71 of file MemoryMappedAnonymous.cc.
References MemoryMappedObject::address(), MemoryMapManager::instance(), MemoryMappedObject::m_Address, MemoryMappedObject::m_Length, and MemoryMappedObject::m_Permissions.
|
overridevirtual |
Implements MemoryMappedObject.
Definition at line 159 of file MemoryMappedAnonymous.cc.
|
staticprivate |
Definition at line 165 of file MemoryMappedFile.cc.
|
private |
Definition at line 409 of file MemoryMappedAnonymous.cc.
|
overridevirtual |
Reimplemented from MemoryMappedObject.
Definition at line 372 of file MemoryMappedAnonymous.cc.
|
overridevirtual |
Reimplemented from MemoryMappedObject.
Definition at line 439 of file MemoryMappedAnonymous.cc.
|
inlineoverridevirtual |
Reimplemented from MemoryMappedObject.
Definition at line 408 of file MemoryMappedFile.h.
|
overridevirtual |
Implements MemoryMappedObject.
Definition at line 148 of file MemoryMappedAnonymous.cc.
|
overridevirtual |
Removes pages from the start of this MemoryMappedObject.
To remove pages from the middle or end of a MemoryMappedObject, use split() and then remove()/unmap() on the returned object).
Implements MemoryMappedObject.
Definition at line 186 of file MemoryMappedAnonymous.cc.
References PhysicalMemoryManager::getPageSize(), ProcessorBase::information(), MemoryMapManager::instance(), MemoryMappedObject::length(), MemoryMappedObject::m_Address, and MemoryMappedObject::m_Length.
|
private |
Definition at line 427 of file MemoryMappedAnonymous.cc.
|
private |
Definition at line 227 of file MemoryMappedAnonymous.cc.
|
inlineoverridevirtual |
Reimplemented from MemoryMappedObject.
Definition at line 411 of file MemoryMappedFile.h.
|
overridevirtual |
Sets permissions on this object.
Resident pages retain their contents and ownership.
Implements MemoryMappedObject.
Definition at line 200 of file MemoryMappedAnonymous.cc.
References MemoryMappedObject::address(), VirtualAddressSpace::getMapping(), ProcessorBase::information(), MemoryMapManager::instance(), VirtualAddressSpace::isMapped(), MemoryMappedObject::m_Permissions, MemoryMappedObject::permissions(), and VirtualAddressSpace::setFlags().
|
overridevirtual |
Splits the metadata of this object at the given address and creates a new MemoryMappedObject that begins at the page of the split.
Implements MemoryMappedObject.
Definition at line 132 of file MemoryMappedAnonymous.cc.
References MemoryMappedObject::address(), MemoryMapManager::instance(), MemoryMappedObject::m_Address, MemoryMappedObject::m_Length, and stageSlice().
|
overridevirtual |
Prepared slices transfer existing page ownership only after publication.
Implements MemoryMappedObject.
Definition at line 102 of file MemoryMappedAnonymous.cc.
References MemoryMappedObject::address(), MemoryMapManager::instance(), MemoryMappedObject::m_Address, MemoryMappedObject::m_bCopyOnWrite, MemoryMappedObject::m_Length, and MemoryMappedObject::m_Permissions.
Referenced by split().
Here is the caller graph for this function:
|
overridevirtual |
Release memory that can be released.
Default implementation returns 'no pages released'.
Reimplemented from MemoryMappedObject.
Definition at line 347 of file MemoryMappedAnonymous.cc.
References MemoryMappedObject::address(), VirtualAddressSpace::Borrowed, VirtualAddressSpace::CopyOnWrite, VirtualAddressSpace::getMapping(), VirtualAddressSpace::isMapped(), VirtualAddressSpace::KernelMode, MemoryMappedObject::m_bCopyOnWrite, VirtualAddressSpace::NoAccess, VirtualAddressSpace::RuntimeMapping, VirtualAddressSpace::Shared, and VirtualAddressSpace::Write.
|
overridevirtual |
Trap entry
Implement this in your implementation to actually perform the mapping of memory into the address space.
Implements MemoryMappedObject.
Definition at line 263 of file MemoryMappedAnonymous.cc.
References MemoryMappedObject::address(), VirtualAddressSpace::Execute, PhysicalMemoryManager::getPageSize(), MemoryMapManager::instance(), PhysicalMemoryManager::instance(), VirtualAddressSpace::isMapped(), MemoryMappedObject::m_Permissions, VirtualAddressSpace::map(), VirtualAddressSpace::Shared, and VirtualAddressSpace::unmap().
|
overridevirtual |
Unmaps existing mappings in this object from the address space.
Implementations are expected to track these as necessary for the implementation.
Implements MemoryMappedObject.
Definition at line 218 of file MemoryMappedAnonymous.cc.
References MemoryMapManager::instance().
|
private |
Definition at line 222 of file MemoryMappedAnonymous.cc.
|
friend |
Definition at line 417 of file MemoryMappedFile.h.
Definition at line 432 of file MemoryMappedFile.h.
|
staticprivate |
Definition at line 426 of file MemoryMappedFile.h.