Greg's off-line this week but it'd be worth checking with him about how the 
names on Darwin were chosen.  

I don't know if it's that important to maintain the exact same names for these 
types of registers.  The thread context structure (defined in the system header 
files) defines these as

        _STRUCT_FP_CONTROL      __fpu_fcw;              /* x87 FPU control word 
*/
        _STRUCT_FP_STATUS       __fpu_fsw;              /* x87 FPU status word 
*/
        __uint8_t               __fpu_ftw;              /* x87 FPU tag word */
        __uint8_t               __fpu_rsrv1;            /* reserved */ 
        __uint16_t              __fpu_fop;              /* x87 FPU Opcode */

        /* x87 FPU Instruction Pointer */
        __uint32_t              __fpu_ip;               /* offset */
        __uint16_t              __fpu_cs;               /* Selector */

        __uint16_t              __fpu_rsrv2;            /* reserved */

        /* x87 FPU Instruction Operand(Data) Pointer */
        __uint32_t              __fpu_dp;               /* offset */
        __uint16_t              __fpu_ds;               /* Selector */


The actual behavior on a Darwin system is,

(lldb) reg read -a
[...]
Floating Point Registers:
     fctrl = 0x037f
     fstat = 0x0020
      ftag = 0x00
       fop = 0x0000
     fioff = 0x8a114262
     fiseg = 0x002b
     fooff = 0x8a14bf30
     foseg = 0x0000
     mxcsr = 0x00001fa3
  mxcsrmask = 0x0000ffff
     stmm0 = {0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xff 0xff}
[...]
(lldb) reg read ip
error: Invalid register name 'ip'.
(lldb) reg read fpu_ip
error: Invalid register name 'fpu_ip'.
(lldb) reg read fioff
   fioff = 0x8a114262
(lldb) 




On Aug 7, 2013, at 11:43 AM, Richard Mitton <[email protected]> wrote:

> Exactly, displaying an 'ip' register which is not the instruction pointer is 
> very unhelpful.
> 
> The existing register names are currently different on posix-vs-Darwin 
> anyway, so there shouldn't be any harm in making the change now. I think it's 
> "fioff" on Darwin. It uses different display names vs. the internal variable 
> names.
> 
> I agree that it would be nice to make it consistent everywhere. Personally 
> I'm in favor of it matching the Intel names as closely as possible. I'm 
> slightly puzzled by how many places in the codebase (re)define the register 
> sets, it seems like making changes like this may not be straightforward.
> 
> Richard Mitton
> [email protected]
> 
> On 08/07/2013 09:12 AM, Daniel Malea wrote:
>>   To clarify the original problem this patch addresses (Richard correct me 
>> if I'm wrong) the result of a user doing "register read ip" is that they 
>> would see the floating point register instead of the instruction pointer.
>> 
>>   This change makes the register names on POSIX platforms diverge from the 
>> Mac OS X ones.. Specifically, in the darwin plugins, the register in 
>> question is still called "ip".
>> 
>>   At the very least, this implies we should change TestRegisters.py as well 
>> (in its current form, it crashes) but i'm not sure that change is ideal as 
>> we'd have to use different names for the same hardware on different 
>> platforms.
>> 
>>   My gut feeling is we should probably keep register names consistent across 
>> platforms... so making this change to the POSIX side might require a 
>> corresponding change on the Darwin side -- maybe someone from Apple can 
>> chime in on the merits?
>> 
>> http://llvm-reviews.chandlerc.com/D1307
> 
> _______________________________________________
> lldb-commits mailing list
> [email protected]
> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits

_______________________________________________
lldb-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits

Reply via email to