Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] Fire an Memory Change event when memory is set.

2002-10-26 Alain Magloire

	* src/.../core/cdi/MemoryBlock.java (setValue): Generate
	a MemoryChangeEvent when the value is set, gdb/mi will not
	do it.


Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/ChangeLog,v
retrieving revision 1.22
diff -u -r1.22 ChangeLog
--- ChangeLog	26 Oct 2002 23:40:44 -0000	1.22
+++ ChangeLog	28 Oct 2002 20:37:40 -0000
@@ -1,3 +1,9 @@
+2002-10-26 Alain Magloire
+
+	* src/.../core/cdi/MemoryBlock.java (setValue): Generate
+	a MemoryChangeEvent when the value is set, gdb/mi will not
+	do it.
+
 2002-10-25 Alain Magloire
 
 	* src/.../core/cdi/CThread.java (getStackFrames): Save the
Index: src/org/eclipse/cdt/debug/mi/core/cdi/MemoryBlock.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/MemoryBlock.java,v
retrieving revision 1.5
diff -u -r1.5 MemoryBlock.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/MemoryBlock.java	26 Oct 2002 23:40:13 -0000	1.5
+++ src/org/eclipse/cdt/debug/mi/core/cdi/MemoryBlock.java	28 Oct 2002 20:37:40 -0000
@@ -10,6 +10,7 @@
 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.MIDataWriteMemory;
+import org.eclipse.cdt.debug.mi.core.event.MIMemoryChangedEvent;
 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;
@@ -134,8 +135,12 @@
 	 * @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();
+		Long[] addresses = new Long[bytes.length];
 		for (int i = 0; i < bytes.length; i++) {
 			long l = new Byte(bytes[i]).longValue();
 			String value = "0x" + Long.toHexString(l);
@@ -150,7 +155,11 @@
 			} catch (MIException e) {
 				throw new CDIException(e.getMessage());
 			}
+			addresses[i] = new Long(getStartAddress() + offset + i);
 		}
+		// If the assign was succesfull fire a MIChangedEvent()
+		MIMemoryChangedEvent change = new MIMemoryChangedEvent(addresses);
+		mi.fireEvent(change);
 	}
 
 }



Back to the top