PATCH: debugger / ppc

Marcus Meissner meissner at suse.de
Fri Aug 30 02:09:16 CDT 2002


Hi,

Ciao, Marcus

License: LGPL
Changelog:
	Added gdbproxy support for ppc, added missing GET_IP for memory.c.

Index: debugger/gdbproxy.c
===================================================================
RCS file: /home/wine/wine/debugger/gdbproxy.c,v
retrieving revision 1.3
diff -u -r1.3 gdbproxy.c
--- debugger/gdbproxy.c	19 Aug 2002 23:58:03 -0000	1.3
+++ debugger/gdbproxy.c	30 Aug 2002 07:08:15 -0000
@@ -169,7 +169,85 @@
     OFFSET_OF(CONTEXT, SegGs),
 };
 #else
-#error "Define the registers map for your CPU"
+# ifdef __powerpc__
+static size_t cpu_register_map[] = {
+    OFFSET_OF(CONTEXT, Gpr0),
+    OFFSET_OF(CONTEXT, Gpr1),
+    OFFSET_OF(CONTEXT, Gpr2),
+    OFFSET_OF(CONTEXT, Gpr3),
+    OFFSET_OF(CONTEXT, Gpr4),
+    OFFSET_OF(CONTEXT, Gpr5),
+    OFFSET_OF(CONTEXT, Gpr6),
+    OFFSET_OF(CONTEXT, Gpr7),
+    OFFSET_OF(CONTEXT, Gpr8),
+    OFFSET_OF(CONTEXT, Gpr9),
+    OFFSET_OF(CONTEXT, Gpr10),
+    OFFSET_OF(CONTEXT, Gpr11),
+    OFFSET_OF(CONTEXT, Gpr12),
+    OFFSET_OF(CONTEXT, Gpr13),
+    OFFSET_OF(CONTEXT, Gpr14),
+    OFFSET_OF(CONTEXT, Gpr15),
+    OFFSET_OF(CONTEXT, Gpr16),
+    OFFSET_OF(CONTEXT, Gpr17),
+    OFFSET_OF(CONTEXT, Gpr18),
+    OFFSET_OF(CONTEXT, Gpr19),
+    OFFSET_OF(CONTEXT, Gpr20),
+    OFFSET_OF(CONTEXT, Gpr21),
+    OFFSET_OF(CONTEXT, Gpr22),
+    OFFSET_OF(CONTEXT, Gpr23),
+    OFFSET_OF(CONTEXT, Gpr24),
+    OFFSET_OF(CONTEXT, Gpr25),
+    OFFSET_OF(CONTEXT, Gpr26),
+    OFFSET_OF(CONTEXT, Gpr27),
+    OFFSET_OF(CONTEXT, Gpr28),
+    OFFSET_OF(CONTEXT, Gpr29),
+    OFFSET_OF(CONTEXT, Gpr30),
+    OFFSET_OF(CONTEXT, Gpr31),
+    OFFSET_OF(CONTEXT, Fpr0),
+    OFFSET_OF(CONTEXT, Fpr1),
+    OFFSET_OF(CONTEXT, Fpr2),
+    OFFSET_OF(CONTEXT, Fpr3),
+    OFFSET_OF(CONTEXT, Fpr4),
+    OFFSET_OF(CONTEXT, Fpr5),
+    OFFSET_OF(CONTEXT, Fpr6),
+    OFFSET_OF(CONTEXT, Fpr7),
+    OFFSET_OF(CONTEXT, Fpr8),
+    OFFSET_OF(CONTEXT, Fpr9),
+    OFFSET_OF(CONTEXT, Fpr10),
+    OFFSET_OF(CONTEXT, Fpr11),
+    OFFSET_OF(CONTEXT, Fpr12),
+    OFFSET_OF(CONTEXT, Fpr13),
+    OFFSET_OF(CONTEXT, Fpr14),
+    OFFSET_OF(CONTEXT, Fpr15),
+    OFFSET_OF(CONTEXT, Fpr16),
+    OFFSET_OF(CONTEXT, Fpr17),
+    OFFSET_OF(CONTEXT, Fpr18),
+    OFFSET_OF(CONTEXT, Fpr19),
+    OFFSET_OF(CONTEXT, Fpr20),
+    OFFSET_OF(CONTEXT, Fpr21),
+    OFFSET_OF(CONTEXT, Fpr22),
+    OFFSET_OF(CONTEXT, Fpr23),
+    OFFSET_OF(CONTEXT, Fpr24),
+    OFFSET_OF(CONTEXT, Fpr25),
+    OFFSET_OF(CONTEXT, Fpr26),
+    OFFSET_OF(CONTEXT, Fpr27),
+    OFFSET_OF(CONTEXT, Fpr28),
+    OFFSET_OF(CONTEXT, Fpr29),
+    OFFSET_OF(CONTEXT, Fpr30),
+    OFFSET_OF(CONTEXT, Fpr31),
+
+    OFFSET_OF(CONTEXT, Iar),
+    OFFSET_OF(CONTEXT, Msr),
+    OFFSET_OF(CONTEXT, Cr),
+    OFFSET_OF(CONTEXT, Lr),
+    OFFSET_OF(CONTEXT, Ctr),
+    OFFSET_OF(CONTEXT, Xer),
+    /* FIXME: MQ is missing? OFFSET_OF(CONTEXT, Mq), */
+    /* see gdb/nlm/ppc.c */
+};
+# else
+#  error "Define the registers map for your CPU"
+# endif
 #endif
 #undef OFFSET_OF
 
@@ -186,6 +264,12 @@
 #ifdef __i386__
     gdbctx->context.EFlags |= 0x100;
     return TRUE;
+#elif __powerpc__
+#ifndef MSR_SE
+# define MSR_SE (1<<10)
+#endif 
+    gdbctx->context.Msr |= MSR_SE;
+    return TRUE;
 #else
 #error "Define step mode enter for your CPU"
 #endif
@@ -200,6 +284,9 @@
      * step is done.
      */
     return TRUE;
+#elif __powerpc__
+    gdbctx->context.Msr &= MSR_SE;
+    return TRUE;
 #else
 #error "Define step mode leave for your CPU"
 #endif
@@ -315,6 +402,24 @@
         return 0;
     }
     return 1;
+#elif defined(__powerpc__)
+    unsigned long       xbp;
+    unsigned long       sz;
+
+    switch (xpt->type)
+    {
+    case '0':
+        if (len != 4) return 0;
+        if (!ReadProcessMemory(gdbctx->process->handle, xpt->addr, &xbp, 4, &sz) || sz != 4) return 0;
+        xpt->val = xbp;
+        xbp = 0x7d821008; /* 7d 82 10 08 ... in big endian */
+        if (!WriteProcessMemory(gdbctx->process->handle, xpt->addr, &xbp, 4, &sz) || sz != 4) return 0;
+        break;
+    default:
+        fprintf(stderr, "Unknown/unsupported bp type %c\n", xpt->type);
+        return 0;
+    }
+    return 1;
 #else
 #error "Define insert Xpoint for your CPU"
 #endif
@@ -350,6 +455,25 @@
         break;
     default:
         fprintf(stderr, "Unknown bp type %c\n", xpt->type);
+        return 0;
+    }
+    return 1;
+#elif defined(__powerpc__)
+    unsigned long       sz;
+    unsigned long       xbp;
+
+    switch (xpt->type)
+    {
+    case '0':
+        if (len != 4) return 0;
+        xbp = xpt->val;
+        if (!WriteProcessMemory(gdbctx->process->handle, xpt->addr, &xbp, 4, &sz) || sz != 4) return 0;
+        break;
+    case '1':
+    case '2':
+    case '3':
+    default:
+        fprintf(stderr, "Unknown/unsupported bp type %c\n", xpt->type);
         return 0;
     }
     return 1;
Index: debugger/memory.c
===================================================================
RCS file: /home/wine/wine/debugger/memory.c,v
retrieving revision 1.30
diff -u -r1.30 memory.c
--- debugger/memory.c	13 Jun 2002 21:37:41 -0000	1.30
+++ debugger/memory.c	30 Aug 2002 07:08:15 -0000
@@ -122,8 +122,11 @@
        addr->seg = 0;
     addr->off  = DEBUG_context.Eip;
 #elif defined(__sparc__)
-	 addr->seg = 0;
+    addr->seg = 0;
     addr->off = DEBUG_context.pc;
+#elif defined(__powerpc__)
+    addr->seg = 0;
+    addr->off = DEBUG_context.Iar;
 #else
 #	error You must define GET_IP for this CPU
 #endif



More information about the wine-patches mailing list