[ros-diffs] [greatlrd] 25447: Fixing a bug in ppc opcode Li Fixing the memory leak bug Full implement of the Li Convert Li to my own asm langues, opcode move reg, imm Left todo is add the anyalying process and converting process, after that we can translate our frist public pe file for ppc to intel with one opcode, it must be Li

greatlrd at svn.reactos.org greatlrd at svn.reactos.org
Sun Jan 14 11:57:19 CET 2007


Author: greatlrd
Date: Sun Jan 14 13:57:18 2007
New Revision: 25447

URL: http://svn.reactos.org/svn/reactos?rev=25447&view=rev
Log:
Fixing a bug in ppc opcode Li 
Fixing the memory leak bug
Full implement of the Li 
Convert Li to my own asm langues, opcode move reg,imm
Left todo is add the anyalying process and converting process, after that we can translate our frist public pe file for ppc to intel
with one opcode, it must be Li 



Modified:
    trunk/rosapps/devutils/cputointel/From/PPC/PPCopcode.c
    trunk/rosapps/devutils/cputointel/ImageLoader.c
    trunk/rosapps/devutils/cputointel/any_op.h
    trunk/rosapps/devutils/cputointel/misc.c
    trunk/rosapps/devutils/cputointel/misc.h

Modified: trunk/rosapps/devutils/cputointel/From/PPC/PPCopcode.c
URL: http://svn.reactos.org/svn/reactos/trunk/rosapps/devutils/cputointel/From/PPC/PPCopcode.c?rev=25447&r1=25446&r2=25447&view=diff
==============================================================================
--- trunk/rosapps/devutils/cputointel/From/PPC/PPCopcode.c (original)
+++ trunk/rosapps/devutils/cputointel/From/PPC/PPCopcode.c Sun Jan 14 13:57:18 2007
@@ -4,6 +4,10 @@
 #include "PPC.h"
 #include "../../misc.h"
 #include "../../any_op.h"
+
+/* reg r0-r31 
+  r3 = eax
+ */
 
 /* cpuDummyInit_Add
  * Input param : 
@@ -51,16 +55,22 @@
     CPU_UNINT opcode;
 
     opcode = GetData32Le(cpu_buffer);
+    formD =  (opcode & ConvertBitToByte32(PPC_D)) >> 6;
     formA =  (opcode & ConvertBitToByte32(PPC_A)) >> 13;
-    formD =  (opcode & ConvertBitToByte32(PPC_D)) >> 10;
     formDS = (opcode & ConvertBitToByte32(PPC_ds)) >> 15;
 
-    fprintf(out,"Line_0x%08x:\n",BaseAddress + cpu_pos);
+    if (formD != 0)
+    {
+        return 0;
+    }
+
+    BaseAddress +=cpu_pos;
     if (mode==0)
     {
+        fprintf(out,"Line_0x%08x:\n",BaseAddress);
         fprintf(out,"li %%r%d,%d\n",formA, formDS);
     }
-    if (mode!=0)
+    else if (mode>0)
     {
         /* own translatons langues */
         if (AllocAny()!=0)  /* alloc memory for pMyBrainAnalys */
@@ -72,9 +82,9 @@
         pMyBrainAnalys->src_size = 16;
         pMyBrainAnalys->src = formDS;
         pMyBrainAnalys->dst = formA;
+        pMyBrainAnalys->memAdr=BaseAddress;
     }
 
-    printf(";not full implement \n");
     return 4;
 }
 

Modified: trunk/rosapps/devutils/cputointel/ImageLoader.c
URL: http://svn.reactos.org/svn/reactos/trunk/rosapps/devutils/cputointel/ImageLoader.c?rev=25447&r1=25446&r2=25447&view=diff
==============================================================================
--- trunk/rosapps/devutils/cputointel/ImageLoader.c (original)
+++ trunk/rosapps/devutils/cputointel/ImageLoader.c Sun Jan 14 13:57:18 2007
@@ -29,6 +29,7 @@
     CPU_BYTE *cpu_buffer;   
     CPU_UNINT cpu_pos = 0;
     CPU_UNINT cpu_size=0;
+    CPU_INT ret;
      //fopen("testms.exe","RB");
     
 
@@ -113,6 +114,7 @@
        {
             type=1;
        }
+       FreeAny();
        fclose(outfp);
        return 0;
     }
@@ -120,25 +122,62 @@
     if (type== 1)
     {
         if (stricmp(cpuid,"m68000"))
-                return M68KBrain(cpu_buffer,cpu_pos,cpu_size,BaseAddress,68000,outfp,mode);
+        {
+            ret = M68KBrain(cpu_buffer,cpu_pos,cpu_size,BaseAddress,68000,outfp,mode);
+            FreeAny();
+            fclose(outfp);
+        }
         else if (stricmp(cpuid,"m68010"))
-                return M68KBrain(cpu_buffer,cpu_pos,cpu_size,BaseAddress,68010,outfp,mode);
+        {
+            ret = M68KBrain(cpu_buffer,cpu_pos,cpu_size,BaseAddress,68010,outfp,mode);
+            FreeAny();
+            fclose(outfp);
+            return ret;
+        }
         else if (stricmp(cpuid,"m68020"))
-                return M68KBrain(cpu_buffer,cpu_pos,cpu_size,BaseAddress,68020,outfp,mode);
+        {
+            ret = M68KBrain(cpu_buffer,cpu_pos,cpu_size,BaseAddress,68020,outfp,mode);
+            FreeAny();
+            fclose(outfp);
+            return ret;
+        }
         else if (stricmp(cpuid,"m68030"))
-                return M68KBrain(cpu_buffer,cpu_pos,cpu_size,BaseAddress,68030,outfp,mode);
+        {
+            ret = M68KBrain(cpu_buffer,cpu_pos,cpu_size,BaseAddress,68030,outfp,mode);
+            FreeAny();
+            fclose(outfp);
+            return ret;
+        }
         else if (stricmp(cpuid,"m68040"))
-                return M68KBrain(cpu_buffer,cpu_pos,cpu_size,BaseAddress,68040,outfp,mode);
+        {
+            ret = M68KBrain(cpu_buffer,cpu_pos,cpu_size,BaseAddress,68040,outfp,mode);
+            FreeAny();
+            fclose(outfp);
+            return ret;
+        }
         else if (stricmp(cpuid,"ppc"))
-                return PPCBrain(cpu_buffer,cpu_pos,cpu_size,BaseAddress,0,outfp,mode);
+        {
+            ret = PPCBrain(cpu_buffer,cpu_pos,cpu_size,BaseAddress,0,outfp,mode);
+            FreeAny();
+            fclose(outfp);
+            return ret;
+        }
         else if (stricmp(cpuid,"arm4"))
-                return ARMBrain(cpu_buffer,cpu_pos,cpu_size,BaseAddress,4,outfp,mode);
+        {
+            ret = ARMBrain(cpu_buffer,cpu_pos,cpu_size,BaseAddress,4,outfp,mode);
+            FreeAny();
+            fclose(outfp);
+            return ret;
+        }
     }
 
     if (type==2) 
     {
-       return PEFileStart(cpu_buffer, 0, BaseAddress, cpu_size, outfp, mode);
-
+
+       ret = PEFileStart(cpu_buffer, 0, BaseAddress, cpu_size, outfp, mode);
+       FreeAny();
+       fclose(outfp);
+       return ret;
     }
 
     return 0;

Modified: trunk/rosapps/devutils/cputointel/any_op.h
URL: http://svn.reactos.org/svn/reactos/trunk/rosapps/devutils/cputointel/any_op.h?rev=25447&r1=25446&r2=25447&view=diff
==============================================================================
--- trunk/rosapps/devutils/cputointel/any_op.h (original)
+++ trunk/rosapps/devutils/cputointel/any_op.h Sun Jan 14 13:57:18 2007
@@ -9,11 +9,14 @@
     CPU_INT  type; /*  0 = source are memmory, 1 source are register */
                    /*  2 = dest are memmory,   4 dest are register */
                    /*  8 = source are imm                          */
+
     CPU_INT src_size; /* who many bits are src not vaild for reg*/
     CPU_INT dst_size; /* who many bits are dst not vaild for reg*/
 
     CPU_UNINT64 src;
     CPU_UNINT64 dst;
+
+    CPU_UNINT memAdr; /* where are we in the current memory pos + baseaddress */
 
     /* try translate the Adress to a name */
     CPU_BYTE* ptr_next; /* hook next one */

Modified: trunk/rosapps/devutils/cputointel/misc.c
URL: http://svn.reactos.org/svn/reactos/trunk/rosapps/devutils/cputointel/misc.c?rev=25447&r1=25446&r2=25447&view=diff
==============================================================================
--- trunk/rosapps/devutils/cputointel/misc.c (original)
+++ trunk/rosapps/devutils/cputointel/misc.c Sun Jan 14 13:57:18 2007
@@ -159,8 +159,34 @@
 return 0;
 }
 
+CPU_INT FreeAny()
+{
+  PMYBrainAnalys tmp;
+  tmp = (PMYBrainAnalys)pMyBrainAnalys->ptr_prev;
+
+  while (pMyBrainAnalys != NULL)
+  {
+    if (pMyBrainAnalys == NULL)
+    {
+        break;
+    }
+
+    free(pMyBrainAnalys);
+
+    if (pMyBrainAnalys != NULL)
+    {
+        printf("fail to free memory");
+        return -1;
+    }
+
+    pMyBrainAnalys = tmp;
+  }
+
+  return 0;
+}
 
 
 
 
 
+

Modified: trunk/rosapps/devutils/cputointel/misc.h
URL: http://svn.reactos.org/svn/reactos/trunk/rosapps/devutils/cputointel/misc.h?rev=25447&r1=25446&r2=25447&view=diff
==============================================================================
--- trunk/rosapps/devutils/cputointel/misc.h (original)
+++ trunk/rosapps/devutils/cputointel/misc.h Sun Jan 14 13:57:18 2007
@@ -24,3 +24,4 @@
 CPU_UNINT GetData32Be(CPU_BYTE *cpu_buffer);
 
 CPU_INT AllocAny();
+CPU_INT FreeAny();




More information about the Ros-diffs mailing list