Skip to main content
aboutsummaryrefslogtreecommitdiffstats
path: root/debug
diff options
context:
space:
mode:
authorMikhail Khodjaiants2008-04-18 16:18:15 +0000
committerMikhail Khodjaiants2008-04-18 16:18:15 +0000
commitb45f93e8ce901380c464e8d2d5a5607cc29b8545 (patch)
treeea4d9ed004ede1e04656447fe784dd0c2679aa31 /debug
parent9b984524ccb05352b93cf2ff9303158c023bdeba (diff)
downloadorg.eclipse.cdt-b45f93e8ce901380c464e8d2d5a5607cc29b8545.tar.gz
org.eclipse.cdt-b45f93e8ce901380c464e8d2d5a5607cc29b8545.tar.xz
org.eclipse.cdt-b45f93e8ce901380c464e8d2d5a5607cc29b8545.zip
Contributing new disassembly.
Diffstat (limited to 'debug')
-rw-r--r--debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/IDisassemblyLine.java2
-rw-r--r--debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/DisassemblyRetrieval.java39
-rw-r--r--debug/org.eclipse.cdt.debug.ui/plugin.xml10
-rw-r--r--debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/ToggleBreakpointAdapter.java11
-rw-r--r--debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/viewer/DocumentContentProvider.java4
-rw-r--r--debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/elements/adapters/CDebugElementAdapterFactory.java16
-rw-r--r--debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/elements/adapters/CDebugElementProxyFactory.java33
-rw-r--r--debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/elements/adapters/DisassemblyElementAnnotationProvider.java1
-rw-r--r--debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/elements/adapters/DisassemblyElementProxy.java88
-rw-r--r--debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/elements/adapters/DisassemblyToggleBreakpointAdapter.java98
10 files changed, 278 insertions, 24 deletions
diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/IDisassemblyLine.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/IDisassemblyLine.java
index 1d899d4f3ac..64d7eea02e7 100644
--- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/IDisassemblyLine.java
+++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/model/IDisassemblyLine.java
@@ -15,6 +15,6 @@ package org.eclipse.cdt.debug.core.model;
* org.eclipse.cdt.debug.core.model.IDisassemblyLine:
* //TODO Add description.
*/
-public interface IDisassemblyLine {
+public interface IDisassemblyLine extends ICDebugElement {
}
diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/DisassemblyRetrieval.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/DisassemblyRetrieval.java
index 7f9fa9a5ad0..dffb34b59ec 100644
--- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/DisassemblyRetrieval.java
+++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/internal/core/model/DisassemblyRetrieval.java
@@ -19,9 +19,15 @@ import java.util.List;
import org.eclipse.cdt.core.IAddressFactory;
import org.eclipse.cdt.debug.core.CDebugCorePlugin;
import org.eclipse.cdt.debug.core.cdi.CDIException;
+import org.eclipse.cdt.debug.core.cdi.event.ICDIBreakpointMovedEvent;
+import org.eclipse.cdt.debug.core.cdi.event.ICDIBreakpointProblemEvent;
+import org.eclipse.cdt.debug.core.cdi.event.ICDIChangedEvent;
+import org.eclipse.cdt.debug.core.cdi.event.ICDICreatedEvent;
+import org.eclipse.cdt.debug.core.cdi.event.ICDIDestroyedEvent;
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.model.ICDIInstruction;
+import org.eclipse.cdt.debug.core.cdi.model.ICDILocationBreakpoint;
import org.eclipse.cdt.debug.core.cdi.model.ICDIMixedInstruction;
import org.eclipse.cdt.debug.core.cdi.model.ICDITarget;
import org.eclipse.cdt.debug.core.model.ICStackFrame;
@@ -30,6 +36,7 @@ import org.eclipse.cdt.debug.core.model.IDisassemblyLine;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
+import org.eclipse.debug.core.DebugEvent;
import org.eclipse.debug.core.DebugException;
public class DisassemblyRetrieval extends CDebugElement implements ICDIEventListener {
@@ -58,10 +65,38 @@ public class DisassemblyRetrieval extends CDebugElement implements ICDIEventList
/* (non-Javadoc)
* @see org.eclipse.cdt.debug.core.cdi.event.ICDIEventListener#handleDebugEvents(org.eclipse.cdt.debug.core.cdi.event.ICDIEvent[])
*/
- public void handleDebugEvents( ICDIEvent[] event ) {
- // TODO Auto-generated method stub
+ public void handleDebugEvents( ICDIEvent[] events ) {
+ for ( ICDIEvent event : events ) {
+ Object source = event.getSource();
+ if ( (event instanceof ICDICreatedEvent
+ || event instanceof ICDIChangedEvent
+ || event instanceof ICDIDestroyedEvent
+ || event instanceof ICDIBreakpointMovedEvent
+ || event instanceof ICDIBreakpointProblemEvent )
+ && source instanceof ICDILocationBreakpoint ) {
+ BigInteger address = ((ICDILocationBreakpoint)source).getLocator().getAddress();
+ if ( address != null ) {
+ int index = getIndexForAddress( address, fLines );
+ if ( index >= 0 ) {
+ fireEvent( new DebugEvent( fLines[index], DebugEvent.CHANGE, DebugEvent.STATE ) );
+ }
+ if ( event instanceof ICDIBreakpointMovedEvent ) {
+ address = ((ICDIBreakpointMovedEvent)event).getNewLocation().getAddress();
+ if ( address != null ) {
+ index = getIndexForAddress( address, fLines );
+ if ( index >= 0 ) {
+ fireEvent( new DebugEvent( fLines[index], DebugEvent.CHANGE, DebugEvent.STATE ) );
+ }
+ }
+ }
+ }
+ }
+ }
}
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.debug.core.model.IDisassemblyRetrieval#getInput()
+ */
public Object getInput() {
return fInput;
}
diff --git a/debug/org.eclipse.cdt.debug.ui/plugin.xml b/debug/org.eclipse.cdt.debug.ui/plugin.xml
index 5257168a3b9..cf003686cfd 100644
--- a/debug/org.eclipse.cdt.debug.ui/plugin.xml
+++ b/debug/org.eclipse.cdt.debug.ui/plugin.xml
@@ -1354,6 +1354,16 @@
<adapter
type="org.eclipse.cdt.debug.ui.disassembly.IDocumentElementAnnotationProvider">
</adapter>
+ <adapter
+ type="org.eclipse.cdt.debug.ui.disassembly.IElementToggleBreakpointAdapter">
+ </adapter>
+ </factory>
+ <factory
+ adaptableType="org.eclipse.cdt.debug.internal.core.model.DisassemblyRetrieval"
+ class="org.eclipse.cdt.debug.internal.ui.elements.adapters.CDebugElementAdapterFactory">
+ <adapter
+ type="org.eclipse.debug.internal.ui.viewers.model.provisional.IModelProxyFactory">
+ </adapter>
</factory>
</extension>
<extension
diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/ToggleBreakpointAdapter.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/ToggleBreakpointAdapter.java
index 9b59a3f851d..c7ed54e02db 100644
--- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/ToggleBreakpointAdapter.java
+++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/actions/ToggleBreakpointAdapter.java
@@ -77,11 +77,17 @@ public class ToggleBreakpointAdapter implements IToggleBreakpointsTarget {
if ( part instanceof DisassemblyEditor && selection instanceof ITextSelection ) {
DisassemblyEditor editor = (DisassemblyEditor)part;
int lineNumber = ((ITextSelection)selection).getStartLine();
- if ( lineNumber != -1 ) {
+ if ( lineNumber == -1 ) {
+ errorMessage = ActionMessages.getString( "ToggleBreakpointAdapter.Invalid_line_1" ); //$NON-NLS-1$
+ }
+ else {
IEditorInput input = editor.getEditorInput();
if ( input != null ) {
VirtualDocument document = (VirtualDocument)editor.getDocumentProvider().getDocument( input );
- if ( document != null ) {
+ if ( document == null ) {
+ errorMessage = ActionMessages.getString( "ToggleBreakpointAdapter.Missing_document_1" ); //$NON-NLS-1$
+ }
+ else {
IPresentationContext presentationContext = document.getPresentationContext();
Object element = document.getElementAtLine( lineNumber );
if ( element != null ) {
@@ -90,6 +96,7 @@ public class ToggleBreakpointAdapter implements IToggleBreakpointsTarget {
adapter.toggleLineBreakpoints( presentationContext, element );
}
}
+ return;
}
}
}
diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/viewer/DocumentContentProvider.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/viewer/DocumentContentProvider.java
index cc19bf1a825..6c7b0ad1c8a 100644
--- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/viewer/DocumentContentProvider.java
+++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/viewer/DocumentContentProvider.java
@@ -78,9 +78,11 @@ public class DocumentContentProvider implements IModelChangedListener {
}
if ( !update.isCanceled() ) {
disposeLineProxies();
+ fLineElements.clear();
getDocument().setCurrentOffset( update.getOffset() );
Object[] elements = update.getElements();
for ( int i = 0; i < elements.length; ++i ) {
+ fLineElements.put( elements[i], Integer.valueOf( i ) );
installLineProxy( i, elements[i] );
getDocument().updateElement( getInput(), i, elements[i] );
}
@@ -348,7 +350,6 @@ public class DocumentContentProvider implements IModelChangedListener {
final IModelProxy proxy = modelProxyFactory.createModelProxy( element, getPresentationContext() );
if ( proxy != null ) {
fLineProxies.add( index, proxy );
- fLineElements.put( element, Integer.valueOf( index ) );
Job job = new Job( "Model Proxy installed notification job" ) {//$NON-NLS-1$
/* (non-Javadoc)
@@ -407,7 +408,6 @@ public class DocumentContentProvider implements IModelChangedListener {
proxy.dispose();
}
fLineProxies.clear();
- fLineElements.clear();
}
protected VirtualSourceViewer getViewer() {
diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/elements/adapters/CDebugElementAdapterFactory.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/elements/adapters/CDebugElementAdapterFactory.java
index 99156291155..d2c2bdd3a51 100644
--- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/elements/adapters/CDebugElementAdapterFactory.java
+++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/elements/adapters/CDebugElementAdapterFactory.java
@@ -22,11 +22,13 @@ import org.eclipse.cdt.debug.core.model.ICThread;
import org.eclipse.cdt.debug.core.model.IDisassemblyLine;
import org.eclipse.cdt.debug.core.model.IModuleRetrieval;
import org.eclipse.cdt.debug.internal.core.CDisassemblyContextProvider;
+import org.eclipse.cdt.debug.internal.core.model.DisassemblyRetrieval;
import org.eclipse.cdt.debug.internal.ui.views.modules.ModuleContentProvider;
import org.eclipse.cdt.debug.internal.ui.views.modules.ModuleMementoProvider;
import org.eclipse.cdt.debug.ui.disassembly.IDocumentElementAnnotationProvider;
import org.eclipse.cdt.debug.ui.disassembly.IDocumentElementContentProvider;
import org.eclipse.cdt.debug.ui.disassembly.IDocumentElementLabelProvider;
+import org.eclipse.cdt.debug.ui.disassembly.IElementToggleBreakpointAdapter;
import org.eclipse.core.runtime.IAdapterFactory;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementContentProvider;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoProvider;
@@ -48,6 +50,7 @@ public class CDebugElementAdapterFactory implements IAdapterFactory {
private static IDocumentElementContentProvider fgDisassemblyContentProvider = new DisassemblyElementContentProvider();
private static IDocumentElementLabelProvider fgDisassemblyLabelProvider = new DisassemblyElementLabelProvider();
private static IDocumentElementAnnotationProvider fgDisassemblyAnnotationProvider = new DisassemblyElementAnnotationProvider();
+ private static IElementToggleBreakpointAdapter fgDisassemblyToggleBreakpointAdapter = new DisassemblyToggleBreakpointAdapter();
/* (non-Javadoc)
* @see org.eclipse.core.runtime.IAdapterFactory#getAdapter(java.lang.Object, java.lang.Class)
@@ -67,8 +70,7 @@ public class CDebugElementAdapterFactory implements IAdapterFactory {
return fgStackFrameContentProvider;
}
if ( adaptableObject instanceof ICModule ||
- adaptableObject instanceof ICElement )
- {
+ adaptableObject instanceof ICElement ) {
return fgModuleContentProvider;
}
}
@@ -85,7 +87,9 @@ public class CDebugElementAdapterFactory implements IAdapterFactory {
if ( adaptableObject instanceof IModuleRetrieval ) {
return fgDebugElementProxyFactory;
}
-
+ if ( adaptableObject instanceof DisassemblyRetrieval ) {
+ return fgDebugElementProxyFactory;
+ }
}
if ( adapterType.equals( IElementMementoProvider.class ) ) {
if ( adaptableObject instanceof ICStackFrame ) {
@@ -119,6 +123,11 @@ public class CDebugElementAdapterFactory implements IAdapterFactory {
return fgDisassemblyAnnotationProvider;
}
}
+ if ( adapterType.equals( IElementToggleBreakpointAdapter.class ) ) {
+ if ( adaptableObject instanceof IDisassemblyLine ) {
+ return fgDisassemblyToggleBreakpointAdapter;
+ }
+ }
return null;
}
@@ -134,6 +143,7 @@ public class CDebugElementAdapterFactory implements IAdapterFactory {
IDocumentElementContentProvider.class,
IDocumentElementLabelProvider.class,
IDocumentElementAnnotationProvider.class,
+ IElementToggleBreakpointAdapter.class,
};
}
}
diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/elements/adapters/CDebugElementProxyFactory.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/elements/adapters/CDebugElementProxyFactory.java
index bc520283044..11f9bcf5216 100644
--- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/elements/adapters/CDebugElementProxyFactory.java
+++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/elements/adapters/CDebugElementProxyFactory.java
@@ -14,7 +14,9 @@ package org.eclipse.cdt.debug.internal.ui.elements.adapters;
import org.eclipse.cdt.debug.core.model.ICDebugTarget;
import org.eclipse.cdt.debug.core.model.IModuleRetrieval;
+import org.eclipse.cdt.debug.internal.core.model.DisassemblyRetrieval;
import org.eclipse.cdt.debug.internal.ui.views.modules.ModulesViewModelProxy;
+import org.eclipse.cdt.debug.ui.ICDebugUIConstants;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelProxy;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
@@ -27,17 +29,22 @@ public class CDebugElementProxyFactory extends DefaultModelProxyFactory {
* @see org.eclipse.debug.internal.ui.viewers.provisional.IModelProxyFactoryAdapter#createModelProxy(java.lang.Object, org.eclipse.debug.internal.ui.viewers.provisional.IPresentationContext)
*/
public IModelProxy createModelProxy( Object element, IPresentationContext context ) {
- if ( IDebugUIConstants.ID_MODULE_VIEW.equals( context.getId() ) ) {
- IModuleRetrieval mr = null;
- if ( element instanceof IAdaptable ) {
- ICDebugTarget target = (ICDebugTarget)((IAdaptable)element).getAdapter( ICDebugTarget.class );
- if ( target != null )
- mr = (IModuleRetrieval)target.getAdapter( IModuleRetrieval.class );
- }
- if ( mr != null ) {
- return new ModulesViewModelProxy( mr );
- }
- }
- return super.createModelProxy(element, context);
- }
+ if ( IDebugUIConstants.ID_MODULE_VIEW.equals( context.getId() ) ) {
+ IModuleRetrieval mr = null;
+ if ( element instanceof IAdaptable ) {
+ ICDebugTarget target = (ICDebugTarget)((IAdaptable)element).getAdapter( ICDebugTarget.class );
+ if ( target != null )
+ mr = (IModuleRetrieval)target.getAdapter( IModuleRetrieval.class );
+ }
+ if ( mr != null ) {
+ return new ModulesViewModelProxy( mr );
+ }
+ }
+ else if ( ICDebugUIConstants.ID_DEFAULT_DISASSEMBLY_EDITOR.equals( context.getId() ) ) {
+ if ( element instanceof DisassemblyRetrieval ) {
+ return new DisassemblyElementProxy( (DisassemblyRetrieval)element );
+ }
+ }
+ return super.createModelProxy( element, context );
+ }
}
diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/elements/adapters/DisassemblyElementAnnotationProvider.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/elements/adapters/DisassemblyElementAnnotationProvider.java
index 8c7cc1b9a8d..24a86954842 100644
--- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/elements/adapters/DisassemblyElementAnnotationProvider.java
+++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/elements/adapters/DisassemblyElementAnnotationProvider.java
@@ -17,7 +17,6 @@ import org.eclipse.cdt.debug.core.CDebugCorePlugin;
import org.eclipse.cdt.debug.core.model.ICLineBreakpoint;
import org.eclipse.cdt.debug.core.model.ICStackFrame;
import org.eclipse.cdt.debug.core.model.IDisassemblyInstruction;
-import org.eclipse.cdt.debug.internal.core.CBreakpointManager;
import org.eclipse.cdt.debug.internal.core.model.CDebugTarget;
import org.eclipse.cdt.debug.internal.core.model.DisassemblyRetrieval;
import org.eclipse.cdt.debug.internal.ui.views.disassembly.DisassemblyInstructionPointerAnnotation;
diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/elements/adapters/DisassemblyElementProxy.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/elements/adapters/DisassemblyElementProxy.java
new file mode 100644
index 00000000000..9a2836878d4
--- /dev/null
+++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/elements/adapters/DisassemblyElementProxy.java
@@ -0,0 +1,88 @@
+/*******************************************************************************
+ * Copyright (c) 2008 ARM Limited and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * ARM Limited - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.cdt.debug.internal.ui.elements.adapters;
+
+import org.eclipse.cdt.debug.core.model.ICDebugTarget;
+import org.eclipse.cdt.debug.core.model.IDisassemblyLine;
+import org.eclipse.cdt.debug.internal.core.model.CDebugTarget;
+import org.eclipse.cdt.debug.internal.core.model.DisassemblyRetrieval;
+import org.eclipse.debug.core.DebugEvent;
+import org.eclipse.debug.core.DebugPlugin;
+import org.eclipse.debug.core.IDebugEventSetListener;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.ModelDelta;
+import org.eclipse.debug.internal.ui.viewers.provisional.AbstractModelProxy;
+import org.eclipse.jface.viewers.Viewer;
+
+/**
+ * org.eclipse.cdt.debug.internal.ui.elements.adapters.DisassemblyElementProxy:
+ * //TODO Add description.
+ */
+public class DisassemblyElementProxy extends AbstractModelProxy implements IDebugEventSetListener {
+
+ private Object fElement;
+
+ /* (non-Javadoc)
+ * @see org.eclipse.debug.core.IDebugEventSetListener#handleDebugEvents(org.eclipse.debug.core.DebugEvent[])
+ */
+ public DisassemblyElementProxy( Object element ) {
+ super();
+ fElement = element;
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.debug.internal.ui.viewers.provisional.AbstractModelProxy#installed(org.eclipse.jface.viewers.Viewer)
+ */
+ @Override
+ public void installed( Viewer viewer ) {
+ super.installed( viewer );
+ DebugPlugin.getDefault().addDebugEventListener( this );
+ fireModelChanged( new ModelDelta( fElement, IModelDelta.CONTENT ) );
+ }
+
+ public void handleDebugEvents( DebugEvent[] events ) {
+ for ( DebugEvent event : events ) {
+ Object source = event.getSource();
+ int kind = event.getKind();
+ int detail = event.getDetail();
+ if ( source instanceof IDisassemblyLine ) {
+ if ( kind == DebugEvent.CHANGE && detail == DebugEvent.STATE ) {
+ IDisassemblyLine line = (IDisassemblyLine)source;
+ DisassemblyRetrieval dr = ((CDebugTarget)line.getDebugTarget()).getDisassemblyRetrieval();
+ if ( getElement().equals( dr ) ) {
+ fireModelChanged( createDelta( line ) );
+ }
+ }
+ }
+ }
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.debug.internal.ui.viewers.provisional.AbstractModelProxy#dispose()
+ */
+ @Override
+ public synchronized void dispose() {
+ DebugPlugin.getDefault().removeDebugEventListener( this );
+ super.dispose();
+ }
+
+ protected Object getElement() {
+ return fElement;
+ }
+
+ protected IModelDelta createDelta( IDisassemblyLine line ) {
+ DisassemblyRetrieval dr = ((CDebugTarget)line.getDebugTarget()).getDisassemblyRetrieval();
+ ModelDelta delta = new ModelDelta( dr, IModelDelta.NO_CHANGE );
+ delta.addNode( line, IModelDelta.STATE );
+ return delta;
+ }
+}
diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/elements/adapters/DisassemblyToggleBreakpointAdapter.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/elements/adapters/DisassemblyToggleBreakpointAdapter.java
new file mode 100644
index 00000000000..5481c0f9e03
--- /dev/null
+++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/elements/adapters/DisassemblyToggleBreakpointAdapter.java
@@ -0,0 +1,98 @@
+/*******************************************************************************
+ * Copyright (c) 2008 ARM Limited and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * ARM Limited - Initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.cdt.debug.internal.ui.elements.adapters;
+
+import java.math.BigInteger;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.cdt.core.IAddress;
+import org.eclipse.cdt.debug.core.CDIDebugModel;
+import org.eclipse.cdt.debug.core.CDebugCorePlugin;
+import org.eclipse.cdt.debug.core.CDebugUtils;
+import org.eclipse.cdt.debug.core.model.ICAddressBreakpoint;
+import org.eclipse.cdt.debug.core.model.ICBreakpoint;
+import org.eclipse.cdt.debug.core.model.ICDebugTarget;
+import org.eclipse.cdt.debug.core.model.ICLineBreakpoint;
+import org.eclipse.cdt.debug.core.model.IDisassemblyInstruction;
+import org.eclipse.cdt.debug.core.model.IDisassemblySourceLine;
+import org.eclipse.cdt.debug.internal.core.breakpoints.CAddressBreakpoint;
+import org.eclipse.cdt.debug.ui.disassembly.IElementToggleBreakpointAdapter;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.debug.core.DebugException;
+import org.eclipse.debug.core.DebugPlugin;
+import org.eclipse.debug.core.model.IBreakpoint;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
+
+/**
+ * org.eclipse.cdt.debug.internal.ui.elements.adapters.DisassemblyToggleBreakpointAdapter:
+ * //TODO Add description.
+ */
+public class DisassemblyToggleBreakpointAdapter implements IElementToggleBreakpointAdapter {
+
+
+ /* (non-Javadoc)
+ * @see com.arm.eclipse.rvd.ui.disassembly.IElementToggleBreakpointAdapter#canToggleLineBreakpoints(org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext, java.lang.Object)
+ */
+ public boolean canToggleLineBreakpoints( IPresentationContext presentationContext, Object element ) {
+ if ( element instanceof IDisassemblyInstruction ) {
+ return true;
+ }
+ return false;
+ }
+
+ /* (non-Javadoc)
+ * @see com.arm.eclipse.rvd.ui.disassembly.IElementToggleBreakpointAdapter#toggleLineBreakpoints(org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext, java.lang.Object)
+ */
+ public void toggleLineBreakpoints( IPresentationContext presentationContext, Object element ) throws CoreException {
+ if ( element instanceof IDisassemblyInstruction ) {
+ IDisassemblyInstruction instruction = (IDisassemblyInstruction)element;
+ IBreakpoint breakpoint = findBreakpoint( instruction );
+ if ( breakpoint != null ) {
+ DebugPlugin.getDefault().getBreakpointManager().removeBreakpoint( breakpoint, true );
+ }
+ else {
+ IAddress address = instruction.getAdress();
+ CDIDebugModel.createAddressBreakpoint(
+ null,
+ "", //$NON-NLS-1$
+ ResourcesPlugin.getWorkspace().getRoot(),
+ -1,
+ address,
+ true,
+ 0,
+ "", //$NON-NLS-1$
+ true );
+ }
+ }
+ }
+
+ private IBreakpoint findBreakpoint( IDisassemblyInstruction instruction ) {
+ BigInteger address = instruction.getAdress().getValue();
+ IBreakpoint[] breakpoints = DebugPlugin.getDefault().getBreakpointManager().getBreakpoints();
+ for ( IBreakpoint bp : breakpoints ) {
+ if ( bp instanceof ICLineBreakpoint ) {
+ try {
+ IAddress bpAddress = ((ICDebugTarget)instruction.getDebugTarget()).getBreakpointAddress( (ICLineBreakpoint)bp );
+ if ( bpAddress != null && address.compareTo( bpAddress.getValue() ) == 0 )
+ return bp;
+ }
+ catch( DebugException e ) {
+ }
+ }
+ }
+ return null;
+ }
+}

Back to the top