Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f8b435bb authored by Rabin Vincent's avatar Rabin Vincent Committed by Russell King
Browse files

ARM: 7440/1: kprobes: only test 'sub pc, pc, #1b-2b+8-2' on ARMv6



'sub pc, pc, #1b-2b+8-2' results in address<1:0> == '10'.

sub pc, pc, #const (== ADR pc, #const) performs an interworking branch
(BXWritePC()) on ARMv7+ and a simple branch (BranchWritePC()) on earlier
versions.

In ARM state, BXWritePC() is UNPREDICTABLE when address<1:0> == '10'.

In ARM state on ARMv6+, BranchWritePC() ignores address<1:0>.  Before
ARMv6, BranchWritePC() is UNPREDICTABLE if address<1:0> != '00'

So the instruction is UNPREDICTABLE both before and after v6.

Acked-by: default avatarJon Medhurst <tixy@yxit.co.uk>
Signed-off-by: default avatarRabin Vincent <rabin.vincent@stericsson.com>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent fdeb8e35
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -187,8 +187,8 @@ void kprobe_arm_test_cases(void)
	TEST_BF_R ("mov	pc, r",0,2f,"")
	TEST_BF_RR("mov	pc, r",0,2f,", asl r",1,0,"")
	TEST_BB(   "sub	pc, pc, #1b-2b+8")
#if __LINUX_ARM_ARCH__ >= 6
	TEST_BB(   "sub	pc, pc, #1b-2b+8-2") /* UNPREDICTABLE before ARMv6 */
#if __LINUX_ARM_ARCH__ == 6 && !defined(CONFIG_CPU_V7)
	TEST_BB(   "sub	pc, pc, #1b-2b+8-2") /* UNPREDICTABLE before and after ARMv6 */
#endif
	TEST_BB_R( "sub	pc, pc, r",14, 1f-2f+8,"")
	TEST_BB_R( "rsb	pc, r",14,1f-2f+8,", pc")