diff options
| -rw-r--r-- | src/core/hle/service/ldr/ldr.cpp | 16 | 
1 files changed, 15 insertions, 1 deletions
| diff --git a/src/core/hle/service/ldr/ldr.cpp b/src/core/hle/service/ldr/ldr.cpp index 9ad5bbf0d..eeaca44b6 100644 --- a/src/core/hle/service/ldr/ldr.cpp +++ b/src/core/hle/service/ldr/ldr.cpp @@ -166,7 +166,7 @@ public:              {0, &RelocatableObject::LoadNro, "LoadNro"},              {1, &RelocatableObject::UnloadNro, "UnloadNro"},              {2, &RelocatableObject::LoadNrr, "LoadNrr"}, -            {3, nullptr, "UnloadNrr"}, +            {3, &RelocatableObject::UnloadNrr, "UnloadNrr"},              {4, &RelocatableObject::Initialize, "Initialize"},              {10, nullptr, "LoadNrrEx"},          }; @@ -272,6 +272,20 @@ public:          rb.Push(RESULT_SUCCESS);      } +    void UnloadNrr(Kernel::HLERequestContext& ctx) { +        IPC::RequestParser rp{ctx}; +        const auto pid = rp.Pop<u64>(); +        const auto nrr_address = rp.Pop<VAddr>(); + +        LOG_DEBUG(Service_LDR, "called with pid={}, nrr_address={:016X}", pid, nrr_address); + +        nrr.erase(nrr_address); + +        IPC::ResponseBuilder rb{ctx, 2}; + +        rb.Push(RESULT_SUCCESS); +    } +      bool ValidateRegionForMap(Kernel::Memory::PageTable& page_table, VAddr start,                                std::size_t size) const {          constexpr std::size_t padding_size{4 * Kernel::Memory::PageSize}; | 
