This is the mail archive of the frysk@sourceware.org mailing list for the frysk project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[patch] Memory Window: Change the location increment by eight. Fix bug 4674


Hi

After investigate gdb, gtk/insight and other debugger of Linux, the
location increment of memory window is change to eight, that is, it
display 64bit every row.

Any suggestions are welcomed.

Pearly
Index: gladedir/memorywindow.glade
===================================================================
RCS file: /cvs/frysk/frysk-gui/frysk/gui/gladedir/memorywindow.glade,v
retrieving revision 1.3
diff -u -r1.3 memorywindow.glade
--- gladedir/memorywindow.glade	15 Jun 2007 12:28:11 -0000	1.3
+++ gladedir/memorywindow.glade	21 Sep 2007 08:17:36 -0000
@@ -569,7 +569,7 @@
 			  <property name="update_policy">GTK_UPDATE_ALWAYS</property>
 			  <property name="snap_to_ticks">False</property>
 			  <property name="wrap">False</property>
-			  <property name="adjustment">1 0 10000000000 1 10 10</property>
+			  <property name="adjustment">1 0 10000000000 8 10 10</property>
 			</widget>
 			<packing>
 			  <property name="padding">6</property>
@@ -589,7 +589,7 @@
 			  <property name="update_policy">GTK_UPDATE_ALWAYS</property>
 			  <property name="snap_to_ticks">False</property>
 			  <property name="wrap">False</property>
-			  <property name="adjustment">1 0 10000000000 1 10 10</property>
+			  <property name="adjustment">1 0 10000000000 8 10 10</property>
 			</widget>
 			<packing>
 			  <property name="padding">6</property>
Index: memory/MemoryWindow.java
===================================================================
RCS file: /cvs/frysk/frysk-gui/frysk/gui/memory/MemoryWindow.java,v
retrieving revision 1.47
diff -u -r1.47 MemoryWindow.java
--- memory/MemoryWindow.java	21 Sep 2007 07:00:44 -0000	1.47
+++ memory/MemoryWindow.java	21 Sep 2007 08:17:36 -0000
@@ -314,7 +314,7 @@
     
     this.diss = new Disassembler(myTask.getMemory());
     pc_inc = myTask.getIsa().pc(myTask);
-    long end = pc_inc + 50;
+    long end = pc_inc + 20*8;
     this.setTitle(this.getTitle() + " - " + this.myTask.getProc().getCommand()
                   + " " + this.myTask.getName());
 
@@ -666,8 +666,8 @@
 
     memoryView.setModel(model);
 
-    for (long i = start; i < end + 1; i++)
-      rowAppend(i, null);
+    for (int i = 0; i <= end - start; i = i + 8)
+      rowAppend((long)(start + i), null);
 
     this.refreshList();
   }
@@ -689,8 +689,8 @@
     this.toSpin.setValue(this.lastKnownTo);
     
     this.model.clear();
-    for (long i = (long) lastKnownFrom; i < this.lastKnownTo + 1; i++)
-      rowAppend(i, null);
+    for (int i = 0; i <= this.lastKnownTo - this.lastKnownFrom; i = i + 8)
+      rowAppend((long)(this.lastKnownFrom + i), null);
     
     refreshList();
     this.refreshLock = false;
@@ -728,70 +728,178 @@
 
         byte[] b = bi.toByteArray();
         String bin = "";
-        String oct = "";
+        //String oct = "";
         String hex = "";
-        String dec = "";
+        //String dec = "";
 
         if (bi.signum() < 0)
             bi = new BigInteger(1, b);
         bin = bi.toString(2);
-        oct = bi.toString(8);
+        //oct = bi.toString(8);
         hex = bi.toString(16);
-        dec = bi.toString(10);
+        //dec = bi.toString(10);
 
         int diff = bin.length() % BYTE_BITS;
         if (diff != 0)
           bin = padBytes(bin, false, diff);
-        int length = (int)Math.pow(2, currentFormat + 3);
             
-        while (bin.length() < length)
+        while (bin.length() < Long.SIZE)
         {
             bin = "0" + bin;            
         }
-        while (oct.length() < (length/3 + 1))
-        {
-            oct = "0" + oct;
-        }      
-        while (hex.length() < length/4 )
+ 
+        while (hex.length() < Long.SIZE/4 )
         {
             hex = "0" + hex;
         }            
 
         /* Little endian first */
-        this.model.setValue(iter, (DataColumnString) cols[1], bin);
-        this.model.setValue(iter, (DataColumnString) cols[3], "0"+oct);
-        this.model.setValue(iter, (DataColumnString) cols[5], dec);
-        this.model.setValue(iter, (DataColumnString) cols[7], "0x" + hex);
+        String newbin = "";
+        String newoct = "";
+        String newdec = "";
+        String newhex = "";
+        int bit = (int) Math.pow(2, currentFormat + 3);
+        long len = Math.round((double)bin.length()/bit);
+        String[] binArray = new String[(int)len];
+        String[] octArray = new String[(int)len];
+        String[] hexArray = new String[(int)len];        
+        for (int i=0; i< len; i++)
+        {
+    	    if (bit*(i+1) < bin.length())
+    	    {
+    		binArray[i] = bin.substring(bit*i, bit*(i+1));
+    		hexArray[i] = hex.substring(bit/4*i, bit/4*(i+1));
+    	    }
+    	    else
+    	    {
+    		binArray[i] = bin.substring(bit*i);
+    		hexArray[i] = hex.substring(bit/4*i, bit/4*(i+1));
+    	    }    	    
+    	    if (currentFormat == EIGHT_BIT)
+    	    {
+    		byte bb = (byte)Integer.parseInt(binArray[i], 2);
+    		newdec = newdec + bb + " ";
+    		octArray[i]= Integer.toOctalString( bb & 0xff);
+    		
+    	    }
+    	    if (currentFormat == SIXTEEN_BIT)
+    	    {
+    		short s = (short)Integer.parseInt(binArray[i], 2);
+    		newdec = newdec + s + " ";
+    		
+    		octArray[i] = Integer.toOctalString(s & 0xffff);
+    	    }
+    	    if (currentFormat == THIRTYTWO_BIT)
+    	    {
+		int in = (int)Long.parseLong(binArray[i], 2);
+		newdec = newdec + in + " ";
+    		octArray[i] = Integer.toOctalString(in);
+    	    }
+    	    if (currentFormat == SIXTYFOUR_BIT)
+    	    {
+    		long l;
+    		if( binArray[i].length() == bit && 
+        		    binArray[i].startsWith("1"))
+    		{
+    		    l = (long)Long.parseLong(binArray[i].substring(1), 2);    		    
+    		    l = (long)(l-(long)Math.pow(2, bit-1));
+        		
+    		}
+    		else
+    		    l = (long)Long.parseLong(binArray[i], 2);
+    		newdec = newdec + l + " ";
+    		octArray[i] = Long.toOctalString((long)l);		
+    	    }
+	    
+    	    newbin += binArray[i] + " ";
+    	    newoct += "0"+octArray[i] + " ";    	    
+    	    newhex += "0x"+hexArray[i]+ " ";
+        }
+        this.model.setValue(iter, (DataColumnString) cols[1], newbin);
+        this.model.setValue(iter, (DataColumnString) cols[3], newoct);
+        this.model.setValue(iter, (DataColumnString) cols[5], newdec);
+        this.model.setValue(iter, (DataColumnString) cols[7], newhex);
 
         /* Big endian second */
         String bin2 = switchEndianness(bin, true);
         BigInteger bii = new BigInteger(bin2, 2);
 
-        oct = bii.toString(8);
-        hex = bii.toString(16);
-
+        hex = bii.toString(16);        
+        newbin = "";
+        newoct = "";
+        newdec = "";
+        newhex = "";
         /* Bad hack to get around weird BigInteger endian bug */
-        if (bin2.equals(bin))
+        /*if (bin2.equals(bin))
           dec = bi.toString(10);
         else
-          dec = bii.toString(10);
+          dec = bii.toString(10);*/
         
-        while (bin2.length() < length)
+        while (bin2.length() < Long.SIZE)
         {
             bin2 = "0" + bin2;            
-        }
-        while (oct.length() < (length/3 + 1))
-        {
-            oct = "0" + oct;
         }      
-        while (hex.length() < length/4 )
+        while (hex.length() < Long.SIZE/4 )
         {
             hex = "0" + hex;
         }
-        this.model.setValue(iter, (DataColumnString) cols[2], bin2);
-        this.model.setValue(iter, (DataColumnString) cols[4], "0"+oct);
-        this.model.setValue(iter, (DataColumnString) cols[6], dec);
-        this.model.setValue(iter, (DataColumnString) cols[8], "0x" + hex);
+        
+        for (int i=0; i< len; i++)
+        {
+    	    if (bit*(i+1) < bin2.length())
+    	    {
+    		binArray[i] = bin2.substring(bit*i, bit*(i+1));
+    		hexArray[i] = hex.substring(bit/4*i, bit/4*(i+1));
+    	    }
+    	    else
+    	    {
+    		binArray[i] = bin2.substring(bit*i);
+    		hexArray[i] = hex.substring(bit/4*i, bit/4*(i+1));
+    	    }    	    
+    	    if (currentFormat == EIGHT_BIT)
+    	    {
+    		byte bb = (byte)Integer.parseInt(binArray[i], 2);
+    		newdec = newdec + bb + " ";
+    		octArray[i]= Integer.toOctalString( bb & 0xff);
+    		
+    	    }
+    	    if (currentFormat == SIXTEEN_BIT)
+    	    {
+    		short s = (short)Integer.parseInt(binArray[i], 2);
+    		newdec = newdec + s + " ";
+    		
+    		octArray[i] = Integer.toOctalString(s & 0xffff);
+    	    }
+    	    if (currentFormat == THIRTYTWO_BIT)
+    	    {
+		int in = (int)Long.parseLong(binArray[i], 2);
+		newdec = newdec + in + " ";
+    		octArray[i] = Integer.toOctalString(in);
+    	    }
+    	    if (currentFormat == SIXTYFOUR_BIT)
+    	    {
+    		long l;
+    		if( binArray[i].length() == bit && 
+        		    binArray[i].startsWith("1"))
+    		{
+    		    l = (long)Long.parseLong(binArray[i].substring(1), 2);    		    
+    		    l = (long)(l-(long)Math.pow(2, bit-1));
+        		
+    		}
+    		else
+    		    l = (long)Long.parseLong(binArray[i], 2);
+    		newdec = newdec + l + " ";
+    		octArray[i] = Long.toOctalString((long)l);		
+    	    }
+	    
+    	    newbin += binArray[i] + " ";
+    	    newoct += "0"+octArray[i] + " ";    	    
+    	    newhex += "0x"+hexArray[i]+ " ";
+        }
+        this.model.setValue(iter, (DataColumnString) cols[2], newbin);
+        this.model.setValue(iter, (DataColumnString) cols[4], newoct);
+        this.model.setValue(iter, (DataColumnString) cols[6], newdec);
+        this.model.setValue(iter, (DataColumnString) cols[8], newhex);
 
         if (ins != null && Long.toHexString(ins.address).equals(addr))
           {
@@ -837,58 +945,16 @@
     model.setValue(iter, (DataColumnString) cols[LOC], "0x"
                                                        + Long.toHexString(i));
     model.setValue(iter, (DataColumnDouble) cols[11], 1.0);
-
-    switch (currentFormat)
-      {
-      case EIGHT_BIT:
-        try
-          {
-            model.setValue(iter, (DataColumnObject) cols[OBJ],
-                           "" + myTask.getMemory().getByte(i));
-          }
-        catch (Exception e)
-          {
-            return;
-          }
-        break;
-
-      case SIXTEEN_BIT:
-        try
-          {
-            model.setValue(iter, (DataColumnObject) cols[OBJ],
-                           "" + myTask.getMemory().getShort(i));
-          }
-        catch (Exception e)
-          {
-            return;
-          }
-        break;
-
-      case THIRTYTWO_BIT:
-        try
-          {
-            model.setValue(iter, (DataColumnObject) cols[OBJ],
-                           "" + myTask.getMemory().getInt(i));
-          }
-        catch (Exception e)
-          {
-            return;
-          }
-        break;
-
-      case SIXTYFOUR_BIT:
-        try
-          {
-            model.setValue(iter, (DataColumnObject) cols[OBJ],
-                           "" + myTask.getMemory().getLong(i));
-          }
-        catch (Exception e)
-          {
-            return;
-          }
-        break;
-      }
-
+    
+    try
+    {
+      model.setValue(iter, (DataColumnObject) cols[OBJ],
+                     "" + myTask.getMemory().getLong(i));
+    }
+    catch (Exception e)
+    {
+      return;
+    }    
   }
   
   private void desensitize ()
@@ -990,17 +1056,17 @@
       {
         TreeIter iter = model.getFirstIter();
 
-        for (long i = (long) lastKnownFrom; i < (long) val; i++)
+        for (long i = (long) lastKnownFrom; i < (long) val; i = i+8)
           {
             model.removeRow(iter);
           }
       }
     else
       {
-        for (long i = (long) lastKnownFrom - 1; i >= (long) val; i--)
+        for (long i = (long) lastKnownFrom - 8; i >= (long) val; i = i-8)
           {
             TreeIter newRow = model.prependRow();
-            rowAppend(i, newRow);
+            rowAppend((long)(i- 8*(lastKnownFrom-i -8)), newRow);
           }
       }
     
@@ -1031,12 +1097,12 @@
 
     if (val > this.lastKnownTo)
       {
-        for (long i = (long) lastKnownTo + 1; i < val + 1; i++)
-          rowAppend(i, null);
+        for (long i = (long) lastKnownTo + 8; i < val + 1; i = i+8)
+          rowAppend((long)(i+8*(i-lastKnownTo-8)), null);
       }
     else
       {
-        for (; this.lastKnownTo > val; this.lastKnownTo--)
+        for (; this.lastKnownTo > val; this.lastKnownTo = this.lastKnownTo-8)
           {
             this.model.removeRow(this.model.getIter(this.lastPath));
             this.lastPath.previous();
@@ -1058,8 +1124,8 @@
       long startAddress = ((Long)addressList.getFirst()).longValue();
       Symbol symbol = SymbolFactory.getSymbol(this.myTask, startAddress);
       long endAddress = symbol.getAddress() + symbol.getSize();
-      long size = endAddress - startAddress + 1;
-      long modelSize = (long)lastKnownTo - (long)lastKnownFrom + 1;
+      long size = (endAddress - startAddress)/8 + 1;
+      long modelSize = ((long)lastKnownTo - (long)lastKnownFrom)/8 + 1;
       TreeIter iter = this.model.getFirstIter();      
       while (size < modelSize)
       {
@@ -1074,12 +1140,12 @@
 	  modelSize++;	  
       }
       this.lastKnownFrom = (double)startAddress;
-      this.lastKnownTo = (double)endAddress;
+      this.lastKnownTo = (double)(double)(startAddress+(long)(endAddress-startAddress)/8*8);
       iter = this.model.getFirstIter();
       this.lastPath = iter.getPath();
-      for(long i= startAddress; i < endAddress+1; i++)
+      for(int i = 0; i <= lastKnownTo-lastKnownFrom; i=i+8)
       {
-	  rowAppend(i, iter);
+	  rowAppend((long)(i+startAddress), iter);
 	  iter = iter.getNextIter();
       }
       refreshList();

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]