Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
jump_label.c
Go to the documentation of this file.
1 #include <linux/kernel.h>
2 #include <linux/jump_label.h>
3 
4 #include "insn.h"
5 #include "patch.h"
6 
7 #ifdef HAVE_JUMP_LABEL
8 
9 static void __arch_jump_label_transform(struct jump_entry *entry,
10  enum jump_label_type type,
11  bool is_static)
12 {
13  void *addr = (void *)entry->code;
14  unsigned int insn;
15 
16  if (type == JUMP_LABEL_ENABLE)
17  insn = arm_gen_branch(entry->code, entry->target);
18  else
19  insn = arm_gen_nop();
20 
21  if (is_static)
22  __patch_text(addr, insn);
23  else
24  patch_text(addr, insn);
25 }
26 
27 void arch_jump_label_transform(struct jump_entry *entry,
28  enum jump_label_type type)
29 {
30  __arch_jump_label_transform(entry, type, false);
31 }
32 
33 void arch_jump_label_transform_static(struct jump_entry *entry,
34  enum jump_label_type type)
35 {
36  __arch_jump_label_transform(entry, type, true);
37 }
38 
39 #endif