* [Qemu-devel] [4390] Add x86_64 gdb stub for qemu (Jason Wessel).
@ 2008-05-09 8:23 Edgar E. Iglesias
2008-05-09 8:32 ` Jan Kiszka
` (2 more replies)
0 siblings, 3 replies; 7+ messages in thread
From: Edgar E. Iglesias @ 2008-05-09 8:23 UTC (permalink / raw)
To: qemu-devel
Revision: 4390
http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=4390
Author: edgar_igl
Date: 2008-05-09 08:23:19 +0000 (Fri, 09 May 2008)
Log Message:
-----------
Add x86_64 gdb stub for qemu (Jason Wessel).
Modified Paths:
--------------
trunk/gdbstub.c
Modified: trunk/gdbstub.c
===================================================================
--- trunk/gdbstub.c 2008-05-09 08:14:05 UTC (rev 4389)
+++ trunk/gdbstub.c 2008-05-09 08:23:19 UTC (rev 4390)
@@ -233,9 +233,141 @@
}
return 0;
}
+#if defined(TARGET_X86_64)
-#if defined(TARGET_I386)
+static int cpu_gdb_read_registers(CPUState *env, uint8_t *mem_buf)
+{
+ uint8_t *p = mem_buf;
+ int i, fpus;
+#define PUTREG(x) do { \
+ target_ulong reg = tswapl(x); \
+ memcpy(p, ®, sizeof reg); \
+ p += sizeof reg; \
+ } while (0)
+#define PUTREG32(x) do { \
+ uint32_t reg = tswap32(x); \
+ memcpy(p, ®, sizeof reg); \
+ p += sizeof reg; \
+ } while (0)
+#define PUTREGF(x) do { \
+ memcpy(p, &(x), 10); \
+ p += sizeof (x); \
+ } while (0)
+
+ PUTREG(env->regs[R_EAX]);
+ PUTREG(env->regs[R_EBX]);
+ PUTREG(env->regs[R_ECX]);
+ PUTREG(env->regs[R_EDX]);
+ PUTREG(env->regs[R_ESI]);
+ PUTREG(env->regs[R_EDI]);
+ PUTREG(env->regs[R_EBP]);
+ PUTREG(env->regs[R_ESP]);
+ PUTREG(env->regs[8]);
+ PUTREG(env->regs[9]);
+ PUTREG(env->regs[10]);
+ PUTREG(env->regs[11]);
+ PUTREG(env->regs[12]);
+ PUTREG(env->regs[13]);
+ PUTREG(env->regs[14]);
+ PUTREG(env->regs[15]);
+
+ PUTREG(env->eip);
+ PUTREG32(env->eflags);
+ PUTREG32(env->segs[R_CS].selector);
+ PUTREG32(env->segs[R_SS].selector);
+ PUTREG32(env->segs[R_DS].selector);
+ PUTREG32(env->segs[R_ES].selector);
+ PUTREG32(env->segs[R_FS].selector);
+ PUTREG32(env->segs[R_GS].selector);
+ /* XXX: convert floats */
+ for(i = 0; i < 8; i++) {
+ PUTREGF(env->fpregs[i]);
+ }
+ PUTREG32(env->fpuc);
+ fpus = (env->fpus & ~0x3800) | (env->fpstt & 0x7) << 11;
+ PUTREG32(fpus);
+ PUTREG32(0); /* XXX: convert tags */
+ PUTREG32(0); /* fiseg */
+ PUTREG32(0); /* fioff */
+ PUTREG32(0); /* foseg */
+ PUTREG32(0); /* fooff */
+ PUTREG32(0); /* fop */
+
+#undef PUTREG
+#undef PUTREG32
+#undef PUTREGF
+
+ return p - mem_buf;
+}
+
+static void cpu_gdb_write_registers(CPUState *env, uint8_t *mem_buf, int size)
+{
+ uint8_t *p = mem_buf;
+ uint32_t junk;
+ int i, fpus;
+
+#define GETREG(x) do { \
+ target_ulong reg; \
+ memcpy(®, p, sizeof reg); \
+ x = tswapl(reg); \
+ p += sizeof reg; \
+ } while (0)
+#define GETREG32(x) do { \
+ uint32_t reg; \
+ memcpy(®, p, sizeof reg); \
+ x = tswap32(reg); \
+ p += sizeof reg; \
+ } while (0)
+#define GETREGF(x) do { \
+ memcpy(&(x), p, 10); \
+ p += 10; \
+ } while (0)
+
+ GETREG(env->regs[R_EAX]);
+ GETREG(env->regs[R_EBX]);
+ GETREG(env->regs[R_ECX]);
+ GETREG(env->regs[R_EDX]);
+ GETREG(env->regs[R_ESI]);
+ GETREG(env->regs[R_EDI]);
+ GETREG(env->regs[R_EBP]);
+ GETREG(env->regs[R_ESP]);
+ GETREG(env->regs[8]);
+ GETREG(env->regs[9]);
+ GETREG(env->regs[10]);
+ GETREG(env->regs[11]);
+ GETREG(env->regs[12]);
+ GETREG(env->regs[13]);
+ GETREG(env->regs[14]);
+ GETREG(env->regs[15]);
+
+ GETREG(env->eip);
+ GETREG32(env->eflags);
+ GETREG32(env->segs[R_CS].selector);
+ GETREG32(env->segs[R_SS].selector);
+ GETREG32(env->segs[R_DS].selector);
+ GETREG32(env->segs[R_ES].selector);
+ GETREG32(env->segs[R_FS].selector);
+ GETREG32(env->segs[R_GS].selector);
+ /* XXX: convert floats */
+ for(i = 0; i < 8; i++) {
+ GETREGF(env->fpregs[i]);
+ }
+ GETREG32(env->fpuc);
+ GETREG32(fpus); /* XXX: convert fpus */
+ GETREG32(junk); /* XXX: convert tags */
+ GETREG32(junk); /* fiseg */
+ GETREG32(junk); /* fioff */
+ GETREG32(junk); /* foseg */
+ GETREG32(junk); /* fooff */
+ GETREG32(junk); /* fop */
+
+#undef GETREG
+#undef GETREG32
+#undef GETREGF
+}
+
+#elif defined(TARGET_I386)
static int cpu_gdb_read_registers(CPUState *env, uint8_t *mem_buf)
{
int i, fpus;
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] [4390] Add x86_64 gdb stub for qemu (Jason Wessel).
2008-05-09 8:23 [Qemu-devel] [4390] Add x86_64 gdb stub for qemu (Jason Wessel) Edgar E. Iglesias
@ 2008-05-09 8:32 ` Jan Kiszka
2008-05-09 8:44 ` Edgar E. Iglesias
2008-05-09 8:44 ` Fabrice Bellard
2008-05-09 11:56 ` Jason Wessel
2 siblings, 1 reply; 7+ messages in thread
From: Jan Kiszka @ 2008-05-09 8:32 UTC (permalink / raw)
To: qemu-devel
Edgar E. Iglesias wrote:
> Revision: 4390
> http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=4390
> Author: edgar_igl
> Date: 2008-05-09 08:23:19 +0000 (Fri, 09 May 2008)
>
> Log Message:
> -----------
> Add x86_64 gdb stub for qemu (Jason Wessel).
Actually, that used to be my old patch :). But it is redundant now
(x86-64 debugging works like charm). Please revert.
Jan
--
Siemens AG, Corporate Technology, CT SE 2
Corporate Competence Center Embedded Linux
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] [4390] Add x86_64 gdb stub for qemu (Jason Wessel).
2008-05-09 8:32 ` Jan Kiszka
@ 2008-05-09 8:44 ` Edgar E. Iglesias
0 siblings, 0 replies; 7+ messages in thread
From: Edgar E. Iglesias @ 2008-05-09 8:44 UTC (permalink / raw)
To: Jan Kiszka; +Cc: qemu-devel
On Fri, May 09, 2008 at 10:32:34AM +0200, Jan Kiszka wrote:
> Edgar E. Iglesias wrote:
> > Revision: 4390
> > http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=4390
> > Author: edgar_igl
> > Date: 2008-05-09 08:23:19 +0000 (Fri, 09 May 2008)
> >
> > Log Message:
> > -----------
> > Add x86_64 gdb stub for qemu (Jason Wessel).
>
> Actually, that used to be my old patch :). But it is redundant now
> (x86-64 debugging works like charm). Please revert.
Right, I see now those part are already taken care of. Sorry.
--
Edgar E. Iglesias
Axis Communications AB
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] [4390] Add x86_64 gdb stub for qemu (Jason Wessel).
2008-05-09 8:23 [Qemu-devel] [4390] Add x86_64 gdb stub for qemu (Jason Wessel) Edgar E. Iglesias
2008-05-09 8:32 ` Jan Kiszka
@ 2008-05-09 8:44 ` Fabrice Bellard
2008-05-09 11:56 ` Jason Wessel
2 siblings, 0 replies; 7+ messages in thread
From: Fabrice Bellard @ 2008-05-09 8:44 UTC (permalink / raw)
To: qemu-devel
This patch is not correct as it breaks 32 bit support for x86_64. The
correct solution is to add 64 bit support in the i386 case.
Moreover, it would be better not to use macros when inline functions
could do the same.
Regards,
Fabrice.
Edgar E. Iglesias wrote:
> Revision: 4390
> http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=4390
> Author: edgar_igl
> Date: 2008-05-09 08:23:19 +0000 (Fri, 09 May 2008)
>
> Log Message:
> -----------
> Add x86_64 gdb stub for qemu (Jason Wessel).
>
> Modified Paths:
> --------------
> trunk/gdbstub.c
>
> Modified: trunk/gdbstub.c
> ===================================================================
> --- trunk/gdbstub.c 2008-05-09 08:14:05 UTC (rev 4389)
> +++ trunk/gdbstub.c 2008-05-09 08:23:19 UTC (rev 4390)
> @@ -233,9 +233,141 @@
> }
> return 0;
> }
> +#if defined(TARGET_X86_64)
>
> -#if defined(TARGET_I386)
> +static int cpu_gdb_read_registers(CPUState *env, uint8_t *mem_buf)
> +{
> + uint8_t *p = mem_buf;
> + int i, fpus;
>
> +#define PUTREG(x) do { \
> + target_ulong reg = tswapl(x); \
> + memcpy(p, ®, sizeof reg); \
> + p += sizeof reg; \
> + } while (0)
> +#define PUTREG32(x) do { \
> + uint32_t reg = tswap32(x); \
> + memcpy(p, ®, sizeof reg); \
> + p += sizeof reg; \
> + } while (0)
> +#define PUTREGF(x) do { \
> + memcpy(p, &(x), 10); \
> + p += sizeof (x); \
> + } while (0)
> +
> + PUTREG(env->regs[R_EAX]);
> + PUTREG(env->regs[R_EBX]);
> + PUTREG(env->regs[R_ECX]);
> + PUTREG(env->regs[R_EDX]);
> + PUTREG(env->regs[R_ESI]);
> + PUTREG(env->regs[R_EDI]);
> + PUTREG(env->regs[R_EBP]);
> + PUTREG(env->regs[R_ESP]);
> + PUTREG(env->regs[8]);
> + PUTREG(env->regs[9]);
> + PUTREG(env->regs[10]);
> + PUTREG(env->regs[11]);
> + PUTREG(env->regs[12]);
> + PUTREG(env->regs[13]);
> + PUTREG(env->regs[14]);
> + PUTREG(env->regs[15]);
> +
> + PUTREG(env->eip);
> + PUTREG32(env->eflags);
> + PUTREG32(env->segs[R_CS].selector);
> + PUTREG32(env->segs[R_SS].selector);
> + PUTREG32(env->segs[R_DS].selector);
> + PUTREG32(env->segs[R_ES].selector);
> + PUTREG32(env->segs[R_FS].selector);
> + PUTREG32(env->segs[R_GS].selector);
> + /* XXX: convert floats */
> + for(i = 0; i < 8; i++) {
> + PUTREGF(env->fpregs[i]);
> + }
> + PUTREG32(env->fpuc);
> + fpus = (env->fpus & ~0x3800) | (env->fpstt & 0x7) << 11;
> + PUTREG32(fpus);
> + PUTREG32(0); /* XXX: convert tags */
> + PUTREG32(0); /* fiseg */
> + PUTREG32(0); /* fioff */
> + PUTREG32(0); /* foseg */
> + PUTREG32(0); /* fooff */
> + PUTREG32(0); /* fop */
> +
> +#undef PUTREG
> +#undef PUTREG32
> +#undef PUTREGF
> +
> + return p - mem_buf;
> +}
> +
> +static void cpu_gdb_write_registers(CPUState *env, uint8_t *mem_buf, int size)
> +{
> + uint8_t *p = mem_buf;
> + uint32_t junk;
> + int i, fpus;
> +
> +#define GETREG(x) do { \
> + target_ulong reg; \
> + memcpy(®, p, sizeof reg); \
> + x = tswapl(reg); \
> + p += sizeof reg; \
> + } while (0)
> +#define GETREG32(x) do { \
> + uint32_t reg; \
> + memcpy(®, p, sizeof reg); \
> + x = tswap32(reg); \
> + p += sizeof reg; \
> + } while (0)
> +#define GETREGF(x) do { \
> + memcpy(&(x), p, 10); \
> + p += 10; \
> + } while (0)
> +
> + GETREG(env->regs[R_EAX]);
> + GETREG(env->regs[R_EBX]);
> + GETREG(env->regs[R_ECX]);
> + GETREG(env->regs[R_EDX]);
> + GETREG(env->regs[R_ESI]);
> + GETREG(env->regs[R_EDI]);
> + GETREG(env->regs[R_EBP]);
> + GETREG(env->regs[R_ESP]);
> + GETREG(env->regs[8]);
> + GETREG(env->regs[9]);
> + GETREG(env->regs[10]);
> + GETREG(env->regs[11]);
> + GETREG(env->regs[12]);
> + GETREG(env->regs[13]);
> + GETREG(env->regs[14]);
> + GETREG(env->regs[15]);
> +
> + GETREG(env->eip);
> + GETREG32(env->eflags);
> + GETREG32(env->segs[R_CS].selector);
> + GETREG32(env->segs[R_SS].selector);
> + GETREG32(env->segs[R_DS].selector);
> + GETREG32(env->segs[R_ES].selector);
> + GETREG32(env->segs[R_FS].selector);
> + GETREG32(env->segs[R_GS].selector);
> + /* XXX: convert floats */
> + for(i = 0; i < 8; i++) {
> + GETREGF(env->fpregs[i]);
> + }
> + GETREG32(env->fpuc);
> + GETREG32(fpus); /* XXX: convert fpus */
> + GETREG32(junk); /* XXX: convert tags */
> + GETREG32(junk); /* fiseg */
> + GETREG32(junk); /* fioff */
> + GETREG32(junk); /* foseg */
> + GETREG32(junk); /* fooff */
> + GETREG32(junk); /* fop */
> +
> +#undef GETREG
> +#undef GETREG32
> +#undef GETREGF
> +}
> +
> +#elif defined(TARGET_I386)
> static int cpu_gdb_read_registers(CPUState *env, uint8_t *mem_buf)
> {
> int i, fpus;
>
>
>
>
>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] [4390] Add x86_64 gdb stub for qemu (Jason Wessel).
2008-05-09 8:23 [Qemu-devel] [4390] Add x86_64 gdb stub for qemu (Jason Wessel) Edgar E. Iglesias
2008-05-09 8:32 ` Jan Kiszka
2008-05-09 8:44 ` Fabrice Bellard
@ 2008-05-09 11:56 ` Jason Wessel
2008-05-09 12:09 ` Edgar E. Iglesias
2008-05-09 12:45 ` Fabrice Bellard
2 siblings, 2 replies; 7+ messages in thread
From: Jason Wessel @ 2008-05-09 11:56 UTC (permalink / raw)
To: qemu-devel
I see this is already reverted :-)
It was not my intention when I followed up to the original post to have
this one committed, it is from an older branch in the 0.9.0 era.
The single stepping patch however would have been fine as it was "carry
forward work" against the SVN HEAD.
Thanks,
Jason.
Edgar E. Iglesias wrote:
> Revision: 4390
> http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=4390
> Author: edgar_igl
> Date: 2008-05-09 08:23:19 +0000 (Fri, 09 May 2008)
>
> Log Message:
> -----------
> Add x86_64 gdb stub for qemu (Jason Wessel).
>
> Modified Paths:
> --------------
> trunk/gdbstub.c
>
> Modified: trunk/gdbstub.c
> ===================================================================
> --- trunk/gdbstub.c 2008-05-09 08:14:05 UTC (rev 4389)
> +++ trunk/gdbstub.c 2008-05-09 08:23:19 UTC (rev 4390)
> @@ -233,9 +233,141 @@
> }
> return 0;
> }
> +#if defined(TARGET_X86_64)
>
> -#if defined(TARGET_I386)
> +static int cpu_gdb_read_registers(CPUState *env, uint8_t *mem_buf)
> +{
> + uint8_t *p = mem_buf;
> + int i, fpus;
>
> +#define PUTREG(x) do { \
> + target_ulong reg = tswapl(x); \
> + memcpy(p, ®, sizeof reg); \
> + p += sizeof reg; \
> + } while (0)
> +#define PUTREG32(x) do { \
> + uint32_t reg = tswap32(x); \
> + memcpy(p, ®, sizeof reg); \
> + p += sizeof reg; \
> + } while (0)
> +#define PUTREGF(x) do { \
> + memcpy(p, &(x), 10); \
> + p += sizeof (x); \
> + } while (0)
> +
> + PUTREG(env->regs[R_EAX]);
> + PUTREG(env->regs[R_EBX]);
> + PUTREG(env->regs[R_ECX]);
> + PUTREG(env->regs[R_EDX]);
> + PUTREG(env->regs[R_ESI]);
> + PUTREG(env->regs[R_EDI]);
> + PUTREG(env->regs[R_EBP]);
> + PUTREG(env->regs[R_ESP]);
> + PUTREG(env->regs[8]);
> + PUTREG(env->regs[9]);
> + PUTREG(env->regs[10]);
> + PUTREG(env->regs[11]);
> + PUTREG(env->regs[12]);
> + PUTREG(env->regs[13]);
> + PUTREG(env->regs[14]);
> + PUTREG(env->regs[15]);
> +
> + PUTREG(env->eip);
> + PUTREG32(env->eflags);
> + PUTREG32(env->segs[R_CS].selector);
> + PUTREG32(env->segs[R_SS].selector);
> + PUTREG32(env->segs[R_DS].selector);
> + PUTREG32(env->segs[R_ES].selector);
> + PUTREG32(env->segs[R_FS].selector);
> + PUTREG32(env->segs[R_GS].selector);
> + /* XXX: convert floats */
> + for(i = 0; i < 8; i++) {
> + PUTREGF(env->fpregs[i]);
> + }
> + PUTREG32(env->fpuc);
> + fpus = (env->fpus & ~0x3800) | (env->fpstt & 0x7) << 11;
> + PUTREG32(fpus);
> + PUTREG32(0); /* XXX: convert tags */
> + PUTREG32(0); /* fiseg */
> + PUTREG32(0); /* fioff */
> + PUTREG32(0); /* foseg */
> + PUTREG32(0); /* fooff */
> + PUTREG32(0); /* fop */
> +
> +#undef PUTREG
> +#undef PUTREG32
> +#undef PUTREGF
> +
> + return p - mem_buf;
> +}
> +
> +static void cpu_gdb_write_registers(CPUState *env, uint8_t *mem_buf, int size)
> +{
> + uint8_t *p = mem_buf;
> + uint32_t junk;
> + int i, fpus;
> +
> +#define GETREG(x) do { \
> + target_ulong reg; \
> + memcpy(®, p, sizeof reg); \
> + x = tswapl(reg); \
> + p += sizeof reg; \
> + } while (0)
> +#define GETREG32(x) do { \
> + uint32_t reg; \
> + memcpy(®, p, sizeof reg); \
> + x = tswap32(reg); \
> + p += sizeof reg; \
> + } while (0)
> +#define GETREGF(x) do { \
> + memcpy(&(x), p, 10); \
> + p += 10; \
> + } while (0)
> +
> + GETREG(env->regs[R_EAX]);
> + GETREG(env->regs[R_EBX]);
> + GETREG(env->regs[R_ECX]);
> + GETREG(env->regs[R_EDX]);
> + GETREG(env->regs[R_ESI]);
> + GETREG(env->regs[R_EDI]);
> + GETREG(env->regs[R_EBP]);
> + GETREG(env->regs[R_ESP]);
> + GETREG(env->regs[8]);
> + GETREG(env->regs[9]);
> + GETREG(env->regs[10]);
> + GETREG(env->regs[11]);
> + GETREG(env->regs[12]);
> + GETREG(env->regs[13]);
> + GETREG(env->regs[14]);
> + GETREG(env->regs[15]);
> +
> + GETREG(env->eip);
> + GETREG32(env->eflags);
> + GETREG32(env->segs[R_CS].selector);
> + GETREG32(env->segs[R_SS].selector);
> + GETREG32(env->segs[R_DS].selector);
> + GETREG32(env->segs[R_ES].selector);
> + GETREG32(env->segs[R_FS].selector);
> + GETREG32(env->segs[R_GS].selector);
> + /* XXX: convert floats */
> + for(i = 0; i < 8; i++) {
> + GETREGF(env->fpregs[i]);
> + }
> + GETREG32(env->fpuc);
> + GETREG32(fpus); /* XXX: convert fpus */
> + GETREG32(junk); /* XXX: convert tags */
> + GETREG32(junk); /* fiseg */
> + GETREG32(junk); /* fioff */
> + GETREG32(junk); /* foseg */
> + GETREG32(junk); /* fooff */
> + GETREG32(junk); /* fop */
> +
> +#undef GETREG
> +#undef GETREG32
> +#undef GETREGF
> +}
> +
> +#elif defined(TARGET_I386)
> static int cpu_gdb_read_registers(CPUState *env, uint8_t *mem_buf)
> {
> int i, fpus;
>
>
>
>
>
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] [4390] Add x86_64 gdb stub for qemu (Jason Wessel).
2008-05-09 11:56 ` Jason Wessel
@ 2008-05-09 12:09 ` Edgar E. Iglesias
2008-05-09 12:45 ` Fabrice Bellard
1 sibling, 0 replies; 7+ messages in thread
From: Edgar E. Iglesias @ 2008-05-09 12:09 UTC (permalink / raw)
To: qemu-devel
On Fri, May 09, 2008 at 06:56:22AM -0500, Jason Wessel wrote:
> I see this is already reverted :-)
>
> It was not my intention when I followed up to the original post to have
> this one committed, it is from an older branch in the 0.9.0 era.
My fault sorry, I got confused.
> The single stepping patch however would have been fine as it was "carry
> forward work" against the SVN HEAD.
Yes, I only reverted the x86-64 part. The singelstepping should still be there.
Best regards
--
Edgar E. Iglesias
Axis Communications AB
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Qemu-devel] [4390] Add x86_64 gdb stub for qemu (Jason Wessel).
2008-05-09 11:56 ` Jason Wessel
2008-05-09 12:09 ` Edgar E. Iglesias
@ 2008-05-09 12:45 ` Fabrice Bellard
1 sibling, 0 replies; 7+ messages in thread
From: Fabrice Bellard @ 2008-05-09 12:45 UTC (permalink / raw)
To: qemu-devel
Jason Wessel wrote:
> I see this is already reverted :-)
I am writing a new version.
Fabrice.
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2008-05-09 12:45 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-05-09 8:23 [Qemu-devel] [4390] Add x86_64 gdb stub for qemu (Jason Wessel) Edgar E. Iglesias
2008-05-09 8:32 ` Jan Kiszka
2008-05-09 8:44 ` Edgar E. Iglesias
2008-05-09 8:44 ` Fabrice Bellard
2008-05-09 11:56 ` Jason Wessel
2008-05-09 12:09 ` Edgar E. Iglesias
2008-05-09 12:45 ` Fabrice Bellard
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).