X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=opcodes%2Fvax-dis.c;h=ff240e4c2a7134af58f91d3a9f6fd0b58308518d;hb=03b039a518fa0f89a9900a44a8b874cc91061305;hp=818b41aae85696d44697cd3d15e1d8ed472e0cca;hpb=df7b86aa4cb63ce86e60949b8160438bc0f9e389;p=deliverable%2Fbinutils-gdb.git diff --git a/opcodes/vax-dis.c b/opcodes/vax-dis.c index 818b41aae8..ff240e4c2a 100644 --- a/opcodes/vax-dis.c +++ b/opcodes/vax-dis.c @@ -1,6 +1,5 @@ /* Print VAX instructions. - Copyright 1995, 1998, 2000, 2001, 2002, 2005, 2007, 2009, 2012 - Free Software Foundation, Inc. + Copyright (C) 1995-2017 Free Software Foundation, Inc. Contributed by Pauline Middelink This file is part of the GNU opcodes library. @@ -76,7 +75,7 @@ struct private bfd_byte * max_fetched; bfd_byte the_buffer[MAXLEN]; bfd_vma insn_start; - jmp_buf bailout; + OPCODES_SIGJMP_BUF bailout; }; /* Make sure that bytes from INFO->PRIVATE_DATA->BUFFER (inclusive) @@ -100,7 +99,7 @@ fetch_data (struct disassemble_info *info, bfd_byte *addr) if (status != 0) { (*info->memory_error_func) (status, start, info); - longjmp (priv->bailout, 1); + OPCODES_SIGLONGJMP (priv->bailout, 1); } else priv->max_fetched = addr; @@ -132,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 ++; } @@ -297,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); @@ -306,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); @@ -315,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); @@ -396,14 +398,15 @@ print_insn_vax (bfd_vma memaddr, disassemble_info *info) parsed_disassembler_options = TRUE; } - if (setjmp (priv.bailout) != 0) + if (OPCODES_SIGSETJMP (priv.bailout) != 0) /* Error return. */ return -1; 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); }