Commit 3d2cfdf169da61ef5571aad8e7ae3ee0486b6060
1 parent
6fcfafb7
output disassembled code to monitor console
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1033 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
15 additions
and
6 deletions
disas.c
@@ -222,6 +222,9 @@ const char *lookup_symbol(void *orig_addr) | @@ -222,6 +222,9 @@ const char *lookup_symbol(void *orig_addr) | ||
222 | 222 | ||
223 | #if !defined(CONFIG_USER_ONLY) | 223 | #if !defined(CONFIG_USER_ONLY) |
224 | 224 | ||
225 | +void term_vprintf(const char *fmt, va_list ap); | ||
226 | +void term_printf(const char *fmt, ...); | ||
227 | + | ||
225 | static int monitor_disas_is_physical; | 228 | static int monitor_disas_is_physical; |
226 | 229 | ||
227 | static int | 230 | static int |
@@ -239,16 +242,22 @@ monitor_read_memory (memaddr, myaddr, length, info) | @@ -239,16 +242,22 @@ monitor_read_memory (memaddr, myaddr, length, info) | ||
239 | return 0; | 242 | return 0; |
240 | } | 243 | } |
241 | 244 | ||
245 | +static int monitor_fprintf(FILE *stream, const char *fmt, ...) | ||
246 | +{ | ||
247 | + va_list ap; | ||
248 | + va_start(ap, fmt); | ||
249 | + term_vprintf(fmt, ap); | ||
250 | + va_end(ap); | ||
251 | + return 0; | ||
252 | +} | ||
253 | + | ||
242 | void monitor_disas(target_ulong pc, int nb_insn, int is_physical, int flags) | 254 | void monitor_disas(target_ulong pc, int nb_insn, int is_physical, int flags) |
243 | { | 255 | { |
244 | - FILE *out; | ||
245 | int count, i; | 256 | int count, i; |
246 | struct disassemble_info disasm_info; | 257 | struct disassemble_info disasm_info; |
247 | int (*print_insn)(bfd_vma pc, disassemble_info *info); | 258 | int (*print_insn)(bfd_vma pc, disassemble_info *info); |
248 | 259 | ||
249 | - out = stdout; | ||
250 | - | ||
251 | - INIT_DISASSEMBLE_INFO(disasm_info, out, fprintf); | 260 | + INIT_DISASSEMBLE_INFO(disasm_info, NULL, monitor_fprintf); |
252 | 261 | ||
253 | monitor_disas_is_physical = is_physical; | 262 | monitor_disas_is_physical = is_physical; |
254 | disasm_info.read_memory_func = monitor_read_memory; | 263 | disasm_info.read_memory_func = monitor_read_memory; |
@@ -278,9 +287,9 @@ void monitor_disas(target_ulong pc, int nb_insn, int is_physical, int flags) | @@ -278,9 +287,9 @@ void monitor_disas(target_ulong pc, int nb_insn, int is_physical, int flags) | ||
278 | #endif | 287 | #endif |
279 | 288 | ||
280 | for(i = 0; i < nb_insn; i++) { | 289 | for(i = 0; i < nb_insn; i++) { |
281 | - fprintf(out, "0x%08lx: ", (unsigned long)pc); | 290 | + term_printf("0x%08lx: ", (unsigned long)pc); |
282 | count = print_insn(pc, &disasm_info); | 291 | count = print_insn(pc, &disasm_info); |
283 | - fprintf(out, "\n"); | 292 | + term_printf("\n"); |
284 | if (count < 0) | 293 | if (count < 0) |
285 | break; | 294 | break; |
286 | pc += count; | 295 | pc += count; |