From: Uwe Kleine-König Date: Thu, 15 Dec 2011 20:47:56 +0000 (+0100) Subject: ARM: unwinder: fix bisection to find origin in .idx section X-Git-Tag: v3.2-rc6~13 X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=ddf5a25c5fdd4cc276edf451871c38002eec0f95;p=~emulex%2Finfiniband.git ARM: unwinder: fix bisection to find origin in .idx section The bisection implemented in unwind_find_origin() stopped to early. If there is only a single entry left to check the original code just took the end point as origin which might be wrong. This was introduced in commit de66a979012d ("ARM: 7187/1: fix unwinding for XIP kernels"). Reported-and-tested-by: Nick Bowler Signed-off-by: Uwe Kleine-König Signed-off-by: Linus Torvalds --- diff --git a/arch/arm/kernel/unwind.c b/arch/arm/kernel/unwind.c index 3f03fe0c326..00df012c467 100644 --- a/arch/arm/kernel/unwind.c +++ b/arch/arm/kernel/unwind.c @@ -160,12 +160,12 @@ static const struct unwind_idx *unwind_find_origin( const struct unwind_idx *start, const struct unwind_idx *stop) { pr_debug("%s(%p, %p)\n", __func__, start, stop); - while (start < stop - 1) { + while (start < stop) { const struct unwind_idx *mid = start + ((stop - start) >> 1); if (mid->addr_offset >= 0x40000000) /* negative offset */ - start = mid; + start = mid + 1; else /* positive offset */ stop = mid;