This is the mail archive of the
gdb@sourceware.cygnus.com
mailing list for the GDB project.
Re: none
> > For register views, yes, we can do anything we please. However, when
> > the compiler places a register in an MMX register value, we still get
> > an old-fashioned symbol with a LOC_REGISTER. Register views don't
> > come into it. As long as we only have a LOC_REGISTER, we don't have
> > enough information to do the job right.
>
> I probably don't understand how this works. How is the LOC_REGISTER
> thing different from the case where the user specifies a certain
> register (e.g., when the user wants to change its value)? At any
> given point in a debugging session, GDB knows what is the current TOS,
> and therefore can map any MMX register to the corresponding ST(i),
> right?
If a symbol's address class (`aclass') is LOC_REGISTER and its value
is N, then GDB assumes the variable's value occupies register N. It
uses REGISTER_BYTE(N), REGISTER_RAW_SIZE(N), etc. to access that
symbol's value.
We can't assign distinct register numbers to %st(0) and %mm0, for
reasons discussed previously: GDB can't cope with two distinct
register numbers referring to the same bits in the register file.
We can't use the same register numbers for %st(0) and %mm0, since
they're only the same bits when TOS is zero.
So there is no possible register numbering which allows us to refer to
both %st(0) and %mm0. Therefore, %st(0) and %mm0 cannot both be
`registers', as far as GDB is concerned.