diff options
author | Jon Medhurst <tixy@yxit.co.uk> | 2011-07-07 14:58:29 -0400 |
---|---|---|
committer | Tixy <tixy@medhuaa1.miniserver.com> | 2011-07-13 13:32:41 -0400 |
commit | aea490299f7f0412f884a4895bc96211d8d8dbaf (patch) | |
tree | ef4ad811403f718f4923213ac53e9fb793dafc11 /arch | |
parent | 6c8df3300f60cae54aeb2a6dda8efe7ffe16a322 (diff) |
ARM: kprobes: Make str_pc_offset a constant on ARMv7
The str_pc_offset value is architecturally defined on ARMv7 onwards so
we can make it a compile time constant. This means on Thumb kernels the
runtime checking code isn't needed, which saves us from having to fix it
to work for Thumb.
Signed-off-by: Jon Medhurst <tixy@yxit.co.uk>
Acked-by: Nicolas Pitre <nicolas.pitre@linaro.org>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/kernel/kprobes-common.c | 4 | ||||
-rw-r--r-- | arch/arm/kernel/kprobes.h | 14 |
2 files changed, 18 insertions, 0 deletions
diff --git a/arch/arm/kernel/kprobes-common.c b/arch/arm/kernel/kprobes-common.c index e18576cca6cf..87e91ce4d495 100644 --- a/arch/arm/kernel/kprobes-common.c +++ b/arch/arm/kernel/kprobes-common.c | |||
@@ -17,6 +17,8 @@ | |||
17 | #include "kprobes.h" | 17 | #include "kprobes.h" |
18 | 18 | ||
19 | 19 | ||
20 | #ifndef find_str_pc_offset | ||
21 | |||
20 | /* | 22 | /* |
21 | * For STR and STM instructions, an ARM core may choose to use either | 23 | * For STR and STM instructions, an ARM core may choose to use either |
22 | * a +8 or a +12 displacement from the current instruction's address. | 24 | * a +8 or a +12 displacement from the current instruction's address. |
@@ -40,6 +42,8 @@ void __init find_str_pc_offset(void) | |||
40 | str_pc_offset = ret; | 42 | str_pc_offset = ret; |
41 | } | 43 | } |
42 | 44 | ||
45 | #endif /* !find_str_pc_offset */ | ||
46 | |||
43 | 47 | ||
44 | void __init arm_kprobe_decode_init(void) | 48 | void __init arm_kprobe_decode_init(void) |
45 | { | 49 | { |
diff --git a/arch/arm/kernel/kprobes.h b/arch/arm/kernel/kprobes.h index 43f630d7f03d..406bb2da7fea 100644 --- a/arch/arm/kernel/kprobes.h +++ b/arch/arm/kernel/kprobes.h | |||
@@ -36,7 +36,21 @@ void __init arm_kprobe_decode_init(void); | |||
36 | 36 | ||
37 | extern kprobe_check_cc * const kprobe_condition_checks[16]; | 37 | extern kprobe_check_cc * const kprobe_condition_checks[16]; |
38 | 38 | ||
39 | |||
40 | #if __LINUX_ARM_ARCH__ >= 7 | ||
41 | |||
42 | /* str_pc_offset is architecturally defined from ARMv7 onwards */ | ||
43 | #define str_pc_offset 8 | ||
44 | #define find_str_pc_offset() | ||
45 | |||
46 | #else /* __LINUX_ARM_ARCH__ < 7 */ | ||
47 | |||
48 | /* We need a run-time check to determine str_pc_offset */ | ||
39 | extern int str_pc_offset; | 49 | extern int str_pc_offset; |
50 | void __init find_str_pc_offset(void); | ||
51 | |||
52 | #endif | ||
53 | |||
40 | 54 | ||
41 | /* | 55 | /* |
42 | * Test if load/store instructions writeback the address register. | 56 | * Test if load/store instructions writeback the address register. |