From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mark Kettenis To: Eli Zaretskii Cc: gdb-patches@sources.redhat.com Subject: Re: [RFA]: Convert the last FP opcode saved by FSAVE into a full opcode Date: Fri, 09 Feb 2001 05:27:00 -0000 Message-id: References: <200102081828.NAA25535@indy.delorie.com> X-SW-Source: 2001-02/msg00149.html Eli Zaretskii 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