Change objfile::partial_symtabs to be a unique_ptr
[deliverable/binutils-gdb.git] / opcodes / vax-dis.c
index a7a1ccbec8ed3fe28c6147660687c388fca9aacb..3bdfa151920434131b2dcc0abe241ef943212ee9 100644 (file)
@@ -1,5 +1,5 @@
 /* Print VAX instructions.
-   Copyright (C) 1995-2015 Free Software Foundation, Inc.
+   Copyright (C) 1995-2019 Free Software Foundation, Inc.
    Contributed by Pauline Middelink <middelin@polyware.iaf.nl>
 
    This file is part of the GNU opcodes library.
@@ -23,7 +23,7 @@
 #include <setjmp.h>
 #include <string.h>
 #include "opcode/vax.h"
-#include "dis-asm.h"
+#include "disassemble.h"
 
 static char *reg_names[] =
 {
@@ -64,7 +64,7 @@ static char *entry_mask_bit[] =
 #define COERCE32(x) ((int) (((x) ^ 0x80000000) - 0x80000000))
 #define NEXTLONG(p)  \
   (p += 4, FETCH_DATA (info, p), \
-   (COERCE32 ((((((p[-1] << 8) + p[-2]) << 8) + p[-3]) << 8) + p[-4])))
+   (COERCE32 (((((((unsigned) p[-1] << 8) + p[-2]) << 8) + p[-3]) << 8) + p[-4])))
 
 /* Maximum length of an instruction.  */
 #define MAXLEN 25
@@ -117,7 +117,7 @@ static bfd_vma *     entry_addr = NULL;
    there's no symbol table.  Returns TRUE upon success, FALSE otherwise.  */
 
 static bfd_boolean
-parse_disassembler_options (char * options)
+parse_disassembler_options (const char *options)
 {
   const char * entry_switch = "entry:";
 
@@ -131,14 +131,14 @@ parse_disassembler_options (char * options)
          /* A guesstimate of the number of entries we will have to create.  */
          entry_addr_total_slots +=
            strlen (options) / (strlen (entry_switch) + 5);
-         
+
          entry_addr = realloc (entry_addr, sizeof (bfd_vma)
                                * entry_addr_total_slots);
        }
 
       if (entry_addr == NULL)
        return FALSE;
-         
+
       entry_addr[entry_addr_occupied_slots] = bfd_scan_vma (options, NULL, 0);
       entry_addr_occupied_slots ++;
     }
@@ -296,6 +296,7 @@ print_insn_mode (const char *d,
       break;
     case 0xB0: /* Displacement byte deferred:  *displ(Rn).  */
       (*info->fprintf_func) (info->stream, "*");
+      /* Fall through.  */
     case 0xA0: /* Displacement byte:           displ(Rn).  */
       if (reg == 0xF)
        (*info->print_address_func) (addr + 2 + NEXTBYTE (p), info);
@@ -305,6 +306,7 @@ print_insn_mode (const char *d,
       break;
     case 0xD0: /* Displacement word deferred:  *displ(Rn).  */
       (*info->fprintf_func) (info->stream, "*");
+      /* Fall through.  */
     case 0xC0: /* Displacement word:           displ(Rn).  */
       if (reg == 0xF)
        (*info->print_address_func) (addr + 3 + NEXTWORD (p), info);
@@ -314,6 +316,7 @@ print_insn_mode (const char *d,
       break;
     case 0xF0: /* Displacement long deferred:  *displ(Rn).  */
       (*info->fprintf_func) (info->stream, "*");
+      /* Fall through.  */
     case 0xE0: /* Displacement long:           displ(Rn).  */
       if (reg == 0xF)
        (*info->print_address_func) (addr + 5 + NEXTLONG (p), info);
@@ -402,7 +405,8 @@ print_insn_vax (bfd_vma memaddr, disassemble_info *info)
   argp = NULL;
   /* Check if the info buffer has more than one byte left since
      the last opcode might be a single byte with no argument data.  */
-  if (info->buffer_length - (memaddr - info->buffer_vma) > 1)
+  if (info->buffer_length - (memaddr - info->buffer_vma) > 1
+      && (info->stop_vma == 0 || memaddr < (info->stop_vma - 1)))
     {
       FETCH_DATA (info, buffer + 2);
     }
This page took 0.025199 seconds and 4 git commands to generate.