This is the mail archive of the gdb@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

i386 register numbering


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?


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]