Return bad_opcode on unknown bits in opcode.
authorH.J. Lu <hjl.tools@gmail.com>
Fri, 16 Apr 2010 21:35:24 +0000 (21:35 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Fri, 16 Apr 2010 21:35:24 +0000 (21:35 +0000)
2010-04-16  H.J. Lu  <hongjiu.lu@intel.com>

* i386-dis.c (get_valid_dis386): Return bad_opcode on unknown
bits in opcode.

opcodes/ChangeLog
opcodes/i386-dis.c

index 1e5b4de2c40e3c8b9d3d2ca967cb26fda5b815c1..b686fe056a4db696e4b327d46035888bad8c552e 100644 (file)
@@ -1,3 +1,8 @@
+2010-04-16  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * i386-dis.c (get_valid_dis386): Return bad_opcode on unknown
+       bits in opcode.
+
 2010-04-09  Nick Clifton  <nickc@redhat.com>
 
        * i386-dis.c (print_insn): Remove unused variable op.
index 797d0bd700ae8e1b9823c2734f8c2ae042720565..e5b45a1b909750194dd30a2638cab57ce5b9298d 100644 (file)
@@ -11058,7 +11058,9 @@ get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
       switch ((*codep & 0x1f))
        {
        default:
-         BadOp ();
+         dp = &bad_opcode;
+         return dp;
+         break;
        case 0x8:
          vex_table_index = XOP_08;
          break;
@@ -11077,7 +11079,10 @@ get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
       vex.register_specifier = (~(*codep >> 3)) & 0xf;
       if (address_mode != mode_64bit
          && vex.register_specifier > 0x7)
-       BadOp ();
+       {
+         dp = &bad_opcode;
+         return dp;
+       }
 
       vex.length = (*codep & 0x4) ? 256 : 128;
       switch ((*codep & 0x3))
@@ -11115,7 +11120,8 @@ get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
       switch ((*codep & 0x1f))
        {
        default:
-         BadOp ();
+         dp = &bad_opcode;
+         return dp;
        case 0x1:
          vex_table_index = VEX_0F;
          break;
@@ -11134,7 +11140,10 @@ get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
       vex.register_specifier = (~(*codep >> 3)) & 0xf;
       if (address_mode != mode_64bit
          && vex.register_specifier > 0x7)
-       BadOp ();
+       {
+         dp = &bad_opcode;
+         return dp;
+       }
 
       vex.length = (*codep & 0x4) ? 256 : 128;
       switch ((*codep & 0x3))
@@ -11176,7 +11185,10 @@ get_valid_dis386 (const struct dis386 *dp, disassemble_info *info)
       vex.register_specifier = (~(*codep >> 3)) & 0xf;
       if (address_mode != mode_64bit
          && vex.register_specifier > 0x7)
-       BadOp ();
+       {
+         dp = &bad_opcode;
+         return dp;
+       }
 
       vex.w = 0;