This is the mail archive of the gdb-patches@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]

Re: [RFA]: Convert the last FP opcode saved by FSAVE into a full opcode


Eli Zaretskii <eliz@delorie.com> writes:

> This patch restores the 5 bits of the last FP opcode which are not
> delivered by FSAVE/FXSAVE.  This shows the full opcode in "info
> float", and may be used to display the opcode as a mnemonic, or look
> it up in a list of instructions.

Hmm, right now, in i387-tdep.c:i387_float_info() we have the following
code:

  printf_filtered ("Opcode:              %s\n",
                   local_hex_string_custom (fop ? (fop | 0xd800) : 0, "04"));

So I don't understand why you're missing those bits in the output of
"info float".  I guess that you want "p $fop" to print the full opcode
too (without the missing bits).  Back when I wrote the code I
deliberately chose to let GDB's registers contain the raw register
contents, and let the "info float" command interpret those things.
That's why I didn't include those bits.  I'm also somewhat concerned
about consistency between the various x86 targets.  If we apply your
patch, targets that don't use the functions from i387-nat.c still
won't include the extra bits.

That said, I'm open to discussion.  If other x86 maintainers prefer $fop to
contain the full opcode your change would in principle be fine with
me.  But even then, there still might be something wrong with your
patch.  On UNIX, the kernel typically returns a dummy FSAVE/FXSAVE
state if the program didn't use the FPU (yet), where the opcode is all
zeroes.  In that case I don't think that we want to add the 0xd800.

Mark


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