Hi clayborg,

Currently `m_breakpoint_pc_offset` is only set using the python target 
definition file. This variable adjusts the PC for a breakpoint hit when the 
remote stub, like gdbserver, hasn't backed up the PC. 

The introduction of reading XML target definition files from the remote however 
means that the XML target def has priority over the python target definition. 
So in cases where the XML is provided, the python target def isn't used. In 
such a situation there is no way to provide the breakpoint PC offset. 

This patch allows the breakpoint offset variable to set using a settting.  An 
alternative however could be to prioritize the python target definition, over 
the XML target definition.

REPOSITORY
  rL LLVM

http://reviews.llvm.org/D10775

Files:
  source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp

Index: source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
===================================================================
--- source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
+++ source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
@@ -107,6 +107,9 @@
     {
         { "packet-timeout" , OptionValue::eTypeUInt64 , true , 1, NULL, NULL, 
"Specify the default packet timeout in seconds." },
         { "target-definition-file" , OptionValue::eTypeFileSpec , true, 0 , 
NULL, NULL, "The file that provides the description for remote target 
registers." },
+        { "breakpoint-pc-offset", OptionValue::eTypeSInt64, true, 0, NULL, 
NULL, "Architecture specific PC offset when a breakpoint is hit. "
+                                                                               
  "Needed if debug stub does not rollback PC after hitting a breakpoint. "
+                                                                               
  "For negative values, use '--' before settings variable." },
         {  NULL            , OptionValue::eTypeInvalid, false, 0, NULL, NULL, 
NULL  }
     };
     
@@ -113,7 +116,8 @@
     enum
     {
         ePropertyPacketTimeout,
-        ePropertyTargetDefinitionFile
+        ePropertyTargetDefinitionFile,
+        ePropertyBreakpointOffset
     };
     
     class PluginProperties : public Properties
@@ -158,6 +162,13 @@
             const uint32_t idx = ePropertyTargetDefinitionFile;
             return m_collection_sp->GetPropertyAtIndexAsFileSpec (NULL, idx);
         }
+
+        int64_t
+        GetBreakpointOffset() const
+        {
+            const uint32_t idx = ePropertyBreakpointOffset;
+            return m_collection_sp->GetPropertyAtIndexAsSInt64(NULL, idx, 0);
+        }
     };
     
     typedef std::shared_ptr<PluginProperties> ProcessKDPPropertiesSP;
@@ -399,6 +410,10 @@
     const uint64_t timeout_seconds = 
GetGlobalPluginProperties()->GetPacketTimeout();
     if (timeout_seconds > 0)
         m_gdb_comm.SetPacketTimeout(timeout_seconds);
+
+    const int64_t settings_bp_offset = 
GetGlobalPluginProperties()->GetBreakpointOffset();
+    if (settings_bp_offset != 0)
+        m_breakpoint_pc_offset = settings_bp_offset;
 }
 
 //----------------------------------------------------------------------

EMAIL PREFERENCES
  http://reviews.llvm.org/settings/panel/emailpreferences/
Index: source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
===================================================================
--- source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
+++ source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp
@@ -107,6 +107,9 @@
     {
         { "packet-timeout" , OptionValue::eTypeUInt64 , true , 1, NULL, NULL, "Specify the default packet timeout in seconds." },
         { "target-definition-file" , OptionValue::eTypeFileSpec , true, 0 , NULL, NULL, "The file that provides the description for remote target registers." },
+        { "breakpoint-pc-offset", OptionValue::eTypeSInt64, true, 0, NULL, NULL, "Architecture specific PC offset when a breakpoint is hit. "
+                                                                                 "Needed if debug stub does not rollback PC after hitting a breakpoint. "
+                                                                                 "For negative values, use '--' before settings variable." },
         {  NULL            , OptionValue::eTypeInvalid, false, 0, NULL, NULL, NULL  }
     };
     
@@ -113,7 +116,8 @@
     enum
     {
         ePropertyPacketTimeout,
-        ePropertyTargetDefinitionFile
+        ePropertyTargetDefinitionFile,
+        ePropertyBreakpointOffset
     };
     
     class PluginProperties : public Properties
@@ -158,6 +162,13 @@
             const uint32_t idx = ePropertyTargetDefinitionFile;
             return m_collection_sp->GetPropertyAtIndexAsFileSpec (NULL, idx);
         }
+
+        int64_t
+        GetBreakpointOffset() const
+        {
+            const uint32_t idx = ePropertyBreakpointOffset;
+            return m_collection_sp->GetPropertyAtIndexAsSInt64(NULL, idx, 0);
+        }
     };
     
     typedef std::shared_ptr<PluginProperties> ProcessKDPPropertiesSP;
@@ -399,6 +410,10 @@
     const uint64_t timeout_seconds = GetGlobalPluginProperties()->GetPacketTimeout();
     if (timeout_seconds > 0)
         m_gdb_comm.SetPacketTimeout(timeout_seconds);
+
+    const int64_t settings_bp_offset = GetGlobalPluginProperties()->GetBreakpointOffset();
+    if (settings_bp_offset != 0)
+        m_breakpoint_pc_offset = settings_bp_offset;
 }
 
 //----------------------------------------------------------------------
_______________________________________________
lldb-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits

Reply via email to