<rdar://problem/11386214>
<rdar://problem/11455913>

"target symbol add" should flush the cached frames
"register write" should flush the thread state in case registers modifications change stack

 


git-svn-id: https://llvm.org/svn/llvm-project/lldb/trunk@157042 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/source/Commands/CommandObjectTarget.cpp b/source/Commands/CommandObjectTarget.cpp
index c7b644f..a38f143 100644
--- a/source/Commands/CommandObjectTarget.cpp
+++ b/source/Commands/CommandObjectTarget.cpp
@@ -3585,21 +3585,21 @@
     Execute (Args& args,
              CommandReturnObject &result)
     {
-        Target *target = m_interpreter.GetDebugger().GetSelectedTarget().get();
+        ExecutionContext exe_ctx (m_interpreter.GetExecutionContext());
+        Target *target = exe_ctx.GetTargetPtr();
         if (target == NULL)
         {
             result.AppendError ("invalid target, create a debug target using the 'target create' command");
             result.SetStatus (eReturnStatusFailed);
-            return false;
         }
         else
         {
+            bool flush = false;
             const size_t argc = args.GetArgumentCount();
             if (argc == 0)
             {
                 result.AppendError ("one or more symbol file paths must be specified");
                 result.SetStatus (eReturnStatusFailed);
-                return false;
             }
             else
             {
@@ -3633,13 +3633,14 @@
                                     ModuleList module_list;
                                     module_list.Append (old_module_sp);
                                     target->ModulesDidLoad (module_list);
+                                    flush = true;
                                 }
                             }
                             else
                             {
                                 result.AppendError ("one or more executable image paths must be specified");
                                 result.SetStatus (eReturnStatusFailed);
-                                return false;
+                                break;
                             }
                             result.SetStatus (eReturnStatusSuccessFinishResult);
                         }
@@ -3661,6 +3662,13 @@
                     }
                 }
             }
+
+            if (flush)
+            {
+                Process *process = exe_ctx.GetProcessPtr();
+                if (process)
+                    process->Flush();
+            }
         }
         return result.Succeeded();
     }