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

TOMOYO Linux Cross Reference
Linux/arch/x86/mm/kmemcheck/selftest.c

Version: ~ [ linux-5.4-rc7 ] ~ [ linux-5.3.11 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.84 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.154 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.201 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.201 ] ~ [ 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.77 ] ~ [ 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.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 #include <linux/kernel.h>
  2 
  3 #include "opcode.h"
  4 #include "selftest.h"
  5 
  6 struct selftest_opcode {
  7         unsigned int expected_size;
  8         const uint8_t *insn;
  9         const char *desc;
 10 };
 11 
 12 static const struct selftest_opcode selftest_opcodes[] = {
 13         /* REP MOVS */
 14         {1, "\xf3\xa4",                 "rep movsb <mem8>, <mem8>"},
 15         {4, "\xf3\xa5",                 "rep movsl <mem32>, <mem32>"},
 16 
 17         /* MOVZX / MOVZXD */
 18         {1, "\x66\x0f\xb6\x51\xf8",     "movzwq <mem8>, <reg16>"},
 19         {1, "\x0f\xb6\x51\xf8",         "movzwq <mem8>, <reg32>"},
 20 
 21         /* MOVSX / MOVSXD */
 22         {1, "\x66\x0f\xbe\x51\xf8",     "movswq <mem8>, <reg16>"},
 23         {1, "\x0f\xbe\x51\xf8",         "movswq <mem8>, <reg32>"},
 24 
 25 #ifdef CONFIG_X86_64
 26         /* MOVZX / MOVZXD */
 27         {1, "\x49\x0f\xb6\x51\xf8",     "movzbq <mem8>, <reg64>"},
 28         {2, "\x49\x0f\xb7\x51\xf8",     "movzbq <mem16>, <reg64>"},
 29 
 30         /* MOVSX / MOVSXD */
 31         {1, "\x49\x0f\xbe\x51\xf8",     "movsbq <mem8>, <reg64>"},
 32         {2, "\x49\x0f\xbf\x51\xf8",     "movsbq <mem16>, <reg64>"},
 33         {4, "\x49\x63\x51\xf8",         "movslq <mem32>, <reg64>"},
 34 #endif
 35 };
 36 
 37 static bool selftest_opcode_one(const struct selftest_opcode *op)
 38 {
 39         unsigned size;
 40 
 41         kmemcheck_opcode_decode(op->insn, &size);
 42 
 43         if (size == op->expected_size)
 44                 return true;
 45 
 46         printk(KERN_WARNING "kmemcheck: opcode %s: expected size %d, got %d\n",
 47                 op->desc, op->expected_size, size);
 48         return false;
 49 }
 50 
 51 static bool selftest_opcodes_all(void)
 52 {
 53         bool pass = true;
 54         unsigned int i;
 55 
 56         for (i = 0; i < ARRAY_SIZE(selftest_opcodes); ++i)
 57                 pass = pass && selftest_opcode_one(&selftest_opcodes[i]);
 58 
 59         return pass;
 60 }
 61 
 62 bool kmemcheck_selftest(void)
 63 {
 64         bool pass = true;
 65 
 66         pass = pass && selftest_opcodes_all();
 67 
 68         return pass;
 69 }
 70 

~ [ 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