From 789df17dd9f5f6f940ffc1b1db11c4e777400767 Mon Sep 17 00:00:00 2001 From: Thomas Jarosch Date: Mon, 12 Jan 2015 19:33:46 +0100 Subject: ARM unwinder for thumb: Fix broken MOV opcode The origin of the register value was never moved in the desired register state due to a typo ('rhs' vs. 'rhd'). While looking at the code, I noticed the action taken for the register value is another copy'n'paste error from the ADD opcode above -> it added to the register value instead of MOVing the current value. Patch submitted upstream. cppcheck reported: [lib/unwarminder/unwarm_thumb.c:473]: (warning) Redundant assignment of 'state.regData[rhd].o' to itself. Change-Id: I78cdbf37a191007a3bddbaa350b906dbce2fe671 --- lib/unwarminder/unwarm_thumb.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/unwarminder/unwarm_thumb.c b/lib/unwarminder/unwarm_thumb.c index b71d9732b1..bd0175c9cf 100644 --- a/lib/unwarminder/unwarm_thumb.c +++ b/lib/unwarminder/unwarm_thumb.c @@ -469,8 +469,8 @@ UnwResult UnwStartThumb(UnwState * const state) case 2: /* MOV */ UnwPrintd5("MOV r%d, r%d\t; r%d %s", rhd, rhs, rhd, M_Origin2Str(state->regData[rhs].o)); - state->regData[rhd].v += state->regData[rhs].v; - state->regData[rhd].o = state->regData[rhd].o; + state->regData[rhd].v = state->regData[rhs].v; + state->regData[rhd].o = state->regData[rhs].o; break; case 3: /* BX */ -- cgit v1.2.3