Fix breakpoint to tail jmp conversion
This commit is contained in:
parent
8a6e3eb924
commit
f9b7dd8418
|
@ -887,7 +887,7 @@ bool InterCodeBasicBlock::CanSwapInstructions(const InterInstruction* ins0, cons
|
||||||
{
|
{
|
||||||
if (ins0->mCode == IC_CALL || ins0->mCode == IC_CALL_NATIVE || ins0->mCode == IC_ASSEMBLER ||
|
if (ins0->mCode == IC_CALL || ins0->mCode == IC_CALL_NATIVE || ins0->mCode == IC_ASSEMBLER ||
|
||||||
ins0->mCode == IC_RETURN || ins0->mCode == IC_RETURN_STRUCT || ins0->mCode == IC_RETURN_VALUE ||
|
ins0->mCode == IC_RETURN || ins0->mCode == IC_RETURN_STRUCT || ins0->mCode == IC_RETURN_VALUE ||
|
||||||
ins0->mCode == IC_PUSH_FRAME || ins0->mCode == IC_POP_FRAME || ins0->mCode == IC_MALLOC || ins0->mCode == IC_FREE)
|
ins0->mCode == IC_PUSH_FRAME || ins0->mCode == IC_POP_FRAME || ins0->mCode == IC_MALLOC || ins0->mCode == IC_FREE || ins0->mCode == IC_BREAKPOINT)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (ins0->mCode == IC_LOAD)
|
if (ins0->mCode == IC_LOAD)
|
||||||
|
@ -908,7 +908,7 @@ bool InterCodeBasicBlock::CanSwapInstructions(const InterInstruction* ins0, cons
|
||||||
if (ins0->mCode == IC_CALL || ins0->mCode == IC_CALL_NATIVE || ins0->mCode == IC_ASSEMBLER)
|
if (ins0->mCode == IC_CALL || ins0->mCode == IC_CALL_NATIVE || ins0->mCode == IC_ASSEMBLER)
|
||||||
{
|
{
|
||||||
if (ins1->mCode == IC_RETURN || ins1->mCode == IC_RETURN_STRUCT || ins1->mCode == IC_RETURN_VALUE ||
|
if (ins1->mCode == IC_RETURN || ins1->mCode == IC_RETURN_STRUCT || ins1->mCode == IC_RETURN_VALUE ||
|
||||||
ins1->mCode == IC_PUSH_FRAME || ins1->mCode == IC_POP_FRAME || ins1->mCode == IC_MALLOC || ins1->mCode == IC_FREE)
|
ins1->mCode == IC_PUSH_FRAME || ins1->mCode == IC_POP_FRAME || ins1->mCode == IC_MALLOC || ins1->mCode == IC_FREE || ins1->mCode == IC_BREAKPOINT)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (ins0->mSrc[0].mMemory == IM_PROCEDURE && ins0->mSrc[0].mLinkerObject && ins0->mSrc[0].mLinkerObject->mProc &&
|
if (ins0->mSrc[0].mMemory == IM_PROCEDURE && ins0->mSrc[0].mLinkerObject && ins0->mSrc[0].mLinkerObject->mProc &&
|
||||||
|
@ -927,6 +927,11 @@ bool InterCodeBasicBlock::CanSwapInstructions(const InterInstruction* ins0, cons
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ins0->mCode == IC_BREAKPOINT && ins1->mCode == IC_STORE)
|
||||||
|
return false;
|
||||||
|
if (ins1->mCode == IC_BREAKPOINT && ins0->mCode == IC_STORE)
|
||||||
|
return false;
|
||||||
|
|
||||||
if (ins0->mCode == IC_MALLOC || ins0->mCode == IC_FREE)
|
if (ins0->mCode == IC_MALLOC || ins0->mCode == IC_FREE)
|
||||||
{
|
{
|
||||||
if (ins1->mCode == IC_MALLOC || ins1->mCode == IC_FREE)
|
if (ins1->mCode == IC_MALLOC || ins1->mCode == IC_FREE)
|
||||||
|
@ -12443,7 +12448,8 @@ bool InterCodeBasicBlock::CanMoveInstructionDown(int si, int ti) const
|
||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
if (ins->mCode == IC_COPY || ins->mCode == IC_PUSH_FRAME || ins->mCode == IC_POP_FRAME || ins->mCode == IC_FILL ||
|
if (ins->mCode == IC_COPY || ins->mCode == IC_PUSH_FRAME || ins->mCode == IC_POP_FRAME || ins->mCode == IC_FILL ||
|
||||||
ins->mCode == IC_RETURN || ins->mCode == IC_RETURN_STRUCT || ins->mCode == IC_RETURN_VALUE || ins->mCode == IC_DISPATCH)
|
ins->mCode == IC_RETURN || ins->mCode == IC_RETURN_STRUCT || ins->mCode == IC_RETURN_VALUE || ins->mCode == IC_DISPATCH ||
|
||||||
|
ins->mCode == IC_BREAKPOINT)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
for (int i = si + 1; i < ti; i++)
|
for (int i = si + 1; i < ti; i++)
|
||||||
|
@ -12505,7 +12511,7 @@ bool InterCodeBasicBlock::CanMoveInstructionBeforeBlock(int ii, const InterInstr
|
||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
if (ins->mCode == IC_CALL || ins->mCode == IC_CALL_NATIVE || ins->mCode == IC_COPY || ins->mCode == IC_PUSH_FRAME || ins->mCode == IC_POP_FRAME || ins->mCode == IC_FILL ||
|
if (ins->mCode == IC_CALL || ins->mCode == IC_CALL_NATIVE || ins->mCode == IC_COPY || ins->mCode == IC_PUSH_FRAME || ins->mCode == IC_POP_FRAME || ins->mCode == IC_FILL ||
|
||||||
ins->mCode == IC_RETURN || ins->mCode == IC_RETURN_STRUCT || ins->mCode == IC_RETURN_VALUE || ins->mCode == IC_DISPATCH)
|
ins->mCode == IC_RETURN || ins->mCode == IC_RETURN_STRUCT || ins->mCode == IC_RETURN_VALUE || ins->mCode == IC_DISPATCH || ins->mCode == IC_BREAKPOINT)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
for (int i = 0; i < ii; i++)
|
for (int i = 0; i < ii; i++)
|
||||||
|
|
|
@ -1605,7 +1605,7 @@ bool NativeCodeInstruction::ChangesAddress(void) const
|
||||||
|
|
||||||
bool NativeCodeInstruction::IsSimpleJSR(void) const
|
bool NativeCodeInstruction::IsSimpleJSR(void) const
|
||||||
{
|
{
|
||||||
return mType == ASMIT_JSR && mMode == ASMIM_ABSOLUTE && !(mLinkerObject && (mLinkerObject->mFlags & LOBJF_INLINE));
|
return mType == ASMIT_JSR && mMode == ASMIM_ABSOLUTE && !(mLinkerObject && (mLinkerObject->mFlags & LOBJF_INLINE)) && !(mFlags & NCIF_BREAKPOINT);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool NativeCodeInstruction::IsShift(void) const
|
bool NativeCodeInstruction::IsShift(void) const
|
||||||
|
|
Loading…
Reference in New Issue