Statistics
| Branch: | Revision:

root / dis-buf.c @ 982b4315

History | View | Annotate | Download (2.4 kB)

1
/* Disassemble from a buffer, for GNU.
2
   Copyright (C) 1993, 1994 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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

    
71
/* Just return the given address.  */
72

    
73
int
74
generic_symbol_at_address (addr, info)
75
     bfd_vma addr;
76
     struct disassemble_info * info;
77
{
78
  return 1;
79
}