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; + } }
|