diff options
| author | bunnei <bunneidev@gmail.com> | 2018-03-16 18:22:14 -0400 | 
|---|---|---|
| committer | bunnei <bunneidev@gmail.com> | 2018-03-16 18:32:24 -0400 | 
| commit | 403f8e79eaade7209c6cfd7a9d4334ce5add28df (patch) | |
| tree | 71ab181d8299e7608fa3f856ee0394d66ee55c8f /src/core/arm | |
| parent | 34a29ad051c271fef8328d9925fa7d0031ce2534 (diff) | |
arm_interface: Support unmapping previously mapped memory.
Diffstat (limited to 'src/core/arm')
| -rw-r--r-- | src/core/arm/arm_interface.h | 6 | ||||
| -rw-r--r-- | src/core/arm/dynarmic/arm_dynarmic.cpp | 4 | ||||
| -rw-r--r-- | src/core/arm/dynarmic/arm_dynarmic.h | 2 | ||||
| -rw-r--r-- | src/core/arm/unicorn/arm_unicorn.cpp | 4 | ||||
| -rw-r--r-- | src/core/arm/unicorn/arm_unicorn.h | 1 | 
5 files changed, 15 insertions, 2 deletions
| diff --git a/src/core/arm/arm_interface.h b/src/core/arm/arm_interface.h index 5ae60214e..6667c7dba 100644 --- a/src/core/arm/arm_interface.h +++ b/src/core/arm/arm_interface.h @@ -39,8 +39,12 @@ public:          Run(1);      } +    /// Maps a backing memory region for the CPU      virtual void MapBackingMemory(VAddr address, size_t size, u8* memory, -                                  Kernel::VMAPermission perms) {} +                                  Kernel::VMAPermission perms) = 0; + +    /// Unmaps a region of memory that was previously mapped using MapBackingMemory +    virtual void UnmapMemory(VAddr address, size_t size) = 0;      /// Clear all instruction cache      virtual void ClearInstructionCache() = 0; diff --git a/src/core/arm/dynarmic/arm_dynarmic.cpp b/src/core/arm/dynarmic/arm_dynarmic.cpp index 4da07b177..0902c6df3 100644 --- a/src/core/arm/dynarmic/arm_dynarmic.cpp +++ b/src/core/arm/dynarmic/arm_dynarmic.cpp @@ -136,6 +136,10 @@ void ARM_Dynarmic::MapBackingMemory(u64 address, size_t size, u8* memory,      inner_unicorn.MapBackingMemory(address, size, memory, perms);  } +void ARM_Dynarmic::UnmapMemory(u64 address, size_t size) { +    inner_unicorn.UnmapMemory(address, size); +} +  void ARM_Dynarmic::SetPC(u64 pc) {      jit->SetPC(pc);  } diff --git a/src/core/arm/dynarmic/arm_dynarmic.h b/src/core/arm/dynarmic/arm_dynarmic.h index 1d9dcf5ff..fd1a44802 100644 --- a/src/core/arm/dynarmic/arm_dynarmic.h +++ b/src/core/arm/dynarmic/arm_dynarmic.h @@ -19,7 +19,7 @@ public:      void MapBackingMemory(VAddr address, size_t size, u8* memory,                            Kernel::VMAPermission perms) override; - +    void UnmapMemory(u64 address, size_t size) override;      void SetPC(u64 pc) override;      u64 GetPC() const override;      u64 GetReg(int index) const override; diff --git a/src/core/arm/unicorn/arm_unicorn.cpp b/src/core/arm/unicorn/arm_unicorn.cpp index 5d2956bfd..162c766fd 100644 --- a/src/core/arm/unicorn/arm_unicorn.cpp +++ b/src/core/arm/unicorn/arm_unicorn.cpp @@ -77,6 +77,10 @@ void ARM_Unicorn::MapBackingMemory(VAddr address, size_t size, u8* memory,      CHECKED(uc_mem_map_ptr(uc, address, size, static_cast<u32>(perms), memory));  } +void ARM_Unicorn::UnmapMemory(VAddr address, size_t size) { +    CHECKED(uc_mem_unmap(uc, address, size)); +} +  void ARM_Unicorn::SetPC(u64 pc) {      CHECKED(uc_reg_write(uc, UC_ARM64_REG_PC, &pc));  } diff --git a/src/core/arm/unicorn/arm_unicorn.h b/src/core/arm/unicorn/arm_unicorn.h index c9a561dec..00b5b1865 100644 --- a/src/core/arm/unicorn/arm_unicorn.h +++ b/src/core/arm/unicorn/arm_unicorn.h @@ -14,6 +14,7 @@ public:      ~ARM_Unicorn();      void MapBackingMemory(VAddr address, size_t size, u8* memory,                            Kernel::VMAPermission perms) override; +    void UnmapMemory(VAddr address, size_t size) override;      void SetPC(u64 pc) override;      u64 GetPC() const override;      u64 GetReg(int index) const override; | 
