Просмотр исходного кода

hle: service: ldr: UnmapCodeMemory BSS only when set.

bunnei 4 лет назад
Родитель
Сommit
6ac44f3bdc
1 измененных файлов с 7 добавлено и 3 удалено
  1. 7 3
      src/core/hle/service/ldr/ldr.cpp

+ 7 - 3
src/core/hle/service/ldr/ldr.cpp

@@ -530,9 +530,13 @@ public:
     ResultCode UnmapNro(const NROInfo& info) {
     ResultCode UnmapNro(const NROInfo& info) {
         // Each region must be unmapped separately to validate memory state
         // Each region must be unmapped separately to validate memory state
         auto& page_table{system.CurrentProcess()->PageTable()};
         auto& page_table{system.CurrentProcess()->PageTable()};
-        CASCADE_CODE(page_table.UnmapCodeMemory(info.nro_address + info.text_size + info.ro_size +
-                                                    info.data_size,
-                                                info.bss_address, info.bss_size));
+
+        if (info.bss_size != 0) {
+            CASCADE_CODE(page_table.UnmapCodeMemory(info.nro_address + info.text_size +
+                                                        info.ro_size + info.data_size,
+                                                    info.bss_address, info.bss_size));
+        }
+
         CASCADE_CODE(page_table.UnmapCodeMemory(info.nro_address + info.text_size + info.ro_size,
         CASCADE_CODE(page_table.UnmapCodeMemory(info.nro_address + info.text_size + info.ro_size,
                                                 info.src_addr + info.text_size + info.ro_size,
                                                 info.src_addr + info.text_size + info.ro_size,
                                                 info.data_size));
                                                 info.data_size));