mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-06-07 17:56:01 +02:00
Bug 338769: Allow for different versions of the FinalLaunchSequence
This commit is contained in:
parent
eb02ad7b69
commit
03252ec0f9
14 changed files with 394 additions and 70 deletions
|
@ -20,10 +20,10 @@ import org.eclipse.cdt.debug.core.CDebugUtils;
|
||||||
import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants;
|
import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants;
|
||||||
import org.eclipse.cdt.debug.internal.core.sourcelookup.CSourceLookupDirector;
|
import org.eclipse.cdt.debug.internal.core.sourcelookup.CSourceLookupDirector;
|
||||||
import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
|
import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
|
||||||
import org.eclipse.cdt.dsf.concurrent.DsfExecutor;
|
|
||||||
import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
|
import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
|
||||||
import org.eclipse.cdt.dsf.concurrent.ReflectionSequence;
|
import org.eclipse.cdt.dsf.concurrent.ReflectionSequence;
|
||||||
import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
|
import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
|
||||||
|
import org.eclipse.cdt.dsf.concurrent.RequestMonitorWithProgress;
|
||||||
import org.eclipse.cdt.dsf.datamodel.DMContexts;
|
import org.eclipse.cdt.dsf.datamodel.DMContexts;
|
||||||
import org.eclipse.cdt.dsf.datamodel.DataModelInitializedEvent;
|
import org.eclipse.cdt.dsf.datamodel.DataModelInitializedEvent;
|
||||||
import org.eclipse.cdt.dsf.datamodel.IDMContext;
|
import org.eclipse.cdt.dsf.datamodel.IDMContext;
|
||||||
|
@ -42,6 +42,7 @@ import org.eclipse.cdt.dsf.mi.service.IMIProcesses;
|
||||||
import org.eclipse.cdt.dsf.mi.service.command.CommandFactory;
|
import org.eclipse.cdt.dsf.mi.service.command.CommandFactory;
|
||||||
import org.eclipse.cdt.dsf.mi.service.command.output.MIInfo;
|
import org.eclipse.cdt.dsf.mi.service.command.output.MIInfo;
|
||||||
import org.eclipse.cdt.dsf.service.DsfServicesTracker;
|
import org.eclipse.cdt.dsf.service.DsfServicesTracker;
|
||||||
|
import org.eclipse.cdt.dsf.service.DsfSession;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
import org.eclipse.core.runtime.IPath;
|
import org.eclipse.core.runtime.IPath;
|
||||||
import org.eclipse.core.runtime.IProgressMonitor;
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
|
@ -50,14 +51,11 @@ import org.eclipse.core.runtime.Platform;
|
||||||
import org.eclipse.core.runtime.Status;
|
import org.eclipse.core.runtime.Status;
|
||||||
import org.eclipse.core.runtime.jobs.Job;
|
import org.eclipse.core.runtime.jobs.Job;
|
||||||
import org.eclipse.debug.core.DebugPlugin;
|
import org.eclipse.debug.core.DebugPlugin;
|
||||||
|
import org.eclipse.debug.core.ILaunch;
|
||||||
import org.eclipse.debug.core.IStatusHandler;
|
import org.eclipse.debug.core.IStatusHandler;
|
||||||
|
|
||||||
public class FinalLaunchSequence extends ReflectionSequence {
|
public class FinalLaunchSequence extends ReflectionSequence {
|
||||||
|
|
||||||
private GdbLaunch fLaunch;
|
|
||||||
private SessionType fSessionType;
|
|
||||||
private boolean fAttach;
|
|
||||||
|
|
||||||
// The launchConfiguration attributes
|
// The launchConfiguration attributes
|
||||||
private Map<String, Object> fAttributes;
|
private Map<String, Object> fAttributes;
|
||||||
|
|
||||||
|
@ -67,12 +65,15 @@ public class FinalLaunchSequence extends ReflectionSequence {
|
||||||
private CommandFactory fCommandFactory;
|
private CommandFactory fCommandFactory;
|
||||||
|
|
||||||
private DsfServicesTracker fTracker;
|
private DsfServicesTracker fTracker;
|
||||||
|
private DsfSession fSession;
|
||||||
|
|
||||||
public FinalLaunchSequence(DsfExecutor executor, GdbLaunch launch, SessionType sessionType, boolean attach, IProgressMonitor pm) {
|
/**
|
||||||
super(executor, pm, LaunchMessages.getString("FinalLaunchSequence.0"), LaunchMessages.getString("FinalLaunchSequence.1")); //$NON-NLS-1$ //$NON-NLS-2$
|
* @since 4.0
|
||||||
fLaunch = launch;
|
*/
|
||||||
fSessionType = sessionType;
|
public FinalLaunchSequence(DsfSession session, Map<String, Object> attributes, RequestMonitorWithProgress rm) {
|
||||||
fAttach = attach;
|
super(session.getExecutor(), rm, LaunchMessages.getString("FinalLaunchSequence.0"), LaunchMessages.getString("FinalLaunchSequence.1")); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
|
fSession = session;
|
||||||
|
fAttributes = attributes;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -106,14 +107,13 @@ public class FinalLaunchSequence extends ReflectionSequence {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialize the members of the {@link FinalLaunchSequence} class.
|
* Initialize the members of the FinalLaunchSequence class.
|
||||||
* This step is mandatory for the rest fo the sequence to complete.
|
* This step is mandatory for the rest of the sequence to complete.
|
||||||
* @since 4.0
|
* @since 4.0
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
@Execute
|
@Execute
|
||||||
public void stepInitializeFinalLaunchSequence(RequestMonitor requestMonitor) {
|
public void stepInitializeFinalLaunchSequence(RequestMonitor requestMonitor) {
|
||||||
fTracker = new DsfServicesTracker(GdbPlugin.getBundleContext(), fLaunch.getSession().getId());
|
fTracker = new DsfServicesTracker(GdbPlugin.getBundleContext(), fSession.getId());
|
||||||
fGDBBackend = fTracker.getService(IGDBBackend.class);
|
fGDBBackend = fTracker.getService(IGDBBackend.class);
|
||||||
if (fGDBBackend == null) {
|
if (fGDBBackend == null) {
|
||||||
requestMonitor.setStatus(new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID, -1, "Cannot obtain GDBBackend service", null)); //$NON-NLS-1$
|
requestMonitor.setStatus(new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID, -1, "Cannot obtain GDBBackend service", null)); //$NON-NLS-1$
|
||||||
|
@ -137,14 +137,6 @@ public class FinalLaunchSequence extends ReflectionSequence {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
|
||||||
fAttributes = fLaunch.getLaunchConfiguration().getAttributes();
|
|
||||||
} catch (CoreException e) {
|
|
||||||
requestMonitor.setStatus(new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID, -1, "Cannot obtain launch configuration attributes", null)); //$NON-NLS-1$
|
|
||||||
requestMonitor.done();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
requestMonitor.done();
|
requestMonitor.done();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -190,7 +182,7 @@ public class FinalLaunchSequence extends ReflectionSequence {
|
||||||
*/
|
*/
|
||||||
@Execute
|
@Execute
|
||||||
public void stepSetBreakpointPending(final RequestMonitor requestMonitor) {
|
public void stepSetBreakpointPending(final RequestMonitor requestMonitor) {
|
||||||
if (fSessionType != SessionType.CORE) {
|
if (fGDBBackend.getSessionType() != SessionType.CORE) {
|
||||||
fCommandControl.queueCommand(
|
fCommandControl.queueCommand(
|
||||||
fCommandFactory.createMIGDBSetBreakpointPending(fCommandControl.getContext(), true),
|
fCommandFactory.createMIGDBSetBreakpointPending(fCommandControl.getContext(), true),
|
||||||
new DataRequestMonitor<MIInfo>(getExecutor(), requestMonitor));
|
new DataRequestMonitor<MIInfo>(getExecutor(), requestMonitor));
|
||||||
|
@ -353,7 +345,8 @@ public class FinalLaunchSequence extends ReflectionSequence {
|
||||||
@Execute
|
@Execute
|
||||||
public void stepSetSourceLookupPath(RequestMonitor requestMonitor) {
|
public void stepSetSourceLookupPath(RequestMonitor requestMonitor) {
|
||||||
CSourceLookup sourceLookup = fTracker.getService(CSourceLookup.class);
|
CSourceLookup sourceLookup = fTracker.getService(CSourceLookup.class);
|
||||||
CSourceLookupDirector locator = (CSourceLookupDirector)fLaunch.getSourceLocator();
|
ILaunch launch = (ILaunch)fSession.getModelAdapter(ILaunch.class);
|
||||||
|
CSourceLookupDirector locator = (CSourceLookupDirector)launch.getSourceLocator();
|
||||||
ISourceLookupDMContext sourceLookupDmc = (ISourceLookupDMContext)fCommandControl.getContext();
|
ISourceLookupDMContext sourceLookupDmc = (ISourceLookupDMContext)fCommandControl.getContext();
|
||||||
|
|
||||||
sourceLookup.setSourceLookupPath(sourceLookupDmc, locator.getSourceContainers(), requestMonitor);
|
sourceLookup.setSourceLookupPath(sourceLookupDmc, locator.getSourceContainers(), requestMonitor);
|
||||||
|
@ -407,7 +400,7 @@ public class FinalLaunchSequence extends ReflectionSequence {
|
||||||
*/
|
*/
|
||||||
@Execute
|
@Execute
|
||||||
public void stepSpecifyCoreFile(final RequestMonitor requestMonitor) {
|
public void stepSpecifyCoreFile(final RequestMonitor requestMonitor) {
|
||||||
if (fSessionType == SessionType.CORE) {
|
if (fGDBBackend.getSessionType() == SessionType.CORE) {
|
||||||
String coreFile = CDebugUtils.getAttribute(
|
String coreFile = CDebugUtils.getAttribute(
|
||||||
fAttributes,
|
fAttributes,
|
||||||
ICDTLaunchConfigurationConstants.ATTR_COREFILE_PATH, ""); //$NON-NLS-1$
|
ICDTLaunchConfigurationConstants.ATTR_COREFILE_PATH, ""); //$NON-NLS-1$
|
||||||
|
@ -478,7 +471,7 @@ public class FinalLaunchSequence extends ReflectionSequence {
|
||||||
*/
|
*/
|
||||||
@Execute
|
@Execute
|
||||||
public void stepRemoteConnection(final RequestMonitor rm) {
|
public void stepRemoteConnection(final RequestMonitor rm) {
|
||||||
if (fSessionType == SessionType.REMOTE && fAttach) {
|
if (fGDBBackend.getSessionType() == SessionType.REMOTE && fGDBBackend.getIsAttachSession()) {
|
||||||
boolean isTcpConnection = CDebugUtils.getAttribute(
|
boolean isTcpConnection = CDebugUtils.getAttribute(
|
||||||
fAttributes,
|
fAttributes,
|
||||||
IGDBLaunchConfigurationConstants.ATTR_REMOTE_TCP,
|
IGDBLaunchConfigurationConstants.ATTR_REMOTE_TCP,
|
||||||
|
@ -518,7 +511,7 @@ public class FinalLaunchSequence extends ReflectionSequence {
|
||||||
*/
|
*/
|
||||||
@Execute
|
@Execute
|
||||||
public void stepNewProcess(final RequestMonitor rm) {
|
public void stepNewProcess(final RequestMonitor rm) {
|
||||||
if (!fAttach) {
|
if (!fGDBBackend.getIsAttachSession()) {
|
||||||
|
|
||||||
boolean noBinarySpecified = CDebugUtils.getAttribute(
|
boolean noBinarySpecified = CDebugUtils.getAttribute(
|
||||||
fAttributes,
|
fAttributes,
|
||||||
|
@ -548,7 +541,7 @@ public class FinalLaunchSequence extends ReflectionSequence {
|
||||||
*/
|
*/
|
||||||
@Execute
|
@Execute
|
||||||
public void stepAttachToProcess(final RequestMonitor requestMonitor) {
|
public void stepAttachToProcess(final RequestMonitor requestMonitor) {
|
||||||
if (fAttach && fSessionType != SessionType.REMOTE) {
|
if (fGDBBackend.getIsAttachSession() && fGDBBackend.getSessionType() != SessionType.REMOTE) {
|
||||||
// Is the process id already stored in the launch?
|
// Is the process id already stored in the launch?
|
||||||
int pid = CDebugUtils.getAttribute(
|
int pid = CDebugUtils.getAttribute(
|
||||||
fAttributes,
|
fAttributes,
|
||||||
|
@ -559,7 +552,7 @@ public class FinalLaunchSequence extends ReflectionSequence {
|
||||||
fProcService.createProcessContext(fCommandControl.getContext(), Integer.toString(pid)),
|
fProcService.createProcessContext(fCommandControl.getContext(), Integer.toString(pid)),
|
||||||
new DataRequestMonitor<IDMContext>(getExecutor(), requestMonitor));
|
new DataRequestMonitor<IDMContext>(getExecutor(), requestMonitor));
|
||||||
} else {
|
} else {
|
||||||
IConnect connectCommand = (IConnect)fLaunch.getSession().getModelAdapter(IConnect.class);
|
IConnect connectCommand = (IConnect)fSession.getModelAdapter(IConnect.class);
|
||||||
if (connectCommand != null) {
|
if (connectCommand != null) {
|
||||||
connectCommand.connect(requestMonitor);
|
connectCommand.connect(requestMonitor);
|
||||||
} else {
|
} else {
|
||||||
|
@ -577,7 +570,7 @@ public class FinalLaunchSequence extends ReflectionSequence {
|
||||||
*/
|
*/
|
||||||
@Execute
|
@Execute
|
||||||
public void stepDataModelInitializationComplete(final RequestMonitor requestMonitor) {
|
public void stepDataModelInitializationComplete(final RequestMonitor requestMonitor) {
|
||||||
fLaunch.getSession().dispatchEvent(new DataModelInitializedEvent(fCommandControl.getContext()),
|
fSession.dispatchEvent(new DataModelInitializedEvent(fCommandControl.getContext()),
|
||||||
fCommandControl.getProperties());
|
fCommandControl.getProperties());
|
||||||
requestMonitor.done();
|
requestMonitor.done();
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,9 +19,9 @@ import java.util.concurrent.ExecutionException;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.model.ICProject;
|
import org.eclipse.cdt.core.model.ICProject;
|
||||||
import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
|
import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
|
||||||
import org.eclipse.cdt.dsf.concurrent.DsfExecutor;
|
import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
|
||||||
import org.eclipse.cdt.dsf.concurrent.Query;
|
import org.eclipse.cdt.dsf.concurrent.Query;
|
||||||
import org.eclipse.cdt.dsf.concurrent.Sequence;
|
import org.eclipse.cdt.dsf.concurrent.RequestMonitorWithProgress;
|
||||||
import org.eclipse.cdt.dsf.concurrent.ThreadSafe;
|
import org.eclipse.cdt.dsf.concurrent.ThreadSafe;
|
||||||
import org.eclipse.cdt.dsf.debug.service.IDsfDebugServicesFactory;
|
import org.eclipse.cdt.dsf.debug.service.IDsfDebugServicesFactory;
|
||||||
import org.eclipse.cdt.dsf.debug.sourcelookup.DsfSourceLookupDirector;
|
import org.eclipse.cdt.dsf.debug.sourcelookup.DsfSourceLookupDirector;
|
||||||
|
@ -29,7 +29,9 @@ import org.eclipse.cdt.dsf.gdb.internal.GdbPlugin;
|
||||||
import org.eclipse.cdt.dsf.gdb.service.GdbDebugServicesFactory;
|
import org.eclipse.cdt.dsf.gdb.service.GdbDebugServicesFactory;
|
||||||
import org.eclipse.cdt.dsf.gdb.service.GdbDebugServicesFactoryNS;
|
import org.eclipse.cdt.dsf.gdb.service.GdbDebugServicesFactoryNS;
|
||||||
import org.eclipse.cdt.dsf.gdb.service.SessionType;
|
import org.eclipse.cdt.dsf.gdb.service.SessionType;
|
||||||
|
import org.eclipse.cdt.dsf.gdb.service.command.IGDBControl;
|
||||||
import org.eclipse.cdt.dsf.gdb.service.macos.MacOSGdbDebugServicesFactory;
|
import org.eclipse.cdt.dsf.gdb.service.macos.MacOSGdbDebugServicesFactory;
|
||||||
|
import org.eclipse.cdt.dsf.service.DsfServicesTracker;
|
||||||
import org.eclipse.cdt.dsf.service.DsfSession;
|
import org.eclipse.cdt.dsf.service.DsfSession;
|
||||||
import org.eclipse.cdt.launch.AbstractCLaunchDelegate2;
|
import org.eclipse.cdt.launch.AbstractCLaunchDelegate2;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
|
@ -181,14 +183,32 @@ public class GdbLaunchDelegate extends AbstractCLaunchDelegate2
|
||||||
monitor.worked(1);
|
monitor.worked(1);
|
||||||
|
|
||||||
// Create and invoke the final launch sequence to setup GDB
|
// Create and invoke the final launch sequence to setup GDB
|
||||||
IProgressMonitor subMon2 = new SubProgressMonitor(monitor, 4, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK);
|
final IProgressMonitor subMon2 = new SubProgressMonitor(monitor, 4, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK);
|
||||||
final Sequence finalLaunchSequence =
|
|
||||||
getFinalLaunchSequence(launch.getSession().getExecutor(), launch, sessionType, attach, subMon2);
|
|
||||||
|
|
||||||
launch.getSession().getExecutor().execute(finalLaunchSequence);
|
Query<Object> completeLaunchQuery = new Query<Object>() {
|
||||||
|
@Override
|
||||||
|
protected void execute(final DataRequestMonitor<Object> rm) {
|
||||||
|
DsfServicesTracker tracker = new DsfServicesTracker(GdbPlugin.getBundleContext(), launch.getSession().getId());
|
||||||
|
IGDBControl control = tracker.getService(IGDBControl.class);
|
||||||
|
tracker.dispose();
|
||||||
|
control.completeInitialization(new RequestMonitorWithProgress(ImmediateExecutor.getInstance(), subMon2) {
|
||||||
|
@Override
|
||||||
|
protected void handleCompleted() {
|
||||||
|
if (isCanceled()) {
|
||||||
|
rm.cancel();
|
||||||
|
} else {
|
||||||
|
rm.setStatus(getStatus());
|
||||||
|
}
|
||||||
|
rm.done();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
launch.getSession().getExecutor().execute(completeLaunchQuery);
|
||||||
boolean succeed = false;
|
boolean succeed = false;
|
||||||
try {
|
try {
|
||||||
finalLaunchSequence.get();
|
completeLaunchQuery.get();
|
||||||
succeed = true;
|
succeed = true;
|
||||||
} catch (InterruptedException e1) {
|
} catch (InterruptedException e1) {
|
||||||
throw new DebugException(new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID, DebugException.INTERNAL_ERROR, "Interrupted Exception in dispatch thread", e1)); //$NON-NLS-1$
|
throw new DebugException(new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID, DebugException.INTERNAL_ERROR, "Interrupted Exception in dispatch thread", e1)); //$NON-NLS-1$
|
||||||
|
@ -250,14 +270,6 @@ public class GdbLaunchDelegate extends AbstractCLaunchDelegate2
|
||||||
return LaunchUtils.getGDBVersion(config);
|
return LaunchUtils.getGDBVersion(config);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* This method can be overridden by subclasses to allow to change the final launch sequence without
|
|
||||||
* having to change the entire GdbLaunchDelegate
|
|
||||||
*/
|
|
||||||
protected Sequence getFinalLaunchSequence(DsfExecutor executor, GdbLaunch launch, SessionType type, boolean attach, IProgressMonitor pm) {
|
|
||||||
return new FinalLaunchSequence(executor, launch, type, attach, pm);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean preLaunchCheck(ILaunchConfiguration config, String mode, IProgressMonitor monitor) throws CoreException {
|
public boolean preLaunchCheck(ILaunchConfiguration config, String mode, IProgressMonitor monitor) throws CoreException {
|
||||||
// no pre launch check for core file
|
// no pre launch check for core file
|
||||||
|
|
|
@ -45,11 +45,14 @@ import org.eclipse.debug.core.ILaunchConfiguration;
|
||||||
|
|
||||||
public class GdbDebugServicesFactory extends AbstractDsfDebugServicesFactory {
|
public class GdbDebugServicesFactory extends AbstractDsfDebugServicesFactory {
|
||||||
|
|
||||||
private static final String GDB_6_8_VERSION = "6.8"; //$NON-NLS-1$
|
/** @since 4.0 */
|
||||||
// This should eventually be "7.0" once GDB 7.0 is released
|
public static final String GDB_6_8_VERSION = "6.8"; //$NON-NLS-1$
|
||||||
private static final String GDB_7_0_VERSION = "6.8.50.20090218"; //$NON-NLS-1$
|
/** @since 4.0 */
|
||||||
private static final String GDB_7_1_VERSION = "7.1"; //$NON-NLS-1$
|
public static final String GDB_7_0_VERSION = "7.0"; //$NON-NLS-1$
|
||||||
private static final String GDB_7_2_VERSION = "7.2"; //$NON-NLS-1$
|
/** @since 4.0 */
|
||||||
|
public static final String GDB_7_1_VERSION = "7.1"; //$NON-NLS-1$
|
||||||
|
/** @since 4.0 */
|
||||||
|
public static final String GDB_7_2_VERSION = "7.2"; //$NON-NLS-1$
|
||||||
|
|
||||||
private final String fVersion;
|
private final String fVersion;
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,7 @@ import java.io.OutputStream;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Hashtable;
|
import java.util.Hashtable;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
import java.util.concurrent.Future;
|
import java.util.concurrent.Future;
|
||||||
|
@ -28,12 +29,15 @@ import org.eclipse.cdt.dsf.concurrent.CountingRequestMonitor;
|
||||||
import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
|
import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
|
||||||
import org.eclipse.cdt.dsf.concurrent.DsfRunnable;
|
import org.eclipse.cdt.dsf.concurrent.DsfRunnable;
|
||||||
import org.eclipse.cdt.dsf.concurrent.IDsfStatusConstants;
|
import org.eclipse.cdt.dsf.concurrent.IDsfStatusConstants;
|
||||||
|
import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
|
||||||
import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
|
import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
|
||||||
|
import org.eclipse.cdt.dsf.concurrent.RequestMonitorWithProgress;
|
||||||
import org.eclipse.cdt.dsf.concurrent.Sequence;
|
import org.eclipse.cdt.dsf.concurrent.Sequence;
|
||||||
import org.eclipse.cdt.dsf.datamodel.AbstractDMEvent;
|
import org.eclipse.cdt.dsf.datamodel.AbstractDMEvent;
|
||||||
import org.eclipse.cdt.dsf.debug.service.command.ICommandControl;
|
import org.eclipse.cdt.dsf.debug.service.command.ICommandControl;
|
||||||
import org.eclipse.cdt.dsf.debug.service.command.ICommandControlService;
|
import org.eclipse.cdt.dsf.debug.service.command.ICommandControlService;
|
||||||
import org.eclipse.cdt.dsf.gdb.internal.GdbPlugin;
|
import org.eclipse.cdt.dsf.gdb.internal.GdbPlugin;
|
||||||
|
import org.eclipse.cdt.dsf.gdb.launching.FinalLaunchSequence;
|
||||||
import org.eclipse.cdt.dsf.gdb.service.IGDBBackend;
|
import org.eclipse.cdt.dsf.gdb.service.IGDBBackend;
|
||||||
import org.eclipse.cdt.dsf.gdb.service.SessionType;
|
import org.eclipse.cdt.dsf.gdb.service.SessionType;
|
||||||
import org.eclipse.cdt.dsf.mi.service.IMIBackend;
|
import org.eclipse.cdt.dsf.mi.service.IMIBackend;
|
||||||
|
@ -51,8 +55,11 @@ import org.eclipse.cdt.dsf.mi.service.command.output.MIInfo;
|
||||||
import org.eclipse.cdt.dsf.service.DsfServiceEventHandler;
|
import org.eclipse.cdt.dsf.service.DsfServiceEventHandler;
|
||||||
import org.eclipse.cdt.dsf.service.DsfSession;
|
import org.eclipse.cdt.dsf.service.DsfSession;
|
||||||
import org.eclipse.cdt.utils.pty.PTY;
|
import org.eclipse.cdt.utils.pty.PTY;
|
||||||
|
import org.eclipse.core.runtime.CoreException;
|
||||||
import org.eclipse.core.runtime.IStatus;
|
import org.eclipse.core.runtime.IStatus;
|
||||||
|
import org.eclipse.core.runtime.NullProgressMonitor;
|
||||||
import org.eclipse.core.runtime.Status;
|
import org.eclipse.core.runtime.Status;
|
||||||
|
import org.eclipse.debug.core.ILaunch;
|
||||||
import org.eclipse.debug.core.ILaunchConfiguration;
|
import org.eclipse.debug.core.ILaunchConfiguration;
|
||||||
import org.osgi.framework.BundleContext;
|
import org.osgi.framework.BundleContext;
|
||||||
|
|
||||||
|
@ -313,6 +320,48 @@ public class GDBControl extends AbstractMIControl implements IGDBControl {
|
||||||
countingRm.setDoneCount(count);
|
countingRm.setDoneCount(count);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @since 4.0
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public void completeInitialization(final RequestMonitor rm) {
|
||||||
|
// We take the attributes from the launchConfiguration
|
||||||
|
ILaunch launch = (ILaunch)getSession().getModelAdapter(ILaunch.class);
|
||||||
|
Map<String, Object> attributes = null;
|
||||||
|
try {
|
||||||
|
attributes = launch.getLaunchConfiguration().getAttributes();
|
||||||
|
} catch (CoreException e) {}
|
||||||
|
|
||||||
|
// We need a RequestMonitorWithProgress, if we don't have one, we create one.
|
||||||
|
RequestMonitorWithProgress progressRm;
|
||||||
|
if (rm instanceof RequestMonitorWithProgress) {
|
||||||
|
progressRm = (RequestMonitorWithProgress)rm;
|
||||||
|
} else {
|
||||||
|
progressRm = new RequestMonitorWithProgress(getExecutor(), new NullProgressMonitor()) {
|
||||||
|
@Override
|
||||||
|
protected void handleCompleted() {
|
||||||
|
rm.setStatus(getStatus());
|
||||||
|
rm.done();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
ImmediateExecutor.getInstance().execute(getCompleteInitializationSequence(attributes, progressRm));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the sequence that is to be used to complete the initialization of GDB.
|
||||||
|
*
|
||||||
|
* @param rm A RequestMonitorWithProgress that will indicate when the sequence is completed, but that
|
||||||
|
* also contains an IProgressMonitor to be able to cancel the launch. A NullProgressMonitor
|
||||||
|
* can be used if cancellation is not required.
|
||||||
|
*
|
||||||
|
* @since 4.0
|
||||||
|
*/
|
||||||
|
protected Sequence getCompleteInitializationSequence(Map<String, Object> attributes, RequestMonitorWithProgress rm) {
|
||||||
|
return new FinalLaunchSequence(getSession(), attributes, rm);
|
||||||
|
}
|
||||||
|
|
||||||
@DsfServiceEventHandler
|
@DsfServiceEventHandler
|
||||||
public void eventDispatched(ICommandControlShutdownDMEvent e) {
|
public void eventDispatched(ICommandControlShutdownDMEvent e) {
|
||||||
// Handle our "GDB Exited" event and stop processing commands.
|
// Handle our "GDB Exited" event and stop processing commands.
|
||||||
|
|
|
@ -19,6 +19,7 @@ import java.io.OutputStream;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Hashtable;
|
import java.util.Hashtable;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
import java.util.concurrent.Future;
|
import java.util.concurrent.Future;
|
||||||
|
@ -28,12 +29,15 @@ import org.eclipse.cdt.dsf.concurrent.CountingRequestMonitor;
|
||||||
import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
|
import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
|
||||||
import org.eclipse.cdt.dsf.concurrent.DsfRunnable;
|
import org.eclipse.cdt.dsf.concurrent.DsfRunnable;
|
||||||
import org.eclipse.cdt.dsf.concurrent.IDsfStatusConstants;
|
import org.eclipse.cdt.dsf.concurrent.IDsfStatusConstants;
|
||||||
|
import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
|
||||||
import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
|
import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
|
||||||
|
import org.eclipse.cdt.dsf.concurrent.RequestMonitorWithProgress;
|
||||||
import org.eclipse.cdt.dsf.concurrent.Sequence;
|
import org.eclipse.cdt.dsf.concurrent.Sequence;
|
||||||
import org.eclipse.cdt.dsf.datamodel.AbstractDMEvent;
|
import org.eclipse.cdt.dsf.datamodel.AbstractDMEvent;
|
||||||
import org.eclipse.cdt.dsf.debug.service.command.ICommandControl;
|
import org.eclipse.cdt.dsf.debug.service.command.ICommandControl;
|
||||||
import org.eclipse.cdt.dsf.debug.service.command.ICommandControlService;
|
import org.eclipse.cdt.dsf.debug.service.command.ICommandControlService;
|
||||||
import org.eclipse.cdt.dsf.gdb.internal.GdbPlugin;
|
import org.eclipse.cdt.dsf.gdb.internal.GdbPlugin;
|
||||||
|
import org.eclipse.cdt.dsf.gdb.launching.FinalLaunchSequence;
|
||||||
import org.eclipse.cdt.dsf.gdb.service.IGDBBackend;
|
import org.eclipse.cdt.dsf.gdb.service.IGDBBackend;
|
||||||
import org.eclipse.cdt.dsf.gdb.service.IGDBTraceControl.ITraceRecordSelectedChangedDMEvent;
|
import org.eclipse.cdt.dsf.gdb.service.IGDBTraceControl.ITraceRecordSelectedChangedDMEvent;
|
||||||
import org.eclipse.cdt.dsf.gdb.service.SessionType;
|
import org.eclipse.cdt.dsf.gdb.service.SessionType;
|
||||||
|
@ -53,8 +57,11 @@ import org.eclipse.cdt.dsf.mi.service.command.output.MIListFeaturesInfo;
|
||||||
import org.eclipse.cdt.dsf.service.DsfServiceEventHandler;
|
import org.eclipse.cdt.dsf.service.DsfServiceEventHandler;
|
||||||
import org.eclipse.cdt.dsf.service.DsfSession;
|
import org.eclipse.cdt.dsf.service.DsfSession;
|
||||||
import org.eclipse.cdt.utils.pty.PTY;
|
import org.eclipse.cdt.utils.pty.PTY;
|
||||||
|
import org.eclipse.core.runtime.CoreException;
|
||||||
import org.eclipse.core.runtime.IStatus;
|
import org.eclipse.core.runtime.IStatus;
|
||||||
|
import org.eclipse.core.runtime.NullProgressMonitor;
|
||||||
import org.eclipse.core.runtime.Status;
|
import org.eclipse.core.runtime.Status;
|
||||||
|
import org.eclipse.debug.core.ILaunch;
|
||||||
import org.eclipse.debug.core.ILaunchConfiguration;
|
import org.eclipse.debug.core.ILaunchConfiguration;
|
||||||
import org.osgi.framework.BundleContext;
|
import org.osgi.framework.BundleContext;
|
||||||
|
|
||||||
|
@ -321,6 +328,48 @@ public class GDBControl_7_0 extends AbstractMIControl implements IGDBControl {
|
||||||
countingRm.setDoneCount(count);
|
countingRm.setDoneCount(count);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @since 4.0
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
public void completeInitialization(final RequestMonitor rm) {
|
||||||
|
// We take the attributes from the launchConfiguration
|
||||||
|
ILaunch launch = (ILaunch)getSession().getModelAdapter(ILaunch.class);
|
||||||
|
Map<String, Object> attributes = null;
|
||||||
|
try {
|
||||||
|
attributes = launch.getLaunchConfiguration().getAttributes();
|
||||||
|
} catch (CoreException e) {}
|
||||||
|
|
||||||
|
// We need a RequestMonitorWithProgress, if we don't have one, we create one.
|
||||||
|
RequestMonitorWithProgress progressRm;
|
||||||
|
if (rm instanceof RequestMonitorWithProgress) {
|
||||||
|
progressRm = (RequestMonitorWithProgress)rm;
|
||||||
|
} else {
|
||||||
|
progressRm = new RequestMonitorWithProgress(getExecutor(), new NullProgressMonitor()) {
|
||||||
|
@Override
|
||||||
|
protected void handleCompleted() {
|
||||||
|
rm.setStatus(getStatus());
|
||||||
|
rm.done();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
ImmediateExecutor.getInstance().execute(getCompleteInitializationSequence(attributes, progressRm));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the sequence that is to be used to complete the initialization of GDB.
|
||||||
|
*
|
||||||
|
* @param rm A RequestMonitorWithProgress that will indicate when the sequence is completed, but that
|
||||||
|
* also contains an IProgressMonitor to be able to cancel the launch. A NullProgressMonitor
|
||||||
|
* can be used if cancellation is not required.
|
||||||
|
*
|
||||||
|
* @since 4.0
|
||||||
|
*/
|
||||||
|
protected Sequence getCompleteInitializationSequence(Map<String, Object> attributes, RequestMonitorWithProgress rm) {
|
||||||
|
return new FinalLaunchSequence(getSession(), attributes, rm);
|
||||||
|
}
|
||||||
|
|
||||||
/**@since 4.0 */
|
/**@since 4.0 */
|
||||||
public List<String> getFeatures() {
|
public List<String> getFeatures() {
|
||||||
return fFeatures;
|
return fFeatures;
|
||||||
|
|
|
@ -32,6 +32,20 @@ public interface IGDBControl extends IMICommandControl {
|
||||||
|
|
||||||
MIInferiorProcess getInferiorProcess();
|
MIInferiorProcess getInferiorProcess();
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method should be called once and only once, during the launch,
|
||||||
|
* to complete the initialization. It will perform the final steps
|
||||||
|
* to configure GDB for the type of debugging session chosen by the
|
||||||
|
* user.
|
||||||
|
*
|
||||||
|
* @param requestMonitor The requestMonitor indicating that the
|
||||||
|
* final steps if initialization are completed.
|
||||||
|
*
|
||||||
|
* @since 4.0
|
||||||
|
*/
|
||||||
|
void completeInitialization(RequestMonitor requestMonitor);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @since 2.0
|
* @since 2.0
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -2,7 +2,7 @@ Manifest-Version: 1.0
|
||||||
Bundle-ManifestVersion: 2
|
Bundle-ManifestVersion: 2
|
||||||
Bundle-Name: %pluginName
|
Bundle-Name: %pluginName
|
||||||
Bundle-SymbolicName: org.eclipse.cdt.debug.gdbjtag.core;singleton:=true
|
Bundle-SymbolicName: org.eclipse.cdt.debug.gdbjtag.core;singleton:=true
|
||||||
Bundle-Version: 7.0.0.qualifier
|
Bundle-Version: 8.0.0.qualifier
|
||||||
Bundle-Activator: org.eclipse.cdt.debug.gdbjtag.core.Activator
|
Bundle-Activator: org.eclipse.cdt.debug.gdbjtag.core.Activator
|
||||||
Bundle-Localization: plugin
|
Bundle-Localization: plugin
|
||||||
Require-Bundle: org.eclipse.core.runtime,
|
Require-Bundle: org.eclipse.core.runtime,
|
||||||
|
|
|
@ -36,6 +36,7 @@ import org.eclipse.cdt.dsf.concurrent.CountingRequestMonitor;
|
||||||
import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
|
import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
|
||||||
import org.eclipse.cdt.dsf.concurrent.DsfExecutor;
|
import org.eclipse.cdt.dsf.concurrent.DsfExecutor;
|
||||||
import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
|
import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
|
||||||
|
import org.eclipse.cdt.dsf.concurrent.RequestMonitorWithProgress;
|
||||||
import org.eclipse.cdt.dsf.concurrent.Sequence;
|
import org.eclipse.cdt.dsf.concurrent.Sequence;
|
||||||
import org.eclipse.cdt.dsf.datamodel.DMContexts;
|
import org.eclipse.cdt.dsf.datamodel.DMContexts;
|
||||||
import org.eclipse.cdt.dsf.datamodel.DataModelInitializedEvent;
|
import org.eclipse.cdt.dsf.datamodel.DataModelInitializedEvent;
|
||||||
|
@ -58,7 +59,6 @@ import org.eclipse.cdt.dsf.mi.service.command.output.MIInfo;
|
||||||
import org.eclipse.cdt.dsf.service.DsfServicesTracker;
|
import org.eclipse.cdt.dsf.service.DsfServicesTracker;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
import org.eclipse.core.runtime.IPath;
|
import org.eclipse.core.runtime.IPath;
|
||||||
import org.eclipse.core.runtime.IProgressMonitor;
|
|
||||||
import org.eclipse.core.runtime.IStatus;
|
import org.eclipse.core.runtime.IStatus;
|
||||||
import org.eclipse.core.runtime.Status;
|
import org.eclipse.core.runtime.Status;
|
||||||
import org.eclipse.core.variables.VariablesPlugin;
|
import org.eclipse.core.variables.VariablesPlugin;
|
||||||
|
@ -745,8 +745,11 @@ public class GDBJtagDSFFinalLaunchSequence extends Sequence {
|
||||||
|
|
||||||
DsfServicesTracker fTracker;
|
DsfServicesTracker fTracker;
|
||||||
|
|
||||||
public GDBJtagDSFFinalLaunchSequence(DsfExecutor executor, GdbLaunch launch, SessionType sessionType, boolean attach, IProgressMonitor pm) {
|
/**
|
||||||
super(executor, pm, LaunchMessages.getString("FinalLaunchSequence.0"), LaunchMessages.getString("FinalLaunchSequence.1")); //$NON-NLS-1$ //$NON-NLS-2$
|
* @since 8.0
|
||||||
|
*/
|
||||||
|
public GDBJtagDSFFinalLaunchSequence(DsfExecutor executor, GdbLaunch launch, SessionType sessionType, boolean attach, RequestMonitorWithProgress rm) {
|
||||||
|
super(executor, rm, LaunchMessages.getString("FinalLaunchSequence.0"), LaunchMessages.getString("FinalLaunchSequence.1")); //$NON-NLS-1$ //$NON-NLS-2$
|
||||||
fLaunch = launch;
|
fLaunch = launch;
|
||||||
fSessionType = sessionType;
|
fSessionType = sessionType;
|
||||||
fAttach = attach;
|
fAttach = attach;
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
*
|
*
|
||||||
* Contributors:
|
* Contributors:
|
||||||
* QNX Software Systems - Initial implementation
|
* QNX Software Systems - Initial implementation
|
||||||
|
* Ericsson - Updated for changes in base DSF-GDB launching (Bug 338769)
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.debug.gdbjtag.core;
|
package org.eclipse.cdt.debug.gdbjtag.core;
|
||||||
|
|
||||||
|
@ -15,13 +16,12 @@ package org.eclipse.cdt.debug.gdbjtag.core;
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import org.eclipse.cdt.dsf.concurrent.DsfExecutor;
|
import org.eclipse.cdt.debug.gdbjtag.core.dsf.gdb.service.GdbJtagDebugServicesFactory;
|
||||||
import org.eclipse.cdt.dsf.concurrent.Sequence;
|
import org.eclipse.cdt.debug.gdbjtag.core.dsf.gdb.service.macos.MacOSGdbJtagDebugServicesFactory;
|
||||||
import org.eclipse.cdt.dsf.concurrent.ThreadSafe;
|
import org.eclipse.cdt.dsf.concurrent.ThreadSafe;
|
||||||
import org.eclipse.cdt.dsf.gdb.launching.GdbLaunch;
|
import org.eclipse.cdt.dsf.debug.service.IDsfDebugServicesFactory;
|
||||||
import org.eclipse.cdt.dsf.gdb.launching.GdbLaunchDelegate;
|
import org.eclipse.cdt.dsf.gdb.launching.GdbLaunchDelegate;
|
||||||
import org.eclipse.cdt.dsf.gdb.service.SessionType;
|
import org.eclipse.cdt.dsf.gdb.launching.LaunchUtils;
|
||||||
import org.eclipse.core.runtime.IProgressMonitor;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The launch configuration delegate for the Jtag hardware debugging using
|
* The launch configuration delegate for the Jtag hardware debugging using
|
||||||
|
@ -31,21 +31,23 @@ import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
* launch configuration types.
|
* launch configuration types.
|
||||||
* <p>
|
* <p>
|
||||||
* It extends the standard DSF/GDB launch delegate <code>GdbLaunchDelegate</code>
|
* It extends the standard DSF/GDB launch delegate <code>GdbLaunchDelegate</code>
|
||||||
* but overrides the <code>getFinalLaunchSequence</code> method to return the Jtag
|
* but overrides the <code>newServiceFactory</code> method to return the Jtag
|
||||||
* hardware debugging specific launch sequence.
|
* hardware debugging factory.
|
||||||
* @since 7.0
|
* @since 7.0
|
||||||
*/
|
*/
|
||||||
@ThreadSafe
|
@ThreadSafe
|
||||||
public class GDBJtagDSFLaunchConfigurationDelegate extends GdbLaunchDelegate {
|
public class GDBJtagDSFLaunchConfigurationDelegate extends GdbLaunchDelegate {
|
||||||
|
|
||||||
/* (non-Javadoc)
|
protected IDsfDebugServicesFactory newServiceFactory(String version) {
|
||||||
* @see org.eclipse.cdt.dsf.gdb.launching.GdbLaunchDelegate#getFinalLaunchSequence(org.eclipse.cdt.dsf.concurrent.DsfExecutor, org.eclipse.cdt.dsf.gdb.launching.GdbLaunch, org.eclipse.cdt.dsf.gdb.service.SessionType, boolean, org.eclipse.core.runtime.IProgressMonitor)
|
if (version.contains(LaunchUtils.MACOS_GDB_MARKER)) {
|
||||||
*/
|
// The version string at this point should look like
|
||||||
@Override
|
// 6.3.50-20050815APPLE1346, we extract the gdb version and apple version
|
||||||
protected Sequence getFinalLaunchSequence(DsfExecutor executor,
|
String versions [] = version.split(LaunchUtils.MACOS_GDB_MARKER);
|
||||||
GdbLaunch launch, SessionType type, boolean attach,
|
if (versions.length == 2) {
|
||||||
IProgressMonitor pm) {
|
return new MacOSGdbJtagDebugServicesFactory(versions[0], versions[1]);
|
||||||
return new GDBJtagDSFFinalLaunchSequence(executor, launch, type, attach, pm);
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return new GdbJtagDebugServicesFactory(version);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2011 Ericsson 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:
|
||||||
|
* Ericsson - initial API and implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
package org.eclipse.cdt.debug.gdbjtag.core.dsf.gdb.service;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.debug.gdbjtag.core.GDBJtagDSFFinalLaunchSequence;
|
||||||
|
import org.eclipse.cdt.dsf.concurrent.RequestMonitorWithProgress;
|
||||||
|
import org.eclipse.cdt.dsf.concurrent.Sequence;
|
||||||
|
import org.eclipse.cdt.dsf.gdb.launching.GdbLaunch;
|
||||||
|
import org.eclipse.cdt.dsf.gdb.service.IGDBBackend;
|
||||||
|
import org.eclipse.cdt.dsf.gdb.service.command.GDBControl;
|
||||||
|
import org.eclipse.cdt.dsf.mi.service.command.CommandFactory;
|
||||||
|
import org.eclipse.cdt.dsf.service.DsfSession;
|
||||||
|
import org.eclipse.debug.core.ILaunch;
|
||||||
|
import org.eclipse.debug.core.ILaunchConfiguration;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Jtag control service which selects the Jtag CompleteInitializationSequence.
|
||||||
|
* Use for GDB < 7.0
|
||||||
|
*/
|
||||||
|
public class GDBJtagControl extends GDBControl {
|
||||||
|
|
||||||
|
public GDBJtagControl(DsfSession session, ILaunchConfiguration config, CommandFactory factory) {
|
||||||
|
super(session, config, factory);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Sequence getCompleteInitializationSequence(Map<String,Object> attributes, RequestMonitorWithProgress rm) {
|
||||||
|
GdbLaunch launch = (GdbLaunch)getSession().getModelAdapter(ILaunch.class);
|
||||||
|
IGDBBackend backend = getServicesTracker().getService(IGDBBackend.class);
|
||||||
|
return new GDBJtagDSFFinalLaunchSequence(getExecutor(), launch, backend.getSessionType(), backend.getIsAttachSession(), rm);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,42 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2011 Ericsson 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:
|
||||||
|
* Ericsson - initial API and implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
package org.eclipse.cdt.debug.gdbjtag.core.dsf.gdb.service;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.debug.gdbjtag.core.GDBJtagDSFFinalLaunchSequence;
|
||||||
|
import org.eclipse.cdt.dsf.concurrent.RequestMonitorWithProgress;
|
||||||
|
import org.eclipse.cdt.dsf.concurrent.Sequence;
|
||||||
|
import org.eclipse.cdt.dsf.gdb.launching.GdbLaunch;
|
||||||
|
import org.eclipse.cdt.dsf.gdb.service.IGDBBackend;
|
||||||
|
import org.eclipse.cdt.dsf.gdb.service.command.GDBControl_7_0;
|
||||||
|
import org.eclipse.cdt.dsf.mi.service.command.CommandFactory;
|
||||||
|
import org.eclipse.cdt.dsf.service.DsfSession;
|
||||||
|
import org.eclipse.debug.core.ILaunch;
|
||||||
|
import org.eclipse.debug.core.ILaunchConfiguration;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Jtag control service which selects the Jtag CompleteInitializationSequence.
|
||||||
|
* Use for GDB >= 7.0
|
||||||
|
*/
|
||||||
|
public class GDBJtagControl_7_0 extends GDBControl_7_0 {
|
||||||
|
|
||||||
|
public GDBJtagControl_7_0(DsfSession session, ILaunchConfiguration config, CommandFactory factory) {
|
||||||
|
super(session, config, factory);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Sequence getCompleteInitializationSequence(Map<String,Object> attributes, RequestMonitorWithProgress rm) {
|
||||||
|
GdbLaunch launch = (GdbLaunch)getSession().getModelAdapter(ILaunch.class);
|
||||||
|
IGDBBackend backend = getServicesTracker().getService(IGDBBackend.class);
|
||||||
|
return new GDBJtagDSFFinalLaunchSequence(getExecutor(), launch, backend.getSessionType(), backend.getIsAttachSession(), rm);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,42 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2011 Ericsson 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:
|
||||||
|
* Ericsson - initial API and implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
package org.eclipse.cdt.debug.gdbjtag.core.dsf.gdb.service;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.debug.gdbjtag.core.GDBJtagDSFFinalLaunchSequence;
|
||||||
|
import org.eclipse.cdt.dsf.concurrent.RequestMonitorWithProgress;
|
||||||
|
import org.eclipse.cdt.dsf.concurrent.Sequence;
|
||||||
|
import org.eclipse.cdt.dsf.gdb.launching.GdbLaunch;
|
||||||
|
import org.eclipse.cdt.dsf.gdb.service.IGDBBackend;
|
||||||
|
import org.eclipse.cdt.dsf.gdb.service.command.GDBControl_7_2;
|
||||||
|
import org.eclipse.cdt.dsf.mi.service.command.CommandFactory;
|
||||||
|
import org.eclipse.cdt.dsf.service.DsfSession;
|
||||||
|
import org.eclipse.debug.core.ILaunch;
|
||||||
|
import org.eclipse.debug.core.ILaunchConfiguration;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Jtag control service which selects the Jtag CompleteInitializationSequence.
|
||||||
|
* Use for GDB >= 7.2
|
||||||
|
*/
|
||||||
|
public class GDBJtagControl_7_2 extends GDBControl_7_2 {
|
||||||
|
|
||||||
|
public GDBJtagControl_7_2(DsfSession session, ILaunchConfiguration config, CommandFactory factory) {
|
||||||
|
super(session, config, factory);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Sequence getCompleteInitializationSequence(Map<String,Object> attributes, RequestMonitorWithProgress rm) {
|
||||||
|
GdbLaunch launch = (GdbLaunch)getSession().getModelAdapter(ILaunch.class);
|
||||||
|
IGDBBackend backend = getServicesTracker().getService(IGDBBackend.class);
|
||||||
|
return new GDBJtagDSFFinalLaunchSequence(getExecutor(), launch, backend.getSessionType(), backend.getIsAttachSession(), rm);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,42 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2011 Ericsson 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:
|
||||||
|
* Ericsson - initial API and implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
package org.eclipse.cdt.debug.gdbjtag.core.dsf.gdb.service;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.dsf.debug.service.command.ICommandControl;
|
||||||
|
import org.eclipse.cdt.dsf.gdb.service.GdbDebugServicesFactory;
|
||||||
|
import org.eclipse.cdt.dsf.gdb.service.command.CommandFactory_6_8;
|
||||||
|
import org.eclipse.cdt.dsf.mi.service.command.CommandFactory;
|
||||||
|
import org.eclipse.cdt.dsf.service.DsfSession;
|
||||||
|
import org.eclipse.debug.core.ILaunchConfiguration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @since 8.0
|
||||||
|
*/
|
||||||
|
public class GdbJtagDebugServicesFactory extends GdbDebugServicesFactory {
|
||||||
|
|
||||||
|
|
||||||
|
public GdbJtagDebugServicesFactory(String version) {
|
||||||
|
super(version);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected ICommandControl createCommandControl(DsfSession session, ILaunchConfiguration config) {
|
||||||
|
if (GDB_7_2_VERSION.compareTo(getVersion()) <= 0) {
|
||||||
|
return new GDBJtagControl_7_2(session, config, new CommandFactory_6_8());
|
||||||
|
}
|
||||||
|
if (GDB_7_0_VERSION.compareTo(getVersion()) <= 0) {
|
||||||
|
return new GDBJtagControl_7_0(session, config, new CommandFactory_6_8());
|
||||||
|
}
|
||||||
|
if (GDB_6_8_VERSION.compareTo(getVersion()) <= 0) {
|
||||||
|
return new GDBJtagControl(session, config, new CommandFactory_6_8());
|
||||||
|
}
|
||||||
|
return new GDBJtagControl(session, config, new CommandFactory());
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2011 Ericsson 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:
|
||||||
|
* Ericsson - Initial implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
package org.eclipse.cdt.debug.gdbjtag.core.dsf.gdb.service.macos;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.debug.gdbjtag.core.dsf.gdb.service.GDBJtagControl;
|
||||||
|
import org.eclipse.cdt.dsf.debug.service.command.ICommandControl;
|
||||||
|
import org.eclipse.cdt.dsf.gdb.service.macos.MacOSCommandFactory;
|
||||||
|
import org.eclipse.cdt.dsf.gdb.service.macos.MacOSGdbDebugServicesFactory;
|
||||||
|
import org.eclipse.cdt.dsf.service.DsfSession;
|
||||||
|
import org.eclipse.debug.core.ILaunchConfiguration;
|
||||||
|
|
||||||
|
/** @since 8.0 */
|
||||||
|
public class MacOSGdbJtagDebugServicesFactory extends MacOSGdbDebugServicesFactory {
|
||||||
|
|
||||||
|
public MacOSGdbJtagDebugServicesFactory(String gdbVersion, String appleVersion) {
|
||||||
|
super(gdbVersion, appleVersion);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected ICommandControl createCommandControl(DsfSession session, ILaunchConfiguration config) {
|
||||||
|
return new GDBJtagControl(session, config, new MacOSCommandFactory());
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue