diff --git a/debug/org.eclipse.cdt.debug.core/ChangeLog b/debug/org.eclipse.cdt.debug.core/ChangeLog index b7c6db0e31f..1ca0b9581c2 100644 --- a/debug/org.eclipse.cdt.debug.core/ChangeLog +++ b/debug/org.eclipse.cdt.debug.core/ChangeLog @@ -1,3 +1,10 @@ +2005-04-04 Alain Magloire + Move to Eclipse-31M6 + - src/org/eclipse/cdt/debug/internal/core/CMemoryBlockExtensionRetrieval.java + + src/org/eclipse/cdt/debug/internal/core/CMemoryBlockRetrievalExtension.java + * src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java + * src/org/eclipse/cdt/debug/internal/core/model/CMemoryBlockExtension.java + 2005-03-24 Alain Magloire * cdi/org/eclipse/cdt/debug/core/cdi/model/ICDIMemoryBlock.java * cdi/org/eclipse/cdt/debug/core/cdi/model/ICDIMemoryBlockManagement.java diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/CMemoryBlockExtensionRetrieval.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/CMemoryBlockRetrievalExtension.java similarity index 61% rename from debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/CMemoryBlockExtensionRetrieval.java rename to debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/CMemoryBlockRetrievalExtension.java index 2d8ed9f2eb5..105dc4992ff 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/CMemoryBlockExtensionRetrieval.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/CMemoryBlockRetrievalExtension.java @@ -29,62 +29,72 @@ import org.eclipse.debug.core.model.IDebugElement; import org.eclipse.debug.core.model.IDebugTarget; import org.eclipse.debug.core.model.IMemoryBlock; import org.eclipse.debug.core.model.IMemoryBlockExtension; -import org.eclipse.debug.core.model.IMemoryBlockExtensionRetrieval; +import org.eclipse.debug.core.model.IMemoryBlockRetrievalExtension; import org.eclipse.debug.core.model.IStackFrame; import org.eclipse.debug.core.model.IValue; /** * Implements the memory retrieval features based on the CDI model. */ -public class CMemoryBlockExtensionRetrieval implements IMemoryBlockExtensionRetrieval { +public class CMemoryBlockRetrievalExtension implements IMemoryBlockRetrievalExtension { + + CDebugTarget fDebugTarget; /** - * Constructor for CMemoryBlockExtensionRetrieval. + * Constructor for CMemoryBlockRetrievalExtension. */ - public CMemoryBlockExtensionRetrieval() { + public CMemoryBlockRetrievalExtension(CDebugTarget debugTarget) { + fDebugTarget = debugTarget; } + protected CDebugTarget getDebugTarget() { + return fDebugTarget; + } + /* (non-Javadoc) * @see org.eclipse.debug.core.model.IMemoryBlockExtensionRetrieval#getExtendedMemoryBlock(java.lang.String, org.eclipse.debug.core.model.IDebugElement) */ - public IMemoryBlockExtension getExtendedMemoryBlock( String expression, IDebugElement selected ) throws DebugException { + public IMemoryBlockExtension getExtendedMemoryBlock( String expression, Object selected ) throws DebugException { String address = null; CExpression exp = null; String msg = null; try { - CStackFrame frame = getStackFrame( selected ); - if ( frame != null ) { - // We need to provide a better way for retrieving the address of expression - ICDIExpression cdiExpression = frame.getCDITarget().createExpression( expression ); - exp = new CExpression( frame, cdiExpression, null ); - IValue value = exp.getValue(); - if ( value instanceof ICValue ) { - ICType type = ((ICValue)value).getType(); - if ( type != null && (type.isPointer() || type.isIntegralType()) ) { - address = value.getValueString(); - IDebugTarget target = selected.getDebugTarget(); - if ( target instanceof CDebugTarget ) { - if ( address != null ) { - // ??? - BigInteger a = ( address.startsWith( "0x" ) ) ? new BigInteger( address.substring( 2 ), 16 ) : new BigInteger( address ); //$NON-NLS-1$ - return new CMemoryBlockExtension( (CDebugTarget)target, expression, a ); + if (selected instanceof IDebugElement) { + IDebugElement debugElement = (IDebugElement)selected; + CStackFrame frame = getStackFrame( debugElement ); + if ( frame != null ) { + // We need to provide a better way for retrieving the address of expression + ICDIExpression cdiExpression = frame.getCDITarget().createExpression( expression ); + exp = new CExpression( frame, cdiExpression, null ); + IValue value = exp.getValue(); + if ( value instanceof ICValue ) { + ICType type = ((ICValue)value).getType(); + if ( type != null && (type.isPointer() || type.isIntegralType()) ) { + address = value.getValueString(); + IDebugTarget target = debugElement.getDebugTarget(); + if ( target instanceof CDebugTarget ) { + if ( address != null ) { + // ??? + BigInteger a = ( address.startsWith( "0x" ) ) ? new BigInteger( address.substring( 2 ), 16 ) : new BigInteger( address ); //$NON-NLS-1$ + return new CMemoryBlockExtension( (CDebugTarget)target, expression, a ); + } } } + else { + msg = MessageFormat.format( InternalDebugCoreMessages.getString( "CMemoryBlockRetrievalExtension.1" ), new String[] { expression } ); //$NON-NLS-1$ + } } else { - msg = MessageFormat.format( InternalDebugCoreMessages.getString( "CMemoryBlockExtensionRetrieval.1" ), new String[] { expression } ); //$NON-NLS-1$ + msg = MessageFormat.format( InternalDebugCoreMessages.getString( "CMemoryBlockRetrievalExtension.2" ), new String[] { expression } ); //$NON-NLS-1$ } } - else { - msg = MessageFormat.format( InternalDebugCoreMessages.getString( "CMemoryBlockExtensionRetrieval.2" ), new String[] { expression } ); //$NON-NLS-1$ - } } } catch( CDIException e ) { msg = e.getMessage(); } catch( NumberFormatException e ) { - msg = MessageFormat.format( InternalDebugCoreMessages.getString( "CMemoryBlockExtensionRetrieval.0" ), new String[] { expression, address } ); //$NON-NLS-1$ + msg = MessageFormat.format( InternalDebugCoreMessages.getString( "CMemoryBlockRetrievalExtension.0" ), new String[] { expression, address } ); //$NON-NLS-1$ } throw new DebugException( new Status( IStatus.ERROR, CDebugCorePlugin.getUniqueIdentifier(), DebugException.REQUEST_FAILED, msg, null ) ); } @@ -93,7 +103,6 @@ public class CMemoryBlockExtensionRetrieval implements IMemoryBlockExtensionRetr * @see org.eclipse.debug.core.model.IMemoryBlockRetrieval#supportsStorageRetrieval() */ public boolean supportsStorageRetrieval() { - // TODO Auto-generated method stub return true; } @@ -101,8 +110,10 @@ public class CMemoryBlockExtensionRetrieval implements IMemoryBlockExtensionRetr * @see org.eclipse.debug.core.model.IMemoryBlockRetrieval#getMemoryBlock(long, long) */ public IMemoryBlock getMemoryBlock( long startAddress, long length ) throws DebugException { - // TODO Auto-generated method stub - return null; + String expression = Long.toHexString(startAddress); + BigInteger address = new BigInteger(expression, 16); + expression += "0x"; //$NON-NLS-1$ + return new CMemoryBlockExtension( getDebugTarget(), expression, address ); } private CStackFrame getStackFrame( IDebugElement selected ) throws DebugException { diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java index 64fbe5938cb..71ff6b6b9cb 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CDebugTarget.java @@ -78,7 +78,7 @@ import org.eclipse.cdt.debug.core.model.IRunToLine; import org.eclipse.cdt.debug.core.sourcelookup.ICSourceLocator; import org.eclipse.cdt.debug.internal.core.CBreakpointManager; import org.eclipse.cdt.debug.internal.core.CGlobalVariableManager; -import org.eclipse.cdt.debug.internal.core.CMemoryBlockExtensionRetrieval; +import org.eclipse.cdt.debug.internal.core.CMemoryBlockRetrievalExtension; import org.eclipse.cdt.debug.internal.core.CRegisterManager; import org.eclipse.cdt.debug.internal.core.CSignalManager; import org.eclipse.cdt.debug.internal.core.ICDebugInternalConstants; @@ -106,8 +106,8 @@ import org.eclipse.debug.core.model.IBreakpoint; import org.eclipse.debug.core.model.IDebugTarget; import org.eclipse.debug.core.model.IExpression; import org.eclipse.debug.core.model.IMemoryBlock; -import org.eclipse.debug.core.model.IMemoryBlockExtensionRetrieval; import org.eclipse.debug.core.model.IMemoryBlockRetrieval; +import org.eclipse.debug.core.model.IMemoryBlockRetrievalExtension; import org.eclipse.debug.core.model.IProcess; import org.eclipse.debug.core.model.IRegisterGroup; import org.eclipse.debug.core.model.ISourceLocator; @@ -208,7 +208,7 @@ public class CDebugTarget extends CDebugElement implements ICDebugTarget, ICDIEv /** * Support for the memory retrival on this target. */ - private CMemoryBlockExtensionRetrieval fMemoryBlockRetrieval; + private CMemoryBlockRetrievalExtension fMemoryBlockRetrieval; /** * Constructor for CDebugTarget. @@ -232,7 +232,7 @@ public class CDebugTarget extends CDebugElement implements ICDebugTarget, ICDIEv setRegisterManager( new CRegisterManager( this ) ); setBreakpointManager( new CBreakpointManager( this ) ); setGlobalVariableManager( new CGlobalVariableManager( this ) ); - setMemoryBlockRetrieval( new CMemoryBlockExtensionRetrieval() ); + setMemoryBlockRetrieval( new CMemoryBlockRetrievalExtension( this ) ); initialize(); DebugPlugin.getDefault().getLaunchManager().addLaunchListener( this ); DebugPlugin.getDefault().getExpressionManager().addExpressionListener( this ); @@ -808,7 +808,7 @@ public class CDebugTarget extends CDebugElement implements ICDebugTarget, ICDIEv return getGlobalVariableManager(); if ( adapter.equals( ICDISession.class ) ) return getCDISession(); - if ( adapter.equals( IMemoryBlockExtensionRetrieval.class ) ) + if ( adapter.equals( IMemoryBlockRetrievalExtension.class ) ) return getMemoryBlockRetrieval(); if ( adapter.equals( IMemoryBlockRetrieval.class ) ) return getMemoryBlockRetrieval(); @@ -1725,11 +1725,11 @@ public class CDebugTarget extends CDebugElement implements ICDebugTarget, ICDIEv return fAddressFactory; } - private CMemoryBlockExtensionRetrieval getMemoryBlockRetrieval() { + private CMemoryBlockRetrievalExtension getMemoryBlockRetrieval() { return fMemoryBlockRetrieval; } - private void setMemoryBlockRetrieval( CMemoryBlockExtensionRetrieval memoryBlockRetrieval ) { + private void setMemoryBlockRetrieval( CMemoryBlockRetrievalExtension memoryBlockRetrieval ) { fMemoryBlockRetrieval = memoryBlockRetrieval; } diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CMemoryBlockExtension.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CMemoryBlockExtension.java index 253f35b6c8f..084b5dc6565 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CMemoryBlockExtension.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/CMemoryBlockExtension.java @@ -80,7 +80,7 @@ public class CMemoryBlockExtension extends CDebugElement implements IMemoryBlock /* (non-Javadoc) * @see org.eclipse.debug.core.model.IMemoryBlockExtension#getExpression() */ - public String getExpression() throws DebugException { + public String getExpression() { return fExpression; } @@ -98,6 +98,14 @@ public class CMemoryBlockExtension extends CDebugElement implements IMemoryBlock return ((CDebugTarget)getDebugTarget()).getAddressFactory().createAddress( getBigBaseAddress() ).getSize(); } + /* (non-Javadoc) + * @see org.eclipse.debug.core.model.IMemoryBlockExtension#getAddressableSize() + */ + public int getAddressableSize() throws DebugException { + ICDIMemoryBlock block = getCDIBlock(); + return ( block != null ) ? block.getWordSize() : fWordSize; + } + /* (non-Javadoc) * @see org.eclipse.debug.core.model.IMemoryBlockExtension#supportBaseAddressModification() */ @@ -111,10 +119,7 @@ public class CMemoryBlockExtension extends CDebugElement implements IMemoryBlock public void setBaseAddress( BigInteger address ) throws DebugException { } - /* (non-Javadoc) - * @see org.eclipse.debug.core.model.IMemoryBlockExtension#getBytesFromOffset(long, long) - */ - public MemoryByte[] getBytesFromOffset( long offset, long length ) throws DebugException { + public MemoryByte[] getBytesFromOffset(BigInteger unitOffset, long addressableUnits) throws DebugException { // TODO Auto-generated method stub return null; } @@ -148,9 +153,17 @@ public class CMemoryBlockExtension extends CDebugElement implements IMemoryBlock fBytes = new MemoryByte[bytes.length]; for ( int i = 0; i < bytes.length; ++i ) { byte cdiFlags = getCDIBlock().getFlags( i ); - byte flags = MemoryByte.KNOWN; - flags |= ( (cdiFlags & ICDIMemoryBlock.VALID) != 0 ) ? MemoryByte.VALID : MemoryByte.READONLY; // ???? - flags |= ( (cdiFlags & ICDIMemoryBlock.READ_ONLY) != 0 ) ? MemoryByte.READONLY : 0; + byte flags = 0; + if ( (cdiFlags & ICDIMemoryBlock.READ_ONLY) != 0 ) { + flags |= MemoryByte.READABLE; + } else { + flags |= MemoryByte.READABLE | MemoryByte.WRITABLE; + } + if (isBigEndian()) { + flags |= MemoryByte.ENDIANESS_KNOWN | MemoryByte.BIG_ENDIAN; + } +// flags |= ( (cdiFlags & ICDIMemoryBlock.VALID) != 0 ) ? MemoryByte.VALID : MemoryByte.READONLY; // ???? +// flags |= ( (cdiFlags & ICDIMemoryBlock.READ_ONLY) != 0 ) ? MemoryByte.READABLE : 0; if ( hasChanged( getRealBlockAddress().add( BigInteger.valueOf( i ) ) ) ) flags |= MemoryByte.CHANGED; fBytes[i] = new MemoryByte( bytes[i], flags ); @@ -171,10 +184,7 @@ public class CMemoryBlockExtension extends CDebugElement implements IMemoryBlock return result; } - /* (non-Javadoc) - * @see org.eclipse.debug.core.model.IMemoryBlockExtension#isBigEndian() - */ - public boolean isBigEndian() { + private boolean isBigEndian() { IExecFileInfo info = (IExecFileInfo)getDebugTarget().getAdapter( IExecFileInfo.class ); if ( info != null ) { return info.isLittleEndian(); @@ -243,11 +253,15 @@ public class CMemoryBlockExtension extends CDebugElement implements IMemoryBlock * @see org.eclipse.debug.core.model.IMemoryBlock#setValue(long, byte[]) */ public void setValue( long offset, byte[] bytes ) throws DebugException { + setValue(BigInteger.valueOf(offset), bytes); + } + + public void setValue(BigInteger offset, byte[] bytes) throws DebugException { ICDIMemoryBlock block = getCDIBlock(); if ( block != null ) { BigInteger base = getBigBaseAddress(); BigInteger real = getRealBlockAddress(); - long realOffset = base.add( BigInteger.valueOf( offset ) ).subtract( real ).longValue(); + long realOffset = base.add( offset ).subtract( real ).longValue(); try { block.setValue( realOffset, bytes ); } @@ -371,12 +385,9 @@ public class CMemoryBlockExtension extends CDebugElement implements IMemoryBlock // TODO Auto-generated method stub } - /* (non-Javadoc) - * @see org.eclipse.debug.core.model.IMemoryBlockExtension#getConnected() - */ - public Object[] getConnected() { + public Object[] getConnections() { // TODO Auto-generated method stub - return null; + return new Object[0]; } /* (non-Javadoc) @@ -397,14 +408,6 @@ public class CMemoryBlockExtension extends CDebugElement implements IMemoryBlock getCDISession().getEventManager().removeEventListener( this ); } - /* (non-Javadoc) - * @see org.eclipse.debug.core.model.IMemoryBlockExtension#getAddressibleSize() - */ - public int getAddressibleSize() { - ICDIMemoryBlock block = getCDIBlock(); - return ( block != null ) ? block.getWordSize() : fWordSize; - } - /* (non-Javadoc) * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class) */ @@ -413,4 +416,22 @@ public class CMemoryBlockExtension extends CDebugElement implements IMemoryBlock return getMemoryBlockRetrieval(); return super.getAdapter( adapter ); } + + public BigInteger getMemoryBlockStartAddress() throws DebugException { + return null; // return null to mean not bounded ... according to the spec + } + + public BigInteger getMemoryBlockEndAddress() throws DebugException { + return null;// return null to maen not bounded ... according to the spec + } + + public BigInteger getBigLength() throws DebugException { + ICDIMemoryBlock block = getCDIBlock(); + if (block != null) { + BigInteger length = new BigInteger(Long.toHexString(block.getLength()), 16); + return length; + } + return BigInteger.ZERO; + } + }