From 9e9ae173ee2c378c6ff5f7bbfe452503a80212d9 Mon Sep 17 00:00:00 2001 From: Wiseguy <68165316+Mr-Wiseguy@users.noreply.github.com> Date: Sat, 12 Oct 2024 01:10:59 -0400 Subject: [PATCH] Fixed incorrect alignment during mod section loading (#65) --- librecomp/src/mods.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/librecomp/src/mods.cpp b/librecomp/src/mods.cpp index 6fada47..fa9e0dc 100644 --- a/librecomp/src/mods.cpp +++ b/librecomp/src/mods.cpp @@ -822,7 +822,7 @@ recomp::mods::CodeModLoadError recomp::mods::ModContext::load_mod_code(uint8_t* const std::vector& mod_sections = mod.recompiler_context->sections; mod.section_load_addresses.resize(mod_sections.size()); - + // Copy each section's binary into rdram, leaving room for the section's bss before the next one. int32_t cur_section_addr = load_address; for (size_t section_index = 0; section_index < mod_sections.size(); section_index++) { @@ -831,8 +831,10 @@ recomp::mods::CodeModLoadError recomp::mods::ModContext::load_mod_code(uint8_t* MEM_B(i, (gpr)cur_section_addr) = binary_data[section.rom_addr + i]; } mod.section_load_addresses[section_index] = cur_section_addr; + // Calculate the next section's address based on the size of this section and its bss. cur_section_addr += section.size + section.bss_size; - + // Align the next section's address to 16 bytes. + cur_section_addr = (cur_section_addr + 15) & ~15; } // Iterate over each section again after loading them to perform R_MIPS_32 relocations.