--- mon/src/mon_disass.cpp 2000/09/25 17:52:33 1.2 +++ mon/src/mon_disass.cpp 2004/06/14 14:23:59 1.10 @@ -1,7 +1,7 @@ /* * mon_disass.cpp - Disassemblers * - * mon (C) 1997-2000 Christian Bauer, Marc Hellwig + * cxmon (C) 1997-2004 Christian Bauer, Marc Hellwig * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -40,7 +40,7 @@ bool mon_macos_mode = false; extern "C" { #include "disass/dis-asm.h" -int buffer_read_memory(bfd_vma from, bfd_byte *to, int length, struct disassemble_info *info) +int buffer_read_memory(bfd_vma from, bfd_byte *to, unsigned int length, struct disassemble_info *info) { while (length--) *to++ = mon_read_byte(from++); @@ -84,7 +84,10 @@ void generic_print_address(bfd_vma addr, } } } - info->fprintf_func(info->stream, "$%08x", addr); + if (addr >= UVAL64(0x100000000)) + info->fprintf_func(info->stream, "$%08x%08x", (uint32)(addr >> 32), (uint32)addr); + else + info->fprintf_func(info->stream, "$%08x", (uint32)addr); } int generic_symbol_at_address(bfd_vma addr, struct disassemble_info *info) @@ -166,7 +169,7 @@ int disass_68k(FILE *f, uint32 adr) return num; } -int disass_x86(FILE *f, uint32 adr) +int disass_x86(FILE *f, uint32 adr, uint32 bits) { // Initialize info for GDB disassembler disassemble_info info; @@ -175,10 +178,14 @@ int disass_x86(FILE *f, uint32 adr) sfile.buffer = buf; sfile.current = buf; INIT_DISASSEMBLE_INFO(info, (FILE *)&sfile, (fprintf_ftype)mon_sprintf); + if (bits == 16) + info.mach = bfd_mach_i386_i8086; + else if (bits == 64) + info.mach = bfd_mach_x86_64; // Disassemble instruction lookup_lowmem = false; - int num = print_insn_i386(adr, &info); + int num = print_insn_i386_att(adr, &info); for (int i=0; i<6; i++) { if (num > i)