[Lldb-commits] [lldb] r138770 - in /lldb/trunk/tools/debugserver/source/MacOSX: i386/DNBArchImplI386.cpp i386/DNBArchImplI386.h i386/MachRegisterStatesI386.h x86_64/DNBArchImplX86_64.cpp x86_64/DNBArchImplX86_64.h x86_64/MachRegisterStatesX86_64.h

Greg Clayton gclayton at apple.com
Mon Aug 29 14:49:22 PDT 2011


Author: gclayton
Date: Mon Aug 29 16:49:22 2011
New Revision: 138770

URL: http://llvm.org/viewvc/llvm-project?rev=138770&view=rev
Log:
Added the debug registers for i386 and x86_64 in preparation for watchpoints.

Modified:
    lldb/trunk/tools/debugserver/source/MacOSX/i386/DNBArchImplI386.cpp
    lldb/trunk/tools/debugserver/source/MacOSX/i386/DNBArchImplI386.h
    lldb/trunk/tools/debugserver/source/MacOSX/i386/MachRegisterStatesI386.h
    lldb/trunk/tools/debugserver/source/MacOSX/x86_64/DNBArchImplX86_64.cpp
    lldb/trunk/tools/debugserver/source/MacOSX/x86_64/DNBArchImplX86_64.h
    lldb/trunk/tools/debugserver/source/MacOSX/x86_64/MachRegisterStatesX86_64.h

Modified: lldb/trunk/tools/debugserver/source/MacOSX/i386/DNBArchImplI386.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/debugserver/source/MacOSX/i386/DNBArchImplI386.cpp?rev=138770&r1=138769&r2=138770&view=diff
==============================================================================
--- lldb/trunk/tools/debugserver/source/MacOSX/i386/DNBArchImplI386.cpp (original)
+++ lldb/trunk/tools/debugserver/source/MacOSX/i386/DNBArchImplI386.cpp Mon Aug 29 16:49:22 2011
@@ -518,6 +518,24 @@
     return m_state.GetError(e_regSetEXC, Write);
 }
 
+kern_return_t
+DNBArchImplI386::GetDBGState(bool force)
+{
+    if (force || m_state.GetError(e_regSetDBG, Read))
+    {
+        mach_msg_type_number_t count = e_regSetWordSizeDBG;
+        m_state.SetError(e_regSetDBG, Read, ::thread_get_state(m_thread->ThreadID(), __i386_DEBUG_STATE, (thread_state_t)&m_state.context.dbg, &count));
+    }
+    return m_state.GetError(e_regSetDBG, Read);
+}
+
+kern_return_t
+DNBArchImplI386::SetDBGState()
+{
+    m_state.SetError(e_regSetDBG, Write, ::thread_set_state(m_thread->ThreadID(), __i386_DEBUG_STATE, (thread_state_t)&m_state.context.dbg, e_regSetWordSizeDBG));
+    return m_state.GetError(e_regSetDBG, Write);
+}
+
 void
 DNBArchImplI386::ThreadWillResume()
 {

Modified: lldb/trunk/tools/debugserver/source/MacOSX/i386/DNBArchImplI386.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/debugserver/source/MacOSX/i386/DNBArchImplI386.h?rev=138770&r1=138769&r2=138770&view=diff
==============================================================================
--- lldb/trunk/tools/debugserver/source/MacOSX/i386/DNBArchImplI386.h (original)
+++ lldb/trunk/tools/debugserver/source/MacOSX/i386/DNBArchImplI386.h Mon Aug 29 16:49:22 2011
@@ -58,6 +58,7 @@
     typedef __i386_float_state_t FPU;
     typedef __i386_exception_state_t EXC;
     typedef __i386_avx_state_t AVX;
+    typedef __i386_debug_state_t DBG;
 
     static const DNBRegisterInfo g_gpr_registers[];
     static const DNBRegisterInfo g_fpu_registers_no_avx[];
@@ -79,6 +80,7 @@
         e_regSetGPR,
         e_regSetFPU,
         e_regSetEXC,
+        e_regSetDBG,
         kNumRegisterSets
     } RegisterSet;
 
@@ -87,7 +89,8 @@
         e_regSetWordSizeGPR = sizeof(GPR) / sizeof(int),
         e_regSetWordSizeFPR = sizeof(FPU) / sizeof(int),
         e_regSetWordSizeEXC = sizeof(EXC) / sizeof(int),
-        e_regSetWordSizeAVX = sizeof(AVX) / sizeof(int)
+        e_regSetWordSizeAVX = sizeof(AVX) / sizeof(int),
+        e_regSetWordSizeDBG = sizeof(DBG) / sizeof(int)
     } RegisterSetWordSize;
 
     enum
@@ -99,12 +102,13 @@
 
     struct Context
     {
-        __i386_thread_state_t       gpr;
+        GPR gpr;
         union {
-            __i386_float_state_t    no_avx;
-            __i386_avx_state_t      avx;
+            FPU no_avx;
+            AVX avx;
         } fpu;
-        __i386_exception_state_t    exc;
+        EXC exc;
+        DBG dbg;
     };
 
     struct State
@@ -113,6 +117,7 @@
         kern_return_t gpr_errs[2];    // Read/Write errors
         kern_return_t fpu_errs[2];    // Read/Write errors
         kern_return_t exc_errs[2];    // Read/Write errors
+        kern_return_t dbg_errs[2];    // Read/Write errors
         
         State()
         {
@@ -122,6 +127,7 @@
                 gpr_errs[i] = -1;
                 fpu_errs[i] = -1;
                 exc_errs[i] = -1;
+                dbg_errs[i] = -1;
             }
         }
         void InvalidateAllRegisterStates()
@@ -142,6 +148,7 @@
                 case e_regSetGPR:    return gpr_errs[err_idx];
                 case e_regSetFPU:    return fpu_errs[err_idx];
                 case e_regSetEXC:    return exc_errs[err_idx];
+                case e_regSetDBG:    return dbg_errs[err_idx];
                 default: break;
                 }
             }
@@ -156,7 +163,8 @@
                 case e_regSetALL:
                     gpr_errs[err_idx] =
                     fpu_errs[err_idx] =
-                    exc_errs[err_idx] = err;
+                    exc_errs[err_idx] = 
+                    dbg_errs[err_idx] = err;
                     return true;
 
                 case e_regSetGPR:
@@ -170,7 +178,11 @@
                 case e_regSetEXC:
                     exc_errs[err_idx] = err;
                     return true;
-
+                    
+                case e_regSetDBG:
+                    dbg_errs[err_idx] = err;
+                    return true;
+                    
                 default: break;
                 }
             }
@@ -185,10 +197,12 @@
     kern_return_t GetGPRState (bool force);
     kern_return_t GetFPUState (bool force);
     kern_return_t GetEXCState (bool force);
+    kern_return_t GetDBGState (bool force);
 
     kern_return_t SetGPRState ();
     kern_return_t SetFPUState ();
     kern_return_t SetEXCState ();
+    kern_return_t SetDBGState ();
 
     static DNBArchProtocol *
     Create (MachThread *thread);

Modified: lldb/trunk/tools/debugserver/source/MacOSX/i386/MachRegisterStatesI386.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/debugserver/source/MacOSX/i386/MachRegisterStatesI386.h?rev=138770&r1=138769&r2=138770&view=diff
==============================================================================
--- lldb/trunk/tools/debugserver/source/MacOSX/i386/MachRegisterStatesI386.h (original)
+++ lldb/trunk/tools/debugserver/source/MacOSX/i386/MachRegisterStatesI386.h Mon Aug 29 16:49:22 2011
@@ -19,6 +19,7 @@
 #define __i386_THREAD_STATE         1
 #define __i386_FLOAT_STATE          2
 #define __i386_EXCEPTION_STATE      3
+#define __i386_DEBUG_STATE          10
 #define __i386_AVX_STATE            16
 
 typedef struct {
@@ -165,4 +166,15 @@
     uint32_t    __faultvaddr;
 } __i386_exception_state_t;
 
+typedef struct {
+	uint32_t	__dr0;
+	uint32_t	__dr1;
+	uint32_t	__dr2;
+	uint32_t	__dr3;
+	uint32_t	__dr4;
+	uint32_t	__dr5;
+	uint32_t	__dr6;
+	uint32_t	__dr7;
+} __i386_debug_state_t;
+
 #endif

Modified: lldb/trunk/tools/debugserver/source/MacOSX/x86_64/DNBArchImplX86_64.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/debugserver/source/MacOSX/x86_64/DNBArchImplX86_64.cpp?rev=138770&r1=138769&r2=138770&view=diff
==============================================================================
--- lldb/trunk/tools/debugserver/source/MacOSX/x86_64/DNBArchImplX86_64.cpp (original)
+++ lldb/trunk/tools/debugserver/source/MacOSX/x86_64/DNBArchImplX86_64.cpp Mon Aug 29 16:49:22 2011
@@ -447,6 +447,24 @@
     return m_state.GetError(e_regSetEXC, Write);
 }
 
+kern_return_t
+DNBArchImplX86_64::GetDBGState(bool force)
+{
+    if (force || m_state.GetError(e_regSetDBG, Read))
+    {
+        mach_msg_type_number_t count = e_regSetWordSizeDBG;
+        m_state.SetError(e_regSetDBG, Read, ::thread_get_state(m_thread->ThreadID(), __x86_64_DEBUG_STATE, (thread_state_t)&m_state.context.dbg, &count));
+    }
+    return m_state.GetError(e_regSetDBG, Read);
+}
+
+kern_return_t
+DNBArchImplX86_64::SetDBGState()
+{
+    m_state.SetError(e_regSetDBG, Write, ::thread_set_state(m_thread->ThreadID(), __x86_64_DEBUG_STATE, (thread_state_t)&m_state.context.dbg, e_regSetWordSizeDBG));
+    return m_state.GetError(e_regSetDBG, Write);
+}
+
 void
 DNBArchImplX86_64::ThreadWillResume()
 {

Modified: lldb/trunk/tools/debugserver/source/MacOSX/x86_64/DNBArchImplX86_64.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/debugserver/source/MacOSX/x86_64/DNBArchImplX86_64.h?rev=138770&r1=138769&r2=138770&view=diff
==============================================================================
--- lldb/trunk/tools/debugserver/source/MacOSX/x86_64/DNBArchImplX86_64.h (original)
+++ lldb/trunk/tools/debugserver/source/MacOSX/x86_64/DNBArchImplX86_64.h Mon Aug 29 16:49:22 2011
@@ -57,6 +57,7 @@
     typedef __x86_64_float_state_t FPU;
     typedef __x86_64_exception_state_t EXC;
     typedef __x86_64_avx_state_t AVX;
+    typedef __x86_64_debug_state_t DBG;
 
     static const DNBRegisterInfo g_gpr_registers[];
     static const DNBRegisterInfo g_fpu_registers_no_avx[];
@@ -78,6 +79,7 @@
         e_regSetGPR,
         e_regSetFPU,
         e_regSetEXC,
+        e_regSetDBG,
         kNumRegisterSets
     } RegisterSet;
 
@@ -86,7 +88,8 @@
         e_regSetWordSizeGPR = sizeof(GPR) / sizeof(int),
         e_regSetWordSizeFPR = sizeof(FPU) / sizeof(int),
         e_regSetWordSizeEXC = sizeof(EXC) / sizeof(int),
-        e_regSetWordSizeAVX = sizeof(AVX) / sizeof(int)
+        e_regSetWordSizeAVX = sizeof(AVX) / sizeof(int),
+        e_regSetWordSizeDBG = sizeof(DBG) / sizeof(int)
     } RegisterSetWordSize;
 
     enum
@@ -98,12 +101,14 @@
 
     struct Context
     {
-        __x86_64_thread_state_t     gpr;
-        union {
-            __x86_64_float_state_t  no_avx;
-            __x86_64_avx_state_t    avx;
+        GPR     gpr;
+        union 
+        {
+            FPU no_avx;
+            AVX avx;
         } fpu;
-        __x86_64_exception_state_t  exc;
+        EXC exc;
+        DBG dbg;
     };
 
     struct State
@@ -112,6 +117,7 @@
         kern_return_t gpr_errs[2];    // Read/Write errors
         kern_return_t fpu_errs[2];    // Read/Write errors
         kern_return_t exc_errs[2];    // Read/Write errors
+        kern_return_t dbg_errs[2];    // Read/Write errors
 
         State()
         {
@@ -121,6 +127,7 @@
                 gpr_errs[i] = -1;
                 fpu_errs[i] = -1;
                 exc_errs[i] = -1;
+                dbg_errs[i] = -1;
             }
         }
         
@@ -145,6 +152,7 @@
                 case e_regSetGPR:    return gpr_errs[err_idx];
                 case e_regSetFPU:    return fpu_errs[err_idx];
                 case e_regSetEXC:    return exc_errs[err_idx];
+                case e_regSetDBG:    return dbg_errs[err_idx];
                 default: break;
                 }
             }
@@ -161,7 +169,8 @@
                 case e_regSetALL:
                     gpr_errs[err_idx] =
                     fpu_errs[err_idx] =
-                    exc_errs[err_idx] = err;
+                    exc_errs[err_idx] = 
+                    dbg_errs[err_idx] = err;
                     return true;
 
                 case e_regSetGPR:
@@ -176,6 +185,10 @@
                     exc_errs[err_idx] = err;
                     return true;
 
+                case e_regSetDBG:
+                    dbg_errs[err_idx] = err;
+                    return true;
+                        
                 default: break;
                 }
             }
@@ -192,10 +205,12 @@
     kern_return_t GetGPRState (bool force);
     kern_return_t GetFPUState (bool force);
     kern_return_t GetEXCState (bool force);
+    kern_return_t GetDBGState (bool force);
 
     kern_return_t SetGPRState ();
     kern_return_t SetFPUState ();
     kern_return_t SetEXCState ();
+    kern_return_t SetDBGState ();
 
     static DNBArchProtocol *
     Create (MachThread *thread);

Modified: lldb/trunk/tools/debugserver/source/MacOSX/x86_64/MachRegisterStatesX86_64.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/tools/debugserver/source/MacOSX/x86_64/MachRegisterStatesX86_64.h?rev=138770&r1=138769&r2=138770&view=diff
==============================================================================
--- lldb/trunk/tools/debugserver/source/MacOSX/x86_64/MachRegisterStatesX86_64.h (original)
+++ lldb/trunk/tools/debugserver/source/MacOSX/x86_64/MachRegisterStatesX86_64.h Mon Aug 29 16:49:22 2011
@@ -19,6 +19,7 @@
 #define __x86_64_THREAD_STATE       4
 #define __x86_64_FLOAT_STATE        5
 #define __x86_64_EXCEPTION_STATE    6
+#define __x86_64_DEBUG_STATE        11
 #define __x86_64_AVX_STATE          17
 
 typedef struct {
@@ -194,4 +195,16 @@
     uint64_t    __faultvaddr;
 } __x86_64_exception_state_t;
 
+
+typedef struct {
+	uint64_t	__dr0;
+	uint64_t	__dr1;
+	uint64_t	__dr2;
+	uint64_t	__dr3;
+	uint64_t	__dr4;
+	uint64_t	__dr5;
+	uint64_t	__dr6;
+	uint64_t	__dr7;
+} __x86_64_debug_state_t;
+
 #endif





More information about the lldb-commits mailing list