summaryrefslogtreecommitdiffstats
path: root/binutils-2.22/opcodes/dis-buf.c
diff options
context:
space:
mode:
authorBen Cheng <bccheng@google.com>2012-09-10 17:28:19 -0700
committerBen Cheng <bccheng@google.com>2012-09-10 17:28:19 -0700
commit112525715ec3dab782959ebe19f96f4454ec405c (patch)
tree75bd54b67f8356b54904cf95a7135a87945b301e /binutils-2.22/opcodes/dis-buf.c
parent68ba60c0e44c1187cb582474ebb001d95a7170f6 (diff)
downloadtoolchain_binutils-112525715ec3dab782959ebe19f96f4454ec405c.tar.gz
toolchain_binutils-112525715ec3dab782959ebe19f96f4454ec405c.tar.bz2
toolchain_binutils-112525715ec3dab782959ebe19f96f4454ec405c.zip
Initial checkin of unmodified binutils 2.22.
Change-Id: I8c1bf4cf62df8eb16439021f1a1bac6437f5c470
Diffstat (limited to 'binutils-2.22/opcodes/dis-buf.c')
-rw-r--r--binutils-2.22/opcodes/dis-buf.c105
1 files changed, 105 insertions, 0 deletions
diff --git a/binutils-2.22/opcodes/dis-buf.c b/binutils-2.22/opcodes/dis-buf.c
new file mode 100644
index 00000000..372fb96b
--- /dev/null
+++ b/binutils-2.22/opcodes/dis-buf.c
@@ -0,0 +1,105 @@
+/* Disassemble from a buffer, for GNU.
+ Copyright 1993, 1994, 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2005,
+ 2007, 2009, 2010 Free Software Foundation, Inc.
+
+ This file is part of the GNU opcodes library.
+
+ 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.
+
+ 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"
+#include <errno.h>
+#include "opintl.h"
+
+/* Get LENGTH bytes from info's buffer, at target address memaddr.
+ Transfer them to myaddr. */
+int
+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;
+ unsigned int max_addr_offset = info->buffer_length / opb;
+ 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;
+ memcpy (myaddr, info->buffer + octets, length);
+
+ return 0;
+}
+
+/* Print an error message. We can assume that this is in response to
+ an error return from buffer_read_memory. */
+
+void
+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
+ {
+ 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
+ in statically linked executables. */
+
+/* Just print the address is hex. This is included for completeness even
+ though both GDB and objdump provide their own (to print symbolic
+ addresses). */
+
+void
+generic_print_address (bfd_vma addr, struct disassemble_info *info)
+{
+ char buf[30];
+
+ sprintf_vma (buf, addr);
+ (*info->fprintf_func) (info->stream, "0x%s", buf);
+}
+
+/* Just return true. */
+
+int
+generic_symbol_at_address (bfd_vma addr ATTRIBUTE_UNUSED,
+ struct disassemble_info *info ATTRIBUTE_UNUSED)
+{
+ return 1;
+}
+
+/* Just return TRUE. */
+
+bfd_boolean
+generic_symbol_is_valid (asymbol * sym ATTRIBUTE_UNUSED,
+ struct disassemble_info *info ATTRIBUTE_UNUSED)
+{
+ return TRUE;
+}