* src/vm/jit/emit.h: New file.
[cacao.git] / src / vm / jit / powerpc / disass.c
index b5a9d5996bd43b54804c0016b469f3e1cb6ac400..7ccb0f29640487c6d652f45742b1da9bf6910a39 100644 (file)
@@ -1,9 +1,9 @@
 /* src/vm/jit/powerpc/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.
 
 
    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: Stefan Ring
             Christian Thalinger
 
-   $Id: disass.c 2807 2005-06-23 13:51:33Z twisti $
+   $Id: disass.c 4712 2006-03-30 11:59:46Z twisti $
 
 */
 
 
-#include <stdarg.h>
-#include <string.h>
-#include <assert.h>
-#include "disass.h"
-#include "dis-asm.h"
-
-char *regs[] = {
-       "r0",
-       "r1",
-       "r2",
-       "r3",
-       "r4",
-       "r5",
-       "r6",
-       "r7",
-       "r8",
-       "r9",
-       "r10",
-       "r11",
-       "r12",
-       "r13",
-       "r14",
-       "r15",
-       "r16",
-       "r17",
-       "r18",
-       "r19",
-       "r20",
-       "r21",
-       "r22",
-       "r23",
-       "r24",
-       "r25",
-       "r26",
-       "r27",
-       "r28",
-       "r29",
-       "r30",
-       "r31",
-};
-
-
-void myprintf(PTR p, const char *fmt, ...)
-{
-       va_list ap;
-       va_start(ap, fmt);
-       vprintf(fmt, ap);
-       va_end(ap);
-       fflush(stdout);
-}
-
-
-int buffer_read_memory(bfd_vma memaddr, bfd_byte *myaddr, unsigned int length, struct disassemble_info *info)
-{
-       memcpy(myaddr, (void*) memaddr, length);
-       return 0;
-}
+#include "config.h"
 
+#include <dis-asm.h>
+#include <stdio.h>
 
-void perror_memory(int status, bfd_vma memaddr, struct disassemble_info *info)
-{
-       assert(0);
-}
-
+#include "vm/types.h"
 
-void generic_print_address(bfd_vma addr, struct disassemble_info *info)
-{
-/*     myprintf(NULL, "0x%x", addr - (u4) info->application_data); */
-       myprintf(NULL, "0x%08x", addr);
-}
+#include "vm/global.h"
+#include "vm/jit/disass.h"
 
 
-int generic_symbol_at_address(bfd_vma addr, struct disassemble_info *info)
-{
-       assert(0);
-}
+/* disassinstr *****************************************************************
 
+   Outputs a disassembler listing of one machine code instruction on
+   `stdout'.
 
-unsigned long bfd_getb32(void *buf)
-{
-       return *(unsigned long *) buf;
-}
+   code: pointer to machine code
 
+*******************************************************************************/
 
-unsigned long bfd_getl32(void *buf)
+u1 *disassinstr(u1 *code)
 {
-       return *(unsigned long *) buf;
-}
-
+       if (!disass_initialized) {
+               INIT_DISASSEMBLE_INFO(info, NULL, disass_printf);
 
-void sprintf_vma(char *buf, bfd_vma disp)
-{
-       sprintf(buf, "0x%x", disp);
-}
+               /* setting the struct members must be done after
+                  INIT_DISASSEMBLE_INFO */
 
+               info.read_memory_func = &disass_buffer_read_memory;
 
-void disassinstr(s4 *code)
-{
-       disassemble_info info;
+               disass_initialized = true;
+       }
 
-       printf("0x%08x:   %08x    ", (s4) code, *code);
+       printf("0x%08x:   %08x    ", (s4) code, *((s4 *) code));
 
-       INIT_DISASSEMBLE_INFO(info, NULL, myprintf);
-/*             info.application_data = (u4) code - pos; */
        print_insn_big_powerpc((bfd_vma) code, &info);
-       printf("\n");
-}
 
+       printf("\n");
 
-void disassemble(s4 *code, s4 len)
-{
-       s4 i;
-       disassemble_info info;
-
-       INIT_DISASSEMBLE_INFO(info, NULL, myprintf);
-/*     info.application_data = code; */
-       printf ("  --- disassembler listing ---\n");
-       for (i = 0; i < len; i += 4, code++)
-               disassinstr(code);
+       return code + 4;
 }