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, moxie] Print 'bad' instructions in disassembly instead of aborting


It used to make sense to have the disassembler abort() when it hit an
unrecognized instruction.  This is just getting in the way now that we
have a bi-endian toolchain and occasionally disassemble code using the
wrong-endieness.

This patch, which I am committing, simply prints "bad" in the
disassembly output instead of aborting.

src/opcodes...

2012-09-27  Anthony Green  <green@moxielogic.com>

	* moxie-dis.c (print_insn_moxie): Print 'bad' instructions.
	* moxie-opc.c: All 'bad' instructions have the itype MOXIE_BAD.

src/include...

2012-09-27  Anthony Green  <green@moxielogic.com>

	* opcode/moxie.h (MOXIE_BAD): New define.


Index: include/opcode/moxie.h
===================================================================
RCS file: /cvs/src/src/include/opcode/moxie.h,v
retrieving revision 1.3
diff -u -p -u -r1.3 moxie.h
--- include/opcode/moxie.h	11 Jun 2009 11:27:57 -0000	1.3
+++ include/opcode/moxie.h	27 Sep 2012 14:09:10 -0000
@@ -60,6 +60,8 @@
 #define MOXIE_F3_NARG  0x300
 #define MOXIE_F3_PCREL 0x301

+#define MOXIE_BAD     0x400
+
 typedef struct moxie_opc_info_t
 {
   short         opcode;
@@ -67,6 +69,6 @@ typedef struct moxie_opc_info_t
   const char *  name;
 } moxie_opc_info_t;

-extern const moxie_opc_info_t moxie_form1_opc_info[64];
+extern const moxie_opc_info_t moxie_form1_opc_info[128];
 extern const moxie_opc_info_t moxie_form2_opc_info[4];
 extern const moxie_opc_info_t moxie_form3_opc_info[16];
Index: opcodes/moxie-dis.c
===================================================================
RCS file: /cvs/src/src/opcodes/moxie-dis.c,v
retrieving revision 1.6
diff -u -p -u -r1.6 moxie-dis.c
--- opcodes/moxie-dis.c	14 Sep 2012 10:49:03 -0000	1.6
+++ opcodes/moxie-dis.c	27 Sep 2012 14:09:22 -0000
@@ -174,8 +174,11 @@ print_insn_moxie (bfd_vma addr, struct d
 	    length = 6;
 	  }
 	  break;
+        case MOXIE_BAD:
+	  fpr (stream, "bad");
+	  break;
 	default:
-	  abort ();
+	  abort();
 	}
     }
   else if ((iword & (1<<14)) == 0)
@@ -193,6 +196,9 @@ print_insn_moxie (bfd_vma addr, struct d
 	case MOXIE_F2_NARG:
 	  fpr (stream, "%s", opcode->name);
 	  break;
+        case MOXIE_BAD:
+	  fpr (stream, "bad");
+	  break;
 	default:
 	  abort();
 	}
@@ -208,6 +214,9 @@ print_insn_moxie (bfd_vma addr, struct d
 	  info->print_address_func ((bfd_vma) (addr + INST2OFFSET(iword) + 2),
 				    info);
 	  break;
+        case MOXIE_BAD:
+	  fpr (stream, "bad");
+	  break;
 	default:
 	  abort();
 	}
Index: opcodes/moxie-opc.c
===================================================================
RCS file: /cvs/src/src/opcodes/moxie-opc.c,v
retrieving revision 1.4
diff -u -p -u -r1.4 moxie-opc.c
--- opcodes/moxie-opc.c	3 Feb 2010 12:47:06 -0000	1.4
+++ opcodes/moxie-opc.c	27 Sep 2012 14:09:22 -0000
@@ -50,12 +50,9 @@
    oooo         - form 3 opcode number
    vvvvvvvvvv   - 10-bit immediate value.  */

-/* Note that currently two opcodes are reserved as bad, so that all
-   instructions starting with 0x00 and 0xff fault.  */
-
-const moxie_opc_info_t moxie_form1_opc_info[64] =
+const moxie_opc_info_t moxie_form1_opc_info[128] =
   {
-    { 0x00, MOXIE_F1_NARG, "bad" },  // Reserved as bad.
+    { 0x00, MOXIE_BAD,     "bad" },  // Reserved as bad.
     { 0x01, MOXIE_F1_A4,   "ldi.l" },
     { 0x02, MOXIE_F1_AB,   "mov" },
     { 0x03, MOXIE_F1_M,    "jsra" },
@@ -71,15 +68,15 @@ const moxie_opc_info_t moxie_form1_opc_i
     { 0x0d, MOXIE_F1_AiB4, "sto.l" },
     { 0x0e, MOXIE_F1_AB,   "cmp" },
     { 0x0f, MOXIE_F1_NARG, "nop" },
-    { 0x10, MOXIE_F1_NARG, "bad" },
-    { 0x11, MOXIE_F1_NARG, "bad" },
-    { 0x12, MOXIE_F1_NARG, "bad" },
-    { 0x13, MOXIE_F1_NARG, "bad" },
-    { 0x14, MOXIE_F1_NARG, "bad" },
-    { 0x15, MOXIE_F1_NARG, "bad" },
-    { 0x16, MOXIE_F1_NARG, "bad" },
-    { 0x17, MOXIE_F1_NARG, "bad" },
-    { 0x18, MOXIE_F1_NARG, "bad" },
+    { 0x10, MOXIE_BAD,     "bad" },
+    { 0x11, MOXIE_BAD,     "bad" },
+    { 0x12, MOXIE_BAD,     "bad" },
+    { 0x13, MOXIE_BAD,     "bad" },
+    { 0x14, MOXIE_BAD,     "bad" },
+    { 0x15, MOXIE_BAD,     "bad" },
+    { 0x16, MOXIE_BAD,     "bad" },
+    { 0x17, MOXIE_BAD,     "bad" },
+    { 0x18, MOXIE_BAD,     "bad" },
     { 0x19, MOXIE_F1_A,    "jsr" },
     { 0x1a, MOXIE_F1_M,    "jmpa" },
     { 0x1b, MOXIE_F1_A4,   "ldi.b" },
@@ -113,12 +110,76 @@ const moxie_opc_info_t moxie_form1_opc_i
     { 0x37, MOXIE_F1_AiB4, "sto.b" },
     { 0x38, MOXIE_F1_ABi4, "ldo.s" },
     { 0x39, MOXIE_F1_AiB4, "sto.s" },
-    { 0x3a, MOXIE_F1_NARG, "bad" },
-    { 0x3b, MOXIE_F1_NARG, "bad" },
-    { 0x3c, MOXIE_F1_NARG, "bad" },
-    { 0x3d, MOXIE_F1_NARG, "bad" },
-    { 0x3e, MOXIE_F1_NARG, "bad" },
-    { 0x3f, MOXIE_F1_NARG, "bad" }
+    { 0x3a, MOXIE_BAD,     "bad" },
+    { 0x3b, MOXIE_BAD,     "bad" },
+    { 0x3c, MOXIE_BAD,     "bad" },
+    { 0x3d, MOXIE_BAD,     "bad" },
+    { 0x3e, MOXIE_BAD,     "bad" },
+    { 0x3f, MOXIE_BAD,     "bad" },
+    { 0x40, MOXIE_BAD,     "bad" },
+    { 0x41, MOXIE_BAD,     "bad" },
+    { 0x42, MOXIE_BAD,     "bad" },
+    { 0x43, MOXIE_BAD,     "bad" },
+    { 0x44, MOXIE_BAD,     "bad" },
+    { 0x45, MOXIE_BAD,     "bad" },
+    { 0x46, MOXIE_BAD,     "bad" },
+    { 0x47, MOXIE_BAD,     "bad" },
+    { 0x48, MOXIE_BAD,     "bad" },
+    { 0x49, MOXIE_BAD,     "bad" },
+    { 0x4a, MOXIE_BAD,     "bad" },
+    { 0x4b, MOXIE_BAD,     "bad" },
+    { 0x4c, MOXIE_BAD,     "bad" },
+    { 0x4d, MOXIE_BAD,     "bad" },
+    { 0x4e, MOXIE_BAD,     "bad" },
+    { 0x4f, MOXIE_BAD,     "bad" },
+    { 0x50, MOXIE_BAD,     "bad" },
+    { 0x51, MOXIE_BAD,     "bad" },
+    { 0x52, MOXIE_BAD,     "bad" },
+    { 0x53, MOXIE_BAD,     "bad" },
+    { 0x54, MOXIE_BAD,     "bad" },
+    { 0x55, MOXIE_BAD,     "bad" },
+    { 0x56, MOXIE_BAD,     "bad" },
+    { 0x57, MOXIE_BAD,     "bad" },
+    { 0x58, MOXIE_BAD,     "bad" },
+    { 0x59, MOXIE_BAD,     "bad" },
+    { 0x5a, MOXIE_BAD,     "bad" },
+    { 0x5b, MOXIE_BAD,     "bad" },
+    { 0x5c, MOXIE_BAD,     "bad" },
+    { 0x5d, MOXIE_BAD,     "bad" },
+    { 0x5e, MOXIE_BAD,     "bad" },
+    { 0x5f, MOXIE_BAD,     "bad" },
+    { 0x60, MOXIE_BAD,     "bad" },
+    { 0x61, MOXIE_BAD,     "bad" },
+    { 0x62, MOXIE_BAD,     "bad" },
+    { 0x63, MOXIE_BAD,     "bad" },
+    { 0x64, MOXIE_BAD,     "bad" },
+    { 0x65, MOXIE_BAD,     "bad" },
+    { 0x66, MOXIE_BAD,     "bad" },
+    { 0x67, MOXIE_BAD,     "bad" },
+    { 0x68, MOXIE_BAD,     "bad" },
+    { 0x69, MOXIE_BAD,     "bad" },
+    { 0x6a, MOXIE_BAD,     "bad" },
+    { 0x6b, MOXIE_BAD,     "bad" },
+    { 0x6c, MOXIE_BAD,     "bad" },
+    { 0x6d, MOXIE_BAD,     "bad" },
+    { 0x6e, MOXIE_BAD,     "bad" },
+    { 0x6f, MOXIE_BAD,     "bad" },
+    { 0x70, MOXIE_BAD,     "bad" },
+    { 0x71, MOXIE_BAD,     "bad" },
+    { 0x72, MOXIE_BAD,     "bad" },
+    { 0x73, MOXIE_BAD,     "bad" },
+    { 0x74, MOXIE_BAD,     "bad" },
+    { 0x75, MOXIE_BAD,     "bad" },
+    { 0x76, MOXIE_BAD,     "bad" },
+    { 0x77, MOXIE_BAD,     "bad" },
+    { 0x78, MOXIE_BAD,     "bad" },
+    { 0x79, MOXIE_BAD,     "bad" },
+    { 0x7a, MOXIE_BAD,     "bad" },
+    { 0x7b, MOXIE_BAD,     "bad" },
+    { 0x7c, MOXIE_BAD,     "bad" },
+    { 0x7d, MOXIE_BAD,     "bad" },
+    { 0x7e, MOXIE_BAD,     "bad" },
+    { 0x7f, MOXIE_BAD,     "bad" }
   };

 const moxie_opc_info_t moxie_form2_opc_info[4] =
@@ -141,12 +202,10 @@ const moxie_opc_info_t moxie_form3_opc_i
     { 0x07, MOXIE_F3_PCREL,"ble" },
     { 0x08, MOXIE_F3_PCREL,"bgeu" },
     { 0x09, MOXIE_F3_PCREL,"bleu" },
-    { 0x0a, MOXIE_F3_NARG, "bad" },
-    { 0x0b, MOXIE_F3_NARG, "bad" },
-    { 0x0c, MOXIE_F3_NARG, "bad" },
-    { 0x0d, MOXIE_F3_NARG, "bad" },
-    { 0x0e, MOXIE_F3_NARG, "bad" },
-    { 0x0f, MOXIE_F3_NARG, "bad" }  // Reserved as bad.
+    { 0x0a, MOXIE_BAD,     "bad" },
+    { 0x0b, MOXIE_BAD,     "bad" },
+    { 0x0c, MOXIE_BAD,     "bad" },
+    { 0x0d, MOXIE_BAD,     "bad" },
+    { 0x0e, MOXIE_BAD,     "bad" },
+    { 0x0f, MOXIE_BAD,     "bad" }  // Reserved as bad.
   };


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