[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