From: Ben Dooks <ben.do...@codethink.co.uk>

Ensure we read instructions in the correct endian-ness by using
the <asm/opcodes.h> helper to transform them as necessary.

Acked-by: Jon Medhurst <t...@linaro.org>
Signed-off-by: Ben Dooks <ben.do...@codethink.co.uk>
[taras.kondrat...@linaro.org: fix next_instruction() function]
Signed-off-by: Taras Kondratiuk <taras.kondrat...@linaro.org>
---
 arch/arm/kernel/kprobes-test.c |   11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/arch/arm/kernel/kprobes-test.c b/arch/arm/kernel/kprobes-test.c
index 0cd63d0..0850c72 100644
--- a/arch/arm/kernel/kprobes-test.c
+++ b/arch/arm/kernel/kprobes-test.c
@@ -1329,7 +1329,8 @@ static void test_case_failed(const char *message)
 static unsigned long next_instruction(unsigned long pc)
 {
 #ifdef CONFIG_THUMB2_KERNEL
-       if ((pc & 1) && !is_wide_instruction(*(u16 *)(pc - 1)))
+       if ((pc & 1) &&
+           !is_wide_instruction(__mem_to_opcode_thumb16(*(u16 *)(pc - 1))))
                return pc + 2;
        else
 #endif
@@ -1374,13 +1375,13 @@ static uintptr_t __used kprobes_test_case_start(const 
char *title, void *stack)
 
        if (test_case_is_thumb) {
                u16 *p = (u16 *)(test_code & ~1);
-               current_instruction = p[0];
+               current_instruction = __mem_to_opcode_thumb16(p[0]);
                if (is_wide_instruction(current_instruction)) {
-                       current_instruction <<= 16;
-                       current_instruction |= p[1];
+                       u16 instr2 = __mem_to_opcode_thumb16(p[1]);
+                       current_instruction = 
__opcode_thumb32_compose(current_instruction, instr2);
                }
        } else {
-               current_instruction = *(u32 *)test_code;
+               current_instruction = __mem_to_opcode_arm(*(u32 *)test_code);
        }
 
        if (current_title[0] == '.')
-- 
1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to