diff --git a/src/dynarmic/backend/riscv64/emit_riscv64.cpp b/src/dynarmic/backend/riscv64/emit_riscv64.cpp index 0fe3e8e0..c59fb3fb 100644 --- a/src/dynarmic/backend/riscv64/emit_riscv64.cpp +++ b/src/dynarmic/backend/riscv64/emit_riscv64.cpp @@ -26,7 +26,7 @@ EmittedBlockInfo EmitRV64(biscuit::Assembler& as, [[maybe_unused]] IR::Block blo as.SW(a0, offsetof(A32JitState, regs) + 15 * sizeof(u32), a1); ptrdiff_t offset = reinterpret_cast(as.GetCursorPointer()) - ebi.entry_point; - ebi.relocations[offset] = LinkTarget::ReturnFromRunCode; + ebi.relocations.emplace_back(Relocation{offset, LinkTarget::ReturnFromRunCode}); as.NOP(); ebi.size = reinterpret_cast(as.GetCursorPointer()) - ebi.entry_point; diff --git a/src/dynarmic/backend/riscv64/emit_riscv64.h b/src/dynarmic/backend/riscv64/emit_riscv64.h index 8ea58418..f82079bf 100644 --- a/src/dynarmic/backend/riscv64/emit_riscv64.h +++ b/src/dynarmic/backend/riscv64/emit_riscv64.h @@ -5,8 +5,9 @@ #pragma once +#include + #include -#include namespace biscuit { class Assembler; @@ -24,10 +25,15 @@ enum class LinkTarget { ReturnFromRunCode, }; +struct Relocation { + std::ptrdiff_t code_offset; + LinkTarget target; +}; + struct EmittedBlockInfo { CodePtr entry_point; size_t size; - tsl::robin_map relocations; + std::vector relocations; }; EmittedBlockInfo EmitRV64(biscuit::Assembler& as, IR::Block block);