[lldb-dev] RegisterContextPOSIX_i386

Michael Sartain mikesart at gmail.com
Tue Oct 1 12:16:24 PDT 2013


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.
 - Also don't like the
RegisterContextPOSIXProcessMonitor_x86_64::ReadRegister() / WriteRegister()
routines.
 - 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.

If anyone has any general feedback on how any of this looks and/or ideas on
more cleanup, please fire away.

Thanks much.
 -Mike

----
(lldb i386 target) register read
General Purpose Registers:
       eax = 0xffcf2354
       ebx = 0xf7605ff4
       ecx = 0x00000001
       edx = 0x08048980
       edi = 0x00000000
       esi = 0x00000000
       ebp = 0xffcf22b8
       esp = 0xffcf1f40
       eip = 0x080486b2  sse32`main + 258 at sse.cpp:40
    eflags = 0x00000282
        cs = 0x00000023
        fs = 0x00000000
        gs = 0x00000063
        ss = 0x0000002b
        ds = 0x0000002b
        es = 0x0000002b

(lldb x64 target) register read
General Purpose Registers:
       rax = 0x0000000000400ce0
       rbx = 0x0000000000000000
       rcx = 0x0000000000000040
       rdx = 0x00007fff03d15e38
       rdi = 0x0000000000000001
       rsi = 0x00007fff03d15e28
       rbp = 0x00007fff03d15d40
       rsp = 0x00007fff03d15960
        r8 = 0x0000000000400c30  sse64`__libc_csu_fini
        r9 = 0x00007fa459ca1740  ld-linux-x86-64.so.2`_dl_fini at
dl-fini.c:133
       r10 = 0x00007fff03d15ba0
       r11 = 0x00007fa458cc1680  libc.so.6`__libc_start_main at
libc-start.c:96
       r12 = 0x0000000000400650  sse64`_start
       r13 = 0x00007fff03d15e20
       r14 = 0x0000000000000000
       r15 = 0x0000000000000000
       rip = 0x0000000000400774  sse64`main + 52 at sse.cpp:32
    rflags = 0x0000000000000206
        cs = 0x0000000000000033
        fs = 0x0000000000000000
        gs = 0x0000000000000000
        ss = 0x000000000000002b
        ds = 0x0000000000000000
        es = 0x0000000000000000

 I also added a bunch of register aliases (ax, ah, al, etc.) which you can
set via "register read -a".

General Purpose Registers:
       eax = 0xffd22ac4
       ebx = 0xf75b7ff4
       ecx = 0x00000001
       edx = 0x08048980
       edi = 0x00000000
       esi = 0x00000000
       ebp = 0xffd22a28
       esp = 0xffd226c0
       eip = 0x080485e4  sse32`main + 52 at sse.cpp:32
    eflags = 0x00000286
        cs = 0x00000023
        fs = 0x00000000
        gs = 0x00000063
        ss = 0x0000002b
        ds = 0x0000002b
        es = 0x0000002b
        ax = 0x2ac4
        bx = 0x7ff4
        cx = 0x0001
        dx = 0x8980
        di = 0x0000
        si = 0x0000
        bp = 0x2a28
        sp = 0x26c0
        ah = 0xc4
        bh = 0xf4
        ch = 0x01
        dh = 0x80
        al = 0xc4
        bl = 0xf4
        cl = 0x01
        dl = 0x80
       dil = 0x00
       sil = 0x00
       bpl = 0x28
       spl = 0xc0
...
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/lldb-dev/attachments/20131001/5c69aaba/attachment.html>


More information about the lldb-dev mailing list