This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

PATCH: Return bad_opcode on unknown bits in opcode


Hi,

I checked in this patch to return bad_opcode on unknown bits in opcode.


H.J.
--
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
index 1e5b4de..b686fe0 100644
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -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.
diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c
index 797d0bd..e5b45a1 100644
--- a/opcodes/i386-dis.c
+++ b/opcodes/i386-dis.c
@@ -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;
 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]