home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / gnu / gdb-4.12.tar.gz / gdb-4.12.tar / gdb-4.12 / opcodes / dis-buf.c < prev    next >
C/C++ Source or Header  |  1994-02-03  |  2KB  |  70 lines

  1. /* Disassemble from a buffer, for GNU.
  2.    Copyright (C) 1993 Free Software Foundation, Inc.
  3.  
  4. This program is free software; you can redistribute it and/or modify
  5. it under the terms of the GNU General Public License as published by
  6. the Free Software Foundation; either version 2 of the License, or
  7. (at your option) any later version.
  8.  
  9. This program is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12. GNU General Public License for more details.
  13.  
  14. You should have received a copy of the GNU General Public License
  15. along with this program; if not, write to the Free Software
  16. Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
  17.  
  18. #include "dis-asm.h"
  19. #include <errno.h>
  20.  
  21. /* Get LENGTH bytes from info's buffer, at target address memaddr.
  22.    Transfer them to myaddr.  */
  23. int
  24. buffer_read_memory (memaddr, myaddr, length, info)
  25.      bfd_vma memaddr;
  26.      bfd_byte *myaddr;
  27.      int length;
  28.      struct disassemble_info *info;
  29. {
  30.   if (memaddr < info->buffer_vma
  31.       || memaddr + length > info->buffer_vma + info->buffer_length)
  32.     /* Out of bounds.  Use EIO because GDB uses it.  */
  33.     return EIO;
  34.   memcpy (myaddr, info->buffer + (memaddr - info->buffer_vma), length);
  35.   return 0;
  36. }
  37.  
  38. /* Print an error message.  We can assume that this is in response to
  39.    an error return from buffer_read_memory.  */
  40. void
  41. perror_memory (status, memaddr, info)
  42.      int status;
  43.      bfd_vma memaddr;
  44.      struct disassemble_info *info;
  45. {
  46.   if (status != EIO)
  47.     /* Can't happen.  */
  48.     (*info->fprintf_func) (info->stream, "Unknown error %d\n", status);
  49.   else
  50.     /* Actually, address between memaddr and memaddr + len was
  51.        out of bounds.  */
  52.     (*info->fprintf_func) (info->stream,
  53.                "Address 0x%x is out of bounds.\n", memaddr);
  54. }
  55.  
  56. /* This could be in a separate file, to save miniscule amounts of space
  57.    in statically linked executables.  */
  58.  
  59. /* Just print the address is hex.  This is included for completeness even
  60.    though both GDB and objdump provide their own (to print symbolic
  61.    addresses).  */
  62.  
  63. void
  64. generic_print_address (addr, info)
  65.      bfd_vma addr;
  66.      struct disassemble_info *info;
  67. {
  68.   (*info->fprintf_func) (info->stream, "0x%x", addr);
  69. }
  70.