Permalink
Browse files

JitCommon/JitCache: Make JitBlock's checkedEntry and normalEntry memb…

…ers non-const pointers

In both cases of the x64 and AArch64 JITs, these would have const casted
away from them, followed by them being placed within an emitter and
having breakpoint instructions written in them.

In this case, we shouldn't be using const period if we're writing to the
emitted data.
  • Loading branch information...
lioncash committed Aug 27, 2018
1 parent 25898cf commit e81408588f39c9500319d8d7e9109ed76a9a7883
@@ -71,9 +71,9 @@ void CachedInterpreter::Shutdown()
m_block_cache.Shutdown();
}
const u8* CachedInterpreter::GetCodePtr() const
u8* CachedInterpreter::GetCodePtr()
{
return reinterpret_cast<const u8*>(m_code.data() + m_code.size());
return reinterpret_cast<u8*>(m_code.data() + m_code.size());
}
void CachedInterpreter::ExecuteOneBlock()
@@ -35,7 +35,7 @@ class CachedInterpreter : public JitBase
private:
struct Instruction;
const u8* GetCodePtr() const;
u8* GetCodePtr();
void ExecuteOneBlock();
bool HandleFunctionHooking(u32 address);
@@ -646,7 +646,7 @@ void Jit64::Jit(u32 em_address)
blocks.FinalizeBlock(*b, jo.enableBlocklink, code_block.m_physical_addresses);
}
const u8* Jit64::DoJit(u32 em_address, JitBlock* b, u32 nextPC)
u8* Jit64::DoJit(u32 em_address, JitBlock* b, u32 nextPC)
{
js.firstFPInstructionFound = false;
js.isLastInstruction = false;
@@ -657,8 +657,8 @@ const u8* Jit64::DoJit(u32 em_address, JitBlock* b, u32 nextPC)
js.numLoadStoreInst = 0;
js.numFloatingPointInst = 0;
const u8* start =
AlignCode4(); // TODO: Test if this or AlignCode16 make a difference from GetCodePtr
// TODO: Test if this or AlignCode16 make a difference from GetCodePtr
u8* const start = AlignCode4();
b->checkedEntry = start;
// Downcount flag check. The last block decremented downcounter, and the flag should still be
@@ -668,8 +668,8 @@ const u8* Jit64::DoJit(u32 em_address, JitBlock* b, u32 nextPC)
JMP(asm_routines.do_timing, true); // downcount hit zero - go do_timing.
SetJumpTarget(skip);
const u8* normalEntry = GetCodePtr();
b->normalEntry = normalEntry;
u8* const normal_entry = GetWritableCodePtr();
b->normalEntry = normal_entry;
// Used to get a trace of the last few blocks before a crash, sometimes VERY useful
if (ImHereDebug)
@@ -959,7 +959,7 @@ const u8* Jit64::DoJit(u32 em_address, JitBlock* b, u32 nextPC)
LogGeneratedX86(code_block.m_num_instructions, m_code_buffer, start, b);
#endif
return normalEntry;
return normal_entry;
}
BitSet8 Jit64::ComputeStaticGQRs(const PPCAnalyst::CodeBlock& cb) const
@@ -52,7 +52,7 @@ class Jit64 : public Jitx86Base
// Jit!
void Jit(u32 em_address) override;
const u8* DoJit(u32 em_address, JitBlock* b, u32 nextPC);
u8* DoJit(u32 em_address, JitBlock* b, u32 nextPC);
BitSet32 CallerSavedRegistersInUse() const;
BitSet8 ComputeStaticGQRs(const PPCAnalyst::CodeBlock&) const;
@@ -37,8 +37,8 @@ void JitBlockCache::WriteLinkBlock(const JitBlock::LinkData& source, const JitBl
void JitBlockCache::WriteDestroyBlock(const JitBlock& block)
{
// Only clear the entry points as we might still be within this block.
Gen::XEmitter emit(const_cast<u8*>(block.checkedEntry));
Gen::XEmitter emit(block.checkedEntry);
emit.INT3();
Gen::XEmitter emit2(const_cast<u8*>(block.normalEntry));
Gen::XEmitter emit2(block.normalEntry);
emit2.INT3();
}
@@ -607,7 +607,7 @@ void JitArm64::DoJit(u32 em_address, JitBlock* b, u32 nextPC)
js.curBlock = b;
js.carryFlagSet = false;
const u8* start = GetCodePtr();
u8* const start = GetWritableCodePtr();
b->checkedEntry = start;
// Downcount flag check, Only valid for linked blocks
@@ -619,7 +619,7 @@ void JitArm64::DoJit(u32 em_address, JitBlock* b, u32 nextPC)
}
// Normal entry doesn't need to check for downcount.
b->normalEntry = GetCodePtr();
b->normalEntry = GetWritableCodePtr();
// Conditionally add profiling code.
if (Profiler::g_ProfileBlocks)
@@ -70,7 +70,7 @@ void JitArm64BlockCache::WriteLinkBlock(const JitBlock::LinkData& source, const
void JitArm64BlockCache::WriteDestroyBlock(const JitBlock& block)
{
// Only clear the entry points as we might still be within this block.
ARM64XEmitter emit((u8*)block.checkedEntry);
ARM64XEmitter emit(block.checkedEntry);
while (emit.GetWritableCodePtr() <= block.normalEntry)
emit.BRK(0x123);
@@ -30,9 +30,9 @@ struct JitBlock
// A special entry point for block linking; usually used to check the
// downcount.
const u8* checkedEntry;
u8* checkedEntry;
// The normal entry point for the block, returned by Dispatch().
const u8* normalEntry;
u8* normalEntry;
// The effective address (PC) for the beginning of the block.
u32 effectiveAddress;

0 comments on commit e814085

Please sign in to comment.