diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/cdi/ICDIFormat.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/cdi/ICDIFormat.java new file mode 100644 index 00000000000..08edfa7d68c --- /dev/null +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/cdi/ICDIFormat.java @@ -0,0 +1,16 @@ +/* + *(c) Copyright QNX Software Systems Ltd. 2002. + * All Rights Reserved. + */ +package org.eclipse.cdt.debug.core.cdi; + +/** + * Format constants. + */ +public interface ICDIFormat { + public static int NATURAL = 0; + public static int DECIMAL = 1; + public static int BINARY = 2; + public static int OCTAL = 3; + public static int HEXADECIMAL = 4; +} diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/cdi/ICDIRegisterObject.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/cdi/ICDIRegisterObject.java new file mode 100644 index 00000000000..4064efaf949 --- /dev/null +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/cdi/ICDIRegisterObject.java @@ -0,0 +1,19 @@ +/* + *(c) Copyright QNX Software Systems Ltd. 2002. + * All Rights Reserved. + * + */ +package org.eclipse.cdt.debug.core.cdi; + +/** + * + * Represents a break condition. + * + * @since Jul 9, 2002 + */ +public interface ICDIRegisterObject { + /** + * Return the name of the register. + */ + String getName(); +} diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/cdi/model/ICDIStackFrame.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/cdi/model/ICDIStackFrame.java index 28d84e0c967..6bc845115f8 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/cdi/model/ICDIStackFrame.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/cdi/model/ICDIStackFrame.java @@ -8,6 +8,7 @@ package org.eclipse.cdt.debug.core.cdi.model; import org.eclipse.cdt.debug.core.cdi.CDIException; import org.eclipse.cdt.debug.core.cdi.ICDILocation; +import org.eclipse.cdt.debug.core.cdi.ICDIRegisterObject; /** * @@ -45,6 +46,13 @@ public interface ICDIStackFrame extends ICDIObject */ ICDIArgument[] getArguments() throws CDIException; + /** + * Returns the Registers + * @return a collection of registers + * @throws CDIException if this method fails: + */ + ICDIRegister[] getRegisters(ICDIRegisterObject[] regs); + /** * Returns the level of the stack frame. * diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/cdi/model/ICDITarget.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/cdi/model/ICDITarget.java index ec18d619315..40324a8dc90 100644 --- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/cdi/model/ICDITarget.java +++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/cdi/model/ICDITarget.java @@ -6,10 +6,8 @@ package org.eclipse.cdt.debug.core.cdi.model; -import java.io.InputStream; -import java.io.OutputStream; - import org.eclipse.cdt.debug.core.cdi.CDIException; +import org.eclipse.cdt.debug.core.cdi.ICDIRegisterObject; import org.eclipse.cdt.debug.core.cdi.ICDISession; /** @@ -69,12 +67,12 @@ public interface ICDITarget extends ICDIObject { throws CDIException; /** - * Returns the register groups associated with this target. + * Returns the register associated with this target. * * @return a collection of register groups * @throws CDIException if this method fails. Reasons include: */ - ICDIRegisterGroup[] getRegisterGroups() throws CDIException; + ICDIRegisterObject[] getRegisterObjects() throws CDIException; /** * Returns a collection of global variables associated with diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/BreakpointHit.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/BreakpointHit.java index 0c6f611ff57..0c30436a7fe 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/BreakpointHit.java +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/BreakpointHit.java @@ -1,3 +1,8 @@ +/* + * (c) Copyright QNX Software Systems Ltd. 2002. + * All Rights Reserved. + * + */ package org.eclipse.cdt.debug.mi.core.cdi; import org.eclipse.cdt.debug.core.cdi.ICDIBreakpointHit; diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/CTarget.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/CTarget.java index 79b076e7814..0aee5d9e33d 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/CTarget.java +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/CTarget.java @@ -9,10 +9,10 @@ import java.util.ArrayList; import java.util.List; import org.eclipse.cdt.debug.core.cdi.CDIException; +import org.eclipse.cdt.debug.core.cdi.ICDIRegisterObject; import org.eclipse.cdt.debug.core.cdi.ICDISession; import org.eclipse.cdt.debug.core.cdi.model.ICDIGlobalVariable; import org.eclipse.cdt.debug.core.cdi.model.ICDIMemoryBlock; -import org.eclipse.cdt.debug.core.cdi.model.ICDIRegisterGroup; import org.eclipse.cdt.debug.core.cdi.model.ICDISharedLibrary; import org.eclipse.cdt.debug.core.cdi.model.ICDITarget; import org.eclipse.cdt.debug.core.cdi.model.ICDIThread; @@ -22,6 +22,7 @@ import org.eclipse.cdt.debug.mi.core.MISession; import org.eclipse.cdt.debug.mi.core.command.CLICommand; import org.eclipse.cdt.debug.mi.core.command.CommandFactory; import org.eclipse.cdt.debug.mi.core.command.MIDataEvaluateExpression; +import org.eclipse.cdt.debug.mi.core.command.MIDataListRegisterNames; import org.eclipse.cdt.debug.mi.core.command.MIExecContinue; import org.eclipse.cdt.debug.mi.core.command.MIExecFinish; import org.eclipse.cdt.debug.mi.core.command.MIExecInterrupt; @@ -35,6 +36,7 @@ import org.eclipse.cdt.debug.mi.core.command.MIThreadListIds; import org.eclipse.cdt.debug.mi.core.command.MIThreadSelect; import org.eclipse.cdt.debug.mi.core.event.MIThreadExitEvent; import org.eclipse.cdt.debug.mi.core.output.MIDataEvaluateExpressionInfo; +import org.eclipse.cdt.debug.mi.core.output.MIDataListRegisterNamesInfo; import org.eclipse.cdt.debug.mi.core.output.MIInfo; import org.eclipse.cdt.debug.mi.core.output.MIThreadListIdsInfo; import org.eclipse.cdt.debug.mi.core.output.MIThreadSelectInfo; @@ -441,10 +443,29 @@ public class CTarget implements ICDITarget { } /** - * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#getRegisterGroups() + * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#getRegisterObjects() */ - public ICDIRegisterGroup[] getRegisterGroups() throws CDIException { - return new ICDIRegisterGroup[0]; + public ICDIRegisterObject[] getRegisterObjects() throws CDIException { + MISession mi = session.getMISession(); + CommandFactory factory = mi.getCommandFactory(); + MIDataListRegisterNames registers = + factory.createMIDataListRegisterNames(); + try { + mi.postCommand(registers); + MIDataListRegisterNamesInfo info = + registers.getMIDataListRegisterNamesInfo(); + if (info == null) { + throw new CDIException("No answer"); + } + String[] names = info.getRegisterNames(); + RegisterObject[] regs = new RegisterObject[names.length]; + for (int i = 0; i < names.length; i++) { + regs[i] = new RegisterObject(names[i], i); + } + return regs; + } catch (MIException e) { + throw new CDIException(e.toString()); + } } /** diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/Format.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/Format.java new file mode 100644 index 00000000000..6071890a2ee --- /dev/null +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/Format.java @@ -0,0 +1,43 @@ +/* + * (c) Copyright QNX Software Systems Ltd. 2002. + * All Rights Reserved. + * + */ +package org.eclipse.cdt.debug.mi.core.cdi; + +import org.eclipse.cdt.debug.core.cdi.ICDIFormat; +import org.eclipse.cdt.debug.mi.core.MIFormat; + +/** + */ +public class Format { + + private Format() { + } + + public static int toMIFormat(int format) { + int fmt = MIFormat.NATURAL; + switch (format) { + case ICDIFormat.NATURAL: + fmt = MIFormat.NATURAL; + break; + + case ICDIFormat.DECIMAL: + fmt = MIFormat.DECIMAL; + break; + + case ICDIFormat.BINARY: + fmt = MIFormat.BINARY; + break; + + case ICDIFormat.OCTAL: + fmt = MIFormat.OCTAL; + break; + + case ICDIFormat.HEXADECIMAL: + fmt = MIFormat.HEXADECIMAL; + break; + } + return fmt; + } +} diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/RegisterObject.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/RegisterObject.java new file mode 100644 index 00000000000..79793e3e938 --- /dev/null +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/RegisterObject.java @@ -0,0 +1,28 @@ +package org.eclipse.cdt.debug.mi.core.cdi; + +import org.eclipse.cdt.debug.core.cdi.ICDIRegisterObject; + +/** + */ +public class RegisterObject implements ICDIRegisterObject { + + int index; + String name; + + public RegisterObject(String n, int i) { + name = n; + index = i; + } + + public int getId() { + return index; + } + + /** + * @see org.eclipse.cdt.debug.core.cdi.ICDIRegisterObject#getName() + */ + public String getName() { + return name; + } + +} diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/StackFrame.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/StackFrame.java index f8f3a595fa0..ac9c5df2406 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/StackFrame.java +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/StackFrame.java @@ -7,7 +7,9 @@ package org.eclipse.cdt.debug.mi.core.cdi; import org.eclipse.cdt.debug.core.cdi.CDIException; import org.eclipse.cdt.debug.core.cdi.ICDILocation; +import org.eclipse.cdt.debug.core.cdi.ICDIRegisterObject; import org.eclipse.cdt.debug.core.cdi.model.ICDIArgument; +import org.eclipse.cdt.debug.core.cdi.model.ICDIRegister; import org.eclipse.cdt.debug.core.cdi.model.ICDIStackFrame; import org.eclipse.cdt.debug.core.cdi.model.ICDIVariable; import org.eclipse.cdt.debug.mi.core.MIException; @@ -130,6 +132,30 @@ public class StackFrame extends CObject implements ICDIStackFrame { return variables; } + /** + * @see org.eclipse.cdt.debug.core.cdi.model.ICDIStackFrame#getRegisters(ICDIRegisterObject[]) + */ + public ICDIRegister[] getRegisters(ICDIRegisterObject[] regs) { + ICDIRegister[] registers = null; + CSession session = getCTarget().getCSession(); + VariableManager mgr = (VariableManager)session.getVariableManager(); + MISession mi = session.getMISession(); + CommandFactory factory = mi.getCommandFactory(); + try { + registers = new ICDIRegister[regs.length]; + for (int i = 0; i < registers.length; i++) { + registers[i] = mgr.createRegister(this, regs[i].getName()); + } + } catch (CDIException e) { + //throw e; + System.err.println(e); + } + if (registers == null) { + registers = new ICDIRegister[0]; + } + return registers; + } + /** * @see org.eclipse.cdt.debug.core.cdi.model.ICDIStackFrame#getLocation() */ diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/Variable.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/Variable.java index 9f8c8e33d98..7cc49c44f23 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/Variable.java +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/Variable.java @@ -12,6 +12,7 @@ import org.eclipse.cdt.debug.mi.core.MIException; import org.eclipse.cdt.debug.mi.core.MISession; import org.eclipse.cdt.debug.mi.core.command.CommandFactory; import org.eclipse.cdt.debug.mi.core.command.MIVarAssign; +import org.eclipse.cdt.debug.mi.core.command.MIVarSetFormat; import org.eclipse.cdt.debug.mi.core.command.MIVarShowAttributes; import org.eclipse.cdt.debug.mi.core.output.MIInfo; import org.eclipse.cdt.debug.mi.core.output.MIVar; @@ -110,6 +111,25 @@ public class Variable extends CObject implements ICDIVariable { } } + /** + * @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariable#setFormat() + */ + public void setFormat(int format) throws CDIException { + int fmt = Format.toMIFormat(format); + MISession mi = getCTarget().getCSession().getMISession(); + CommandFactory factory = mi.getCommandFactory(); + MIVarSetFormat var = factory.createMIVarSetFormat(miVar.getVarName(), fmt); + try { + mi.postCommand(var); + MIInfo info = var.getMIInfo(); + if (info == null) { + throw new CDIException("No answer"); + } + } catch (MIException e) { + throw new CDIException(e.toString()); + } + } + /** * @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariable#equals() */ diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/WatchpointScope.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/WatchpointScope.java index 16511252157..38154fb1036 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/WatchpointScope.java +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/WatchpointScope.java @@ -1,3 +1,8 @@ +/* + * (c) Copyright QNX Software Systems Ltd. 2002. + * All Rights Reserved. + * + */ package org.eclipse.cdt.debug.mi.core.cdi; import org.eclipse.cdt.debug.core.cdi.ICDIWatchpointScope; diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/WatchpointTrigger.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/WatchpointTrigger.java index e349be020bd..abaee0c1e85 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/WatchpointTrigger.java +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/WatchpointTrigger.java @@ -1,15 +1,14 @@ +/* + * (c) Copyright QNX Software Systems Ltd. 2002. + * All Rights Reserved. + * + */ package org.eclipse.cdt.debug.mi.core.cdi; import org.eclipse.cdt.debug.core.cdi.ICDIWatchpointTrigger; import org.eclipse.cdt.debug.mi.core.event.MIWatchpointEvent; /** - * @author alain - * - * To change this generated comment edit the template variable "typecomment": - * Window>Preferences>Java>Templates. - * To enable and disable the creation of type comments go to - * Window>Preferences>Java>Code Generation. */ public class WatchpointTrigger extends WatchpointScope implements ICDIWatchpointTrigger { diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/command/CommandFactory.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/command/CommandFactory.java index 893d12acf0a..b4de651bd6f 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/command/CommandFactory.java +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/command/CommandFactory.java @@ -64,6 +64,10 @@ public class CommandFactory { return new MIDataListChangedRegisters(); } + public MIDataListRegisterNames createMIDataListRegisterNames() { + return new MIDataListRegisterNames(); + } + public MIDataListRegisterNames createMIDataListRegisterNames(int[] regno) { return new MIDataListRegisterNames(regno); } diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/command/MIDataListRegisterNames.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/command/MIDataListRegisterNames.java index c047fc8554c..2ea69d1815b 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/command/MIDataListRegisterNames.java +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/command/MIDataListRegisterNames.java @@ -40,6 +40,10 @@ public class MIDataListRegisterNames extends MICommand } } + public MIDataListRegisterNamesInfo getMIDataListRegisterNamesInfo() throws MIException { + return (MIDataListRegisterNamesInfo)getMIInfo(); + } + public MIInfo getMIInfo() throws MIException { MIInfo info = null; MIOutput out = getMIOutput(); diff --git a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/output/MIDataListRegisterNamesInfo.java b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/output/MIDataListRegisterNamesInfo.java index 1fa4eb6b0d6..7bf4e0ad295 100644 --- a/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/output/MIDataListRegisterNamesInfo.java +++ b/debug/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/output/MIDataListRegisterNamesInfo.java @@ -19,7 +19,7 @@ public class MIDataListRegisterNamesInfo extends MIInfo { super(rr); } - String[] getRegistersNames () { + public String[] getRegisterNames () { if (names == null) { parse(); }