Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
at v3.16 40 lines 679 B view raw
1#ifndef _ASM_ARM_JUMP_LABEL_H 2#define _ASM_ARM_JUMP_LABEL_H 3 4#ifdef __KERNEL__ 5 6#include <linux/types.h> 7 8#define JUMP_LABEL_NOP_SIZE 4 9 10#ifdef CONFIG_THUMB2_KERNEL 11#define JUMP_LABEL_NOP "nop.w" 12#else 13#define JUMP_LABEL_NOP "nop" 14#endif 15 16static __always_inline bool arch_static_branch(struct static_key *key) 17{ 18 asm_volatile_goto("1:\n\t" 19 JUMP_LABEL_NOP "\n\t" 20 ".pushsection __jump_table, \"aw\"\n\t" 21 ".word 1b, %l[l_yes], %c0\n\t" 22 ".popsection\n\t" 23 : : "i" (key) : : l_yes); 24 25 return false; 26l_yes: 27 return true; 28} 29 30#endif /* __KERNEL__ */ 31 32typedef u32 jump_label_t; 33 34struct jump_entry { 35 jump_label_t code; 36 jump_label_t target; 37 jump_label_t key; 38}; 39 40#endif