[Lldb-commits] [lldb] a8bfee2 - [lldb] [Process/Utility] Fix DR offsets for FreeBSD

Michał Górny via lldb-commits lldb-commits at lists.llvm.org
Thu Nov 12 05:09:11 PST 2020


Author: Michał Górny
Date: 2020-11-12T14:09:03+01:00
New Revision: a8bfee2a356a2e70f854bf6d0b364798f4183795

URL: https://github.com/llvm/llvm-project/commit/a8bfee2a356a2e70f854bf6d0b364798f4183795
DIFF: https://github.com/llvm/llvm-project/commit/a8bfee2a356a2e70f854bf6d0b364798f4183795.diff

LOG: [lldb] [Process/Utility] Fix DR offsets for FreeBSD

Fix Debug Register offsets to be specified relatively to UserArea
on FreeBSD/amd64 and FreeBSD/i386, and add them to UserArea on i386.
This fixes overlapping GPRs and DRs in gdb-remote protocol, making it
impossible to correctly get and set debug registers from the LLDB
client.

Differential Revision: https://reviews.llvm.org/D91254

Added: 
    

Modified: 
    lldb/source/Plugins/Process/Utility/RegisterContextFreeBSD_i386.cpp
    lldb/source/Plugins/Process/Utility/RegisterContextFreeBSD_x86_64.cpp

Removed: 
    


################################################################################
diff  --git a/lldb/source/Plugins/Process/Utility/RegisterContextFreeBSD_i386.cpp b/lldb/source/Plugins/Process/Utility/RegisterContextFreeBSD_i386.cpp
index 10d346a3cb7e..acebe9d53568 100644
--- a/lldb/source/Plugins/Process/Utility/RegisterContextFreeBSD_i386.cpp
+++ b/lldb/source/Plugins/Process/Utility/RegisterContextFreeBSD_i386.cpp
@@ -35,7 +35,7 @@ struct GPR {
   uint32_t gs;
 };
 
-struct dbreg {
+struct DBG {
   uint32_t dr[8]; /* debug registers */
                   /* Index 0-3: debug address registers */
                   /* Index 4-5: reserved */
@@ -48,10 +48,13 @@ using FPR_i386 = FXSAVE;
 struct UserArea {
   GPR gpr;
   FPR_i386 i387;
+  DBG dbg;
 };
 
 #define DR_SIZE sizeof(uint32_t)
-#define DR_OFFSET(reg_index) (LLVM_EXTENSION offsetof(dbreg, dr[reg_index]))
+#define DR_OFFSET(reg_index)                                                   \
+  (LLVM_EXTENSION offsetof(UserArea, dbg) +                                    \
+   LLVM_EXTENSION offsetof(DBG, dr[reg_index]))
 
 // Include RegisterInfos_i386 to declare our g_register_infos_i386 structure.
 #define DECLARE_REGISTER_INFOS_I386_STRUCT

diff  --git a/lldb/source/Plugins/Process/Utility/RegisterContextFreeBSD_x86_64.cpp b/lldb/source/Plugins/Process/Utility/RegisterContextFreeBSD_x86_64.cpp
index c1f390ade9b9..e0f3971c6e27 100644
--- a/lldb/source/Plugins/Process/Utility/RegisterContextFreeBSD_x86_64.cpp
+++ b/lldb/source/Plugins/Process/Utility/RegisterContextFreeBSD_x86_64.cpp
@@ -59,7 +59,9 @@ struct UserArea {
   DBG dbg;
 };
 
-#define DR_OFFSET(reg_index) (LLVM_EXTENSION offsetof(DBG, dr[reg_index]))
+#define DR_OFFSET(reg_index)                                                   \
+  (LLVM_EXTENSION offsetof(UserArea, dbg) +                                    \
+   LLVM_EXTENSION offsetof(DBG, dr[reg_index]))
 
 // Include RegisterInfos_x86_64 to declare our g_register_infos_x86_64
 // structure.


        


More information about the lldb-commits mailing list