GNU header update.
[cacao.git] / src / vm / jit / powerpc / disass.c
1 /* jit/powerpc/disass.c - wrapper functions for GNU binutils disassembler
2
3    Copyright (C) 1996-2005 R. Grafl, A. Krall, C. Kruegel, C. Oates,
4    R. Obermaisser, M. Platter, M. Probst, S. Ring, E. Steiner,
5    C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich, J. Wenninger,
6    Institut f. Computersprachen - TU Wien
7
8    This file is part of CACAO.
9
10    This program is free software; you can redistribute it and/or
11    modify it under the terms of the GNU General Public License as
12    published by the Free Software Foundation; either version 2, or (at
13    your option) any later version.
14
15    This program is distributed in the hope that it will be useful, but
16    WITHOUT ANY WARRANTY; without even the implied warranty of
17    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
18    General Public License for more details.
19
20    You should have received a copy of the GNU General Public License
21    along with this program; if not, write to the Free Software
22    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
23    02111-1307, USA.
24
25    Contact: cacao@complang.tuwien.ac.at
26
27    Authors: Andreas  Krall
28             Reinhard Grafl
29
30    Changes: Stefan Ring
31
32    $Id: disass.c 1735 2004-12-07 14:33:27Z twisti $
33
34 */
35
36
37 #include <stdarg.h>
38 #include <string.h>
39 #include <assert.h>
40 #include "disass.h"
41 #include "dis-asm.h"
42
43 char *regs[] = {
44         "r0",
45         "r1",
46         "r2",
47         "r3",
48         "r4",
49         "r5",
50         "r6",
51         "r7",
52         "r8",
53         "r9",
54         "r10",
55         "r11",
56         "r12",
57         "r13",
58         "r14",
59         "r15",
60         "r16",
61         "r17",
62         "r18",
63         "r19",
64         "r20",
65         "r21",
66         "r22",
67         "r23",
68         "r24",
69         "r25",
70         "r26",
71         "r27",
72         "r28",
73         "r29",
74         "r30",
75         "r31",
76 };
77
78
79 void myprintf(PTR p, const char *fmt, ...)
80 {
81         va_list ap;
82         va_start(ap, fmt);
83         vprintf(fmt, ap);
84         va_end(ap);
85         fflush(stdout);
86 }
87
88
89 int buffer_read_memory(bfd_vma memaddr, bfd_byte *myaddr, unsigned int length, struct disassemble_info *info)
90 {
91         memcpy(myaddr, (void*) memaddr, length);
92         return 0;
93 }
94
95
96 void perror_memory(int status, bfd_vma memaddr, struct disassemble_info *info)
97 {
98         assert(0);
99 }
100
101
102 void generic_print_address(bfd_vma addr, struct disassemble_info *info)
103 {
104 /*      myprintf(NULL, "0x%x", addr - (u4) info->application_data); */
105         myprintf(NULL, "0x08%x", addr);
106 }
107
108
109 int generic_symbol_at_address(bfd_vma addr, struct disassemble_info *info)
110 {
111         assert(0);
112 }
113
114
115 unsigned long bfd_getb32(void *buf)
116 {
117         return *(unsigned long *) buf;
118 }
119
120
121 unsigned long bfd_getl32(void *buf)
122 {
123         return *(unsigned long *) buf;
124 }
125
126
127 void sprintf_vma(char *buf, bfd_vma disp)
128 {
129         sprintf(buf, "0x%x", disp);
130 }
131
132
133 void disassinstr(s4 *code, s4 pos)
134 {
135         disassemble_info info;
136
137         printf("0x%08x:   %08x    ", (s4) code, *code);
138
139         INIT_DISASSEMBLE_INFO(info, NULL, myprintf);
140 /*      info.application_data = (u4) code - pos; */
141         print_insn_big_powerpc((bfd_vma) code, &info);
142         printf("\n");
143 }
144
145
146 void disassemble(s4 *code, s4 len)
147 {
148         int p;
149         disassemble_info info;
150
151         INIT_DISASSEMBLE_INFO(info, NULL, myprintf);
152 /*      info.application_data = code; */
153         printf ("  --- disassembler listing ---\n");
154         for (p = 0; p < len; p += 4, code++) {
155                 myprintf(NULL, "0x%08x:   %08x    ", (s4) code, *code);
156                 print_insn_big_powerpc((bfd_vma) code, &info);
157                 myprintf(NULL, "\n");
158         }
159 }
160
161
162 /*
163  * These are local overrides for various environment variables in Emacs.
164  * Please do not remove this and leave it at the end of the file, where
165  * Emacs will automagically detect them.
166  * ---------------------------------------------------------------------
167  * Local variables:
168  * mode: c
169  * indent-tabs-mode: t
170  * c-basic-offset: 4
171  * tab-width: 4
172  * End:
173  */