diff options
Diffstat (limited to 'src/core/loader/nro.cpp')
| -rw-r--r-- | src/core/loader/nro.cpp | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/core/loader/nro.cpp b/src/core/loader/nro.cpp index c8e491fec..fbbd6b0de 100644 --- a/src/core/loader/nro.cpp +++ b/src/core/loader/nro.cpp | |||
| @@ -170,17 +170,20 @@ static constexpr u32 PageAlignSize(u32 size) { | |||
| 170 | arg_data.size()); | 170 | arg_data.size()); |
| 171 | } | 171 | } |
| 172 | 172 | ||
| 173 | // Read MOD header | ||
| 174 | ModHeader mod_header{}; | ||
| 175 | // Default .bss to NRO header bss size if MOD0 section doesn't exist | 173 | // Default .bss to NRO header bss size if MOD0 section doesn't exist |
| 176 | u32 bss_size{PageAlignSize(nro_header.bss_size)}; | 174 | u32 bss_size{PageAlignSize(nro_header.bss_size)}; |
| 175 | |||
| 176 | // Read MOD header | ||
| 177 | ModHeader mod_header{}; | ||
| 177 | std::memcpy(&mod_header, program_image.data() + nro_header.module_header_offset, | 178 | std::memcpy(&mod_header, program_image.data() + nro_header.module_header_offset, |
| 178 | sizeof(ModHeader)); | 179 | sizeof(ModHeader)); |
| 180 | |||
| 179 | const bool has_mod_header{mod_header.magic == Common::MakeMagic('M', 'O', 'D', '0')}; | 181 | const bool has_mod_header{mod_header.magic == Common::MakeMagic('M', 'O', 'D', '0')}; |
| 180 | if (has_mod_header) { | 182 | if (has_mod_header) { |
| 181 | // Resize program image to include .bss section and page align each section | 183 | // Resize program image to include .bss section and page align each section |
| 182 | bss_size = PageAlignSize(mod_header.bss_end_offset - mod_header.bss_start_offset); | 184 | bss_size = PageAlignSize(mod_header.bss_end_offset - mod_header.bss_start_offset); |
| 183 | } | 185 | } |
| 186 | |||
| 184 | codeset.DataSegment().size += bss_size; | 187 | codeset.DataSegment().size += bss_size; |
| 185 | program_image.resize(static_cast<u32>(program_image.size()) + bss_size); | 188 | program_image.resize(static_cast<u32>(program_image.size()) + bss_size); |
| 186 | 189 | ||