This commit was manufactured by cvs2svn to create branch 'binutils-
[external/binutils.git] / opcodes / dis-buf.c
index 8f846a9..372fb96 100644 (file)
@@ -1,20 +1,23 @@
 /* Disassemble from a buffer, for GNU.
-   Copyright 1993, 1994, 1996, 1997, 1998, 1999, 2000
-   Free Software Foundation, Inc.
+   Copyright 1993, 1994, 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2005,
+   2007, 2009, 2010  Free Software Foundation, Inc.
 
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
+   This file is part of the GNU opcodes library.
 
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU General Public License for more details.
+   This library is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3, or (at your option)
+   any later version.
 
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+   It is distributed in the hope that it will be useful, but WITHOUT
+   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
+   License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
+   MA 02110-1301, USA.  */
 
 #include "sysdep.h"
 #include "dis-asm.h"
@@ -24,11 +27,10 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 /* Get LENGTH bytes from info's buffer, at target address memaddr.
    Transfer them to myaddr.  */
 int
-buffer_read_memory (memaddr, myaddr, length, info)
-     bfd_vma memaddr;
-     bfd_byte *myaddr;
-     unsigned int length;
-     struct disassemble_info *info;
+buffer_read_memory (bfd_vma memaddr,
+                   bfd_byte *myaddr,
+                   unsigned int length,
+                   struct disassemble_info *info)
 {
   unsigned int opb = info->octets_per_byte;
   unsigned int end_addr_offset = length / opb;
@@ -36,6 +38,7 @@ buffer_read_memory (memaddr, myaddr, length, info)
   unsigned int octets = (memaddr - info->buffer_vma) * opb;
 
   if (memaddr < info->buffer_vma
+      || memaddr - info->buffer_vma > max_addr_offset
       || memaddr - info->buffer_vma + end_addr_offset > max_addr_offset)
     /* Out of bounds.  Use EIO because GDB uses it.  */
     return EIO;
@@ -46,20 +49,25 @@ buffer_read_memory (memaddr, myaddr, length, info)
 
 /* Print an error message.  We can assume that this is in response to
    an error return from buffer_read_memory.  */
+
 void
-perror_memory (status, memaddr, info)
-     int status;
-     bfd_vma memaddr;
-     struct disassemble_info *info;
+perror_memory (int status,
+              bfd_vma memaddr,
+              struct disassemble_info *info)
 {
   if (status != EIO)
     /* Can't happen.  */
     info->fprintf_func (info->stream, _("Unknown error %d\n"), status);
   else
-    /* Actually, address between memaddr and memaddr + len was
-       out of bounds.  */
-    info->fprintf_func (info->stream,
-                       _("Address 0x%x is out of bounds.\n"), memaddr);
+    {
+      char buf[30];
+
+      /* Actually, address between memaddr and memaddr + len was
+        out of bounds.  */
+      sprintf_vma (buf, memaddr);
+      info->fprintf_func (info->stream,
+                         _("Address 0x%s is out of bounds.\n"), buf);
+    }
 }
 
 /* This could be in a separate file, to save miniscule amounts of space
@@ -70,9 +78,7 @@ perror_memory (status, memaddr, info)
    addresses).  */
 
 void
-generic_print_address (addr, info)
-     bfd_vma addr;
-     struct disassemble_info *info;
+generic_print_address (bfd_vma addr, struct disassemble_info *info)
 {
   char buf[30];
 
@@ -80,39 +86,20 @@ generic_print_address (addr, info)
   (*info->fprintf_func) (info->stream, "0x%s", buf);
 }
 
-#if 0
-/* Just concatenate the address as hex.  This is included for
-   completeness even though both GDB and objdump provide their own (to
-   print symbolic addresses).  */
-
-void generic_strcat_address PARAMS ((bfd_vma, char *, int));
+/* Just return true.  */
 
-void
-generic_strcat_address (addr, buf, len)
-     bfd_vma addr;
-     char *buf;
-     int len;
+int
+generic_symbol_at_address (bfd_vma addr ATTRIBUTE_UNUSED,
+                          struct disassemble_info *info ATTRIBUTE_UNUSED)
 {
-  if (buf != (char *)NULL && len > 0)
-    {
-      char tmpBuf[30];
-
-      sprintf_vma (tmpBuf, addr);
-      if ((strlen (buf) + strlen (tmpBuf)) <= (unsigned int) len)
-       strcat (buf, tmpBuf);
-      else
-       strncat (buf, tmpBuf, (len - strlen(buf)));
-    }
-  return;
+  return 1;
 }
-#endif
 
-/* Just return the given address.  */
+/* Just return TRUE.  */
 
-int
-generic_symbol_at_address (addr, info)
-     bfd_vma addr ATTRIBUTE_UNUSED;
-     struct disassemble_info *info ATTRIBUTE_UNUSED;
+bfd_boolean
+generic_symbol_is_valid (asymbol * sym ATTRIBUTE_UNUSED,
+                        struct disassemble_info *info ATTRIBUTE_UNUSED)
 {
-  return 1;
+  return TRUE;
 }