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.
|
||||
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.
|
||||
dummy_context.reloc_section_index = jtbl.section_index;
|
||||
dummy_context.reloc_section_index = reloc_section_index;
|
||||
dummy_context.reloc_target_section_offset = section_offset;
|
||||
load_relocated_address(dummy_context, Registers::arithmetic_temp2);
|
||||
|
||||
|
|
|
@ -83,6 +83,9 @@ namespace N64Recomp {
|
|||
std::unordered_map<size_t, size_t> entry_func_hooks;
|
||||
// Maps function index in recompiler context to function's return hook slot.
|
||||
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 {
|
||||
public:
|
||||
|
|
Loading…
Add table
Reference in a new issue