Prevent address violation problem when disassembling corrupt aarch64 binary.
[deliverable/binutils-gdb.git] / opcodes / rl78-decode.opc
index 6475b6221d56069944df59f5844c5e6d48878a9c..b25e4410a8625149f02f4193aec7734983313341 100644 (file)
@@ -1,5 +1,5 @@
 /* -*- c -*- */
-/* Copyright (C) 2012-2015 Free Software Foundation, Inc.
+/* Copyright (C) 2012-2017 Free Software Foundation, Inc.
    Contributed by Red Hat.
    Written by DJ Delorie.
 
@@ -50,7 +50,9 @@ typedef struct
 #define W() rl78->size = RL78_Word
 
 #define AU ATTRIBUTE_UNUSED
-#define GETBYTE() (ld->op [ld->rl78->n_bytes++] = ld->getbyte (ld->ptr))
+
+#define OP_BUF_LEN 20
+#define GETBYTE() (ld->rl78->n_bytes < (OP_BUF_LEN - 1) ? ld->op [ld->rl78->n_bytes++] = ld->getbyte (ld->ptr): 0)
 #define B ((unsigned long) GETBYTE())
 
 #define SYNTAX(x) rl78->syntax = x
@@ -168,7 +170,7 @@ rl78_decode_opcode (unsigned long pc AU,
                  RL78_Dis_Isa isa)
 {
   LocalData lds, * ld = &lds;
-  unsigned char op_buf[20] = {0};
+  unsigned char op_buf[OP_BUF_LEN] = {0};
   unsigned char *op = op_buf;
   int op0, op1;
 
@@ -614,10 +616,10 @@ rl78_decode_opcode (unsigned long pc AU,
 /** 1001 1001                  mov     %e0, %1                         */
   ID(mov); DM(DE, 0); SR(A);
 
-/** 1100 1010                  mov     %e0, #%1                        */
+/** 1100 1010                  mov     %ea0, #%1                       */
   ID(mov); DM(DE, IMMU(1)); SC(IMMU(1));
 
-/** 1001 1010                  mov     %e0, %1                         */
+/** 1001 1010                  mov     %ea0, %1                                */
   ID(mov); DM(DE, IMMU(1)); SR(A);
 
 /** 1001 1011                  mov     %e0, %1                         */
@@ -635,10 +637,10 @@ rl78_decode_opcode (unsigned long pc AU,
 /** 0110 0001 1111 1001                mov     %e0, %1                         */
   ID(mov); DM2(HL, C, 0); SR(A);
 
-/** 1100 1000                  mov     %0, #%1                         */
+/** 1100 1000                  mov     %a0, #%1                        */
   ID(mov); DM(SP, IMMU(1)); SC(IMMU(1));
 
-/** 1001 1000                  mov     %0, %1                          */
+/** 1001 1000                  mov     %a0, %1                         */
   ID(mov); DM(SP, IMMU(1)); SR(A);
 
 /** 1000 1111                  mov     %0, %e!1                        */
@@ -647,7 +649,7 @@ rl78_decode_opcode (unsigned long pc AU,
 /** 1000 1001                  mov     %0, %e1                         */
   ID(mov); DR(A); SM(DE, 0);
 
-/** 1000 1010                  mov     %0, %e                        */
+/** 1000 1010                  mov     %0, %ea1                        */
   ID(mov); DR(A); SM(DE, IMMU(1));
 
 /** 1000 1011                  mov     %0, %e1                         */
@@ -662,7 +664,7 @@ rl78_decode_opcode (unsigned long pc AU,
 /** 0110 0001 1110 1001                mov     %0, %e1                         */
   ID(mov); DR(A); SM2(HL, C, 0);
 
-/** 1000 1000                  mov     %0, %e                        */
+/** 1000 1000                  mov     %0, %ea1                        */
   ID(mov); DR(A); SM(SP, IMMU(1));
 
 /** 0101 0reg                  mov     %0, #%1                         */
@@ -776,7 +778,7 @@ rl78_decode_opcode (unsigned long pc AU,
        break;
       }
 
-/** 1001 1110                  mov     %0, %1                          */
+/** 1001 1110                  mov     %s0, %1                         */
   ID(mov); DM(None, SFR); SR(A);
 
 /*----------------------------------------------------------------------*/
@@ -818,7 +820,7 @@ rl78_decode_opcode (unsigned long pc AU,
 /** 1011 1001                  movw    %e0, %1                         */
   ID(mov); W(); DM(DE, 0); SR(AX);
 
-/** 1011 1010                  movw    %e0, %1                         */
+/** 1011 1010                  movw    %ea0, %1                                */
   ID(mov); W(); DM(DE, IMMU(1)); SR(AX);
 
 /** 1011 1011                  movw    %e0, %1                         */
@@ -827,7 +829,7 @@ rl78_decode_opcode (unsigned long pc AU,
 /** 1011 1100                  movw    %ea0, %1                        */
   ID(mov); W(); DM(HL, IMMU(1)); SR(AX);
 
-/** 1011 1000                  movw    %0, %1                          */
+/** 1011 1000                  movw    %a0, %1                         */
   ID(mov); W(); DM(SP, IMMU(1)); SR(AX);
 
 /** 1010 1111                  movw    %0, %e!1                        */
@@ -837,7 +839,7 @@ rl78_decode_opcode (unsigned long pc AU,
 /** 1010 1001                  movw    %0, %e1                         */
   ID(mov); W(); DR(AX); SM(DE, 0);
 
-/** 1010 1010                  movw    %0, %e1                         */
+/** 1010 1010                  movw    %0, %ea1                                */
   ID(mov); W(); DR(AX); SM(DE, IMMU(1));
 
 /** 1010 1011                  movw    %0, %e1                         */
@@ -846,7 +848,7 @@ rl78_decode_opcode (unsigned long pc AU,
 /** 1010 1100                  movw    %0, %ea1                        */
   ID(mov); W(); DR(AX); SM(HL, IMMU(1));
 
-/** 1010 1000                  movw    %0, %                         */
+/** 1010 1000                  movw    %0, %a1                         */
   ID(mov); W(); DR(AX); SM(SP, IMMU(1));
 
 /** 0011 0rg0                  movw    %0, #%1                         */
@@ -882,7 +884,7 @@ rl78_decode_opcode (unsigned long pc AU,
 /** 1010 1110                  movw    %0, %s1                         */
   ID(mov); W(); DR(AX); SM(None, SFR);
 
-/** 11ra 1011                  movw    %0, %e!1                        */
+/** 11ra 1011                  movw    %0, %es!1                       */
   ID(mov); W(); DRW(ra); SM(None, IMMU(2));
 
 /** 11ra 1010                  movw    %0, %1                          */
@@ -894,17 +896,16 @@ rl78_decode_opcode (unsigned long pc AU,
 /** 1011 1101                  movw    %0, %1                          */
   ID(mov); W(); DM(None, SADDR); SR(AX);
 
-/** 1100 1011                  movw    %0, #%1                         */
+/** 1100 1011                  movw    %s0, #%1                        */
   ID(mov); W(); DM(None, SFR); SC(IMMU(2));
 
-/** 1011 1110                  movw    %0, %1                          */
+/** 1011 1110                  movw    %s0, %1                         */
   ID(mov); W(); DM(None, SFR); SR(AX);
 
 /*----------------------------------------------------------------------*/
 
 /** 1101 0110                  mulu    x                               */
-  if (isa == RL78_ISA_G14)
-    ID(mulu);
+  ID(mulu);
 
 /*----------------------------------------------------------------------*/
 
@@ -1206,7 +1207,7 @@ rl78_decode_opcode (unsigned long pc AU,
 /** 0110 0001 1010 1110                xch     %0, %e1                         */
   ID(xch); DR(A); SM(DE, 0);
 
-/** 0110 0001 1010 1111                xch     %0, %e1                         */
+/** 0110 0001 1010 1111                xch     %0, %ea1                                */
   ID(xch); DR(A); SM(DE, IMMU(1));
 
 /** 0110 0001 1010 1100                xch     %0, %e1                         */
@@ -1228,7 +1229,7 @@ rl78_decode_opcode (unsigned long pc AU,
 /** 0110 0001 1010 1000                xch     %0, %1                          */
   ID(xch); DR(A); SM(None, SADDR);
 
-/** 0110 0001 1010 1011                xch     %0, %                         */
+/** 0110 0001 1010 1011                xch     %0, %s1                         */
   ID(xch); DR(A); SM(None, SFR);
 
 /** 0000 1000                  xch     a, x                            */
This page took 0.025906 seconds and 4 git commands to generate.