]> git.proxmox.com Git - qemu.git/commitdiff
changed disas() prototype for multi target support
authorbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>
Sun, 15 Jun 2003 19:44:10 +0000 (19:44 +0000)
committerbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>
Sun, 15 Jun 2003 19:44:10 +0000 (19:44 +0000)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@233 c046a42c-6fe2-441c-8c8c-71466251a162

disas.c
disas.h

diff --git a/disas.c b/disas.c
index 2a8a533b0fba180632e3e0593fdddf65aa3ff5b2..dc1957b9621d47b1742d6e544a96276ae110a798 100644 (file)
--- a/disas.c
+++ b/disas.c
@@ -92,8 +92,9 @@ bfd_vma bfd_getb32 (const bfd_byte *addr)
   return (bfd_vma) v;
 }
 
-/* Disassemble this for me please... (debugging). */
-void disas(FILE *out, void *code, unsigned long size, enum disas_type type)
+/* Disassemble this for me please... (debugging). 'flags' is only used
+   for i386: non zero means 16 bit code */
+void disas(FILE *out, void *code, unsigned long size, int is_host, int flags)
 {
     uint8_t *pc;
     int count;
@@ -106,7 +107,7 @@ void disas(FILE *out, void *code, unsigned long size, enum disas_type type)
     disasm_info.buffer_vma = (unsigned long)code;
     disasm_info.buffer_length = size;
 
-    if (type == DISAS_TARGET) {
+    if (is_host) {
 #ifdef WORDS_BIGENDIAN
        disasm_info.endian = BFD_ENDIAN_BIG;
 #else
@@ -128,13 +129,23 @@ void disas(FILE *out, void *code, unsigned long size, enum disas_type type)
        return;
 #endif
     } else {
-       /* Currently only source supported in x86. */
+#ifdef TARGET_WORDS_BIGENDIAN
+       disasm_info.endian = BFD_ENDIAN_BIG;
+#else
        disasm_info.endian = BFD_ENDIAN_LITTLE;
-       if (type == DISAS_I386_I386)
+#endif
+#if defined(TARGET_I386)
+        if (!flags)
            disasm_info.mach = bfd_mach_i386_i386;
        else
            disasm_info.mach = bfd_mach_i386_i8086;
        print_insn = print_insn_i386;
+#elif defined(TARGET_ARM)
+       print_insn = print_insn_arm;
+#else
+       fprintf(out, "Asm output not supported on this arch\n");
+       return;
+#endif
     }
 
     for (pc = code; pc < (uint8_t *)code + size; pc += count) {
@@ -142,7 +153,7 @@ void disas(FILE *out, void *code, unsigned long size, enum disas_type type)
 #ifdef __arm__
         /* since data are included in the code, it is better to
            display code data too */
-        if (type == DISAS_TARGET) {
+        if (is_host) {
             fprintf(out, "%08x  ", (int)bfd_getl32((const bfd_byte *)pc));
         }
 #endif
diff --git a/disas.h b/disas.h
index b7db4782964544d5def5ab495a707080f7ec67e3..916b1357a642f63cf7cbab9c742afac052f08607 100644 (file)
--- a/disas.h
+++ b/disas.h
@@ -1,14 +1,8 @@
 #ifndef _QEMU_DISAS_H
 #define _QEMU_DISAS_H
 
-enum disas_type {
-    DISAS_I386_I386,
-    DISAS_I386_I8086,
-    DISAS_TARGET, /* whatever host is. */
-};
-
 /* Disassemble this for me please... (debugging). */
-void disas(FILE *out, void *code, unsigned long size, enum disas_type type);
+void disas(FILE *out, void *code, unsigned long size, int is_host, int flags);
 
 /* Look up symbol for debugging purpose.  Returns "" if unknown. */
 const char *lookup_symbol(void *orig_addr);