diff options
author | Ben Dooks <ben.dooks@codethink.co.uk> | 2013-11-08 13:29:26 -0500 |
---|---|---|
committer | Taras Kondratiuk <taras@ti.com> | 2014-04-01 09:48:23 -0400 |
commit | 4712e17aa4b3c348cd0c7afc6370551a9193b65f (patch) | |
tree | 9d294369d05ab751445766d2cc693102cd3bb2cb | |
parent | 888be25402021a425da3e85e2d5a954d7509286e (diff) |
ARM: kprobes-test: use <asm/opcodes.h> for instruction accesses
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 <tixy@linaro.org>
Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk>
[taras.kondratiuk@linaro.org: fix next_instruction() function]
Signed-off-by: Taras Kondratiuk <taras.kondratiuk@linaro.org>
-rw-r--r-- | arch/arm/kernel/kprobes-test.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/arch/arm/kernel/kprobes-test.c b/arch/arm/kernel/kprobes-test.c index c2fd06b4c389..6e60a349aed9 100644 --- a/arch/arm/kernel/kprobes-test.c +++ b/arch/arm/kernel/kprobes-test.c | |||
@@ -1333,7 +1333,8 @@ static void test_case_failed(const char *message) | |||
1333 | static unsigned long next_instruction(unsigned long pc) | 1333 | static unsigned long next_instruction(unsigned long pc) |
1334 | { | 1334 | { |
1335 | #ifdef CONFIG_THUMB2_KERNEL | 1335 | #ifdef CONFIG_THUMB2_KERNEL |
1336 | if ((pc & 1) && !is_wide_instruction(*(u16 *)(pc - 1))) | 1336 | if ((pc & 1) && |
1337 | !is_wide_instruction(__mem_to_opcode_thumb16(*(u16 *)(pc - 1)))) | ||
1337 | return pc + 2; | 1338 | return pc + 2; |
1338 | else | 1339 | else |
1339 | #endif | 1340 | #endif |
@@ -1378,13 +1379,13 @@ static uintptr_t __used kprobes_test_case_start(const char *title, void *stack) | |||
1378 | 1379 | ||
1379 | if (test_case_is_thumb) { | 1380 | if (test_case_is_thumb) { |
1380 | u16 *p = (u16 *)(test_code & ~1); | 1381 | u16 *p = (u16 *)(test_code & ~1); |
1381 | current_instruction = p[0]; | 1382 | current_instruction = __mem_to_opcode_thumb16(p[0]); |
1382 | if (is_wide_instruction(current_instruction)) { | 1383 | if (is_wide_instruction(current_instruction)) { |
1383 | current_instruction <<= 16; | 1384 | u16 instr2 = __mem_to_opcode_thumb16(p[1]); |
1384 | current_instruction |= p[1]; | 1385 | current_instruction = __opcode_thumb32_compose(current_instruction, instr2); |
1385 | } | 1386 | } |
1386 | } else { | 1387 | } else { |
1387 | current_instruction = *(u32 *)test_code; | 1388 | current_instruction = __mem_to_opcode_arm(*(u32 *)test_code); |
1388 | } | 1389 | } |
1389 | 1390 | ||
1390 | if (current_title[0] == '.') | 1391 | if (current_title[0] == '.') |