This is the mail archive of the
gdb@sources.redhat.com
mailing list for the GDB project.
i386 register numbering
- To: gdb at sources dot redhat dot com
- Subject: i386 register numbering
- From: Eli Zaretskii <eliz at delorie dot com>
- Date: Sat, 28 Jul 2001 06:12:56 -0400
- Reply-to: Eli Zaretskii <eliz at is dot elta dot co dot il>
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?