Re: i386 register numbering

Andrew Cagney
2001-07-28T08:12:00Z

>> From: Mark Kettenis <kettenis@science.uva.nl>
>> Date: 28 Jul 2001 13:54:19 +0200
>>
>> In GDB we have STAB_REG_TO_REGNUM, DWARF_REG_TO_REGNUM, etc.

Yep.

They map a stab/dwarf/... reg onto a cooked regnum (not to be confused
with a raw reg found in the register cache). Because the i386
implements its registers using the old PSUEDO / CONVERT stuff, the
importance of differentiating between the two may not be obvious.

>> We have
>> to provide a suitable definition for those in tm-i386.h. However, the
>> problem mentioned above makes it a bit tricky, since GCC always uses
>> the same register numbering scheme, regardless of the actual debugging
>> format. Most ELF targets use the Dwarf scheme, even if the debugging
>> format is stabs. And it seems that DJGPP uses the "default" scheme,
>> even if you ask for Dwarf 2 debugging info.
>
>
> DJGPP supports 3 debug info formats: COFF, stabs, and (lately) DWARF2;
> the default is COFF. (Btw, I don't see any COFF_REG_TO_REGNUM.) I'm
> guessing that no one (including myself [;-)] bothered to review the
> register naming scheme when support for stabs and DWARF2 was added...
>
> But there's something in your explanation that I don't get: if GCC
> always uses the same scheme, no matter what the debug info, and since
> all i386 targets use the same i386.h header which defines this scheme,
> how come DJGPP can use something different than the other targets?
> What am I missing?

There is something here I don't get either.

At present it is assumed that, for a given ISA/ABI, there is only one
mapping from a DEBUG reg to a REGNUM. I take it, Mark, that you're
saying that in reality, the mapping depends on all of:

{compiler, object format, debug format, ISA/ABI} (debug reg) -> REGNUM

True? Ulgh!

Andrew