root / dis-buf.c @ fe1e3ce3
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 |
} |