~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/arm64/include/asm/alternative.h

Version: ~ [ linux-5.2 ] ~ [ linux-5.1.16 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.57 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.132 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.184 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.184 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.19.8 ] ~ [ linux-3.18.140 ] ~ [ linux-3.17.8 ] ~ [ linux-3.16.69 ] ~ [ linux-3.15.10 ] ~ [ linux-3.14.79 ] ~ [ linux-3.13.11 ] ~ [ linux-3.12.74 ] ~ [ linux-3.11.10 ] ~ [ linux-3.10.108 ] ~ [ linux-3.9.11 ] ~ [ linux-3.8.13 ] ~ [ linux-3.7.10 ] ~ [ linux-3.6.11 ] ~ [ linux-3.5.7 ] ~ [ linux-3.4.113 ] ~ [ linux-3.3.8 ] ~ [ linux-3.2.102 ] ~ [ linux-3.1.10 ] ~ [ linux-3.0.101 ] ~ [ linux-2.6.39.4 ] ~ [ linux-2.6.38.8 ] ~ [ linux-2.6.37.6 ] ~ [ linux-2.6.36.4 ] ~ [ linux-2.6.35.14 ] ~ [ linux-2.6.34.15 ] ~ [ linux-2.6.33.20 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 #ifndef __ASM_ALTERNATIVE_H
  2 #define __ASM_ALTERNATIVE_H
  3 
  4 #include <linux/types.h>
  5 #include <linux/stddef.h>
  6 #include <linux/stringify.h>
  7 
  8 struct alt_instr {
  9         s32 orig_offset;        /* offset to original instruction */
 10         s32 alt_offset;         /* offset to replacement instruction */
 11         u16 cpufeature;         /* cpufeature bit set for replacement */
 12         u8  orig_len;           /* size of original instruction(s) */
 13         u8  alt_len;            /* size of new instruction(s), <= orig_len */
 14 };
 15 
 16 void apply_alternatives_all(void);
 17 void apply_alternatives(void *start, size_t length);
 18 void free_alternatives_memory(void);
 19 
 20 #define ALTINSTR_ENTRY(feature)                                               \
 21         " .word 661b - .\n"                             /* label           */ \
 22         " .word 663f - .\n"                             /* new instruction */ \
 23         " .hword " __stringify(feature) "\n"            /* feature bit     */ \
 24         " .byte 662b-661b\n"                            /* source len      */ \
 25         " .byte 664f-663f\n"                            /* replacement len */
 26 
 27 /* alternative assembly primitive: */
 28 #define ALTERNATIVE(oldinstr, newinstr, feature)                        \
 29         "661:\n\t"                                                      \
 30         oldinstr "\n"                                                   \
 31         "662:\n"                                                        \
 32         ".pushsection .altinstructions,\"a\"\n"                         \
 33         ALTINSTR_ENTRY(feature)                                         \
 34         ".popsection\n"                                                 \
 35         ".pushsection .altinstr_replacement, \"a\"\n"                   \
 36         "663:\n\t"                                                      \
 37         newinstr "\n"                                                   \
 38         "664:\n\t"                                                      \
 39         ".popsection\n\t"                                               \
 40         ".if ((664b-663b) != (662b-661b))\n\t"                          \
 41         "       .error \"Alternatives instruction length mismatch\"\n\t"\
 42         ".endif\n"
 43 
 44 #endif /* __ASM_ALTERNATIVE_H */
 45 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp