1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-03 07:05:24 +02:00

Bugzilla 225606

This commit is contained in:
Randy Rohrbach 2008-04-05 02:14:07 +00:00
parent 8049a7bb12
commit d25c62e763
2 changed files with 93 additions and 29 deletions

View file

@ -107,27 +107,6 @@ public interface IRegisters extends IFormattedValues {
String getLongName();
}
/**
* Retrieves register group data for given context.
* @param dmc Context to retrieve data for.
* @param rm Request completion monitor.
*/
void getRegisterGroupData(IRegisterGroupDMContext dmc, DataRequestMonitor<IRegisterGroupDMData> rm);
/**
* Retrieves register data for given context.
* @param dmc Context to retrieve data for.
* @param rm Request completion monitor.
*/
void getRegisterData(IRegisterDMContext dmc , DataRequestMonitor<IRegisterDMData> rm);
/**
* Retrieves bit field data for given context.
* @param dmc Context to retrieve data for.
* @param rm Request completion monitor.
*/
void getBitFieldData(IBitFieldDMContext dmc , DataRequestMonitor<IBitFieldDMData> rm);
/**
* Retrieves the list of register groups.
* @param ctx Context for the returned data.
@ -151,6 +130,56 @@ public interface IRegisters extends IFormattedValues {
*/
void getBitFields(IDMContext ctx, DataRequestMonitor<IBitFieldDMContext[]> rm);
/**
* Retrieves a Register Group context. The given context could include a register
* group and an execution context or just an execution context.
* @param ctx Context for the returned data.
* @param name Name of group being requested
* @param rm Request completion monitor.
*/
void findRegisterGroup(IDMContext ctx, String name, DataRequestMonitor<IRegisterGroupDMContext> rm);
/**
* Retrieves a Register context. The given context could include a register group and an execution
* context or just an execution context.
* @param ctx Context for the returned data.
* @param name Name of register being requested
* @param rm Request completion monitor.
*/
void findRegister(IDMContext ctx, String name, DataRequestMonitor<IRegisterDMContext> rm);
/**
* Retrieves bit field context. The given context could include a register and an execution
* context or just an execution context.
* @param ctx Context for the returned data.
* @param name Name of bit field being requested
* @param rm Request completion monitor.
*/
void findBitField(IDMContext ctx, String name, DataRequestMonitor<IBitFieldDMContext> rm);
/**
* Retrieves register group data for given context.
* @param dmc Context to retrieve data for.
* @param rm Request completion monitor.
*/
void getRegisterGroupData(IRegisterGroupDMContext dmc, DataRequestMonitor<IRegisterGroupDMData> rm);
/**
* Retrieves register data for given context.
* @param dmc Context to retrieve data for.
* @param rm Request completion monitor.
*/
void getRegisterData(IRegisterDMContext dmc , DataRequestMonitor<IRegisterDMData> rm);
/**
* Retrieves bit field data for given context.
* @param dmc Context to retrieve data for.
* @param rm Request completion monitor.
*/
void getBitFieldData(IBitFieldDMContext dmc , DataRequestMonitor<IBitFieldDMData> rm);
/**
* Writes a register value for a given register to the target
* @param regCtx Context containing the register.

View file

@ -40,7 +40,6 @@ import org.eclipse.dd.mi.service.command.output.MIInfo;
import org.eclipse.dd.mi.service.command.output.MIRegisterValue;
import org.osgi.framework.BundleContext;
/**
*
* <p>
@ -175,7 +174,7 @@ public class MIRegisters extends AbstractDsfService implements IRegisters {
fRegisterNameCache = new CommandCache(getSession(), getServicesTracker().getService(ICommandControl.class));
/*
* Signup so we see events. We use these events to decide how to manage
* Sign up so we see events. We use these events to decide how to manage
* any local caches we are providing as well as the lower level register
* cache we create to get/set registers on the target.
*/
@ -203,9 +202,9 @@ public class MIRegisters extends AbstractDsfService implements IRegisters {
public void getModelData(IDMContext dmc, DataRequestMonitor<?> rm) {
/*
* This is the method which is called when actual results need to be returned. We
* can be called either with a service DMC for which we return oureslves or we can
* can be called either with a service DMC for which we return ourselves or we can
* be called with the DMC's we have handed out. If the latter is the case then we
* datamine by talking to the Debug Engine.
* data mine by talking to the Debug Engine.
*/
if (dmc instanceof MIRegisterGroupDMC) {
@ -396,14 +395,16 @@ public class MIRegisters extends AbstractDsfService implements IRegisters {
* need to be flushed. These handlers maintain the state of the caches.
*/
@DsfServiceEventHandler public void eventDispatched(IRunControl.IResumedDMEvent e) {
@DsfServiceEventHandler
public void eventDispatched(IRunControl.IResumedDMEvent e) {
fRegisterValueCache.setContextAvailable(e.getDMContext(), false);
if (e.getReason() != StateChangeReason.STEP) {
fRegisterValueCache.reset();
}
}
@DsfServiceEventHandler public void eventDispatched(
@DsfServiceEventHandler
public void eventDispatched(
IRunControl.ISuspendedDMEvent e) {
fRegisterValueCache.setContextAvailable(e.getDMContext(), true);
fRegisterValueCache.reset();
@ -414,6 +415,10 @@ public class MIRegisters extends AbstractDsfService implements IRegisters {
fRegisterValueCache.reset();
}
private void generateRegisterChangedEvent(IRegisterDMContext dmc ) {
getSession().dispatchEvent(new RegisterChangedDMEvent(dmc), getProperties());
}
/*
* These are the public interfaces for this service.
*
@ -562,12 +567,20 @@ public class MIRegisters extends AbstractDsfService implements IRegisters {
rm.done();
}
/*
* (non-Javadoc)
* @see org.eclipse.dd.dsf.debug.service.IFormattedValues#getAvailableFormats(org.eclipse.dd.dsf.debug.service.IFormattedValues.IFormattedDataDMContext, org.eclipse.dd.dsf.concurrent.DataRequestMonitor)
*/
public void getAvailableFormats(IFormattedDataDMContext dmc, DataRequestMonitor<String[]> rm) {
rm.setData(new String[] { HEX_FORMAT, DECIMAL_FORMAT, OCTAL_FORMAT, BINARY_FORMAT, NATURAL_FORMAT });
rm.done();
}
/*
* (non-Javadoc)
* @see org.eclipse.dd.dsf.debug.service.IFormattedValues#getFormattedValueContext(org.eclipse.dd.dsf.debug.service.IFormattedValues.IFormattedDataDMContext, java.lang.String)
*/
public FormattedValueDMContext getFormattedValueContext(IFormattedDataDMContext dmc, String formatId) {
if ( dmc instanceof MIRegisterDMC ) {
MIRegisterDMC regDmc = (MIRegisterDMC) dmc;
@ -575,9 +588,31 @@ public class MIRegisters extends AbstractDsfService implements IRegisters {
}
return null;
}
/*
* (non-Javadoc)
* @see org.eclipse.dd.dsf.debug.service.IRegisters#findRegisterGroup(org.eclipse.dd.dsf.datamodel.IDMContext, java.lang.String, org.eclipse.dd.dsf.concurrent.DataRequestMonitor)
*/
public void findRegisterGroup(IDMContext ctx, String name, DataRequestMonitor<IRegisterGroupDMContext> rm) {
rm.setStatus(new Status(IStatus.ERROR, MIPlugin.PLUGIN_ID, NOT_SUPPORTED, "Finding a Register Group context not supported", null)); //$NON-NLS-1$
rm.done();
}
private void generateRegisterChangedEvent(IRegisterDMContext dmc ) {
getSession().dispatchEvent(new RegisterChangedDMEvent(dmc), getProperties());
/*
* (non-Javadoc)
* @see org.eclipse.dd.dsf.debug.service.IRegisters#findRegister(org.eclipse.dd.dsf.datamodel.IDMContext, java.lang.String, org.eclipse.dd.dsf.concurrent.DataRequestMonitor)
*/
public void findRegister(IDMContext ctx, String name, DataRequestMonitor<IRegisterDMContext> rm) {
rm.setStatus(new Status(IStatus.ERROR, MIPlugin.PLUGIN_ID, NOT_SUPPORTED, "Finding a Register context not supported", null)); //$NON-NLS-1$
rm.done();
}
/*
* (non-Javadoc)
* @see org.eclipse.dd.dsf.debug.service.IRegisters#findBitField(org.eclipse.dd.dsf.datamodel.IDMContext, java.lang.String, org.eclipse.dd.dsf.concurrent.DataRequestMonitor)
*/
public void findBitField(IDMContext ctx, String name, DataRequestMonitor<IBitFieldDMContext> rm) {
rm.setStatus(new Status(IStatus.ERROR, MIPlugin.PLUGIN_ID, NOT_SUPPORTED, "Finding a Register Group context not supported", null)); //$NON-NLS-1$
rm.done();
}
}