<html>
<body>
  <div id="body" style="background-color:#ffffff;" >
<table cellspacing="0" cellpadding="0" border="0" rules="cols">
<tr class="head" style="border-bottom-width:1px;border-bottom-style:solid;" ><td class="headtd" style="padding:0;padding-top:.2em;" colspan="4">Commit in <b><tt>lxdream/src</tt></b></td></tr>
<tr><td><tt>sh4/<a href="#file1">sh4.h</a></tt></td><td id="added" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ddffdd;" align="right">+3</td><td></td><td class="headtd2" style="padding-left:.3em;padding-right:.3em;" nowrap="nowrap">34faf227070e -> d2324eb67223</td></tr>
<tr class="alt" style=";" ><td><tt>   /<a href="#file2">sh4trans.c</a></tt></td><td id="addedalt" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ccf7cc;" align="right">+21</td><td></td><td class="headtd2" style="padding-left:.3em;padding-right:.3em;" nowrap="nowrap">34faf227070e -> d2324eb67223</td></tr>
<tr><td><tt>x86dasm/<a href="#file3">i386-dis.c</a></tt></td><td id="added" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ddffdd;" align="right">+10</td><td id="removed" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ffdddd;" align="right">-71</td><td class="headtd2" style="padding-left:.3em;padding-right:.3em;" nowrap="nowrap">34faf227070e -> d2324eb67223</td></tr>
<tr class="alt" style=";" ><td><tt>       /<a href="#file4">x86dasm.c</a></tt></td><td id="addedalt" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ccf7cc;" align="right">+1</td><td id="removed" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ffdddd;" align="right">-1</td><td class="headtd2" style="padding-left:.3em;padding-right:.3em;" nowrap="nowrap">34faf227070e -> d2324eb67223</td></tr>
<tr><td><tt>       /<a href="#file5">x86dasm.h</a></tt></td><td id="added" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ddffdd;" align="right">+1</td><td id="removed" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ffdddd;" align="right">-1</td><td class="headtd2" style="padding-left:.3em;padding-right:.3em;" nowrap="nowrap">34faf227070e -> d2324eb67223</td></tr>
<tr><td></td><td id="added" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ddffdd;" align="right">+36</td><td id="removed" class="headtd2" style="padding-left:.3em;padding-right:.3em; background-color:#ffdddd;" align="right">-73</td><td></td></tr>
</table>
<small id="info" style="color: #888888;" >5 modified files</small><br />
<pre class="comment" style="white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;white-space:pre-wrap;word-wrap:break-word;padding:4px;border:1px dashed #000000;background-color:#ffffdd;" >
Fix symbol output in 64-bit disassembly
Add sh4_translate_dump_block(pc) function
</pre>
<hr /><a name="file1" /><div class="file" style="border:1px solid #eeeeee;margin-top:1em;margin-bottom:1em;" >
<span class="pathname" style="font-family:monospace; float:right;" >lxdream/src/sh4</span><br />
<div class="fileheader" style="margin-bottom:.5em;" ><big><b>sh4.h</b></big> <small id="info" style="color: #888888;" >34faf227070e -> d2324eb67223</small></div>
<pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >--- lxdream/src/sh4/sh4.h
+++ lxdream/src/sh4/sh4.h
@@ -131,6 +131,9 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > /** Dump current SH4 core state (for crashdump purposes) */
 void sh4_crashdump();
 
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+/** Dump a translated block with SH4 and target assembly side by side. */
+void sh4_translate_dump_block( uint32_t pc );
+
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > #ifdef __cplusplus
 }
 #endif
</pre></div>
<hr /><a name="file2" /><div class="file" style="border:1px solid #eeeeee;margin-top:1em;margin-bottom:1em;" >
<span class="pathname" style="font-family:monospace; float:right;" >lxdream/src/sh4</span><br />
<div class="fileheader" style="margin-bottom:.5em;" ><big><b>sh4trans.c</b></big> <small id="info" style="color: #888888;" >34faf227070e -> d2324eb67223</small></div>
<pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >--- lxdream/src/sh4/sh4trans.c
+++ lxdream/src/sh4/sh4trans.c
@@ -274,3 +274,24 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >     void *native_pc = xlat_get_native_pc( code, xlat_get_code_size(code) );
     sh4_translate_disasm_block( stderr, code, sh4r.pc, native_pc );
 }
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+
+/**
+ * Dual-dump the translated block and original SH4 code for the basic block
+ * starting at sh4_pc. If there is no translated block, this prints an error
+ * and returns.
+ */
+void sh4_translate_dump_block( uint32_t sh4_pc )
+{
+    if( !IS_IN_ICACHE(sh4_pc) ) {
+        fprintf( stderr, "** Address %08x not in current instruction region **\n", sh4_pc );
+        return;
+    }
+    uint32_t pma = GET_ICACHE_PHYS(sh4_pc);
+    void *code = xlat_get_code( pma );
+    if( code == NULL ) {
+        fprintf( stderr, "** No translated block for address %08x **\n", sh4_pc );
+        return;
+    }
+    sh4_translate_disasm_block( stderr, code, sh4_pc, NULL );
+}
+
</pre></div>
<hr /><a name="file3" /><div class="file" style="border:1px solid #eeeeee;margin-top:1em;margin-bottom:1em;" >
<span class="pathname" style="font-family:monospace; float:right;" >lxdream/src/x86dasm</span><br />
<div class="fileheader" style="margin-bottom:.5em;" ><big><b>i386-dis.c</b></big> <small id="info" style="color: #888888;" >34faf227070e -> d2324eb67223</small></div>
<pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >--- lxdream/src/x86dasm/i386-dis.c
+++ lxdream/src/x86dasm/i386-dis.c
@@ -57,7 +57,6 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > static void oappend (const char *);
 static void append_seg (void);
 static void OP_indirE (int, int);
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-static void print_operand_value (char *, int, bfd_vma);
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > static void OP_E (int, int);
 static void OP_G (int, int);
 static bfd_vma get64 (void);
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -3058,66 +3057,6 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > }
 
 static void
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-print_operand_value (char *buf, int hex, bfd_vma disp)
-{
-  if (mode_64bit)
-    {
-      if (hex)
-       {
-         char tmp[30];
-         int i;
-         buf[0] = '0';
-         buf[1] = 'x';
-         sprintf_vma (tmp, disp);
-         for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++);
-         strcpy (buf + 2, tmp + i);
-       }
-      else
-       {
-         bfd_signed_vma v = disp;
-         char tmp[30];
-         int i;
-         if (v < 0)
-           {
-             *(buf++) = '-';
-             v = -disp;
-             /* Check for possible overflow on 0x8000000000000000.  */
-             if (v < 0)
-               {
-                 strcpy (buf, "9223372036854775808");
-                 return;
-               }
-           }
-         if (!v)
-           {
-             strcpy (buf, "0");
-             return;
-           }
-
-         i = 0;
-         tmp[29] = 0;
-         while (v)
-           {
-             tmp[28 - i] = (v % 10) + '0';
-             v /= 10;
-             i++;
-           }
-         strcpy (buf, tmp + 29 - i);
-       }
-    }
-  else
-    {
-      x86_print_symbolic_operand( buf, hex, disp );
-      /*
-      if (hex)
-       sprintf (buf, "0x%x", (unsigned int) disp);
-      else
-       sprintf (buf, "%d", (int) disp);
-      */
-    }
-}
-
-static void
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > OP_E (int bytemode, int sizeflag)
 {
   bfd_vma disp;
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -3236,7 +3175,7 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >       if (!intel_syntax)
        if (mod != 0 || (base & 7) == 5)
          {
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-       print_operand_value (scratchbuf, !riprel, disp);
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+         x86_print_symbolic_operand (scratchbuf, !riprel, disp);
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >        oappend (scratchbuf);
            if (riprel)
              {
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -3342,7 +3281,7 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >                      *obufp = '\0';
                      }
 
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-               print_operand_value (scratchbuf, 0, disp);
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+                 x86_print_symbolic_operand (scratchbuf, 0, disp);
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >                oappend (scratchbuf);
                  }
              }
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -3362,7 +3301,7 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >                oappend (names_seg[ds_reg - es_reg]);
                  oappend (":");
                }
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-         print_operand_value (scratchbuf, 1, disp);
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+           x86_print_symbolic_operand (scratchbuf, 1, disp);
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >          oappend (scratchbuf);
            }
        }
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -3395,7 +3334,7 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >       if (!intel_syntax)
        if (mod != 0 || (rm & 7) == 6)
          {
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-       print_operand_value (scratchbuf, 0, disp);
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+         x86_print_symbolic_operand (scratchbuf, 0, disp);
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >        oappend (scratchbuf);
          }
 
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -3693,7 +3632,7 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > 
   op &= mask;
   scratchbuf[0] = '$';
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-  print_operand_value (scratchbuf + 1, 1, op);
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+  x86_print_symbolic_operand (scratchbuf + 1, 1, op);
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >   oappend (scratchbuf + intel_syntax);
   scratchbuf[0] = '\0';
 }
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -3744,7 +3683,7 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > 
   op &= mask;
   scratchbuf[0] = '$';
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-  print_operand_value (scratchbuf + 1, 1, op);
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+  x86_print_symbolic_operand (scratchbuf + 1, 1, op);
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >   oappend (scratchbuf + intel_syntax);
   scratchbuf[0] = '\0';
 }
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -3794,7 +3733,7 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >     }
 
   scratchbuf[0] = '$';
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-  print_operand_value (scratchbuf + 1, 1, op);
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+  x86_print_symbolic_operand (scratchbuf + 1, 1, op);
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >   oappend (scratchbuf + intel_syntax);
 }
 
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -3830,7 +3769,7 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >     }
   disp = (start_pc + codep - start_codep + disp) & mask;
   set_op (disp, 0);
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-  print_operand_value (scratchbuf, 1, disp);
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+  x86_print_symbolic_operand (scratchbuf, 1, disp);
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >   oappend (scratchbuf);
 }
 
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -3884,7 +3823,7 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >        oappend (":");
        }
     }
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-  print_operand_value (scratchbuf, 1, off);
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+  x86_print_symbolic_operand (scratchbuf, 1, off);
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >   oappend (scratchbuf);
 }
 
</pre><pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >@@ -3912,7 +3851,7 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >        oappend (":");
        }
     }
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-  print_operand_value (scratchbuf, 1, off);
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+  x86_print_symbolic_operand (scratchbuf, 1, off);
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >   oappend (scratchbuf);
 }
 
</pre></div>
<hr /><a name="file4" /><div class="file" style="border:1px solid #eeeeee;margin-top:1em;margin-bottom:1em;" >
<span class="pathname" style="font-family:monospace; float:right;" >lxdream/src/x86dasm</span><br />
<div class="fileheader" style="margin-bottom:.5em;" ><big><b>x86dasm.c</b></big> <small id="info" style="color: #888888;" >34faf227070e -> d2324eb67223</small></div>
<pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >--- lxdream/src/x86dasm/x86dasm.c
+++ lxdream/src/x86dasm/x86dasm.c
@@ -105,7 +105,7 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" >     }
 }
 
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-void x86_print_symbolic_operand( char *buf, int hex, u<span id="removedchars" style="background-color:#ff9999;font-weight:bolder;" >nsigned in</span>t disp )
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+void x86_print_symbolic_operand( char *buf, int hex, u<span id="addedchars" style="background-color:#99ff99;font-weight:bolder;" >intptr_</span>t disp )
</pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > {
     const char *sym = x86_find_symbol(disp, NULL);
     if( sym != NULL ) {
</pre></div>
<hr /><a name="file5" /><div class="file" style="border:1px solid #eeeeee;margin-top:1em;margin-bottom:1em;" >
<span class="pathname" style="font-family:monospace; float:right;" >lxdream/src/x86dasm</span><br />
<div class="fileheader" style="margin-bottom:.5em;" ><big><b>x86dasm.h</b></big> <small id="info" style="color: #888888;" >34faf227070e -> d2324eb67223</small></div>
<pre class="diff" style="margin:0;" ><small id="info" style="color: #888888;" >--- lxdream/src/x86dasm/x86dasm.h
+++ lxdream/src/x86dasm/x86dasm.h
@@ -31,4 +31,4 @@
</small></pre><pre id="context" class="diff" style="margin:0; background-color:#eeeeee;" > void x86_set_symtab( x86_symbol *symtab, int num_symbols );
 void x86_disasm_init();
 uintptr_t x86_disasm_instruction( uintptr_t pc, char *buf, int len, char *opcode );
</pre><pre id="removed" class="diff" style="margin:0; background-color:#ffdddd;" >-void x86_print_symbolic_operand( char *buf, int hex, u<span id="removedchars" style="background-color:#ff9999;font-weight:bolder;" >nsigned in</span>t disp );
</pre><pre id="added" class="diff" style="margin:0; background-color:#ddffdd;" >+void x86_print_symbolic_operand( char *buf, int hex, u<span id="addedchars" style="background-color:#99ff99;font-weight:bolder;" >intptr_</span>t disp );
</pre></div>
<center><small>Chaos Theory</small></center>
</div></body></html>