1 // SPDX-License-Identifier: GPL-2.0 2 #include <linux/kernel.h> 3 #include <linux/jump_label.h> 4 #include <asm/patch.h> 5 #include <asm/insn.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_JMP) 17 insn = arm_gen_branch(entry->code, entry->target); 18 else 19 insn = arm_gen_nop(); 20 21 if (is_static) 22 __patch_text_early(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 40