|
@ -30,12 +30,11 @@ static int32_t signExtend11(const uint16_t value) { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
UnwResult UnwStartThumb(UnwState * const state) { |
|
|
UnwResult UnwStartThumb(UnwState * const state) { |
|
|
bool found = false; |
|
|
|
|
|
uint16_t t = UNW_MAX_INSTR_COUNT; |
|
|
uint16_t t = UNW_MAX_INSTR_COUNT; |
|
|
uint32_t lastJumpAddr = 0; // Last JUMP address, to try to detect infinite loops
|
|
|
uint32_t lastJumpAddr = 0; // Last JUMP address, to try to detect infinite loops
|
|
|
bool loopDetected = false; // If a loop was detected
|
|
|
bool loopDetected = false; // If a loop was detected
|
|
|
|
|
|
|
|
|
do { |
|
|
for (;;) { |
|
|
uint16_t instr; |
|
|
uint16_t instr; |
|
|
|
|
|
|
|
|
/* Attempt to read the instruction */ |
|
|
/* Attempt to read the instruction */ |
|
@ -1059,7 +1058,7 @@ UnwResult UnwStartThumb(UnwState * const state) { |
|
|
|
|
|
|
|
|
if (--t == 0) return UNWIND_EXHAUSTED; |
|
|
if (--t == 0) return UNWIND_EXHAUSTED; |
|
|
|
|
|
|
|
|
} while (!found); |
|
|
} |
|
|
|
|
|
|
|
|
return UNWIND_SUCCESS; |
|
|
return UNWIND_SUCCESS; |
|
|
} |
|
|
} |
|
|