Avoid infinite loops in stack backtraces and renamed:

    bool RegisterContextLLDB::GetPC (addr_t& pc);

to:
    bool RegisterContextLLDB::ReadPC (addr_t& pc);
    
To avoid confusion with the GetPC() function that is part of the 
lldb_private::RegisterContext:

    uint64_t RegisterContext::GetPC (uint64_t fail_value);
    
Bad things could happen if the two got intermixed and the wrong one got
called.

Fixed inifinite loop detection by watching for two frames where the
RegisterContextLLDB::CursorSP contains the same start_pc and cfa.

    


git-svn-id: https://llvm.org/svn/llvm-project/llvdb/trunk@123673 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/source/Plugins/Process/Utility/UnwindLLDB.cpp b/source/Plugins/Process/Utility/UnwindLLDB.cpp
index 30c867e..533c21c 100644
--- a/source/Plugins/Process/Utility/UnwindLLDB.cpp
+++ b/source/Plugins/Process/Utility/UnwindLLDB.cpp
@@ -76,7 +76,7 @@
     if (!first_register_ctx_ap->GetCFA (first_cursor_sp->cfa))
         return false;
 
-    if (!first_register_ctx_ap->GetPC (first_cursor_sp->start_pc))
+    if (!first_register_ctx_ap->ReadPC (first_cursor_sp->start_pc))
         return false;
 
     // Everything checks out, so release the auto pointer value and let the
@@ -132,7 +132,7 @@
         }
         return false;
     }
-    if (!register_ctx_ap->GetPC (cursor_sp->start_pc))
+    if (!register_ctx_ap->ReadPC (cursor_sp->start_pc))
     {
         if (log)
         {
@@ -141,6 +141,15 @@
         }
         return false;
     }
+    if (!m_frames.empty())
+    {
+        if ((m_frames.back()->start_pc == cursor_sp->start_pc) &&
+            (m_frames.back()->cfa      == cursor_sp->cfa))
+        {
+            // Infinite loop where the current cursor is the same as the previous one...
+            return false;
+        }
+    }
     RegisterContextSP register_ctx_sp(register_ctx_ap.release());
     cursor_sp->reg_ctx = register_ctx_sp;
     m_frames.push_back (cursor_sp);