From 7e01bb61eb46af575ecc3ff1e0d8a2255535bae6 Mon Sep 17 00:00:00 2001 From: Anton Leherbauer Date: Wed, 17 Nov 2010 12:23:42 +0000 Subject: [PATCH] Bug 328391 - DisassemblyBackendDsf gotoSymbol needs to handle IExpressionDMLocation when using IExpressions.getExpressionAddressData --- .../ui/disassembly/DisassemblyBackendDsf.java | 25 +++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) 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 61deaf0fc3e..5c11c5375a1 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 @@ -39,6 +39,7 @@ import org.eclipse.cdt.dsf.debug.service.IDisassembly.IDisassemblyDMContext; import org.eclipse.cdt.dsf.debug.service.IExpressions; import org.eclipse.cdt.dsf.debug.service.IExpressions.IExpressionDMAddress; import org.eclipse.cdt.dsf.debug.service.IExpressions.IExpressionDMContext; +import org.eclipse.cdt.dsf.debug.service.IExpressions.IExpressionDMLocation; import org.eclipse.cdt.dsf.debug.service.IFormattedValues; import org.eclipse.cdt.dsf.debug.service.IFormattedValues.FormattedValueDMContext; import org.eclipse.cdt.dsf.debug.service.IFormattedValues.FormattedValueDMData; @@ -862,7 +863,7 @@ public class DisassemblyBackendDsf extends AbstractDisassemblyBackend implements * @see org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyBackend#gotoSymbol(java.lang.String) */ public void gotoSymbol(final String symbol) { - evaluateSymbolAddress(symbol, false, new DataRequestMonitor(getSession().getExecutor(), null) { + evaluateAddressExpression(symbol, false, new DataRequestMonitor(getSession().getExecutor(), null) { @Override protected void handleSuccess() { final BigInteger address = getData(); @@ -878,14 +879,14 @@ public class DisassemblyBackendDsf extends AbstractDisassemblyBackend implements /* * (non-Javadoc) - * @see org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyBackend#evaluateSymbolAddress(java.lang.String, boolean) + * @see org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyBackend#evaluateAddressExpression(java.lang.String, boolean) */ @Override public BigInteger evaluateAddressExpression(final String symbol, final boolean suppressError) { Query query = new Query() { @Override protected void execute(DataRequestMonitor rm) { - evaluateSymbolAddress(symbol, suppressError, rm); + evaluateAddressExpression(symbol, suppressError, rm); } }; getSession().getExecutor().execute(query); @@ -896,7 +897,7 @@ public class DisassemblyBackendDsf extends AbstractDisassemblyBackend implements } } - private void evaluateSymbolAddress(final String symbol, final boolean suppressError, final DataRequestMonitor rm) { + private void evaluateAddressExpression(final String symbol, final boolean suppressError, final DataRequestMonitor rm) { final IExpressions expressions= getService(IExpressions.class); if (expressions == null) { rm.setStatus(new Status(IStatus.ERROR, DsfUIPlugin.PLUGIN_ID, IDsfStatusConstants.REQUEST_FAILED, "", null)); //$NON-NLS-1$ @@ -910,9 +911,19 @@ public class DisassemblyBackendDsf extends AbstractDisassemblyBackend implements @Override protected void handleSuccess() { IExpressionDMAddress data = getData(); - IAddress address = data.getAddress(); - rm.setData(address.getValue()); - rm.done(); + final IAddress address = data.getAddress(); + if (address != null && address != IExpressionDMLocation.INVALID_ADDRESS) { + final BigInteger addressValue = address.getValue(); + fCallback.asyncExec(new Runnable() { + public void run() { + fCallback.gotoAddress(addressValue); + } + }); + rm.setData(addressValue); + rm.done(); + } else { + handleError(); + } } @Override protected void handleError() {