We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
2 parents fd89a02 + 51002ff commit c1c0b8bCopy full SHA for c1c0b8b
riscv/mmu.h
@@ -287,8 +287,15 @@ class mmu_t
287
288
template<typename T>
289
T ALWAYS_INLINE fetch_jump_table(reg_t addr) {
290
- auto tlb_entry = translate_insn_addr(addr);
291
- return from_target(*(target_endian<T>*)(tlb_entry.host_offset + addr));
+ typedef std::remove_const<std::remove_pointer<decltype(translate_insn_addr_to_host(addr))>::type>::type U;
+ U parcels[sizeof(T) / sizeof(U)];
292
+
293
+ for (size_t i = 0; i < std::size(parcels); i++)
294
+ parcels[i] = *translate_insn_addr_to_host(addr + i * sizeof(U));
295
296
+ target_endian<T> res;
297
+ memcpy(&res, parcels, sizeof(T));
298
+ return from_target(res);
299
}
300
301
inline icache_entry_t* refill_icache(reg_t addr, icache_entry_t* entry)
0 commit comments