X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=src%2Fvm%2Fjit%2Fi386%2Fdisass.c;h=f5342d91b88d5007688626bec5d7c87b9d4926b1;hb=dc776e90dbd04542d9738c510fb8e85f3cbf5c5c;hp=d8e8a91105c79d66660e23f7aaa61baef4f97149;hpb=3fc1728e96317b57a173ea39e0e9cf48321271b5;p=cacao.git diff --git a/src/vm/jit/i386/disass.c b/src/vm/jit/i386/disass.c index d8e8a9110..f5342d91b 100644 --- a/src/vm/jit/i386/disass.c +++ b/src/vm/jit/i386/disass.c @@ -1,9 +1,9 @@ /* src/vm/jit/i386/disass.c - wrapper functions for GNU binutils disassembler - Copyright (C) 1996-2005 R. Grafl, A. Krall, C. Kruegel, C. Oates, - R. Obermaisser, M. Platter, M. Probst, S. Ring, E. Steiner, - C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich, J. Wenninger, - Institut f. Computersprachen - TU Wien + Copyright (C) 1996-2005, 2006 R. Grafl, A. Krall, C. Kruegel, + C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring, + E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich, + J. Wenninger, Institut f. Computersprachen - TU Wien This file is part of CACAO. @@ -19,30 +19,31 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - 02111-1307, USA. + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. - Contact: cacao@complang.tuwien.ac.at + Contact: cacao@cacaojvm.org Authors: Andreas Krall Reinhard Grafl Changes: Christian Thalinger - $Id: disass.c 3177 2005-09-14 18:03:11Z twisti $ + $Id: disass.c 4843 2006-04-25 17:57:56Z edwin $ */ -#include -#include +#include "config.h" -#include "vm/jit/disass.h" -#include "vm/jit/i386/dis-asm.h" +#include +#include +#include +#include "vm/types.h" -char mylinebuf[512]; -int mylen; +#include "vm/global.h" +#include "vm/jit/disass.h" char *regs[] = { @@ -57,25 +58,6 @@ char *regs[] = { }; -void myprintf(PTR p, const char *fmt, ...) -{ - va_list ap; - va_start(ap, fmt); - mylen += vsprintf(mylinebuf + mylen, fmt, ap); - va_end(ap); -} - -int buffer_read_memory(bfd_vma memaddr, bfd_byte *myaddr, unsigned int length, struct disassemble_info *info) -{ - if (length == 1) - *myaddr = *((u1 *) memaddr); - else - memcpy(myaddr, (void *) memaddr, length); - return 0; -} - - - /* disassinstr ***************************************************************** Outputs a disassembler listing of one machine code instruction on @@ -87,55 +69,38 @@ int buffer_read_memory(bfd_vma memaddr, bfd_byte *myaddr, unsigned int length, s u1 *disassinstr(u1 *code) { - static disassemble_info info; - static int dis_initialized; s4 seqlen; s4 i; - if (!dis_initialized) { - INIT_DISASSEMBLE_INFO(info, NULL, myprintf); - info.mach = bfd_mach_i386_i386; - dis_initialized = 1; - } + if (!disass_initialized) { + INIT_DISASSEMBLE_INFO(info, NULL, disass_printf); - printf("0x%08x: ", (s4) code); - mylen = 0; - seqlen = print_insn_i386((bfd_vma) code, &info); + /* setting the struct members must be done after + INIT_DISASSEMBLE_INFO */ - for (i = 0; i < seqlen; i++) { - printf("%02x ", *(code + i)); - } + info.mach = bfd_mach_i386_i386; + info.read_memory_func = &disass_buffer_read_memory; - for (; i < 8; i++) { - printf(" "); + disass_initialized = 1; } - printf(" %s\n", mylinebuf); - - return code + seqlen; -} - - - -/* function disassemble ******************************************************** + printf("0x%08x: ", (s4) code); - Outputs a disassembler listing of some machine code on 'stdout'. + disass_len = 0; - code: pointer to first machine instruction - len: code length to display (in bytes) + seqlen = print_insn_i386((bfd_vma) (ptrint) code, &info); -*******************************************************************************/ + for (i = 0; i < seqlen; i++, code++) { + printf("%02x ", *code); + } -void disassemble(u1 *start, u1 *end) -{ - disassemble_info info; + for (; i < 8; i++) { + printf(" "); + } - INIT_DISASSEMBLE_INFO(info, NULL, myprintf); - info.mach = bfd_mach_i386_i386; + printf(" %s\n", disass_buf); - printf(" --- disassembler listing ---\n"); - for (; start < end; ) - start = disassinstr(start); + return code; }