diff options
| author | Ed Maste <emaste@freebsd.org> | 2014-02-19 18:34:06 +0000 |
|---|---|---|
| committer | Ed Maste <emaste@freebsd.org> | 2014-02-19 18:34:06 +0000 |
| commit | a4be2c5dcd6d488e7c7d2e638759c3cd2b50da2a (patch) | |
| tree | 956d07d7590ab180725cc1c24281ff937bbf99a1 /lldb/source/Plugins/Process/POSIX/RegisterContextPOSIXProcessMonitor_x86.cpp | |
| parent | 01fd1c60cd909ce4313217532ca40db2cf99886b (diff) | |
| download | bcm5719-llvm-a4be2c5dcd6d488e7c7d2e638759c3cd2b50da2a.tar.gz bcm5719-llvm-a4be2c5dcd6d488e7c7d2e638759c3cd2b50da2a.zip | |
FreeBSD hardware watchpoint implementation
Implement x86_64 debug register read/write in support of hardware
watchpoints. Hoist LinuxThread::TraceNotify code back into
POSIXThread::TraceNotify()
Patch by John Wolfe.
We still need to rework this later to avoid the #ifdef FreeBSD.
llvm-reviews.chandlerc.com/D2572
llvm.org/pr16706
llvm-svn: 201706
Diffstat (limited to 'lldb/source/Plugins/Process/POSIX/RegisterContextPOSIXProcessMonitor_x86.cpp')
| -rw-r--r-- | lldb/source/Plugins/Process/POSIX/RegisterContextPOSIXProcessMonitor_x86.cpp | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/lldb/source/Plugins/Process/POSIX/RegisterContextPOSIXProcessMonitor_x86.cpp b/lldb/source/Plugins/Process/POSIX/RegisterContextPOSIXProcessMonitor_x86.cpp index f833c9b4752..c446bbfa7dc 100644 --- a/lldb/source/Plugins/Process/POSIX/RegisterContextPOSIXProcessMonitor_x86.cpp +++ b/lldb/source/Plugins/Process/POSIX/RegisterContextPOSIXProcessMonitor_x86.cpp @@ -109,6 +109,15 @@ RegisterContextPOSIXProcessMonitor_x86_64::ReadRegister(const unsigned reg, RegisterValue &value) { ProcessMonitor &monitor = GetMonitor(); + +#if defined(__FreeBSD__) + if (reg >= m_reg_info.first_dr) + return monitor.ReadDebugRegisterValue(m_thread.GetID(), + GetRegisterOffset(reg), + GetRegisterName(reg), + GetRegisterSize(reg), + value); +#endif return monitor.ReadRegisterValue(m_thread.GetID(), GetRegisterOffset(reg), GetRegisterName(reg), @@ -164,6 +173,13 @@ RegisterContextPOSIXProcessMonitor_x86_64::WriteRegister(const unsigned reg, } ProcessMonitor &monitor = GetMonitor(); +#if defined(__FreeBSD__) + if (reg >= m_reg_info.first_dr) + return monitor.WriteDebugRegisterValue(m_thread.GetID(), + GetRegisterOffset(reg_to_write), + GetRegisterName(reg_to_write), + value_to_write); +#endif return monitor.WriteRegisterValue(m_thread.GetID(), GetRegisterOffset(reg_to_write), GetRegisterName(reg_to_write), |

