i386 register numbering

Eli Zaretskii
2001-07-28T03:14:00Z

Consider the following program:

#include <stdio.h>

double one = 1.0;

int main (void)
{
double d;

d = 2.0*one;
printf ("%f\n", d);
return 0;
}

Now observe:

gcc -g -O -o ftest.exe ftest.c
gdb ftest.exe
(gdb) break 10
Breakpoint 1 at 0x15fe: file ftest.c, line 10
(gdb) run
Starting program: ftest.exe

Breakpoint 1, main () at ftest.c:10
10 printf ("%f\n", d);
(gdb) info address d
Symbol "d" is a variable in register ds.

In fact, `d' is in st(0), of course.

This happens because the numbering of registers used by GCC differs
from the one used by GDB, see gcc/config/i386/i386.h in the GCC
distribution. Since i386.h seems to be common for all i386 targets,
I'd expect this problem to pop up on other x86 targets as well (the
above was tested with DJGPP native debugging).

Do others indeed see this bug? If so, what would be the best way of
fixing it?