[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[cdt-patch] Implementing Write to memory and Write to register.
|
-data-write-register-values is not in the texinfo manual but implemented in
gdb-5.2.1/gdb/mi/mim-main.c:
Write given values into registers. The registers and values are
given as pairs. The corresponding MI command is
-data-write-register-values <format> [<regnum1> <value1>...<regnumN> <valueN>]
* src/.../core/command/MIDataWriteRegisterValues.java: New file.
* src/.../core/command/CommandFactory.java (createMIDataWriteMemory): New method.
* src/.../core/cdi/Register.java (setValue): Implemented.
Althought -data-write-memory is not documented in the texinfo manual
it is implemented and well documented in the code(gdb-5.2.1/gdb/mi/mi-main.c).
"mi_cmd_data_write_memory: Usage: [-o COLUMN_OFFSET] ADDR FORMAT WORD-SIZE VALUE.");
* src/.../core/command/MIDataWriteMemory.java: New file
* src/.../core/command/CommandFactory.java (createMIDataWriteMemory): New method.
* src/.../core/cdi/MemoryBlock.java (setValue): Implemented.
* src/.../core/cdi/CTarget.java (getMemoryBlock): Remove
we use the MemoryManager instead.
(EvaluateExpressionToValue): Removed not use.
* src/.../core/cdi/SourceManager.java (setFile): Removed not use.
(getFile): Removed not use.
(reset): Removed not use.
Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/ChangeLog,v
retrieving revision 1.10
diff -u -r1.10 ChangeLog
--- ChangeLog 19 Oct 2002 19:21:24 -0000 1.10
+++ ChangeLog 20 Oct 2002 23:22:00 -0000
@@ -1,3 +1,34 @@
+2002-10-20 Alain Magloire
+
+ -data-write-register-values is not in the texinfo manual but implemented in
+ gdb-5.2.1/gdb/mi/mim-main.c:
+ Write given values into registers. The registers and values are
+ given as pairs. The corresponding MI command is
+ -data-write-register-values <format> [<regnum1> <value1>...<regnumN> <valueN>]
+
+ * src/.../core/command/MIDataWriteRegisterValues.java: New file.
+ * src/.../core/command/CommandFactory.java (createMIDataWriteMemory): New method.
+ * src/.../core/cdi/Register.java (setValue): Implemented.
+
+2002-10-20 Alain Magloire
+
+ Althought -data-write-memory is not documented in the texinfo manual
+ it is implemented and well documented in the code(gdb-5.2.1/gdb/mi/mi-main.c).
+ "mi_cmd_data_write_memory: Usage: [-o COLUMN_OFFSET] ADDR FORMAT WORD-SIZE VALUE.");
+
+ * src/.../core/command/MIDataWriteMemory.java: New file
+ * src/.../core/command/CommandFactory.java (createMIDataWriteMemory): New method.
+ * src/.../core/cdi/MemoryBlock.java (setValue): Implemented.
+
+2002-10-20 Alain Magloire
+
+ * src/.../core/cdi/CTarget.java (getMemoryBlock): Remove
+ we use the MemoryManager instead.
+ (EvaluateExpressionToValue): Removed not use.
+ * src/.../core/cdi/SourceManager.java (setFile): Removed not use.
+ (getFile): Removed not use.
+ (reset): Removed not use.
+
2002-10-19 Alain Magloire
The responsability to generate Events for modify memory blocks is push
Index: src/org/eclipse/cdt/debug/mi/core/cdi/CTarget.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/CTarget.java,v
retrieving revision 1.30
diff -u -r1.30 CTarget.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/CTarget.java 19 Oct 2002 19:19:11 -0000 1.30
+++ src/org/eclipse/cdt/debug/mi/core/cdi/CTarget.java 20 Oct 2002 23:22:07 -0000
@@ -12,12 +12,10 @@
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.ICDIRegister;
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;
-import org.eclipse.cdt.debug.core.cdi.model.ICDIValue;
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;
@@ -500,26 +498,10 @@
}
/**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#getCMemoryBlock(long, long)
- */
- public ICDIMemoryBlock getCMemoryBlock(long startAddress, long length)
- throws CDIException {
- return null;
- }
-
- /**
* @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#getProcess()
*/
public Process getProcess() {
return session.getMISession().getMIInferior();
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.model.ICDITarget#evaluateExpressionToValue(String)
- */
- public ICDIValue evaluateExpressionToValue(String expressionText)
- throws CDIException {
- return null;
}
}
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.3
diff -u -r1.3 MemoryBlock.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/MemoryBlock.java 19 Oct 2002 19:19:53 -0000 1.3
+++ src/org/eclipse/cdt/debug/mi/core/cdi/MemoryBlock.java 20 Oct 2002 23:22:04 -0000
@@ -5,7 +5,13 @@
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.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;
/**
@@ -120,7 +126,23 @@
* @see org.eclipse.cdt.debug.core.cdi.model.ICDIMemoryBlock#setValue(long, byte[])
*/
public void setValue(long offset, byte[] bytes) throws CDIException {
- throw new CDIException("Not supported");
+ MISession mi = getCTarget().getCSession().getMISession();
+ CommandFactory factory = mi.getCommandFactory();
+ for (int i = 0; i < bytes.length; i++) {
+ long l = new Byte(bytes[i]).longValue();
+ String value = "0x" + Long.toHexString(l);
+ MIDataWriteMemory mem = factory.createMIDataWriteMemory(offset + i,
+ expression, MIFormat.HEXADECIMAL, 1, value);
+ try {
+ mi.postCommand(mem);
+ MIInfo info = mem.getMIInfo();
+ if (info == null) {
+ throw new CDIException("No answer");
+ }
+ } catch (MIException e) {
+ throw new CDIException(e.getMessage());
+ }
+ }
}
}
Index: src/org/eclipse/cdt/debug/mi/core/cdi/Register.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/Register.java,v
retrieving revision 1.3
diff -u -r1.3 Register.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/Register.java 2 Oct 2002 04:50:39 -0000 1.3
+++ src/org/eclipse/cdt/debug/mi/core/cdi/Register.java 20 Oct 2002 23:22:05 -0000
@@ -19,7 +19,9 @@
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.MIDataListRegisterValues;
+import org.eclipse.cdt.debug.mi.core.command.MIDataWriteRegisterValues;
import org.eclipse.cdt.debug.mi.core.output.MIDataListRegisterValuesInfo;
+import org.eclipse.cdt.debug.mi.core.output.MIInfo;
import org.eclipse.cdt.debug.mi.core.output.MIRegisterValue;
/**
@@ -198,7 +200,21 @@
* @see org.eclipse.cdt.debug.core.cdi.model.ICDIVariable#setValue(String)
*/
public void setValue(String expression) throws CDIException {
- throw new CDIException("Register setting is not supported");
+ MISession mi = getCTarget().getCSession().getMISession();
+ CommandFactory factory = mi.getCommandFactory();
+ int[] regnos = new int[]{((RegisterObject)regObject).getId()};
+ String[] values = new String[]{expression};
+ MIDataWriteRegisterValues registers =
+ factory.createMIDataWriteRegisterValues(format, regnos, values);
+ try {
+ mi.postCommand(registers);
+ MIInfo info = registers.getMIInfo();
+ if (info == null) {
+ throw new CDIException("No answer");
+ }
+ } catch (MIException e) {
+ throw new CDIException(e.getMessage());
+ }
}
/**
Index: src/org/eclipse/cdt/debug/mi/core/cdi/SourceManager.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/cdi/SourceManager.java,v
retrieving revision 1.15
diff -u -r1.15 SourceManager.java
--- src/org/eclipse/cdt/debug/mi/core/cdi/SourceManager.java 12 Oct 2002 01:21:51 -0000 1.15
+++ src/org/eclipse/cdt/debug/mi/core/cdi/SourceManager.java 20 Oct 2002 23:22:08 -0000
@@ -5,8 +5,6 @@
*/
package org.eclipse.cdt.debug.mi.core.cdi;
-import java.io.File;
-
import org.eclipse.cdt.debug.core.cdi.CDIException;
import org.eclipse.cdt.debug.core.cdi.ICDISourceManager;
import org.eclipse.cdt.debug.core.cdi.model.ICDIInstruction;
@@ -33,25 +31,6 @@
public SourceManager(CSession session) {
super(session);
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.ICDISourceManager#getDirectories()
- */
- public File[] getDirectories() throws CDIException {
- return null;
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.ICDISourceManager#reset()
- */
- public void reset() throws CDIException {
- }
-
- /**
- * @see org.eclipse.cdt.debug.core.cdi.ICDISourceManager#set(File[])
- */
- public void set(File[] directories) throws CDIException {
}
/**
Index: src/org/eclipse/cdt/debug/mi/core/command/CommandFactory.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.debug.mi.core/src/org/eclipse/cdt/debug/mi/core/command/CommandFactory.java,v
retrieving revision 1.15
diff -u -r1.15 CommandFactory.java
--- src/org/eclipse/cdt/debug/mi/core/command/CommandFactory.java 2 Oct 2002 04:53:54 -0000 1.15
+++ src/org/eclipse/cdt/debug/mi/core/command/CommandFactory.java 20 Oct 2002 23:22:11 -0000
@@ -68,12 +68,16 @@
return new MIDataListRegisterNames();
}
- public MIDataListRegisterNames createMIDataListRegisterNames(int[] regno) {
- return new MIDataListRegisterNames(regno);
+ public MIDataListRegisterNames createMIDataListRegisterNames(int[] regnos) {
+ return new MIDataListRegisterNames(regnos);
}
- public MIDataListRegisterValues createMIDataListRegisterValues(int fmt, int[] regno) {
- return new MIDataListRegisterValues(fmt, regno);
+ public MIDataListRegisterValues createMIDataListRegisterValues(int fmt, int[] regnos) {
+ return new MIDataListRegisterValues(fmt, regnos);
+ }
+
+ public MIDataWriteRegisterValues createMIDataWriteRegisterValues(int fmt, int[] regnos, String[] values) {
+ return new MIDataWriteRegisterValues(fmt, regnos, values);
}
public MIDataReadMemory createMIDataReadMemory(long offset, String address,
@@ -81,6 +85,12 @@
int rows, int cols, Character asChar) {
return new MIDataReadMemory(offset, address, wordFormat, wordSize,
rows, cols, asChar);
+ }
+
+ public MIDataWriteMemory createMIDataWriteMemory(long offset, String address,
+ int wordFormat, int wordSize,
+ String value) {
+ return new MIDataWriteMemory(offset, address, wordFormat, wordSize, value);
}
public MIEnvironmentCD createMIEnvironmentCD(String pathdir) {
Index: src/org/eclipse/cdt/debug/mi/core/command/MIDataWriteMemory.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/command/MIDataWriteMemory.java
diff -N src/org/eclipse/cdt/debug/mi/core/command/MIDataWriteMemory.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/mi/core/command/MIDataWriteMemory.java 20 Oct 2002 23:22:10 -0000
@@ -0,0 +1,93 @@
+/*
+ *(c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ *
+ */
+
+package org.eclipse.cdt.debug.mi.core.command;
+
+import org.eclipse.cdt.debug.mi.core.MIFormat;
+
+/**
+ *
+ * -data-write-memory [-o COLUMN_OFFSET] ADDR FORMAT WORD-SIZE VALUE.");
+ *
+ * where:
+ *
+ * DATA-MEMORY-WRITE:
+ *
+ * COLUMN_OFFSET: optional argument. Must be preceeded by '-o'. The
+ * offset from the beginning of the memory grid row where the cell to
+ * be written is.
+ * ADDR: start address of the row in the memory grid where the memory
+ * cell is, if OFFSET_COLUMN is specified. Otherwise, the address of
+ * the location to write to.
+ * FORMAT: a char indicating format for the ``word''. See
+ * the ``x'' command.
+ * WORD_SIZE: size of each ``word''; 1,2,4, or 8 bytes
+ * VALUE: value to be written into the memory address.
+ *
+ * Writes VALUE into ADDR + (COLUMN_OFFSET * WORD_SIZE).
+ *
+ * Prints nothing.
+ *
+ */
+public class MIDataWriteMemory extends MICommand {
+
+ public MIDataWriteMemory(long offset, String address, int wordFormat, int wordSize,
+ String value) {
+
+ super ("-data-write-memory");
+
+ if (offset != 0) {
+ setOptions(new String[] { "-o", Long.toString(offset)});
+ }
+
+ String format = "x";
+ switch (wordFormat) {
+ case MIFormat.UNSIGNED :
+ format = "u";
+ break;
+
+ case MIFormat.FLOAT :
+ format = "f";
+ break;
+
+ case MIFormat.ADDRESS :
+ format = "a";
+ break;
+
+ case MIFormat.INSTRUCTION :
+ format = "i";
+ break;
+
+ case MIFormat.CHAR :
+ format = "c";
+ break;
+
+ case MIFormat.STRING :
+ format = "s";
+ break;
+
+ case MIFormat.DECIMAL :
+ format = "d";
+ break;
+
+ case MIFormat.BINARY :
+ format = "t";
+ break;
+
+ case MIFormat.OCTAL :
+ format = "o";
+ break;
+
+ case MIFormat.HEXADECIMAL :
+ default :
+ format = "x";
+ break;
+ }
+
+ setParameters(new String[] {address, format, Integer.toString(wordSize), value});
+ }
+
+}
Index: src/org/eclipse/cdt/debug/mi/core/command/MIDataWriteRegisterValues.java
===================================================================
RCS file: src/org/eclipse/cdt/debug/mi/core/command/MIDataWriteRegisterValues.java
diff -N src/org/eclipse/cdt/debug/mi/core/command/MIDataWriteRegisterValues.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/debug/mi/core/command/MIDataWriteRegisterValues.java 20 Oct 2002 23:22:11 -0000
@@ -0,0 +1,67 @@
+/*
+ *(c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ *
+ */
+
+package org.eclipse.cdt.debug.mi.core.command;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.cdt.debug.mi.core.MIFormat;
+
+/**
+ *
+ * Write given values into registers. The registers and values are
+ * given as pairs. The corresponding MI command is
+ * -data-write-register-values <format> [<regnum1> <value1>...<regnumN> <valueN>]
+ *
+ */
+public class MIDataWriteRegisterValues extends MICommand {
+
+ public MIDataWriteRegisterValues(int fmt, int[] regnos, String[] values) {
+ super("-data-write-register-values");
+
+ String format = "x";
+ switch (fmt) {
+ case MIFormat.NATURAL:
+ format = "N";
+ break;
+
+ case MIFormat.RAW:
+ format = "r";
+ break;
+
+ case MIFormat.DECIMAL:
+ format = "d";
+ break;
+
+ case MIFormat.BINARY:
+ format = "t";
+ break;
+
+ case MIFormat.OCTAL:
+ format = "o";
+ break;
+
+ case MIFormat.HEXADECIMAL:
+ default:
+ format = "x";
+ break;
+ }
+
+ setOptions(new String[]{format});
+
+ if (regnos != null && values != null) {
+ List aList = new ArrayList(regnos.length);
+ for (int i = 0; i < regnos.length && i < values.length; i++) {
+ aList.add(Integer.toString(regnos[i]));
+ aList.add(values[i]);
+ }
+ String[] array = (String[])aList.toArray(new String[0]);
+ setParameters(array);
+ }
+ }
+
+}