mirror of
https://github.com/N64Recomp/N64Recomp.git
synced 2025-05-14 08:12:19 +00:00
Add a mechanism to provide original section indices for jump table regeneration (#130)
This commit is contained in:
parent
be65d37760
commit
8781eb44ac
2 changed files with 10 additions and 1 deletions
|
@ -1563,8 +1563,14 @@ void N64Recomp::LiveGenerator::emit_switch(const Context& recompiler_context, co
|
||||||
// Get the relocated address of the jump table.
|
// Get the relocated address of the jump table.
|
||||||
uint32_t section_offset = jtbl.vram - jtbl_section.ram_addr;
|
uint32_t section_offset = jtbl.vram - jtbl_section.ram_addr;
|
||||||
|
|
||||||
|
// Get the section index to use for relocation at runtime.
|
||||||
|
uint16_t reloc_section_index = jtbl.section_index;
|
||||||
|
if (!inputs.original_section_indices.empty()) {
|
||||||
|
reloc_section_index = inputs.original_section_indices[reloc_section_index];
|
||||||
|
}
|
||||||
|
|
||||||
// Populate the necessary fields of the dummy context and load the relocated address into temp2.
|
// Populate the necessary fields of the dummy context and load the relocated address into temp2.
|
||||||
dummy_context.reloc_section_index = jtbl.section_index;
|
dummy_context.reloc_section_index = reloc_section_index;
|
||||||
dummy_context.reloc_target_section_offset = section_offset;
|
dummy_context.reloc_target_section_offset = section_offset;
|
||||||
load_relocated_address(dummy_context, Registers::arithmetic_temp2);
|
load_relocated_address(dummy_context, Registers::arithmetic_temp2);
|
||||||
|
|
||||||
|
|
|
@ -83,6 +83,9 @@ namespace N64Recomp {
|
||||||
std::unordered_map<size_t, size_t> entry_func_hooks;
|
std::unordered_map<size_t, size_t> entry_func_hooks;
|
||||||
// Maps function index in recompiler context to function's return hook slot.
|
// Maps function index in recompiler context to function's return hook slot.
|
||||||
std::unordered_map<size_t, size_t> return_func_hooks;
|
std::unordered_map<size_t, size_t> return_func_hooks;
|
||||||
|
// Maps section index in the generated code to original section index. Used by regenerated
|
||||||
|
// code to relocate using the corresponding original section's address.
|
||||||
|
std::vector<size_t> original_section_indices;
|
||||||
};
|
};
|
||||||
class LiveGenerator final : public Generator {
|
class LiveGenerator final : public Generator {
|
||||||
public:
|
public:
|
||||||
|
|
Loading…
Add table
Reference in a new issue