Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/dsf/AbstractDisassemblyBackend.java37
-rw-r--r--debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/dsf/DisassemblyBackendCdi.java6
-rw-r--r--debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/dsf/IDisassemblyBackend.java12
-rw-r--r--dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyBackendDsf.java11
-rw-r--r--dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyPart.java20
5 files changed, 65 insertions, 21 deletions
diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/dsf/AbstractDisassemblyBackend.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/dsf/AbstractDisassemblyBackend.java
new file mode 100644
index 00000000000..ac1f9f15fca
--- /dev/null
+++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/dsf/AbstractDisassemblyBackend.java
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Wind River Systems, Inc. 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:
+ * Wind River Systems - initial API and implementation
+ * Freescale Semiconductor - refactoring
+ *******************************************************************************/
+package org.eclipse.cdt.debug.internal.ui.disassembly.dsf;
+
+import java.math.BigInteger;
+
+public abstract class AbstractDisassemblyBackend implements IDisassemblyBackend {
+
+ protected IDisassemblyPartCallback fCallback;
+
+ protected AbstractDisassemblyBackend() {
+ }
+
+ public void init(IDisassemblyPartCallback callback) {
+ assert callback != null;
+ fCallback = callback;
+ }
+
+ /**
+ * Evaluate the symbol address.
+ *
+ * @param symbol the symbol
+ * @param suppressError true to suppress error dialogs
+ * @return the address, <code>null</code> if failed to evaluate symbol
+ */
+ public abstract BigInteger evaluateSymbolAddress(String symbol, boolean suppressError);
+
+}
diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/dsf/DisassemblyBackendCdi.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/dsf/DisassemblyBackendCdi.java
index 87c0bb721f0..116eb876698 100644
--- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/dsf/DisassemblyBackendCdi.java
+++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/dsf/DisassemblyBackendCdi.java
@@ -57,9 +57,8 @@ import com.ibm.icu.text.MessageFormat;
* The CDI backend to the DSF disassembly view.
*
*/
-public class DisassemblyBackendCdi implements IDisassemblyBackend, IDebugEventSetListener {
+public class DisassemblyBackendCdi extends AbstractDisassemblyBackend implements IDebugEventSetListener {
- private IDisassemblyPartCallback fCallback;
private ICThread fTargetContext;
private String fCdiSessionId;
private ICStackFrame fTargetFrameContext;
@@ -74,8 +73,7 @@ public class DisassemblyBackendCdi implements IDisassemblyBackend, IDebugEventSe
* @see org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyBackend#init(org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyPartCallback)
*/
public void init(IDisassemblyPartCallback callback) {
- assert callback != null;
- fCallback = callback;
+ super.init(callback);
DebugPlugin.getDefault().addDebugEventListener(this);
}
diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/dsf/IDisassemblyBackend.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/dsf/IDisassemblyBackend.java
index 0e65121e8c8..dfba77dcf00 100644
--- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/dsf/IDisassemblyBackend.java
+++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/dsf/IDisassemblyBackend.java
@@ -22,6 +22,9 @@ import org.eclipse.jface.text.Position;
* DSF backends. This interface is obtained through IAdaptable. A new instance
* is provided every time the adapter is requested. The caller must invoke
* {@link #dispose()} when it has no further use for the instance.
+ *
+ * @noimplement This interface is not intended to be implemented by clients.
+ * Clients should extend {@link AbstractDisassemblyBackend}.
*/
public interface IDisassemblyBackend {
@@ -142,15 +145,6 @@ public interface IDisassemblyBackend {
Object insertSource(Position pos, BigInteger address, final String file, int lineNumber);
void gotoSymbol(String symbol);
-
- /**
- * Evaluate the symbol address.
- *
- * @param symbol the symbol
- * @param suppressError true to suppress error dialogs
- * @return the address, <code>null</code> if failed to evaluate symbol
- */
- BigInteger evaluateSymbolAddress(String symbol, boolean suppressError);
/**
* Retrieves disassembly of the code generated by a source file, starting at
diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyBackendDsf.java b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyBackendDsf.java
index a8cc552e1f9..aa413e15536 100644
--- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyBackendDsf.java
+++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyBackendDsf.java
@@ -22,10 +22,10 @@ import java.util.concurrent.RejectedExecutionException;
import java.util.concurrent.TimeUnit;
import org.eclipse.cdt.core.IAddress;
+import org.eclipse.cdt.debug.internal.ui.disassembly.dsf.AbstractDisassemblyBackend;
import org.eclipse.cdt.debug.internal.ui.disassembly.dsf.AddressRangePosition;
import org.eclipse.cdt.debug.internal.ui.disassembly.dsf.DisassemblyUtils;
import org.eclipse.cdt.debug.internal.ui.disassembly.dsf.ErrorPosition;
-import org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyBackend;
import org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyPartCallback;
import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
import org.eclipse.cdt.dsf.concurrent.DsfExecutor;
@@ -68,7 +68,7 @@ import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.Position;
-public class DisassemblyBackendDsf implements IDisassemblyBackend, SessionEndedListener {
+public class DisassemblyBackendDsf extends AbstractDisassemblyBackend implements SessionEndedListener {
private volatile IExecutionDMContext fTargetContext;
private DsfServicesTracker fServicesTracker;
@@ -77,8 +77,6 @@ public class DisassemblyBackendDsf implements IDisassemblyBackend, SessionEndedL
private String fDsfSessionId;
- private IDisassemblyPartCallback fCallback;
-
/**
* Constructor
*/
@@ -88,9 +86,9 @@ public class DisassemblyBackendDsf implements IDisassemblyBackend, SessionEndedL
/* (non-Javadoc)
* @see org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyBackend#init(org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyPartCallback)
*/
+ @Override
public void init(IDisassemblyPartCallback callback) {
- assert callback != null;
- fCallback = callback;
+ super.init(callback);
DsfSession.addSessionEndedListener(this);
}
@@ -882,6 +880,7 @@ public class DisassemblyBackendDsf implements IDisassemblyBackend, SessionEndedL
* (non-Javadoc)
* @see org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyBackend#evaluateSymbolAddress(java.lang.String, boolean)
*/
+ @Override
public BigInteger evaluateSymbolAddress(final String symbol, final boolean suppressError) {
Query<BigInteger> query = new Query<BigInteger>() {
@Override
diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyPart.java b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyPart.java
index 109912c5476..2c8a8063e74 100644
--- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyPart.java
+++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyPart.java
@@ -27,8 +27,10 @@ import java.util.Map;
import org.eclipse.cdt.core.IAddress;
import org.eclipse.cdt.core.model.ITranslationUnit;
+import org.eclipse.cdt.debug.internal.ui.disassembly.dsf.AbstractDisassemblyBackend;
import org.eclipse.cdt.debug.internal.ui.disassembly.dsf.AddressRangePosition;
import org.eclipse.cdt.debug.internal.ui.disassembly.dsf.DisassemblyPosition;
+import org.eclipse.cdt.debug.internal.ui.disassembly.dsf.DisassemblyUtils;
import org.eclipse.cdt.debug.internal.ui.disassembly.dsf.ErrorPosition;
import org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyBackend;
import org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyDocument;
@@ -2964,11 +2966,25 @@ public abstract class DisassemblyPart extends WorkbenchPart implements IDisassem
public BigInteger eval(String expr, boolean suppressError) {
if (fBackend != null) {
- BigInteger address = fBackend.evaluateSymbolAddress(expr, suppressError);
+ BigInteger address = null;
+ if (fBackend instanceof AbstractDisassemblyBackend) {
+ address = ((AbstractDisassemblyBackend) fBackend).evaluateSymbolAddress(expr, suppressError);
+ } else {
+ String value = fBackend.evaluateExpression(expr);
+ if (value != null) {
+ try {
+ address = DisassemblyUtils.decodeAddress(value);
+ } catch (NumberFormatException e) {
+ if (!suppressError) {
+ generateErrorDialog(DisassemblyMessages.Disassembly_log_error_expression_eval);
+ }
+ }
+ }
+ }
if (address != null)
return address;
}
- return PC_UNKNOWN;
+ return PC_UNKNOWN;
}
protected boolean isTrackExpression() {

Back to the top