mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
[216803] Removed the getName() methos from Data Model contexts declared in IRegisters service interface.
This commit is contained in:
parent
5542247e15
commit
deabab9f21
6 changed files with 404 additions and 394 deletions
|
@ -18,6 +18,7 @@ import org.eclipse.core.runtime.Status;
|
|||
import org.eclipse.dd.dsf.concurrent.DataRequestMonitor;
|
||||
import org.eclipse.dd.dsf.concurrent.DsfRunnable;
|
||||
import org.eclipse.dd.dsf.concurrent.IDsfStatusConstants;
|
||||
import org.eclipse.dd.dsf.concurrent.ImmediateExecutor;
|
||||
import org.eclipse.dd.dsf.concurrent.RequestMonitor;
|
||||
import org.eclipse.dd.dsf.datamodel.DMContexts;
|
||||
import org.eclipse.dd.dsf.datamodel.IDMContext;
|
||||
|
@ -32,7 +33,8 @@ import org.eclipse.dd.dsf.debug.service.IRegisters.IBitFieldDMContext;
|
|||
import org.eclipse.dd.dsf.debug.service.IRegisters.IBitFieldDMData;
|
||||
import org.eclipse.dd.dsf.debug.service.IRegisters.IMnemonic;
|
||||
import org.eclipse.dd.dsf.debug.service.IRegisters.IRegisterDMContext;
|
||||
import org.eclipse.dd.dsf.debug.service.IRegisters.IRegisterGroupDMContext;
|
||||
import org.eclipse.dd.dsf.debug.service.IRegisters.IRegisterDMData;
|
||||
import org.eclipse.dd.dsf.debug.service.IRegisters.IRegisterGroupDMData;
|
||||
import org.eclipse.dd.dsf.debug.service.IRunControl.ISuspendedDMEvent;
|
||||
import org.eclipse.dd.dsf.debug.ui.viewmodel.IDebugVMConstants;
|
||||
import org.eclipse.dd.dsf.debug.ui.viewmodel.expression.AbstractExpressionVMNode;
|
||||
|
@ -116,32 +118,22 @@ public class RegisterBitFieldVMNode extends AbstractExpressionVMNode
|
|||
}
|
||||
|
||||
public String createWatchExpression(Object element) throws CoreException {
|
||||
BitFieldVMC bitFieldVmc = ((BitFieldVMC)element);
|
||||
IRegisterGroupDMData groupData = fDataAccess.getRegisterGroupDMData(element);
|
||||
IRegisterDMData registerData = fDataAccess.getRegisterDMData(element);
|
||||
IBitFieldDMData bitFieldData = fDataAccess.getBitFieldDMData(element);
|
||||
|
||||
StringBuffer exprBuf = new StringBuffer();
|
||||
IRegisterGroupDMContext groupDmc =
|
||||
DMContexts.getAncestorOfType(bitFieldVmc.getDMContext(), IRegisterGroupDMContext.class);
|
||||
if (groupDmc != null) {
|
||||
if (groupData != null && registerData != null && bitFieldData != null) {
|
||||
StringBuffer exprBuf = new StringBuffer();
|
||||
exprBuf.append("$$\""); //$NON-NLS-1$
|
||||
exprBuf.append(groupDmc.getName());
|
||||
exprBuf.append(groupData.getName());
|
||||
exprBuf.append('"');
|
||||
}
|
||||
|
||||
IRegisterDMContext registerDmc =
|
||||
DMContexts.getAncestorOfType(bitFieldVmc.getDMContext(), IRegisterDMContext.class);
|
||||
if (registerDmc != null) {
|
||||
exprBuf.append('$');
|
||||
exprBuf.append(registerDmc.getName());
|
||||
}
|
||||
|
||||
IBitFieldDMContext bitFieldDmc =
|
||||
DMContexts.getAncestorOfType(bitFieldVmc.getDMContext(), IBitFieldDMContext.class);
|
||||
if (bitFieldDmc != null) {
|
||||
exprBuf.append(registerData.getName());
|
||||
exprBuf.append('.');
|
||||
exprBuf.append(bitFieldDmc.getName());
|
||||
exprBuf.append(bitFieldData.getName());
|
||||
return exprBuf.toString();
|
||||
}
|
||||
|
||||
return exprBuf.toString();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -512,7 +504,7 @@ public class RegisterBitFieldVMNode extends AbstractExpressionVMNode
|
|||
}
|
||||
|
||||
@Override
|
||||
protected void testElementForExpression(Object element, IExpression expression, DataRequestMonitor<Boolean> rm) {
|
||||
protected void testElementForExpression(Object element, IExpression expression, final DataRequestMonitor<Boolean> rm) {
|
||||
if (!(element instanceof IDMVMContext)) {
|
||||
rm.setStatus(new Status(IStatus.ERROR, DsfDebugUIPlugin.PLUGIN_ID, IDsfStatusConstants.INVALID_HANDLE, "Invalid context", null)); //$NON-NLS-1$
|
||||
rm.done();
|
||||
|
@ -526,13 +518,31 @@ public class RegisterBitFieldVMNode extends AbstractExpressionVMNode
|
|||
return;
|
||||
}
|
||||
|
||||
String bitFieldName = parseExpressionForBitFieldName(expression.getExpressionText());
|
||||
if (dmc.getName().equals(bitFieldName)) {
|
||||
rm.setData(Boolean.TRUE);
|
||||
} else {
|
||||
rm.setData(Boolean.FALSE);
|
||||
final String bitFieldName = parseExpressionForBitFieldName(expression.getExpressionText());
|
||||
try {
|
||||
getSession().getExecutor().execute(new DsfRunnable() {
|
||||
public void run() {
|
||||
IRegisters registersService = getServicesTracker().getService(IRegisters.class);
|
||||
if (registersService != null) {
|
||||
registersService.getBitFieldData(
|
||||
dmc,
|
||||
new DataRequestMonitor<IBitFieldDMData>(ImmediateExecutor.getInstance(), rm) {
|
||||
@Override
|
||||
protected void handleSuccess() {
|
||||
rm.setData( getData().getName().equals(bitFieldName) );
|
||||
rm.done();
|
||||
}
|
||||
});
|
||||
} else {
|
||||
rm.setStatus(new Status(IStatus.WARNING, DsfDebugUIPlugin.PLUGIN_ID, IDsfStatusConstants.INVALID_STATE, "Register service not available", null)); //$NON-NLS-1$
|
||||
rm.done();
|
||||
}
|
||||
}
|
||||
});
|
||||
} catch (RejectedExecutionException e) {
|
||||
rm.setStatus(new Status(IStatus.WARNING, DsfDebugUIPlugin.PLUGIN_ID, IDsfStatusConstants.INVALID_STATE, "DSF session shut down", null)); //$NON-NLS-1$
|
||||
rm.done();
|
||||
}
|
||||
rm.done();
|
||||
}
|
||||
|
||||
public boolean canParseExpression(IExpression expression) {
|
||||
|
|
|
@ -18,6 +18,7 @@ import org.eclipse.core.runtime.Status;
|
|||
import org.eclipse.dd.dsf.concurrent.DataRequestMonitor;
|
||||
import org.eclipse.dd.dsf.concurrent.DsfRunnable;
|
||||
import org.eclipse.dd.dsf.concurrent.IDsfStatusConstants;
|
||||
import org.eclipse.dd.dsf.concurrent.ImmediateExecutor;
|
||||
import org.eclipse.dd.dsf.concurrent.RequestMonitor;
|
||||
import org.eclipse.dd.dsf.datamodel.DMContexts;
|
||||
import org.eclipse.dd.dsf.datamodel.IDMContext;
|
||||
|
@ -102,13 +103,11 @@ public class RegisterGroupVMNode extends AbstractExpressionVMNode
|
|||
}
|
||||
|
||||
public String createWatchExpression(Object element) throws CoreException {
|
||||
RegisterGroupVMC registerVmc = ((RegisterGroupVMC)element);
|
||||
|
||||
StringBuffer exprBuf = new StringBuffer();
|
||||
IRegisterGroupDMContext groupDmc = DMContexts.getAncestorOfType(registerVmc.getDMContext(), IRegisterGroupDMContext.class);
|
||||
if (groupDmc != null) {
|
||||
IRegisterGroupDMData groupData = fSyncRegisterDataAccess.getRegisterGroupDMData(element);
|
||||
if (groupData != null) {
|
||||
StringBuffer exprBuf = new StringBuffer();
|
||||
exprBuf.append("$$\""); //$NON-NLS-1$
|
||||
exprBuf.append(groupDmc.getName());
|
||||
exprBuf.append(groupData.getName());
|
||||
exprBuf.append('"');
|
||||
return exprBuf.toString();
|
||||
}
|
||||
|
@ -328,7 +327,7 @@ public class RegisterGroupVMNode extends AbstractExpressionVMNode
|
|||
}
|
||||
|
||||
@Override
|
||||
protected void testElementForExpression(Object element, IExpression expression, DataRequestMonitor<Boolean> rm) {
|
||||
protected void testElementForExpression(Object element, IExpression expression, final DataRequestMonitor<Boolean> rm) {
|
||||
if (!(element instanceof IDMVMContext)) {
|
||||
rm.setStatus(new Status(IStatus.ERROR, DsfDebugUIPlugin.PLUGIN_ID, IDsfStatusConstants.INVALID_HANDLE, "Invalid context", null)); //$NON-NLS-1$
|
||||
rm.done();
|
||||
|
@ -341,13 +340,31 @@ public class RegisterGroupVMNode extends AbstractExpressionVMNode
|
|||
return;
|
||||
}
|
||||
|
||||
String groupName = parseExpressionForGroupName(expression.getExpressionText());
|
||||
if (dmc.getName().equals(groupName)) {
|
||||
rm.setData(Boolean.TRUE);
|
||||
} else {
|
||||
rm.setData(Boolean.FALSE);
|
||||
final String groupName = parseExpressionForGroupName(expression.getExpressionText());
|
||||
try {
|
||||
getSession().getExecutor().execute(new DsfRunnable() {
|
||||
public void run() {
|
||||
IRegisters registersService = getServicesTracker().getService(IRegisters.class);
|
||||
if (registersService != null) {
|
||||
registersService.getRegisterGroupData(
|
||||
dmc,
|
||||
new DataRequestMonitor<IRegisterGroupDMData>(ImmediateExecutor.getInstance(), rm) {
|
||||
@Override
|
||||
protected void handleSuccess() {
|
||||
rm.setData( getData().getName().equals(groupName) );
|
||||
rm.done();
|
||||
}
|
||||
});
|
||||
} else {
|
||||
rm.setStatus(new Status(IStatus.WARNING, DsfDebugUIPlugin.PLUGIN_ID, IDsfStatusConstants.INVALID_STATE, "Register service not available", null)); //$NON-NLS-1$
|
||||
rm.done();
|
||||
}
|
||||
}
|
||||
});
|
||||
} catch (RejectedExecutionException e) {
|
||||
rm.setStatus(new Status(IStatus.WARNING, DsfDebugUIPlugin.PLUGIN_ID, IDsfStatusConstants.INVALID_STATE, "DSF session shut down", null)); //$NON-NLS-1$
|
||||
rm.done();
|
||||
}
|
||||
rm.done();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -18,6 +18,7 @@ import org.eclipse.core.runtime.Status;
|
|||
import org.eclipse.dd.dsf.concurrent.DataRequestMonitor;
|
||||
import org.eclipse.dd.dsf.concurrent.DsfRunnable;
|
||||
import org.eclipse.dd.dsf.concurrent.IDsfStatusConstants;
|
||||
import org.eclipse.dd.dsf.concurrent.ImmediateExecutor;
|
||||
import org.eclipse.dd.dsf.concurrent.RequestMonitor;
|
||||
import org.eclipse.dd.dsf.datamodel.DMContexts;
|
||||
import org.eclipse.dd.dsf.datamodel.IDMContext;
|
||||
|
@ -30,7 +31,7 @@ import org.eclipse.dd.dsf.debug.service.IFormattedValues.FormattedValueDMData;
|
|||
import org.eclipse.dd.dsf.debug.service.IRegisters.IRegisterChangedDMEvent;
|
||||
import org.eclipse.dd.dsf.debug.service.IRegisters.IRegisterDMContext;
|
||||
import org.eclipse.dd.dsf.debug.service.IRegisters.IRegisterDMData;
|
||||
import org.eclipse.dd.dsf.debug.service.IRegisters.IRegisterGroupDMContext;
|
||||
import org.eclipse.dd.dsf.debug.service.IRegisters.IRegisterGroupDMData;
|
||||
import org.eclipse.dd.dsf.debug.ui.viewmodel.IDebugVMConstants;
|
||||
import org.eclipse.dd.dsf.debug.ui.viewmodel.expression.AbstractExpressionVMNode;
|
||||
import org.eclipse.dd.dsf.debug.ui.viewmodel.numberformat.IFormattedValuePreferenceStore;
|
||||
|
@ -114,22 +115,15 @@ public class RegisterVMNode extends AbstractExpressionVMNode
|
|||
}
|
||||
|
||||
public String createWatchExpression(Object element) throws CoreException {
|
||||
RegisterVMC registerVmc = ((RegisterVMC)element);
|
||||
|
||||
StringBuffer exprBuf = new StringBuffer();
|
||||
IRegisterGroupDMContext groupDmc =
|
||||
DMContexts.getAncestorOfType(registerVmc.getDMContext(), IRegisterGroupDMContext.class);
|
||||
if (groupDmc != null) {
|
||||
IRegisterGroupDMData groupData = fSyncRegisterDataAccess.getRegisterGroupDMData(element);
|
||||
IRegisterDMData registerData = fSyncRegisterDataAccess.getRegisterDMData(element);
|
||||
if (groupData != null && registerData != null) {
|
||||
StringBuffer exprBuf = new StringBuffer();
|
||||
exprBuf.append("$$\""); //$NON-NLS-1$
|
||||
exprBuf.append(groupDmc.getName());
|
||||
exprBuf.append(groupData.getName());
|
||||
exprBuf.append('"');
|
||||
}
|
||||
|
||||
IRegisterDMContext registerDmc =
|
||||
DMContexts.getAncestorOfType(registerVmc.getDMContext(), IRegisterDMContext.class);
|
||||
if (registerDmc != null) {
|
||||
exprBuf.append('$');
|
||||
exprBuf.append(registerDmc.getName());
|
||||
exprBuf.append(registerData.getName());
|
||||
return exprBuf.toString();
|
||||
}
|
||||
|
||||
|
@ -485,7 +479,7 @@ public class RegisterVMNode extends AbstractExpressionVMNode
|
|||
}
|
||||
|
||||
@Override
|
||||
protected void testElementForExpression(Object element, IExpression expression, DataRequestMonitor<Boolean> rm) {
|
||||
protected void testElementForExpression(Object element, IExpression expression, final DataRequestMonitor<Boolean> rm) {
|
||||
if (!(element instanceof IDMVMContext)) {
|
||||
rm.setStatus(new Status(IStatus.ERROR, DsfDebugUIPlugin.PLUGIN_ID, IDsfStatusConstants.INVALID_HANDLE, "Invalid context", null)); //$NON-NLS-1$
|
||||
rm.done();
|
||||
|
@ -498,13 +492,31 @@ public class RegisterVMNode extends AbstractExpressionVMNode
|
|||
return;
|
||||
}
|
||||
|
||||
String regName = parseExpressionForRegisterName(expression.getExpressionText());
|
||||
if (dmc.getName().equals(regName)) {
|
||||
rm.setData(Boolean.TRUE);
|
||||
} else {
|
||||
rm.setData(Boolean.FALSE);
|
||||
final String regName = parseExpressionForRegisterName(expression.getExpressionText());
|
||||
try {
|
||||
getSession().getExecutor().execute(new DsfRunnable() {
|
||||
public void run() {
|
||||
IRegisters registersService = getServicesTracker().getService(IRegisters.class);
|
||||
if (registersService != null) {
|
||||
registersService.getRegisterData(
|
||||
dmc,
|
||||
new DataRequestMonitor<IRegisterDMData>(ImmediateExecutor.getInstance(), rm) {
|
||||
@Override
|
||||
protected void handleSuccess() {
|
||||
rm.setData( getData().getName().equals(regName) );
|
||||
rm.done();
|
||||
}
|
||||
});
|
||||
} else {
|
||||
rm.setStatus(new Status(IStatus.WARNING, DsfDebugUIPlugin.PLUGIN_ID, IDsfStatusConstants.INVALID_STATE, "Register service not available", null)); //$NON-NLS-1$
|
||||
rm.done();
|
||||
}
|
||||
}
|
||||
});
|
||||
} catch (RejectedExecutionException e) {
|
||||
rm.setStatus(new Status(IStatus.WARNING, DsfDebugUIPlugin.PLUGIN_ID, IDsfStatusConstants.INVALID_STATE, "DSF session shut down", null)); //$NON-NLS-1$
|
||||
rm.done();
|
||||
}
|
||||
rm.done();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -17,6 +17,7 @@ import org.eclipse.core.runtime.IStatus;
|
|||
import org.eclipse.core.runtime.Status;
|
||||
import org.eclipse.dd.dsf.concurrent.DataRequestMonitor;
|
||||
import org.eclipse.dd.dsf.concurrent.IDsfStatusConstants;
|
||||
import org.eclipse.dd.dsf.concurrent.ImmediateExecutor;
|
||||
import org.eclipse.dd.dsf.concurrent.Query;
|
||||
import org.eclipse.dd.dsf.concurrent.ThreadSafe;
|
||||
import org.eclipse.dd.dsf.concurrent.ThreadSafeAndProhibitedFromDsfExecutor;
|
||||
|
@ -43,6 +44,45 @@ import org.osgi.util.tracker.ServiceTracker;
|
|||
@ThreadSafeAndProhibitedFromDsfExecutor("fSession#getExecutor")
|
||||
public class SyncRegisterDataAccess {
|
||||
|
||||
abstract public class RegistersServiceQuery<V, K extends IDMContext> extends Query<V> {
|
||||
|
||||
final protected K fDmc;
|
||||
|
||||
public RegistersServiceQuery(K dmc) {
|
||||
fDmc = dmc;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void execute(final DataRequestMonitor<V> rm) {
|
||||
/*
|
||||
* We're in another dispatch, so we must guard against executor
|
||||
* shutdown again.
|
||||
*/
|
||||
final DsfSession session = DsfSession.getSession(fDmc.getSessionId());
|
||||
if (session == null) {
|
||||
cancel(false);
|
||||
rm.done();
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Guard against a disposed service
|
||||
*/
|
||||
IRegisters service = getService();
|
||||
if (service == null) {
|
||||
rm.setStatus(new Status(IStatus.ERROR, DsfDebugUIPlugin.PLUGIN_ID, IDsfStatusConstants.INVALID_STATE,
|
||||
"Service unavailable", null)); //$NON-NLS-1$
|
||||
rm.done();
|
||||
return;
|
||||
}
|
||||
|
||||
doExecute(service, rm);
|
||||
}
|
||||
|
||||
abstract protected void doExecute(IRegisters registersService, DataRequestMonitor<V> rm);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* The session that this data access operates in.
|
||||
*/
|
||||
|
@ -83,48 +123,26 @@ public class SyncRegisterDataAccess {
|
|||
}
|
||||
}
|
||||
|
||||
public class GetBitFieldValueQuery extends Query<IBitFieldDMData> {
|
||||
|
||||
private IBitFieldDMContext fDmc;
|
||||
public class GetBitFieldValueQuery extends RegistersServiceQuery<IBitFieldDMData, IBitFieldDMContext> {
|
||||
|
||||
public GetBitFieldValueQuery(IBitFieldDMContext dmc) {
|
||||
super();
|
||||
fDmc = dmc;
|
||||
super(dmc);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void execute(final DataRequestMonitor<IBitFieldDMData> rm) {
|
||||
/*
|
||||
* Guard agains the session being disposed. If session is disposed
|
||||
* it could mean that the executor is shut-down, which in turn could
|
||||
* mean that we can't complete the RequestMonitor argument. in that
|
||||
* case, cancel to notify waiting thread.
|
||||
*/
|
||||
final DsfSession session = DsfSession.getSession(fDmc.getSessionId());
|
||||
if (session == null) {
|
||||
cancel(false);
|
||||
rm.done();
|
||||
return;
|
||||
}
|
||||
|
||||
IRegisters service = getService();
|
||||
if (service == null) {
|
||||
rm.setStatus(new Status(IStatus.ERROR, DsfDebugUIPlugin.PLUGIN_ID, IDsfStatusConstants.INVALID_STATE,
|
||||
"Service not available", null)); //$NON-NLS-1$
|
||||
rm.done();
|
||||
return;
|
||||
}
|
||||
|
||||
service.getBitFieldData(fDmc, new DataRequestMonitor<IBitFieldDMData>(session.getExecutor(), rm) {
|
||||
@Override
|
||||
protected void handleSuccess() {
|
||||
/*
|
||||
* All good set return value.
|
||||
*/
|
||||
rm.setData(getData());
|
||||
rm.done();
|
||||
}
|
||||
});
|
||||
protected void doExecute(IRegisters service, final DataRequestMonitor<IBitFieldDMData> rm) {
|
||||
service.getBitFieldData(
|
||||
fDmc,
|
||||
new DataRequestMonitor<IBitFieldDMData>(ImmediateExecutor.getInstance(), rm) {
|
||||
@Override
|
||||
protected void handleSuccess() {
|
||||
/*
|
||||
* All good set return value.
|
||||
*/
|
||||
rm.setData(getData());
|
||||
rm.done();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -171,59 +189,32 @@ public class SyncRegisterDataAccess {
|
|||
}
|
||||
}
|
||||
|
||||
public class SetBitFieldValueQuery extends Query<Object> {
|
||||
|
||||
private IBitFieldDMContext fDmc;
|
||||
public class SetBitFieldValueQuery extends RegistersServiceQuery<Object, IBitFieldDMContext> {
|
||||
|
||||
private String fValue;
|
||||
|
||||
private String fFormatId;
|
||||
|
||||
public SetBitFieldValueQuery(IBitFieldDMContext dmc, String value, String formatId) {
|
||||
super();
|
||||
fDmc = dmc;
|
||||
super(dmc);
|
||||
fValue = value;
|
||||
fFormatId = formatId;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void execute(final DataRequestMonitor<Object> rm) {
|
||||
/*
|
||||
* We're in another dispatch, so we must guard against executor
|
||||
* shutdown again.
|
||||
*/
|
||||
final DsfSession session = DsfSession.getSession(fDmc.getSessionId());
|
||||
if (session == null) {
|
||||
cancel(false);
|
||||
rm.done();
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Guard against a disposed service
|
||||
*/
|
||||
IRegisters service = getService();
|
||||
if (service == null) {
|
||||
rm.setStatus(new Status(IStatus.ERROR, DsfDebugUIPlugin.PLUGIN_ID, IDsfStatusConstants.INVALID_STATE,
|
||||
"Service unavailable", null)); //$NON-NLS-1$
|
||||
rm.done();
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Write the bit field using a string/format style.
|
||||
*/
|
||||
service.writeBitField(fDmc, fValue, fFormatId, new DataRequestMonitor<IBitFieldDMData>(session
|
||||
.getExecutor(), rm) {
|
||||
@Override
|
||||
protected void handleSuccess() {
|
||||
/*
|
||||
* All good set return value.
|
||||
*/
|
||||
rm.setData(new Object());
|
||||
rm.done();
|
||||
}
|
||||
});
|
||||
protected void doExecute(IRegisters service, final DataRequestMonitor<Object> rm) {
|
||||
// Write the bit field using a string/format style.
|
||||
service.writeBitField(
|
||||
fDmc, fValue, fFormatId,
|
||||
new DataRequestMonitor<IBitFieldDMData>(ImmediateExecutor.getInstance(), rm) {
|
||||
@Override
|
||||
protected void handleSuccess() {
|
||||
/*
|
||||
* All good set return value.
|
||||
*/
|
||||
rm.setData(new Object());
|
||||
rm.done();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -269,55 +260,29 @@ public class SyncRegisterDataAccess {
|
|||
}
|
||||
}
|
||||
|
||||
public class SetBitFieldValueMnemonicQuery extends Query<Object> {
|
||||
|
||||
IBitFieldDMContext fDmc;
|
||||
|
||||
public class SetBitFieldValueMnemonicQuery extends RegistersServiceQuery<Object, IBitFieldDMContext> {
|
||||
IMnemonic fMnemonic;
|
||||
|
||||
public SetBitFieldValueMnemonicQuery(IBitFieldDMContext dmc, IMnemonic mnemonic) {
|
||||
super();
|
||||
fDmc = dmc;
|
||||
super(dmc);
|
||||
fMnemonic = mnemonic;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void execute(final DataRequestMonitor<Object> rm) {
|
||||
/*
|
||||
* We're in another dispatch, so we must guard against executor
|
||||
* shutdown again.
|
||||
*/
|
||||
final DsfSession session = DsfSession.getSession(fDmc.getSessionId());
|
||||
if (session == null) {
|
||||
cancel(false);
|
||||
rm.done();
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Guard against a disposed service
|
||||
*/
|
||||
IRegisters service = getService();
|
||||
if (service == null) {
|
||||
rm.setStatus(new Status(IStatus.ERROR, DsfDebugUIPlugin.PLUGIN_ID, IDsfStatusConstants.INVALID_STATE,
|
||||
"Service unavailable", null)); //$NON-NLS-1$
|
||||
rm.done();
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Write the bit field using the mnemonic style.
|
||||
*/
|
||||
service.writeBitField(fDmc, fMnemonic, new DataRequestMonitor<IBitFieldDMData>(session.getExecutor(), rm) {
|
||||
@Override
|
||||
protected void handleSuccess() {
|
||||
/*
|
||||
* All good set return value.
|
||||
*/
|
||||
rm.setData(new Object());
|
||||
rm.done();
|
||||
}
|
||||
});
|
||||
protected void doExecute(IRegisters service, final DataRequestMonitor<Object> rm) {
|
||||
// Write the bit field using the mnemonic style.
|
||||
service.writeBitField(
|
||||
fDmc, fMnemonic,
|
||||
new DataRequestMonitor<IBitFieldDMData>(ImmediateExecutor.getInstance(), rm) {
|
||||
@Override
|
||||
protected void handleSuccess() {
|
||||
/*
|
||||
* All good set return value.
|
||||
*/
|
||||
rm.setData(new Object());
|
||||
rm.done();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -387,48 +352,25 @@ public class SyncRegisterDataAccess {
|
|||
return null;
|
||||
}
|
||||
|
||||
public class GetRegisterGroupValueQuery extends Query<IRegisterGroupDMData> {
|
||||
|
||||
IRegisterGroupDMContext fDmc;
|
||||
|
||||
public class GetRegisterGroupValueQuery extends RegistersServiceQuery<IRegisterGroupDMData, IRegisterGroupDMContext> {
|
||||
public GetRegisterGroupValueQuery(IRegisterGroupDMContext dmc) {
|
||||
super();
|
||||
fDmc = dmc;
|
||||
super(dmc);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void execute(final DataRequestMonitor<IRegisterGroupDMData> rm) {
|
||||
/*
|
||||
* Guard agains the session being disposed. If session is disposed
|
||||
* it could mean that the executor is shut-down, which in turn could
|
||||
* mean that we can't complete the RequestMonitor argument. in that
|
||||
* case, cancel to notify waiting thread.
|
||||
*/
|
||||
final DsfSession session = DsfSession.getSession(fDmc.getSessionId());
|
||||
if (session == null) {
|
||||
cancel(false);
|
||||
rm.done();
|
||||
return;
|
||||
}
|
||||
|
||||
IRegisters service = getService();
|
||||
if (service == null) {
|
||||
rm.setStatus(new Status(IStatus.ERROR, DsfDebugUIPlugin.PLUGIN_ID, IDsfStatusConstants.INVALID_STATE,
|
||||
"Service not available", null)); //$NON-NLS-1$
|
||||
rm.done();
|
||||
return;
|
||||
}
|
||||
|
||||
service.getRegisterGroupData(fDmc, new DataRequestMonitor<IRegisterGroupDMData>(session.getExecutor(), rm) {
|
||||
@Override
|
||||
protected void handleSuccess() {
|
||||
/*
|
||||
* All good set return value.
|
||||
*/
|
||||
rm.setData(getData());
|
||||
rm.done();
|
||||
}
|
||||
});
|
||||
protected void doExecute(IRegisters service, final DataRequestMonitor<IRegisterGroupDMData> rm) {
|
||||
service.getRegisterGroupData(
|
||||
fDmc,
|
||||
new DataRequestMonitor<IRegisterGroupDMData>(ImmediateExecutor.getInstance(), rm) {
|
||||
@Override
|
||||
protected void handleSuccess() {
|
||||
/*
|
||||
* All good set return value.
|
||||
*/
|
||||
rm.setData(getData());
|
||||
rm.done();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -467,48 +409,25 @@ public class SyncRegisterDataAccess {
|
|||
}
|
||||
}
|
||||
|
||||
public class GetRegisterValueQuery extends Query<IRegisterDMData> {
|
||||
|
||||
IRegisterDMContext fDmc;
|
||||
|
||||
public class GetRegisterValueQuery extends RegistersServiceQuery<IRegisterDMData, IRegisterDMContext> {
|
||||
public GetRegisterValueQuery(IRegisterDMContext dmc) {
|
||||
super();
|
||||
fDmc = dmc;
|
||||
super(dmc);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void execute(final DataRequestMonitor<IRegisterDMData> rm) {
|
||||
/*
|
||||
* Guard agains the session being disposed. If session is disposed
|
||||
* it could mean that the executor is shut-down, which in turn could
|
||||
* mean that we can't complete the RequestMonitor argument. in that
|
||||
* case, cancel to notify waiting thread.
|
||||
*/
|
||||
final DsfSession session = DsfSession.getSession(fDmc.getSessionId());
|
||||
if (session == null) {
|
||||
cancel(false);
|
||||
rm.done();
|
||||
return;
|
||||
}
|
||||
|
||||
IRegisters service = getService();
|
||||
if (service == null) {
|
||||
rm.setStatus(new Status(IStatus.ERROR, DsfDebugUIPlugin.PLUGIN_ID, IDsfStatusConstants.INVALID_STATE,
|
||||
"Service not available", null)); //$NON-NLS-1$
|
||||
rm.done();
|
||||
return;
|
||||
}
|
||||
|
||||
service.getRegisterData(fDmc, new DataRequestMonitor<IRegisterDMData>(session.getExecutor(), rm) {
|
||||
@Override
|
||||
protected void handleSuccess() {
|
||||
/*
|
||||
* All good set return value.
|
||||
*/
|
||||
rm.setData(getData());
|
||||
rm.done();
|
||||
}
|
||||
});
|
||||
protected void doExecute(IRegisters service, final DataRequestMonitor<IRegisterDMData> rm) {
|
||||
service.getRegisterData(
|
||||
fDmc,
|
||||
new DataRequestMonitor<IRegisterDMData>(ImmediateExecutor.getInstance(), rm) {
|
||||
@Override
|
||||
protected void handleSuccess() {
|
||||
/*
|
||||
* All good set return value.
|
||||
*/
|
||||
rm.setData(getData());
|
||||
rm.done();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -547,63 +466,34 @@ public class SyncRegisterDataAccess {
|
|||
}
|
||||
}
|
||||
|
||||
public class SetRegisterValueQuery extends Query<Object> {
|
||||
|
||||
private IRegisterDMContext fDmc;
|
||||
|
||||
public class SetRegisterValueQuery extends RegistersServiceQuery<Object, IRegisterDMContext> {
|
||||
private String fValue;
|
||||
|
||||
private String fFormatId;
|
||||
|
||||
public SetRegisterValueQuery(IRegisterDMContext dmc, String value, String formatId) {
|
||||
super();
|
||||
fDmc = dmc;
|
||||
super(dmc);
|
||||
fValue = value;
|
||||
fFormatId = formatId;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void execute(final DataRequestMonitor<Object> rm) {
|
||||
/*
|
||||
* We're in another dispatch, so we must guard against executor
|
||||
* shutdown again.
|
||||
*/
|
||||
final DsfSession session = DsfSession.getSession(fDmc.getSessionId());
|
||||
if (session == null) {
|
||||
cancel(false);
|
||||
rm.done();
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Guard against a disposed service
|
||||
*/
|
||||
IRegisters service = getService();
|
||||
if (service == null) {
|
||||
rm.setStatus(new Status(IStatus.ERROR, DsfDebugUIPlugin.PLUGIN_ID, IDsfStatusConstants.INVALID_STATE,
|
||||
"Service unavailable", null)); //$NON-NLS-1$
|
||||
rm.done();
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* The interface does not currently have a write function. It needs
|
||||
* to and now would seem to be the time to add it.
|
||||
*/
|
||||
protected void doExecute(IRegisters service, final DataRequestMonitor<Object> rm) {
|
||||
/*
|
||||
* Write the bit field using a string/format style.
|
||||
*/
|
||||
service.writeRegister(fDmc, fValue, fFormatId, new DataRequestMonitor<IBitFieldDMData>(session
|
||||
.getExecutor(), rm) {
|
||||
@Override
|
||||
protected void handleSuccess() {
|
||||
/*
|
||||
* All good set return value.
|
||||
*/
|
||||
rm.setData(new Object());
|
||||
rm.done();
|
||||
}
|
||||
});
|
||||
service.writeRegister(
|
||||
fDmc, fValue, fFormatId,
|
||||
new DataRequestMonitor<IBitFieldDMData>(ImmediateExecutor.getInstance(), rm) {
|
||||
@Override
|
||||
protected void handleSuccess() {
|
||||
/*
|
||||
* All good set return value.
|
||||
*/
|
||||
rm.setData(new Object());
|
||||
rm.done();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -648,52 +538,15 @@ public class SyncRegisterDataAccess {
|
|||
}
|
||||
}
|
||||
|
||||
public class GetSupportFormatsValueQuery extends Query<Object> {
|
||||
|
||||
IFormattedDataDMContext fDmc;
|
||||
public class GetSupportFormatsValueQuery extends RegistersServiceQuery<String[], IFormattedDataDMContext> {
|
||||
|
||||
public GetSupportFormatsValueQuery(IFormattedDataDMContext dmc) {
|
||||
super();
|
||||
fDmc = dmc;
|
||||
super(dmc);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void execute(final DataRequestMonitor<Object> rm) {
|
||||
/*
|
||||
* We're in another dispatch, so we must guard against executor
|
||||
* shutdown again.
|
||||
*/
|
||||
final DsfSession session = DsfSession.getSession(fDmc.getSessionId());
|
||||
if (session == null) {
|
||||
cancel(false);
|
||||
rm.done();
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Guard against a disposed service
|
||||
*/
|
||||
IRegisters service = getService();
|
||||
if (service == null) {
|
||||
rm.setStatus(new Status(IStatus.ERROR, DsfDebugUIPlugin.PLUGIN_ID, IDsfStatusConstants.INVALID_STATE,
|
||||
"Service unavailable", null)); //$NON-NLS-1$
|
||||
rm.done();
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Write the bit field using a string/format style.
|
||||
*/
|
||||
service.getAvailableFormats(fDmc, new DataRequestMonitor<String[]>(session.getExecutor(), rm) {
|
||||
@Override
|
||||
protected void handleSuccess() {
|
||||
/*
|
||||
* All good set return value.
|
||||
*/
|
||||
rm.setData(new Object());
|
||||
rm.done();
|
||||
}
|
||||
});
|
||||
protected void doExecute(IRegisters service, final DataRequestMonitor<String[]> rm) {
|
||||
service.getAvailableFormats(fDmc, rm);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -730,7 +583,7 @@ public class SyncRegisterDataAccess {
|
|||
* data.
|
||||
*/
|
||||
try {
|
||||
return (String[]) query.get();
|
||||
return query.get();
|
||||
} catch (InterruptedException e) {
|
||||
assert false;
|
||||
return null;
|
||||
|
@ -739,42 +592,17 @@ public class SyncRegisterDataAccess {
|
|||
}
|
||||
}
|
||||
|
||||
public class GetFormattedValueValueQuery extends Query<Object> {
|
||||
|
||||
private IFormattedDataDMContext fDmc;
|
||||
public class GetFormattedValueValueQuery extends RegistersServiceQuery<String, IFormattedDataDMContext> {
|
||||
|
||||
private String fFormatId;
|
||||
|
||||
public GetFormattedValueValueQuery(IFormattedDataDMContext dmc, String formatId) {
|
||||
super();
|
||||
fDmc = dmc;
|
||||
super(dmc);
|
||||
fFormatId = formatId;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void execute(final DataRequestMonitor<Object> rm) {
|
||||
/*
|
||||
* We're in another dispatch, so we must guard against executor
|
||||
* shutdown again.
|
||||
*/
|
||||
final DsfSession session = DsfSession.getSession(fDmc.getSessionId());
|
||||
if (session == null) {
|
||||
cancel(false);
|
||||
rm.done();
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Guard against a disposed service
|
||||
*/
|
||||
IRegisters service = getService();
|
||||
if (service == null) {
|
||||
rm.setStatus(new Status(IStatus.ERROR, DsfDebugUIPlugin.PLUGIN_ID, IDsfStatusConstants.INVALID_STATE,
|
||||
"Service unavailable", null)); //$NON-NLS-1$
|
||||
rm.done();
|
||||
return;
|
||||
}
|
||||
|
||||
protected void doExecute(IRegisters service, final DataRequestMonitor<String> rm) {
|
||||
/*
|
||||
* Convert to the proper formatting DMC then go get the formatted
|
||||
* value.
|
||||
|
@ -782,17 +610,18 @@ public class SyncRegisterDataAccess {
|
|||
|
||||
FormattedValueDMContext formDmc = service.getFormattedValueContext(fDmc, fFormatId);
|
||||
|
||||
service.getFormattedExpressionValue(formDmc, new DataRequestMonitor<FormattedValueDMData>(session
|
||||
.getExecutor(), rm) {
|
||||
@Override
|
||||
protected void handleSuccess() {
|
||||
/*
|
||||
* All good set return value.
|
||||
*/
|
||||
rm.setData(getData().getFormattedValue());
|
||||
rm.done();
|
||||
}
|
||||
});
|
||||
service.getFormattedExpressionValue(
|
||||
formDmc,
|
||||
new DataRequestMonitor<FormattedValueDMData>(ImmediateExecutor.getInstance(), rm) {
|
||||
@Override
|
||||
protected void handleSuccess() {
|
||||
/*
|
||||
* All good set return value.
|
||||
*/
|
||||
rm.setData(getData().getFormattedValue());
|
||||
rm.done();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -829,7 +658,7 @@ public class SyncRegisterDataAccess {
|
|||
* data.
|
||||
*/
|
||||
try {
|
||||
return (String) query.get();
|
||||
return query.get();
|
||||
} catch (InterruptedException e) {
|
||||
assert false;
|
||||
return null;
|
||||
|
@ -871,7 +700,7 @@ public class SyncRegisterDataAccess {
|
|||
* data.
|
||||
*/
|
||||
try {
|
||||
return (String) query.get();
|
||||
return query.get();
|
||||
} catch (InterruptedException e) {
|
||||
assert false;
|
||||
return null;
|
||||
|
@ -879,4 +708,106 @@ public class SyncRegisterDataAccess {
|
|||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public class GetRegisterGroupDataQuery extends RegistersServiceQuery<IRegisterGroupDMData, IRegisterGroupDMContext> {
|
||||
|
||||
public GetRegisterGroupDataQuery(IRegisterGroupDMContext dmc) {
|
||||
super(dmc);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doExecute(IRegisters service, final DataRequestMonitor<IRegisterGroupDMData> rm) {
|
||||
service.getRegisterGroupData(fDmc, rm);
|
||||
}
|
||||
}
|
||||
|
||||
public IRegisterGroupDMData getRegisterGroupDMData(Object element) {
|
||||
IRegisterGroupDMContext dmc = null;
|
||||
if (element instanceof IDMVMContext) {
|
||||
dmc = DMContexts.getAncestorOfType(
|
||||
((IDMVMContext) element).getDMContext(),
|
||||
IRegisterGroupDMContext.class);
|
||||
}
|
||||
|
||||
DsfSession session = DsfSession.getSession(dmc.getSessionId());
|
||||
|
||||
if (dmc != null && session != null) {
|
||||
GetRegisterGroupDataQuery query = new GetRegisterGroupDataQuery(dmc);
|
||||
session.getExecutor().execute(query);
|
||||
|
||||
try {
|
||||
return query.get();
|
||||
} catch (InterruptedException e) {
|
||||
} catch (ExecutionException e) {
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
public class GetRegisterDataQuery extends RegistersServiceQuery<IRegisterDMData, IRegisterDMContext> {
|
||||
|
||||
public GetRegisterDataQuery(IRegisterDMContext dmc) {
|
||||
super(dmc);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doExecute(IRegisters service, final DataRequestMonitor<IRegisterDMData> rm) {
|
||||
service.getRegisterData(fDmc, rm);
|
||||
}
|
||||
}
|
||||
|
||||
public IRegisterDMData getRegisterDMData(Object element) {
|
||||
IRegisterDMContext dmc = null;
|
||||
if (element instanceof IDMVMContext) {
|
||||
dmc = DMContexts.getAncestorOfType( ((IDMVMContext) element).getDMContext(), IRegisterDMContext.class );
|
||||
}
|
||||
DsfSession session = DsfSession.getSession(dmc.getSessionId());
|
||||
|
||||
if (dmc != null && session != null) {
|
||||
GetRegisterDataQuery query = new GetRegisterDataQuery(dmc);
|
||||
session.getExecutor().execute(query);
|
||||
|
||||
try {
|
||||
return query.get();
|
||||
} catch (InterruptedException e) {
|
||||
} catch (ExecutionException e) {
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public class GetBitFieldQuery extends RegistersServiceQuery<IBitFieldDMData, IBitFieldDMContext> {
|
||||
|
||||
public GetBitFieldQuery(IBitFieldDMContext dmc) {
|
||||
super(dmc);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doExecute(IRegisters service, final DataRequestMonitor<IBitFieldDMData> rm) {
|
||||
service.getBitFieldData(fDmc, rm);
|
||||
}
|
||||
}
|
||||
|
||||
public IBitFieldDMData getBitFieldDMData(Object element) {
|
||||
IBitFieldDMContext dmc = null;
|
||||
if (element instanceof IDMVMContext) {
|
||||
dmc = DMContexts.getAncestorOfType( ((IDMVMContext) element).getDMContext(), IBitFieldDMContext.class );
|
||||
}
|
||||
DsfSession session = DsfSession.getSession(dmc.getSessionId());
|
||||
|
||||
if (dmc != null && session != null) {
|
||||
GetBitFieldQuery query = new GetBitFieldQuery(dmc);
|
||||
session.getExecutor().execute(query);
|
||||
|
||||
try {
|
||||
return query.get();
|
||||
} catch (InterruptedException e) {
|
||||
} catch (ExecutionException e) {
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -32,7 +32,6 @@ public interface IRegisters extends IFormattedValues {
|
|||
|
||||
/** Register group context */
|
||||
public interface IRegisterGroupDMContext extends IFormattedDataDMContext {
|
||||
public String getName();
|
||||
}
|
||||
|
||||
/** Event indicating values for the group have changed. */
|
||||
|
@ -52,7 +51,6 @@ public interface IRegisters extends IFormattedValues {
|
|||
|
||||
/** Register context */
|
||||
public interface IRegisterDMContext extends IFormattedDataDMContext {
|
||||
public String getName();
|
||||
}
|
||||
|
||||
/** Event indicating register value changed. */
|
||||
|
@ -73,7 +71,6 @@ public interface IRegisters extends IFormattedValues {
|
|||
|
||||
/** Bit field context */
|
||||
public interface IBitFieldDMContext extends IFormattedDataDMContext {
|
||||
public String getName();
|
||||
}
|
||||
|
||||
/** Event indicating register value changed. */
|
||||
|
|
|
@ -9,14 +9,19 @@ import java.util.List;
|
|||
import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants;
|
||||
import org.eclipse.core.runtime.IStatus;
|
||||
import org.eclipse.core.runtime.Status;
|
||||
import org.eclipse.dd.dsf.concurrent.CountingRequestMonitor;
|
||||
import org.eclipse.dd.dsf.concurrent.DataRequestMonitor;
|
||||
import org.eclipse.dd.dsf.concurrent.ImmediateExecutor;
|
||||
import org.eclipse.dd.dsf.concurrent.Query;
|
||||
import org.eclipse.dd.dsf.concurrent.RequestMonitor;
|
||||
import org.eclipse.dd.dsf.debug.service.IFormattedValues;
|
||||
import org.eclipse.dd.dsf.debug.service.IRegisters;
|
||||
import org.eclipse.dd.dsf.debug.service.IFormattedValues.FormattedValueDMContext;
|
||||
import org.eclipse.dd.dsf.debug.service.IFormattedValues.FormattedValueDMData;
|
||||
import org.eclipse.dd.dsf.debug.service.IRegisters.IRegisterDMContext;
|
||||
import org.eclipse.dd.dsf.debug.service.IRegisters.IRegisterDMData;
|
||||
import org.eclipse.dd.dsf.debug.service.IRegisters.IRegisterGroupDMContext;
|
||||
import org.eclipse.dd.dsf.debug.service.IRegisters.IRegisterGroupDMData;
|
||||
import org.eclipse.dd.dsf.debug.service.IStack.IFrameDMContext;
|
||||
import org.eclipse.dd.dsf.service.DsfServicesTracker;
|
||||
import org.eclipse.dd.dsf.service.DsfSession;
|
||||
|
@ -189,9 +194,19 @@ public class MIRegistersTest extends BaseTestCase {
|
|||
public void getRegisterGroups() throws Throwable {
|
||||
final IRegisterGroupDMContext regGroupsDMC = getRegisterGroup();
|
||||
|
||||
Query<IRegisterGroupDMData> query = new Query<IRegisterGroupDMData>() {
|
||||
@Override
|
||||
protected void execute(DataRequestMonitor<IRegisterGroupDMData> rm) {
|
||||
fRegService.getRegisterGroupData(regGroupsDMC, rm);
|
||||
}
|
||||
};
|
||||
fSession.getExecutor().execute(query);
|
||||
|
||||
IRegisterGroupDMData data = query.get();
|
||||
|
||||
assertTrue("The name of the main group should be: General Registers instead of: " +
|
||||
regGroupsDMC.getName(),
|
||||
regGroupsDMC.getName().equals("General Registers"));
|
||||
data.getName(),
|
||||
data.getName().equals("General Registers"));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -211,8 +226,36 @@ public class MIRegistersTest extends BaseTestCase {
|
|||
IFrameDMContext frameDmc = SyncUtil.SyncGetStackFrame(execDmc, 0);
|
||||
final IRegisterDMContext[] regDMCs = getRegisters(frameDmc);
|
||||
List<String> regNames = Arrays.asList("eax","ecx","edx","ebx","esp","ebp","esi","edi","eip","eflags","cs","ss","ds","es","fs","gs","st0","st1","st2","st3","st4","st5","st6","st7","fctrl","fstat","ftag","fiseg","fioff","foseg","fooff","fop","xmm0","xmm1","xmm2","xmm3","xmm4","xmm5","xmm6","xmm7","mxcsr","orig_eax","mm0","mm1","mm2","mm3","mm4","mm5","mm6","mm7");
|
||||
for(IRegisterDMContext reg: regDMCs){
|
||||
String regName = reg.getName();
|
||||
|
||||
Query<IRegisterDMData[]> query = new Query<IRegisterDMData[]>() {
|
||||
@Override
|
||||
protected void execute(DataRequestMonitor<IRegisterDMData[]> rm) {
|
||||
final IRegisterDMData[] datas = new IRegisterDMData[regDMCs.length];
|
||||
rm.setData(datas);
|
||||
final CountingRequestMonitor countingRm = new CountingRequestMonitor(ImmediateExecutor.getInstance(), rm);
|
||||
countingRm.setDoneCount(regDMCs.length);
|
||||
for (int i = 0; i < regDMCs.length; i++) {
|
||||
final int index = i;
|
||||
fRegService.getRegisterData(
|
||||
regDMCs[index],
|
||||
new DataRequestMonitor<IRegisterDMData>(ImmediateExecutor.getInstance(), countingRm) {
|
||||
@Override
|
||||
protected void handleSuccess() {
|
||||
datas[index] = getData();
|
||||
countingRm.done();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
fSession.getExecutor().execute(query);
|
||||
|
||||
IRegisterDMData[] datas = query.get();
|
||||
|
||||
for(IRegisterDMData data: datas){
|
||||
String regName = data.getName();
|
||||
Assert.assertFalse("GDB does not support register name: " + regName, !regNames.contains(regName));
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue