[lldb-dev] RegisterContextPOSIX_i386

Michael Sartain mikesart at gmail.com
Mon Oct 7 16:33:56 PDT 2013


On Mon, Oct 7, 2013 at 4:13 PM, Greg Clayton <gclayton at apple.com> wrote:

> Looks good.
>
> More comments below...
> On Oct 1, 2013, at 12:16 PM, Michael Sartain <mikesart at gmail.com> wrote:
>
> > On Fri, Sep 13, 2013 at 11:33 AM, Thirumurthi, Ashok <
> ashok.thirumurthi at intel.com> wrote:
> > One point to consider is if there is scope for some common code between
> architectures.  Note that the list of architectures will only grow (i.e.
> x32).  A future point is to keep POSIX-isms nicely contained.  When
> considering platform-independent remote debugging that is consistent with
> native-local debugging, we'll want code consistent between platforms to
> live in one place.
> >
> > Here is a first pass at this:
> >
> > http://llvm-reviews.chandlerc.com/D1798
> >
> > It passes all the 64-bit linux tests, although there is still a bit of
> cleanup I need to do.
> >  - FreeBSD is most likely busted... (I'll contact Ed about working on
> this when it's a bit more nailed down.)
> >  - I need to check and fix dwarf / gdb constant values.
> >  - I don't like the ConvertRegisterKindToRegisterNumber() routines.
>
> Do you not like how they are implemented in the register context classes
> for posix/linux/freebsd, or are you questioning their need?
>
> They are needed for parsing DWARF and EH frame information and any other
> object file sections that contain register numbers in them. We can probably
> automate the ConvertRegisterKindToRegisterNumber() up into the
> RegisterContext base class so that it uses the RegisterInfo data to
> populate lookup tables, but then we might need a finalize call to let the
> base class know that it is ok to go ahead and compute the lookup tables.


I didn't like how they were implemented with the architecture switch
statement and then two fairly large individual register name case
statements. I fixed that in "diff 3 & 4" up on the chandlerc site.

I'm glad I said that though - your description of how they are utilized is
quite useful. Ok if I put that in as a code comment above those routines?


>  >  - Also don't like the
> RegisterContextPOSIXProcessMonitor_x86_64::ReadRegister() / WriteRegister()
> routines.
>
> Again, do you not like how they are implemented, or would you rather see
> them go away? I tried to add flexibility to the register contexts so you
> can read/write all registers at once, or read/write single registers since
> things like GDB remote might support one, the other, or both. Many JTAG
> debuggers also read/write registers individually and it can impose quite a
> performance penalty to force reading/writing all registers at once (all
> GPRs, all FPUs, etc).
>

This is good information also.


> >  - Need to implement RegisterContextPOSIX_i386* so 32-bit LLDB will
> fully work. (This may come in a second checkin).
> >  - Would love to have xmm00, xmm01, etc. type aliases for mmx, sse, and
> avx registers.
>
> Is this more than filling out the "alt_name" field? Or is this more like
> the "eax" register that is part of "rax"?
>

It would be more eax part of rax type thing. A more general question is how
do folks look at these SSE and AVX registers on lldb? On gdb, we get
something like this by default. I haven't found an easy way to view these
registers like that with lldb - I'm probably missing something though.

(gdb) p $xmm0
$1 = {
  v4_float =     {9.14767638e-41,
    0,
    0,
    0},
  v2_double =     {3.2252605360516574e-319,
    0},
  v16_int8 =     {0,
    -1,
    0 <repeats 14 times>},
  v8_int16 =     {-256,
    0,
    0,
    0,
    0,
    0,
    0,
    0},
  v4_int32 =     {65280,
    0,
    0,
    0},
  v2_int64 =     {65280,
    0},
  uint128 = 65280
}

gdb also does this for the flag registers:

eflags         0x202    [ IF ]
mxcsr          0x1f80   [ IM DM ZM OM UM PM ]

Which can be quite useful.

I'm having trouble getting FreeBSD to build at the moment and am working
with Ed on that. As soon as I get things verified there, I'll check this in.

Thanks for the help Greg.
 -Mike
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-dev/attachments/20131007/71361411/attachment.html>


More information about the lldb-dev mailing list