From 47feaaaa0da5b5f80e90b9daca144a4141b641b8 Mon Sep 17 00:00:00 2001 From: Wiseguy <68165316+Mr-Wiseguy@users.noreply.github.com> Date: Sun, 28 Jul 2024 21:19:46 -0400 Subject: [PATCH] Allow registering multiple patch sections (#57) --- librecomp/include/librecomp/overlays.hpp | 2 +- librecomp/src/overlays.cpp | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/librecomp/include/librecomp/overlays.hpp b/librecomp/include/librecomp/overlays.hpp index a2d75f9..e7a4fa2 100644 --- a/librecomp/include/librecomp/overlays.hpp +++ b/librecomp/include/librecomp/overlays.hpp @@ -20,7 +20,7 @@ namespace recomp { void register_overlays(const overlay_section_table_data_t& sections, const overlays_by_index_t& overlays); - void register_patches(const char* patch_data, size_t patch_size, SectionTableEntry* code_sections); + void register_patches(const char* patch_data, size_t patch_size, SectionTableEntry* code_sections, size_t num_sections); void read_patch_data(uint8_t* rdram, gpr patch_data_address); void init_overlays(); diff --git a/librecomp/src/overlays.cpp b/librecomp/src/overlays.cpp index 9abd751..7ad7ea5 100644 --- a/librecomp/src/overlays.cpp +++ b/librecomp/src/overlays.cpp @@ -15,6 +15,7 @@ static recomp::overlays::overlay_section_table_data_t sections_info {}; static recomp::overlays::overlays_by_index_t overlays_info {}; static SectionTableEntry* patch_code_sections = nullptr; +size_t num_patch_code_sections = 0; static std::vector patch_data; void recomp::overlays::register_overlays(const overlay_section_table_data_t& sections, const overlays_by_index_t& overlays) { @@ -22,8 +23,9 @@ void recomp::overlays::register_overlays(const overlay_section_table_data_t& sec overlays_info = overlays; } -void recomp::overlays::register_patches(const char* patch, std::size_t size, SectionTableEntry* sections) { +void recomp::overlays::register_patches(const char* patch, std::size_t size, SectionTableEntry* sections, size_t num_sections) { patch_code_sections = sections; + num_patch_code_sections = num_sections; patch_data.resize(size); std::memcpy(patch_data.data(), patch, size); @@ -70,7 +72,9 @@ static void load_patch_functions() { debug_printf("[Patch] No patch section was registered\n"); return; } - load_special_overlay(patch_code_sections[0], patch_code_sections[0].ram_addr); + for (size_t i = 0; i < num_patch_code_sections; i++) { + load_special_overlay(patch_code_sections[i], patch_code_sections[i].ram_addr); + } } void recomp::overlays::read_patch_data(uint8_t* rdram, gpr patch_data_address) {