From c47dacb1def6925bc881c0e130f2b5a72d9e83b0 Mon Sep 17 00:00:00 2001 From: Yang Liu Date: Sun, 7 Jan 2024 20:05:41 +0800 Subject: [PATCH] backend/rv64: Adjust how relocations are stored --- src/dynarmic/backend/riscv64/emit_riscv64.cpp | 2 +- src/dynarmic/backend/riscv64/emit_riscv64.h | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) 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);