[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[cdt-patch] Generate CreatedEvents
|
Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/ChangeLog,v
retrieving revision 1.55
diff -u -r1.55 ChangeLog
--- ChangeLog 9 Jan 2003 03:46:22 -0000 1.55
+++ ChangeLog 9 Jan 2003 19:10:16 -0000
@@ -1,3 +1,29 @@
+2003-01-09 Alain Magloire
+
+ Generate CreatedEvent's for Variable, Argument, Expression, Memory, Thread
+ objects when they are created. This makes it consistent with the generated
+ DestroyedEvent's.
+
+ * src/.../mi/core/cdi/EventManager.java (update): Deal with
+ MI{Register,Memory,Thread,Var}CreatedEvent events.
+ * src/.../mi/core/cdi/model/Ctarget.java (updateState): Fire events
+ when threads are created or destroyed.
+ * src/.../mi/core/cdi/model/MemoryBlock.java: Move here.
+ * src/.../mi/core/cdi/model/Register.java (getID): rename getId() to getID().
+ * src/.../mi/core/cdi/event/CreatedEvent.java: New constructors
+ to deal with MI{Register,Memory,Thread,Var}CreatedEvent.
+
+ * src/.../mi/core/event/MIMemoryCreatedEvent.java: New file.
+ * src/.../mi/core/event/MIRegisterCreatedEvent.java: New file.
+ * src/.../mi/core/event/MIThreadCreatedEvent.java: New file.
+ * src/.../mi/core/event/MIVarCreatedEvent.java: New file.
+ * src/.../mi/core/event/MIBreakpointChangedEvent.java (MIBreakpointChangedEvent):
+ Reuse the constructor.
+ * src/.../mi/core/event/MIBreakpointCreatedEvent.java (MIBreakpointCreatedEvent):
+ Reuse the constructor.
+ * src/.../mi/core/event/MIBreakpointDeletedEvent.java (MIBreakpointDeletedEvent):
+ Reuse the constructor.
+
2003-01-08 Alain Magloire
Refactoring, split the org.eclipse.cdt.debug.mi.core.cdi in pacackages
Index: src/org/eclipse/cdt/debug/mi/core/cdi/EventManager.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/EventManager.java,v
retrieving revision 1.30
diff -u -r1.30 EventManager.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/EventManager.java 9 Jan 2003 03:46:22 -0000 1.30
+++ src/org/eclipse/cdt/debug/mi/core/cdi/EventManager.java 9 Jan 2003 19:10:16 -0000
@@ -24,6 +24,7 @@
import org.eclipse.cdt.debug.mi.core.cdi.event.ResumedEvent;
import org.eclipse.cdt.debug.mi.core.cdi.event.SuspendedEvent;
import org.eclipse.cdt.debug.mi.core.cdi.model.CTarget;
+import org.eclipse.cdt.debug.mi.core.cdi.model.MemoryBlock;
import org.eclipse.cdt.debug.mi.core.event.MIBreakpointChangedEvent;
import org.eclipse.cdt.debug.mi.core.event.MIBreakpointCreatedEvent;
import org.eclipse.cdt.debug.mi.core.event.MIBreakpointDeletedEvent;
@@ -35,11 +36,15 @@
import org.eclipse.cdt.debug.mi.core.event.MIGDBExitEvent;
import org.eclipse.cdt.debug.mi.core.event.MIInferiorExitEvent;
import org.eclipse.cdt.debug.mi.core.event.MIMemoryChangedEvent;
+import org.eclipse.cdt.debug.mi.core.event.MIMemoryCreatedEvent;
import org.eclipse.cdt.debug.mi.core.event.MIRegisterChangedEvent;
+import org.eclipse.cdt.debug.mi.core.event.MIRegisterCreatedEvent;
import org.eclipse.cdt.debug.mi.core.event.MIRunningEvent;
import org.eclipse.cdt.debug.mi.core.event.MIStoppedEvent;
+import org.eclipse.cdt.debug.mi.core.event.MIThreadCreatedEvent;
import org.eclipse.cdt.debug.mi.core.event.MIThreadExitEvent;
import org.eclipse.cdt.debug.mi.core.event.MIVarChangedEvent;
+import org.eclipse.cdt.debug.mi.core.event.MIVarCreatedEvent;
/**
*/
@@ -138,6 +143,14 @@
} catch (CDIException e) {
}
}
+ } else if (miEvent instanceof MIVarCreatedEvent) {
+ cdiList.add(new CreatedEvent(session, (MIVarCreatedEvent)miEvent));
+ } else if (miEvent instanceof MIRegisterCreatedEvent) {
+ cdiList.add(new CreatedEvent(session, (MIRegisterCreatedEvent)miEvent));
+ } else if (miEvent instanceof MIThreadCreatedEvent) {
+ cdiList.add(new CreatedEvent(session, (MIThreadCreatedEvent)miEvent));
+ } else if (miEvent instanceof MIMemoryCreatedEvent) {
+ cdiList.add(new CreatedEvent(session, (MIMemoryCreatedEvent)miEvent));
}
}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/MemoryBlock.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/cdi/MemoryBlock.java
diff -N src/org/eclipse/cdt/debug/mi/core/cdi/MemoryBlock.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/MemoryBlock.java 9 Jan 2003 03:46:22 -0000 1.13
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,189 +0,0 @@
-package org.eclipse.cdt.debug.mi.core.cdi;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.cdt.debug.core.cdi.CDIException;
-import org.eclipse.cdt.debug.core.cdi.model.ICDIMemoryBlock;
-import org.eclipse.cdt.debug.mi.core.MIException;
-import org.eclipse.cdt.debug.mi.core.MIFormat;
-import org.eclipse.cdt.debug.mi.core.MISession;
-import org.eclipse.cdt.debug.mi.core.cdi.model.CObject;
-import org.eclipse.cdt.debug.mi.core.cdi.model.CTarget;
-import org.eclipse.cdt.debug.mi.core.command.CommandFactory;
-import org.eclipse.cdt.debug.mi.core.command.MIDataWriteMemory;
-import org.eclipse.cdt.debug.mi.core.output.MIDataReadMemoryInfo;
-import org.eclipse.cdt.debug.mi.core.output.MIInfo;
-import org.eclipse.cdt.debug.mi.core.output.MIMemory;
-
-/**
- */
-public class MemoryBlock extends CObject implements ICDIMemoryBlock {
-
- MIDataReadMemoryInfo mem;
- String expression;
- boolean frozen;
- boolean dirty;
-
- public MemoryBlock(CTarget target, String exp, MIDataReadMemoryInfo info) {
- super(target);
- expression = exp;
- mem = info;
- frozen = true;
- }
-
- /**
- * @return the expression use to create the block.
- */
- public String getExpression() {
- return expression;
- }
-
- /**
- * Reset the internal MIDataReadMemoryInfo.
- */
- public void setMIDataReadMemoryInfo(MIDataReadMemoryInfo m) {
- mem = m;
- }
-
- /**
- * @return the internal MIDataReadMemoryInfo.
- */
- public MIDataReadMemoryInfo getMIDataReadMemoryInfo() {
- return mem;
- }
-
- /**
- * @return true if any address in the array is within the block.
- */
- public boolean contains(Long[] adds) {
- for (int i = 0; i < adds.length; i++) {
- if (contains(adds[i])) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * @return true if the address is within the block.
- */
- public boolean contains(Long addr) {
- long start = getStartAddress();
- long length = getLength();
- if (start <= addr.longValue() && addr.longValue() <= start + length) {
- return true;
- }
- return false;
- }
-
- /**
- * Use by the EventManager to check fire events when doing refresh().
- */
- public boolean isDirty() {
- return dirty;
- }
-
- /**
- * Use by the EventManager to check fire events when doing refresh().
- */
- public void setDirty(boolean d) {
- dirty = d;
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIMemoryBlock#getBytes()
- */
- public byte[] getBytes() throws CDIException {
- MIMemory[] miMem = mem.getMemories();
- List aList = new ArrayList();
- for (int i = 0; i < miMem.length; i++) {
- long[] data = miMem[i].getData();
- for (int j = 0; j < data.length; j++) {
- aList.add(new Long(data[j]));
- }
- }
- byte[] bytes = new byte[aList.size()];
- for (int i = 0; i < aList.size(); i++) {
- Long l = (Long)aList.get(i);
- bytes[i] = l.byteValue();
- }
- return bytes;
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIMemoryBlock#refresh()
- */
- public void refresh() throws CDIException {
- MemoryManager mgr = (MemoryManager)getCTarget().getCSession().getMemoryManager();
- setDirty(true);
- Long[] addresses = mgr.update(this, null);
- // Check if this affects other blocks.
- if (addresses.length > 0) {
- MemoryBlock[] blocks = mgr.listMemoryBlocks();
- for (int i = 0; i < blocks.length; i++) {
- if (! blocks[i].equals(this) && blocks[i].contains(addresses)) {
- blocks[i].setDirty(true);
- mgr.update(blocks[i], null);
- }
- }
- }
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIMemoryBlock#getLength()
- */
- public long getLength() {
- return mem.getTotalBytes();
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIMemoryBlock#getStartAddress()
- */
- public long getStartAddress() {
- return mem.getAddress();
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIMemoryBlock#isFrozen()
- */
- public boolean isFrozen() {
- return frozen;
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIMemoryBlock#setFrozen(boolean)
- */
- public void setFrozen(boolean frozen) {
- this.frozen = frozen;
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDIMemoryBlock#setValue(long, byte[])
- */
- public void setValue(long offset, byte[] bytes) throws CDIException {
- if (offset >= getLength() || offset + bytes.length > getLength()) {
- throw new CDIException("Bad Offset");
- }
- MISession mi = getCTarget().getCSession().getMISession();
- CommandFactory factory = mi.getCommandFactory();
- for (int i = 0; i < bytes.length; i++) {
- long l = new Byte(bytes[i]).longValue() & 0xff;
- String value = "0x" + Long.toHexString(l);
- MIDataWriteMemory mw = factory.createMIDataWriteMemory(offset + i,
- expression, MIFormat.HEXADECIMAL, 1, value);
- try {
- mi.postCommand(mw);
- MIInfo info = mw.getMIInfo();
- if (info == null) {
- throw new CDIException("No answer");
- }
- } catch (MIException e) {
- throw new MI2CDIException(e);
- }
- }
- // If the assign was succesfull fire a MIChangedEvent() via refresh.
- refresh();
- }
-
-}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/MemoryManager.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/MemoryManager.java,v
retrieving revision 1.13
diff -u -r1.13 MemoryManager.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/MemoryManager.java 5 Dec 2002 15:59:43 -0000 1.13
+++ src/org/eclipse/cdt/debug/mi/core/cdi/MemoryManager.java 9 Jan 2003 19:10:16 -0000
@@ -14,10 +14,12 @@
import org.eclipse.cdt.debug.mi.core.MIException;
import org.eclipse.cdt.debug.mi.core.MIFormat;
import org.eclipse.cdt.debug.mi.core.MISession;
+import org.eclipse.cdt.debug.mi.core.cdi.model.MemoryBlock;
import org.eclipse.cdt.debug.mi.core.command.CommandFactory;
import org.eclipse.cdt.debug.mi.core.command.MIDataReadMemory;
import org.eclipse.cdt.debug.mi.core.event.MIEvent;
import org.eclipse.cdt.debug.mi.core.event.MIMemoryChangedEvent;
+import org.eclipse.cdt.debug.mi.core.event.MIMemoryCreatedEvent;
import org.eclipse.cdt.debug.mi.core.output.MIDataReadMemoryInfo;
/**
@@ -76,7 +78,7 @@
/**
* @return the registers MemoryBlock.
*/
- MemoryBlock[] listMemoryBlocks() {
+ public MemoryBlock[] listMemoryBlocks() {
return (MemoryBlock[])blockList.toArray(new MemoryBlock[0]);
}
@@ -150,6 +152,8 @@
MIDataReadMemoryInfo info = createMIDataReadMemoryInfo(address, length);
ICDIMemoryBlock block = new MemoryBlock(getCSession().getCTarget(), address, info);
blockList.add(block);
+ MISession mi = getCSession().getMISession();
+ mi.fireEvent(new MIMemoryCreatedEvent(block.getStartAddress(), block.getLength()));
return block;
}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/RegisterManager.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/RegisterManager.java,v
retrieving revision 1.4
diff -u -r1.4 RegisterManager.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/RegisterManager.java 9 Jan 2003 03:46:22 -0000 1.4
+++ src/org/eclipse/cdt/debug/mi/core/cdi/RegisterManager.java 9 Jan 2003 19:10:16 -0000
@@ -18,6 +18,7 @@
import org.eclipse.cdt.debug.mi.core.command.MIDataListRegisterNames;
import org.eclipse.cdt.debug.mi.core.event.MIEvent;
import org.eclipse.cdt.debug.mi.core.event.MIRegisterChangedEvent;
+import org.eclipse.cdt.debug.mi.core.event.MIRegisterCreatedEvent;
import org.eclipse.cdt.debug.mi.core.output.MIDataListChangedRegistersInfo;
import org.eclipse.cdt.debug.mi.core.output.MIDataListRegisterNamesInfo;
@@ -64,7 +65,7 @@
public Register getRegister(int regno) throws CDIException {
Register[] regs = getRegisters();
for (int i = 0; i < regs.length; i++) {
- if (regs[i].getId() == regno) {
+ if (regs[i].getID() == regno) {
return regs[i];
}
}
@@ -86,6 +87,8 @@
if (reg == null) {
reg = new Register(getCSession().getCTarget(), regObject);
regList.add(reg);
+ MISession mi = getCSession().getMISession();
+ mi.fireEvent(new MIRegisterCreatedEvent(reg.getName(), reg.getID()));
}
return reg;
}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/VariableManager.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/VariableManager.java,v
retrieving revision 1.13
diff -u -r1.13 VariableManager.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/VariableManager.java 9 Jan 2003 03:46:22 -0000 1.13
+++ src/org/eclipse/cdt/debug/mi/core/cdi/VariableManager.java 9 Jan 2003 19:10:16 -0000
@@ -27,6 +27,7 @@
import org.eclipse.cdt.debug.mi.core.command.MIVarUpdate;
import org.eclipse.cdt.debug.mi.core.event.MIEvent;
import org.eclipse.cdt.debug.mi.core.event.MIVarChangedEvent;
+import org.eclipse.cdt.debug.mi.core.event.MIVarCreatedEvent;
import org.eclipse.cdt.debug.mi.core.output.MIVar;
import org.eclipse.cdt.debug.mi.core.output.MIVarChange;
import org.eclipse.cdt.debug.mi.core.output.MIVarCreateInfo;
@@ -264,6 +265,9 @@
var = new Variable(stack, name, element.miVar);
element.variable = var;
addElement(element);
+ // Fire an created Event.
+ MISession mi = getCSession().getMISession();
+ mi.fireEvent(new MIVarCreatedEvent(element.miVar.getVarName()));
}
return var;
}
@@ -277,6 +281,9 @@
Variable var = new Variable(stack, name, miVar);
element.variable = var;
addElement(element);
+ // Fire an created Event.
+ MISession mi = getCSession().getMISession();
+ mi.fireEvent(new MIVarCreatedEvent(miVar.getVarName()));
return var;
}
@@ -289,6 +296,9 @@
carg = new Argument(stack, name,element.miVar);
element.variable = carg;
addElement(element);
+ // Fire an created Event.
+ MISession mi = getCSession().getMISession();
+ mi.fireEvent(new MIVarCreatedEvent(element.miVar.getVarName()));
}
return carg;
}
@@ -302,6 +312,9 @@
cexp = new Expression(stack, name, element.miVar);
element.variable = cexp;
addElement(element);
+ // Fire an created Event.
+ MISession mi = getCSession().getMISession();
+ mi.fireEvent(new MIVarCreatedEvent(element.miVar.getVarName()));
}
return cexp;
}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/event/CreatedEvent.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/event/CreatedEvent.java,v
retrieving revision 1.1
diff -u -r1.1 CreatedEvent.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/event/CreatedEvent.java 9 Jan 2003 03:46:22 -0000 1.1
+++ src/org/eclipse/cdt/debug/mi/core/cdi/event/CreatedEvent.java 9 Jan 2003 19:10:16 -0000
@@ -4,13 +4,25 @@
*/
package org.eclipse.cdt.debug.mi.core.cdi.event;
+import org.eclipse.cdt.debug.core.cdi.CDIException;
import org.eclipse.cdt.debug.core.cdi.event.ICDICreatedEvent;
import org.eclipse.cdt.debug.core.cdi.model.ICDIBreakpoint;
+import org.eclipse.cdt.debug.core.cdi.model.ICDIMemoryBlock;
import org.eclipse.cdt.debug.core.cdi.model.ICDIObject;
+import org.eclipse.cdt.debug.core.cdi.model.ICDIThread;
import org.eclipse.cdt.debug.mi.core.cdi.BreakpointManager;
import org.eclipse.cdt.debug.mi.core.cdi.CSession;
+import org.eclipse.cdt.debug.mi.core.cdi.MemoryManager;
+import org.eclipse.cdt.debug.mi.core.cdi.RegisterManager;
+import org.eclipse.cdt.debug.mi.core.cdi.VariableManager;
import org.eclipse.cdt.debug.mi.core.cdi.model.CObject;
+import org.eclipse.cdt.debug.mi.core.cdi.model.CTarget;
+import org.eclipse.cdt.debug.mi.core.cdi.model.Register;
import org.eclipse.cdt.debug.mi.core.event.MIBreakpointCreatedEvent;
+import org.eclipse.cdt.debug.mi.core.event.MIMemoryCreatedEvent;
+import org.eclipse.cdt.debug.mi.core.event.MIRegisterCreatedEvent;
+import org.eclipse.cdt.debug.mi.core.event.MIThreadCreatedEvent;
+import org.eclipse.cdt.debug.mi.core.event.MIVarCreatedEvent;
/**
*/
@@ -27,6 +39,61 @@
if (breakpoint != null) {
source = breakpoint;
} else {
+ source = new CObject(session.getCTarget());
+ }
+ }
+
+ public CreatedEvent(CSession s, MIVarCreatedEvent var) {
+ session = s;
+ VariableManager mgr = session.getVariableManager();
+ String varName = var.getVarName();
+ VariableManager.Element element = mgr.getElement(varName);
+ if (element != null && element.variable != null) {
+ source = element.variable;
+ } else {
+ source = new CObject(session.getCTarget());
+ }
+ }
+
+ public CreatedEvent(CSession s, MIRegisterCreatedEvent var) {
+ session = s;
+ RegisterManager mgr = session.getRegisterManager();
+ int regno = var.getNumber();
+ Register reg = null;
+ try {
+ reg = mgr.getRegister(regno);
+ } catch (CDIException e) {
+ }
+ if (reg != null) {
+ source = reg;
+ } else {
+ source = new CObject(session.getCTarget());
+ }
+ }
+
+ public CreatedEvent(CSession s, MIThreadCreatedEvent ethread) {
+ session = s;
+ CTarget target = (CTarget)session.getCurrentTarget();
+ ICDIThread thread = target.getThread(ethread.getId());
+ if (thread != null) {
+ source = thread;
+ } else {
+ source = new CObject(session.getCTarget());
+ }
+ }
+
+ public CreatedEvent(CSession s, MIMemoryCreatedEvent mblock) {
+ session = s;
+ MemoryManager mgr = (MemoryManager)session.getMemoryManager();
+ ICDIMemoryBlock[] blocks = mgr.listMemoryBlocks();
+ for (int i = 0; i < blocks.length; i++) {
+ if (blocks[i].getStartAddress() == mblock.getAddress() &&
+ blocks[i].getLength() == mblock.getLength()) {
+ source = blocks[i];
+ break;
+ }
+ }
+ if (source == null) {
source = new CObject(session.getCTarget());
}
}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/event/MemoryChangedEvent.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/event/MemoryChangedEvent.java,v
retrieving revision 1.1
diff -u -r1.1 MemoryChangedEvent.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/event/MemoryChangedEvent.java 9 Jan 2003 03:46:22 -0000 1.1
+++ src/org/eclipse/cdt/debug/mi/core/cdi/event/MemoryChangedEvent.java 9 Jan 2003 19:10:16 -0000
@@ -10,7 +10,7 @@
import org.eclipse.cdt.debug.core.cdi.event.ICDIMemoryChangedEvent;
import org.eclipse.cdt.debug.core.cdi.model.ICDIObject;
import org.eclipse.cdt.debug.mi.core.cdi.CSession;
-import org.eclipse.cdt.debug.mi.core.cdi.MemoryBlock;
+import org.eclipse.cdt.debug.mi.core.cdi.model.MemoryBlock;
import org.eclipse.cdt.debug.mi.core.event.MIMemoryChangedEvent;
/**
Index: src/org/eclipse/cdt/debug/mi/core/cdi/model/CTarget.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/CTarget.java,v
retrieving revision 1.1
diff -u -r1.1 CTarget.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/model/CTarget.java 9 Jan 2003 03:46:22 -0000 1.1
+++ src/org/eclipse/cdt/debug/mi/core/cdi/model/CTarget.java 9 Jan 2003 19:10:16 -0000
@@ -36,6 +36,7 @@
import org.eclipse.cdt.debug.mi.core.command.MITargetDetach;
import org.eclipse.cdt.debug.mi.core.command.MIThreadSelect;
import org.eclipse.cdt.debug.mi.core.event.MIDetachedEvent;
+import org.eclipse.cdt.debug.mi.core.event.MIThreadCreatedEvent;
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.MIInfo;
@@ -144,12 +145,38 @@
currentThreads = newThreads;
+ // Fire CreatedEvent for new threads.
+ if (newThreads != null && newThreads.length > 0) {
+ List cList = new ArrayList(newThreads.length);
+ for (int i = 0; i < newThreads.length; i++) {
+ boolean found = false;
+ for (int j = 0; oldThreads != null && j < oldThreads.length; j++) {
+ if (newThreads[j].getId() == ((CThread)oldThreads[i]).getId()) {
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ cList.add(new Integer(newThreads[i].getId()));
+ }
+ }
+ if (!cList.isEmpty()) {
+ MIThreadCreatedEvent[] events = new MIThreadCreatedEvent[cList.size()];
+ for (int j = 0; j < events.length; j++) {
+ int id = ((Integer)cList.get(j)).intValue();
+ events[j] = new MIThreadCreatedEvent(id);
+ }
+ MISession miSession = session.getMISession();
+ miSession.fireEvents(events);
+ }
+ }
+
// Fire destroyedEvent for old threads.
if (oldThreads != null && oldThreads.length > 0) {
List dList = new ArrayList(oldThreads.length);
for (int i = 0; i < oldThreads.length; i++) {
boolean found = false;
- for (int j = 0; j < newThreads.length; j++) {
+ for (int j = 0; newThreads != null && j < newThreads.length; j++) {
if (newThreads[j].getId() == ((CThread)oldThreads[i]).getId()) {
found = true;
break;
@@ -233,6 +260,20 @@
currentThreads = getCThreads();
}
return currentThreads;
+ }
+
+ public ICDIThread getThread(int tid) {
+ CThread th = null;
+ if (currentThreads != null) {
+ for (int i = 0; i < currentThreads.length; i++) {
+ CThread cthread = (CThread)currentThreads[i];
+ if (cthread.getId() == tid) {
+ th = cthread;
+ break;
+ }
+ }
+ }
+ return th;
}
/**
Index: src/org/eclipse/cdt/debug/mi/core/cdi/model/MemoryBlock.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/cdi/model/MemoryBlock.java
diff -N src/org/eclipse/cdt/debug/mi/core/cdi/model/MemoryBlock.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/mi/core/cdi/model/MemoryBlock.java 9 Jan 2003 19:10:16 -0000
@@ -0,0 +1,189 @@
+package org.eclipse.cdt.debug.mi.core.cdi.model;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.cdt.debug.core.cdi.CDIException;
+import org.eclipse.cdt.debug.core.cdi.model.ICDIMemoryBlock;
+import org.eclipse.cdt.debug.mi.core.MIException;
+import org.eclipse.cdt.debug.mi.core.MIFormat;
+import org.eclipse.cdt.debug.mi.core.MISession;
+import org.eclipse.cdt.debug.mi.core.cdi.MI2CDIException;
+import org.eclipse.cdt.debug.mi.core.cdi.MemoryManager;
+import org.eclipse.cdt.debug.mi.core.command.CommandFactory;
+import org.eclipse.cdt.debug.mi.core.command.MIDataWriteMemory;
+import org.eclipse.cdt.debug.mi.core.output.MIDataReadMemoryInfo;
+import org.eclipse.cdt.debug.mi.core.output.MIInfo;
+import org.eclipse.cdt.debug.mi.core.output.MIMemory;
+
+/**
+ */
+public class MemoryBlock extends CObject implements ICDIMemoryBlock {
+
+ MIDataReadMemoryInfo mem;
+ String expression;
+ boolean frozen;
+ boolean dirty;
+
+ public MemoryBlock(CTarget target, String exp, MIDataReadMemoryInfo info) {
+ super(target);
+ expression = exp;
+ mem = info;
+ frozen = true;
+ }
+
+ /**
+ * @return the expression use to create the block.
+ */
+ public String getExpression() {
+ return expression;
+ }
+
+ /**
+ * Reset the internal MIDataReadMemoryInfo.
+ */
+ public void setMIDataReadMemoryInfo(MIDataReadMemoryInfo m) {
+ mem = m;
+ }
+
+ /**
+ * @return the internal MIDataReadMemoryInfo.
+ */
+ public MIDataReadMemoryInfo getMIDataReadMemoryInfo() {
+ return mem;
+ }
+
+ /**
+ * @return true if any address in the array is within the block.
+ */
+ public boolean contains(Long[] adds) {
+ for (int i = 0; i < adds.length; i++) {
+ if (contains(adds[i])) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * @return true if the address is within the block.
+ */
+ public boolean contains(Long addr) {
+ long start = getStartAddress();
+ long length = getLength();
+ if (start <= addr.longValue() && addr.longValue() <= start + length) {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Use by the EventManager to check fire events when doing refresh().
+ */
+ public boolean isDirty() {
+ return dirty;
+ }
+
+ /**
+ * Use by the EventManager to check fire events when doing refresh().
+ */
+ public void setDirty(boolean d) {
+ dirty = d;
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIMemoryBlock#getBytes()
+ */
+ public byte[] getBytes() throws CDIException {
+ MIMemory[] miMem = mem.getMemories();
+ List aList = new ArrayList();
+ for (int i = 0; i < miMem.length; i++) {
+ long[] data = miMem[i].getData();
+ for (int j = 0; j < data.length; j++) {
+ aList.add(new Long(data[j]));
+ }
+ }
+ byte[] bytes = new byte[aList.size()];
+ for (int i = 0; i < aList.size(); i++) {
+ Long l = (Long)aList.get(i);
+ bytes[i] = l.byteValue();
+ }
+ return bytes;
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIMemoryBlock#refresh()
+ */
+ public void refresh() throws CDIException {
+ MemoryManager mgr = (MemoryManager)getCTarget().getCSession().getMemoryManager();
+ setDirty(true);
+ Long[] addresses = mgr.update(this, null);
+ // Check if this affects other blocks.
+ if (addresses.length > 0) {
+ MemoryBlock[] blocks = mgr.listMemoryBlocks();
+ for (int i = 0; i < blocks.length; i++) {
+ if (! blocks[i].equals(this) && blocks[i].contains(addresses)) {
+ blocks[i].setDirty(true);
+ mgr.update(blocks[i], null);
+ }
+ }
+ }
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIMemoryBlock#getLength()
+ */
+ public long getLength() {
+ return mem.getTotalBytes();
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIMemoryBlock#getStartAddress()
+ */
+ public long getStartAddress() {
+ return mem.getAddress();
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIMemoryBlock#isFrozen()
+ */
+ public boolean isFrozen() {
+ return frozen;
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIMemoryBlock#setFrozen(boolean)
+ */
+ public void setFrozen(boolean frozen) {
+ this.frozen = frozen;
+ }
+
+ /**
+ * @see org.eclipse.cdt.debug.core.cdi.model.ICDIMemoryBlock#setValue(long, byte[])
+ */
+ public void setValue(long offset, byte[] bytes) throws CDIException {
+ if (offset >= getLength() || offset + bytes.length > getLength()) {
+ throw new CDIException("Bad Offset");
+ }
+ MISession mi = getCTarget().getCSession().getMISession();
+ CommandFactory factory = mi.getCommandFactory();
+ for (int i = 0; i < bytes.length; i++) {
+ long l = new Byte(bytes[i]).longValue() & 0xff;
+ String value = "0x" + Long.toHexString(l);
+ MIDataWriteMemory mw = factory.createMIDataWriteMemory(offset + i,
+ expression, MIFormat.HEXADECIMAL, 1, value);
+ try {
+ mi.postCommand(mw);
+ MIInfo info = mw.getMIInfo();
+ if (info == null) {
+ throw new CDIException("No answer");
+ }
+ } catch (MIException e) {
+ throw new MI2CDIException(e);
+ }
+ }
+ // If the assign was succesfull fire a MIChangedEvent() via refresh.
+ refresh();
+ }
+
+}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/model/Register.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/model/Register.java,v
retrieving revision 1.1
diff -u -r1.1 Register.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/model/Register.java 9 Jan 2003 03:46:22 -0000 1.1
+++ src/org/eclipse/cdt/debug/mi/core/cdi/model/Register.java 9 Jan 2003 19:10:16 -0000
@@ -82,7 +82,7 @@
/**
* return the MI regno.
*/
- public int getId() {
+ public int getID() {
return regObject.getId();
}
Index: src/org/eclipse/cdt/debug/mi/core/event/MIBreakpointChangedEvent.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/event/MIBreakpointChangedEvent.java,v
retrieving revision 1.1
diff -u -r1.1 MIBreakpointChangedEvent.java
--- src/org/eclipse/cdt/debug/mi/core/event/MIBreakpointChangedEvent.java 8 Jan 2003 21:33:22 -0000 1.1
+++ src/org/eclipse/cdt/debug/mi/core/event/MIBreakpointChangedEvent.java 9 Jan 2003 19:10:16 -0000
@@ -15,8 +15,7 @@
int no;
public MIBreakpointChangedEvent(int number) {
- super(0);
- no = number;
+ this(0, number);
}
public MIBreakpointChangedEvent(int id, int number) {
Index: src/org/eclipse/cdt/debug/mi/core/event/MIBreakpointCreatedEvent.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/event/MIBreakpointCreatedEvent.java,v
retrieving revision 1.1
diff -u -r1.1 MIBreakpointCreatedEvent.java
--- src/org/eclipse/cdt/debug/mi/core/event/MIBreakpointCreatedEvent.java 8 Jan 2003 21:33:22 -0000 1.1
+++ src/org/eclipse/cdt/debug/mi/core/event/MIBreakpointCreatedEvent.java 9 Jan 2003 19:10:16 -0000
@@ -15,8 +15,7 @@
int no;
public MIBreakpointCreatedEvent(int number) {
- super(0);
- no = number;
+ this(0, number);
}
public MIBreakpointCreatedEvent(int id, int number) {
Index: src/org/eclipse/cdt/debug/mi/core/event/MIBreakpointDeletedEvent.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/event/MIBreakpointDeletedEvent.java,v
retrieving revision 1.1
diff -u -r1.1 MIBreakpointDeletedEvent.java
--- src/org/eclipse/cdt/debug/mi/core/event/MIBreakpointDeletedEvent.java 8 Jan 2003 21:33:22 -0000 1.1
+++ src/org/eclipse/cdt/debug/mi/core/event/MIBreakpointDeletedEvent.java 9 Jan 2003 19:10:16 -0000
@@ -15,8 +15,7 @@
int no;
public MIBreakpointDeletedEvent(int number) {
- super(0);
- no = number;
+ this(0, number);
}
public MIBreakpointDeletedEvent(int id, int number) {
Index: src/org/eclipse/cdt/debug/mi/core/event/MIMemoryCreatedEvent.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/event/MIMemoryCreatedEvent.java
diff -N src/org/eclipse/cdt/debug/mi/core/event/MIMemoryCreatedEvent.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/mi/core/event/MIMemoryCreatedEvent.java 9 Jan 2003 19:10:16 -0000
@@ -0,0 +1,37 @@
+/*
+ * (c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ *
+ */
+package org.eclipse.cdt.debug.mi.core.event;
+
+
+
+/**
+ * This can not be detected yet by gdb/mi.
+ *
+ */
+public class MIMemoryCreatedEvent extends MICreatedEvent {
+
+ long address;
+ long totalBytes;
+
+ public MIMemoryCreatedEvent(long addr, long total) {
+ this(0, addr, total);
+ }
+
+ public MIMemoryCreatedEvent(int token, long addr, long total) {
+ super(token);
+ address = addr;
+ totalBytes = total;
+ }
+
+ public long getAddress() {
+ return address;
+ }
+
+ public long getLength() {
+ return totalBytes;
+ }
+
+}
Index: src/org/eclipse/cdt/debug/mi/core/event/MIRegisterCreatedEvent.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/event/MIRegisterCreatedEvent.java
diff -N src/org/eclipse/cdt/debug/mi/core/event/MIRegisterCreatedEvent.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/mi/core/event/MIRegisterCreatedEvent.java 9 Jan 2003 19:10:16 -0000
@@ -0,0 +1,37 @@
+/*
+ * (c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ *
+ */
+package org.eclipse.cdt.debug.mi.core.event;
+
+
+
+/**
+ * This can not be detected yet by gdb/mi.
+ *
+ */
+public class MIRegisterCreatedEvent extends MICreatedEvent {
+
+ String regName;
+ int regno;
+
+ public MIRegisterCreatedEvent(String name, int number) {
+ this(0, name, number);
+ }
+
+ public MIRegisterCreatedEvent(int token, String name, int number) {
+ super(token);
+ regName = name;
+ regno = number;
+ }
+
+ public String getName() {
+ return regName;
+ }
+
+ public int getNumber() {
+ return regno;
+ }
+
+}
Index: src/org/eclipse/cdt/debug/mi/core/event/MIThreadCreatedEvent.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/event/MIThreadCreatedEvent.java
diff -N src/org/eclipse/cdt/debug/mi/core/event/MIThreadCreatedEvent.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/mi/core/event/MIThreadCreatedEvent.java 9 Jan 2003 19:10:16 -0000
@@ -0,0 +1,29 @@
+/*
+ * (c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ *
+ */
+package org.eclipse.cdt.debug.mi.core.event;
+
+
+/**
+ * This can not be detected yet by gdb/mi.
+ *
+ */
+public class MIThreadCreatedEvent extends MICreatedEvent {
+
+ int tid;
+
+ public MIThreadCreatedEvent(int id) {
+ this(0, id);
+ }
+
+ public MIThreadCreatedEvent(int token, int id) {
+ super(token);
+ tid = id;
+ }
+
+ public int getId() {
+ return tid;
+ }
+}
Index: src/org/eclipse/cdt/debug/mi/core/event/MIVarCreatedEvent.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/event/MIVarCreatedEvent.java
diff -N src/org/eclipse/cdt/debug/mi/core/event/MIVarCreatedEvent.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/mi/core/event/MIVarCreatedEvent.java 9 Jan 2003 19:10:16 -0000
@@ -0,0 +1,32 @@
+/*
+ * (c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ *
+ */
+package org.eclipse.cdt.debug.mi.core.event;
+
+
+
+/**
+ * This can not be detected yet by gdb/mi.
+ *
+ */
+public class MIVarCreatedEvent extends MICreatedEvent {
+
+ String varName;
+
+ public MIVarCreatedEvent(String var) {
+ super(0);
+ varName = var;
+ }
+
+ public MIVarCreatedEvent(int token, String var) {
+ super(token);
+ varName = var;
+ }
+
+ public String getVarName() {
+ return varName;
+ }
+
+}