* acinclude.m4 (AM_INSTALL_LIBBFD): New.
[deliverable/binutils-gdb.git] / opcodes / dis-buf.c
index c46dad3ac94576447ea62fb9605b9e120919b5c9..8f846a9b1b79cb2b2346459a3755f91be8c63fd9 100644 (file)
@@ -1,5 +1,6 @@
 /* Disassemble from a buffer, for GNU.
-   Copyright (C) 1993, 1994 Free Software Foundation, Inc.
+   Copyright 1993, 1994, 1996, 1997, 1998, 1999, 2000
+   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
@@ -13,11 +14,12 @@ 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., 675 Mass Ave, Cambridge, MA 02139, USA.  */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
+#include "sysdep.h"
 #include "dis-asm.h"
-#include <string.h>
 #include <errno.h>
+#include "opintl.h"
 
 /* Get LENGTH bytes from info's buffer, at target address memaddr.
    Transfer them to myaddr.  */
@@ -25,14 +27,20 @@ int
 buffer_read_memory (memaddr, myaddr, length, info)
      bfd_vma memaddr;
      bfd_byte *myaddr;
-     int length;
+     unsigned int length;
      struct disassemble_info *info;
 {
+  unsigned int opb = info->octets_per_byte;
+  unsigned int end_addr_offset = length / opb;
+  unsigned int max_addr_offset = info->buffer_length / opb; 
+  unsigned int octets = (memaddr - info->buffer_vma) * opb;
+
   if (memaddr < info->buffer_vma
-      || memaddr + length > info->buffer_vma + info->buffer_length)
+      || memaddr - info->buffer_vma + end_addr_offset > max_addr_offset)
     /* Out of bounds.  Use EIO because GDB uses it.  */
     return EIO;
-  memcpy (myaddr, info->buffer + (memaddr - info->buffer_vma), length);
+  memcpy (myaddr, info->buffer + octets, length);
+
   return 0;
 }
 
@@ -46,12 +54,12 @@ perror_memory (status, memaddr, info)
 {
   if (status != EIO)
     /* Can't happen.  */
-    (*info->fprintf_func) (info->stream, "Unknown error %d\n", status);
+    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);
+    info->fprintf_func (info->stream,
+                       _("Address 0x%x is out of bounds.\n"), memaddr);
 }
 
 /* This could be in a separate file, to save miniscule amounts of space
@@ -66,5 +74,45 @@ generic_print_address (addr, info)
      bfd_vma addr;
      struct disassemble_info *info;
 {
-  (*info->fprintf_func) (info->stream, "0x%x", addr);
+  char buf[30];
+
+  sprintf_vma (buf, addr);
+  (*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));
+
+void
+generic_strcat_address (addr, buf, len)
+     bfd_vma addr;
+     char *buf;
+     int len;
+{
+  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;
+}
+#endif
+
+/* Just return the given address.  */
+
+int
+generic_symbol_at_address (addr, info)
+     bfd_vma addr ATTRIBUTE_UNUSED;
+     struct disassemble_info *info ATTRIBUTE_UNUSED;
+{
+  return 1;
 }
This page took 0.02721 seconds and 4 git commands to generate.