diff options
Diffstat (limited to 'arch/powerpc/include/asm/code-patching.h')
-rw-r--r-- | arch/powerpc/include/asm/code-patching.h | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/arch/powerpc/include/asm/code-patching.h b/arch/powerpc/include/asm/code-patching.h index 3d5acd2b113a..2074b40f3fb5 100644 --- a/arch/powerpc/include/asm/code-patching.h +++ b/arch/powerpc/include/asm/code-patching.h | |||
@@ -33,14 +33,33 @@ unsigned int create_cond_branch(const unsigned int *addr, | |||
33 | int patch_branch(unsigned int *addr, unsigned long target, int flags); | 33 | int patch_branch(unsigned int *addr, unsigned long target, int flags); |
34 | int patch_instruction(unsigned int *addr, unsigned int instr); | 34 | int patch_instruction(unsigned int *addr, unsigned int instr); |
35 | int raw_patch_instruction(unsigned int *addr, unsigned int instr); | 35 | int raw_patch_instruction(unsigned int *addr, unsigned int instr); |
36 | int patch_instruction_site(s32 *addr, unsigned int instr); | ||
37 | int patch_branch_site(s32 *site, unsigned long target, int flags); | ||
38 | 36 | ||
39 | static inline unsigned long patch_site_addr(s32 *site) | 37 | static inline unsigned long patch_site_addr(s32 *site) |
40 | { | 38 | { |
41 | return (unsigned long)site + *site; | 39 | return (unsigned long)site + *site; |
42 | } | 40 | } |
43 | 41 | ||
42 | static inline int patch_instruction_site(s32 *site, unsigned int instr) | ||
43 | { | ||
44 | return patch_instruction((unsigned int *)patch_site_addr(site), instr); | ||
45 | } | ||
46 | |||
47 | static inline int patch_branch_site(s32 *site, unsigned long target, int flags) | ||
48 | { | ||
49 | return patch_branch((unsigned int *)patch_site_addr(site), target, flags); | ||
50 | } | ||
51 | |||
52 | static inline int modify_instruction(unsigned int *addr, unsigned int clr, | ||
53 | unsigned int set) | ||
54 | { | ||
55 | return patch_instruction(addr, (*addr & ~clr) | set); | ||
56 | } | ||
57 | |||
58 | static inline int modify_instruction_site(s32 *site, unsigned int clr, unsigned int set) | ||
59 | { | ||
60 | return modify_instruction((unsigned int *)patch_site_addr(site), clr, set); | ||
61 | } | ||
62 | |||
44 | int instr_is_relative_branch(unsigned int instr); | 63 | int instr_is_relative_branch(unsigned int instr); |
45 | int instr_is_relative_link_branch(unsigned int instr); | 64 | int instr_is_relative_link_branch(unsigned int instr); |
46 | int instr_is_branch_to_addr(const unsigned int *instr, unsigned long addr); | 65 | int instr_is_branch_to_addr(const unsigned int *instr, unsigned long addr); |