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