Branch data Line data Source code
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 : 358106 : static void __arch_jump_label_transform(struct jump_entry *entry, 8 : : enum jump_label_type type, 9 : : bool is_static) 10 : : { 11 : 358106 : void *addr = (void *)entry->code; 12 : : unsigned int insn; 13 : : 14 [ + + ]: 358106 : if (type == JUMP_LABEL_JMP) 15 : 30015 : insn = arm_gen_branch(entry->code, entry->target); 16 : : else 17 : : insn = arm_gen_nop(); 18 : : 19 [ + + ]: 358106 : if (is_static) 20 : : __patch_text_early(addr, insn); 21 : : else 22 : 34151 : patch_text(addr, insn); 23 : 358106 : } 24 : : 25 : 34151 : void arch_jump_label_transform(struct jump_entry *entry, 26 : : enum jump_label_type type) 27 : : { 28 : 34151 : __arch_jump_label_transform(entry, type, false); 29 : 34151 : } 30 : : 31 : 323955 : void arch_jump_label_transform_static(struct jump_entry *entry, 32 : : enum jump_label_type type) 33 : : { 34 : 323955 : __arch_jump_label_transform(entry, type, true); 35 : 323955 : }