Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] Fix for bug 26595

Fix for bug 26595.

Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.core/ChangeLog,v
retrieving revision 1.54
diff -u -r1.54 ChangeLog
--- ChangeLog 19 Nov 2002 22:55:00 -0000 1.54
+++ ChangeLog 20 Nov 2002 21:38:05 -0000
@@ -1,3 +1,11 @@
+2002-11-20 Mikhail Khodjaiants
+ Fix for bug 26595.
+ The type of the address _expression_ has been changed from String to ICDIExpression to handle
+ changes of the start address.
+ * CDebugModel.java
+ * CFormattedMemoryBlock.java
+ * IFormattedMemoryBlock.java: added the 'isStartAddressChanged' method.
+
 2002-11-15 Mikhail Khodjaiants
  Partial fix for bug 25956.
  * DisassemblyManager.java: Filter out the instructions that do not belong to the function.
Index: src/org/eclipse/cdt/debug/core/CDebugModel.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/CDebugModel.java,v
retrieving revision 1.36
diff -u -r1.36 CDebugModel.java
--- src/org/eclipse/cdt/debug/core/CDebugModel.java 1 Nov 2002 18:23:15 -0000 1.36
+++ src/org/eclipse/cdt/debug/core/CDebugModel.java 20 Nov 2002 21:38:05 -0000
@@ -367,7 +367,7 @@
  }
 
  public static IFormattedMemoryBlock createFormattedMemoryBlock( IDebugTarget target,
-                 String startAddress,
+                 String addressExpression,
                     int format,
                     int wordSize,
                     int numberOfRows,
@@ -378,12 +378,15 @@
   {
    try
    {
+    ICDIExpression _expression_ = ((CDebugTarget)target).getCDISession()
+                  .getExpressionManager()
+                  .createExpression( addressExpression );
     ICDIMemoryBlock cdiMemoryBlock = ((CDebugTarget)target).getCDISession()
                     .getMemoryManager()
-                    .createMemoryBlock( startAddress, wordSize * numberOfRows * numberOfColumns );
+                    .createMemoryBlock( _expression_.getName(), wordSize * numberOfRows * numberOfColumns );
     return new CFormattedMemoryBlock( (CDebugTarget)target,
               cdiMemoryBlock,
-              startAddress,
+              _expression_,
               format,
               wordSize,
               numberOfRows,
@@ -403,7 +406,7 @@
  }
 
  public static IFormattedMemoryBlock createFormattedMemoryBlock( IDebugTarget target,
-                 String startAddress,
+                 String addressExpression,
                     int format,
                     int wordSize,
                     int numberOfRows,
@@ -413,12 +416,15 @@
   {
    try
    {
+    ICDIExpression _expression_ = ((CDebugTarget)target).getCDISession()
+                  .getExpressionManager()
+                  .createExpression( addressExpression );
     ICDIMemoryBlock cdiMemoryBlock = ((CDebugTarget)target).getCDISession()
                     .getMemoryManager()
-                    .createMemoryBlock( startAddress, wordSize * numberOfRows * numberOfColumns );
+                    .createMemoryBlock( _expression_.getName(), wordSize * numberOfRows * numberOfColumns );
     return new CFormattedMemoryBlock( (CDebugTarget)target,
               cdiMemoryBlock,
-              startAddress,
+              _expression_,
               format,
               wordSize,
               numberOfRows,
Index: src/org/eclipse/cdt/debug/core/IFormattedMemoryBlock.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/IFormattedMemoryBlock.java,v
retrieving revision 1.13
diff -u -r1.13 IFormattedMemoryBlock.java
--- src/org/eclipse/cdt/debug/core/IFormattedMemoryBlock.java 4 Nov 2002 01:40:24 -0000 1.13
+++ src/org/eclipse/cdt/debug/core/IFormattedMemoryBlock.java 20 Nov 2002 21:38:05 -0000
@@ -134,4 +134,6 @@
  boolean canChangeFormat( int format );
  
  boolean isLittleEndian();

+ boolean isStartAddressChanged();
 }
Index: src/org/eclipse/cdt/debug/internal/core/model/CFormattedMemoryBlock.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CFormattedMemoryBlock.java,v
retrieving revision 1.14
diff -u -r1.14 CFormattedMemoryBlock.java
--- src/org/eclipse/cdt/debug/internal/core/model/CFormattedMemoryBlock.java 4 Nov 2002 01:40:24 -0000 1.14
+++ src/org/eclipse/cdt/debug/internal/core/model/CFormattedMemoryBlock.java 20 Nov 2002 21:38:06 -0000
@@ -14,10 +14,12 @@
 import org.eclipse.cdt.debug.core.IFormattedMemoryBlock;
 import org.eclipse.cdt.debug.core.IFormattedMemoryBlockRow;
 import org.eclipse.cdt.debug.core.cdi.CDIException;
+import org.eclipse.cdt.debug.core.cdi.event.ICDIChangedEvent;
 import org.eclipse.cdt.debug.core.cdi.event.ICDIEvent;
 import org.eclipse.cdt.debug.core.cdi.event.ICDIEventListener;
 import org.eclipse.cdt.debug.core.cdi.event.ICDIMemoryChangedEvent;
 import org.eclipse.cdt.debug.core.cdi.event.ICDIResumedEvent;
+import org.eclipse.cdt.debug.core.cdi.model.ICDIExpression;
 import org.eclipse.cdt.debug.core.cdi.model.ICDIMemoryBlock;
 import org.eclipse.cdt.debug.core.cdi.model.ICDIObject;
 import org.eclipse.cdt.debug.core.cdi.model.ICDITarget;
@@ -175,7 +177,8 @@
   }
  }
 
- private String fAddressExpression;
+// private String fAddressExpression;
+ private ICDIExpression fAddressExpression;
  private ICDIMemoryBlock fCDIMemoryBlock;
  private byte[] fBytes = null;
  private int fFormat;
@@ -187,6 +190,7 @@
  private List fRows = null;
  private Long[] fChangedAddresses = new Long[0];
  private DirtyBytes fDirtyBytes = null;
+ private boolean fStartAddressChanged = false;
 
  /**
   * Constructor for CFormattedMemoryBlock.
@@ -194,7 +198,7 @@
   */
  public CFormattedMemoryBlock( CDebugTarget target,
           ICDIMemoryBlock cdiMemoryBlock,
-          String addressExpression,
+          ICDIExpression addressExpression,
           int format,
             int wordSize,
             int numberOfRows,
@@ -209,7 +213,7 @@
   */
  public CFormattedMemoryBlock( CDebugTarget target,
           ICDIMemoryBlock cdiMemoryBlock,
-          String addressExpression,
+          ICDIExpression addressExpression,
           int format,
             int wordSize,
             int numberOfRows,
@@ -224,7 +228,7 @@
   fNumberOfRows = numberOfRows;
   fNumberOfColumns = numberOfColumns;
   fDisplayAscii = true;
-  fPaddingChar = paddingChar;  
+  fPaddingChar = paddingChar; 
   getCDISession().getEventManager().addEventListener( this );
  }
 
@@ -473,6 +477,18 @@
    }
    fCDIMemoryBlock = null;
   }
+  if ( fAddressExpression != null )
+  {
+   try
+   {
+    ((CDebugTarget)getDebugTarget()).getCDISession().getExpressionManager().removeExpression( fAddressExpression );
+   }
+   catch( CDIException e )
+   {
+    CDebugCorePlugin.log( e );
+   }
+   fAddressExpression = null;
+  }
   getCDISession().getEventManager().removeEventListener( this );
  }
 
@@ -481,7 +497,15 @@
   */
  public String getAddressExpression()
  {
-  return fAddressExpression;
+  try
+  {
+   return fAddressExpression.getName();
+  }
+  catch( CDIException e )
+  {
+   // ignore
+  }
+  return "";
  }
  
  private String[] createData( byte[] bytes, int offset, int length )
@@ -539,6 +563,13 @@
      handleChangedEvent( (ICDIMemoryChangedEvent)event );
     }
    }
+   else if ( event instanceof ICDIChangedEvent )
+   {
+    if ( source instanceof ICDIExpression && source.equals( fAddressExpression ) )
+    {
+     handleAddressChangedEvent( (ICDIChangedEvent)event );
+    }
+   }
   }
  }
 
@@ -555,6 +586,7 @@
  private void handleResumedEvent( ICDIResumedEvent event )
  {
   resetChangedAddresses();
+  fStartAddressChanged = false;
   fireChangeEvent( DebugEvent.CONTENT );
  }
  
@@ -566,6 +598,14 @@
   fireChangeEvent( DebugEvent.CONTENT );
  }
  
+ private void handleAddressChangedEvent( ICDIChangedEvent event )
+ {
+  resetBytes();
+  resetRows();
+  fStartAddressChanged = true;
+  fireChangeEvent( DebugEvent.CONTENT );
+ }

  public Long[] getChangedAddresses()
  {
   return fChangedAddresses;
@@ -730,4 +770,12 @@
   }
   return true;
  }
+
+ /* (non-Javadoc)
+  * @see org.eclipse.cdt.debug.core.IFormattedMemoryBlock#isStartAddressChanged()
+  */
+ public boolean isStartAddressChanged()
+ {
+  return fStartAddressChanged;
+ } 
 }


Back to the top