cris: Add CRISv10 gdbstub support.
authorEdgar E. Iglesias <edgar.iglesias@gmail.com>
Sat, 20 Feb 2010 18:51:56 +0000 (19:51 +0100)
committerEdgar E. Iglesias <edgar.iglesias@gmail.com>
Sat, 20 Feb 2010 18:51:56 +0000 (19:51 +0100)
Signed-off-by: Edgar E. Iglesias <edgar.iglesias@gmail.com>
gdbstub.c

index 80477be..91c5f68 100644 (file)
--- a/gdbstub.c
+++ b/gdbstub.c
@@ -1249,10 +1249,46 @@ static int cpu_gdb_write_register(CPUState *env, uint8_t *mem_buf, int n)
 
 #define NUM_CORE_REGS 49
 
+static int
+read_register_crisv10(CPUState *env, uint8_t *mem_buf, int n)
+{
+    if (n < 15) {
+        GET_REG32(env->regs[n]);
+    }
+
+    if (n == 15) {
+        GET_REG32(env->pc);
+    }
+
+    if (n < 32) {
+        switch (n) {
+        case 16:
+            GET_REG8(env->pregs[n - 16]);
+            break;
+        case 17:
+            GET_REG8(env->pregs[n - 16]);
+            break;
+        case 20:
+        case 21:
+            GET_REG16(env->pregs[n - 16]);
+            break;
+        default:
+            if (n >= 23) {
+                GET_REG32(env->pregs[n - 16]);
+            }
+            break;
+        }
+    }
+    return 0;
+}
+
 static int cpu_gdb_read_register(CPUState *env, uint8_t *mem_buf, int n)
 {
     uint8_t srs;
 
+    if (env->pregs[PR_VR] < 32)
+        return read_register_crisv10(env, mem_buf, n);
+
     srs = env->pregs[PR_SRS];
     if (n < 16) {
        GET_REG32(env->regs[n]);