diff options
Diffstat (limited to 'lldb/source/Plugins/Process/Utility/RegisterContextLLDB.cpp')
| -rw-r--r-- | lldb/source/Plugins/Process/Utility/RegisterContextLLDB.cpp | 117 |
1 files changed, 68 insertions, 49 deletions
diff --git a/lldb/source/Plugins/Process/Utility/RegisterContextLLDB.cpp b/lldb/source/Plugins/Process/Utility/RegisterContextLLDB.cpp index 7a657926475..b972ea3300e 100644 --- a/lldb/source/Plugins/Process/Utility/RegisterContextLLDB.cpp +++ b/lldb/source/Plugins/Process/Utility/RegisterContextLLDB.cpp @@ -126,10 +126,23 @@ RegisterContextLLDB::InitializeZerothFrame() m_cfa = cfa_regval + cfa_offset; Log *log = GetLogIfAllCategoriesSet (LIBLLDB_LOG_UNWIND); + + // A couple of sanity checks.. + if (m_cfa == (addr_t) -1 || m_cfa == 0 || m_cfa == 1) + { + if (log) + { + log->Printf("%*sFrame %d could not find a valid cfa address", + m_frame_number, "", m_frame_number); + } + m_frame_type = eNotAValidFrame; + return; + } + if (log) { - log->Printf("%*sThread %u Frame %d initialized frame current pc is 0x%llx cfa is 0x%llx", - m_frame_number, "", m_thread.GetIndexID(), m_frame_number, + log->Printf("%*sFrame %d initialized frame current pc is 0x%llx cfa is 0x%llx", + m_frame_number, "", m_frame_number, (uint64_t) m_cfa, (uint64_t) current_pc.GetLoadAddress (&m_thread.GetProcess().GetTarget())); } } @@ -164,8 +177,8 @@ RegisterContextLLDB::InitializeNonZerothFrame() { if (log) { - log->Printf("%*sThread %u Frame %d could not get pc value", - m_frame_number, "", m_thread.GetIndexID(), m_frame_number); + log->Printf("%*sFrame %d could not get pc value", + m_frame_number, "", m_frame_number); } m_frame_type = eNotAValidFrame; return; @@ -179,8 +192,8 @@ RegisterContextLLDB::InitializeNonZerothFrame() { if (log) { - log->Printf("%*sThread %u Frame %d using architectural default unwind method", - m_frame_number, "", m_thread.GetIndexID(), m_frame_number); + log->Printf("%*sFrame %d using architectural default unwind method", + m_frame_number, "", m_frame_number); } ArchSpec arch = m_thread.GetProcess().GetTarget().GetArchitecture (); ArchDefaultUnwindPlan *arch_default = ArchDefaultUnwindPlan::FindPlugin (arch); @@ -199,8 +212,8 @@ RegisterContextLLDB::InitializeNonZerothFrame() { if (log) { - log->Printf("%*sThread %u Frame %d failed to get cfa value", - m_frame_number, "", m_thread.GetIndexID(), m_frame_number); + log->Printf("%*sFrame %d failed to get cfa value", + m_frame_number, "", m_frame_number); } m_frame_type = eNormalFrame; return; @@ -208,8 +221,8 @@ RegisterContextLLDB::InitializeNonZerothFrame() m_cfa = cfa_regval + cfa_offset; if (log) { - log->Printf("%*sThread %u Frame %d initialized frame current pc is 0x%llx cfa is 0x%llx", - m_frame_number, "", m_thread.GetIndexID(), m_frame_number, + log->Printf("%*sFrame %d initialized frame current pc is 0x%llx cfa is 0x%llx", + m_frame_number, "", m_frame_number, (uint64_t) m_cfa, (uint64_t) current_pc.GetLoadAddress (&m_thread.GetProcess().GetTarget())); } return; @@ -281,8 +294,8 @@ RegisterContextLLDB::InitializeNonZerothFrame() { if (log) { - log->Printf("%*sThread %u Frame %d failed to get cfa reg %d/%d", - m_frame_number, "", m_thread.GetIndexID(), m_frame_number, + log->Printf("%*sFrame %d failed to get cfa reg %d/%d", + m_frame_number, "", m_frame_number, row_register_kind, active_row->GetCFARegister()); } m_frame_type = eNotAValidFrame; @@ -292,10 +305,22 @@ RegisterContextLLDB::InitializeNonZerothFrame() m_cfa = cfa_regval + cfa_offset; + // A couple of sanity checks.. + if (m_cfa == (addr_t) -1 || m_cfa == 0 || m_cfa == 1) + { + if (log) + { + log->Printf("%*sFrame %d could not find a valid cfa address", + m_frame_number, "", m_frame_number); + } + m_frame_type = eNotAValidFrame; + return; + } + if (log) { - log->Printf("%*sThread %u Frame %d initialized frame current pc is 0x%llx cfa is 0x%llx", - m_frame_number, "", m_thread.GetIndexID(), m_frame_number, + log->Printf("%*sFrame %d initialized frame current pc is 0x%llx cfa is 0x%llx", + m_frame_number, "", m_frame_number, (uint64_t) m_cfa, (uint64_t) current_pc.GetLoadAddress (&m_thread.GetProcess().GetTarget())); } } @@ -448,13 +473,13 @@ RegisterContextLLDB::GetUnwindPlansForFrame (Address current_pc) } Log *log = GetLogIfAllCategoriesSet (LIBLLDB_LOG_UNWIND); - if (log) + if (log && IsLogVerbose()) { const char *has_fast = ""; if (m_fast_unwind_plan) has_fast = ", and has a fast UnwindPlan"; - log->Printf("%*sThread %u Frame %d frame uses %s for full UnwindPlan%s", - m_frame_number, "", m_thread.GetIndexID(), m_frame_number, + log->Printf("%*sFrame %d frame uses %s for full UnwindPlan%s", + m_frame_number, "", m_frame_number, m_full_unwind_plan->GetSourceName().GetCString(), has_fast); } @@ -630,8 +655,8 @@ RegisterContextLLDB::SavedLocationForRegister (uint32_t lldb_regnum, RegisterLoc { if (log) { - log->Printf("%*sThread %u Frame %d could not supply caller's reg %d location", - m_frame_number, "", m_thread.GetIndexID(), m_frame_number, + log->Printf("%*sFrame %d could not supply caller's reg %d location", + m_frame_number, "", m_frame_number, lldb_regnum); } return false; @@ -640,8 +665,8 @@ RegisterContextLLDB::SavedLocationForRegister (uint32_t lldb_regnum, RegisterLoc { if (log) { - log->Printf("%*sThread %u Frame %d supplying caller's saved reg %d's location using FastUnwindPlan", - m_frame_number, "", m_thread.GetIndexID(), m_frame_number, + log->Printf("%*sFrame %d supplying caller's saved reg %d's location using FastUnwindPlan", + m_frame_number, "", m_frame_number, lldb_regnum); } have_unwindplan_regloc = true; @@ -655,8 +680,8 @@ RegisterContextLLDB::SavedLocationForRegister (uint32_t lldb_regnum, RegisterLoc { if (log) { - log->Printf("%*sThread %u Frame %d could not supply caller's reg %d location", - m_frame_number, "", m_thread.GetIndexID(), m_frame_number, + log->Printf("%*sFrame %d could not supply caller's reg %d location", + m_frame_number, "", m_frame_number, lldb_regnum); } return false; @@ -665,10 +690,10 @@ RegisterContextLLDB::SavedLocationForRegister (uint32_t lldb_regnum, RegisterLoc if (active_row->GetRegisterInfo (row_regnum, unwindplan_regloc)) { have_unwindplan_regloc = true; - if (log) + if (log && IsLogVerbose ()) { - log->Printf("%*sThread %u Frame %d supplying caller's saved reg %d's location using %s UnwindPlan", - m_frame_number, "", m_thread.GetIndexID(), m_frame_number, + log->Printf("%*sFrame %d supplying caller's saved reg %d's location using %s UnwindPlan", + m_frame_number, "", m_frame_number, lldb_regnum, m_full_unwind_plan->GetSourceName().GetCString()); } } @@ -683,8 +708,8 @@ RegisterContextLLDB::SavedLocationForRegister (uint32_t lldb_regnum, RegisterLoc { if (log) { - log->Printf("%*sThread %u Frame %d did not supply reg location for %d because it is volatile", - m_frame_number, "", m_thread.GetIndexID(), m_frame_number, + log->Printf("%*sFrame %d did not supply reg location for %d because it is volatile", + m_frame_number, "", m_frame_number, lldb_regnum); } return false; @@ -702,18 +727,12 @@ RegisterContextLLDB::SavedLocationForRegister (uint32_t lldb_regnum, RegisterLoc new_regloc.location.register_number = lldb_regnum; m_registers[lldb_regnum] = new_regloc; regloc = new_regloc; - if (log) - { - log->Printf("%*sThread %u Frame %d register %d is in the thread's live register context", - m_frame_number, "", m_thread.GetIndexID(), m_frame_number, - lldb_regnum); - } return true; } if (log) { - log->Printf("%*sThread %u Frame %d could not supply caller's reg %d location", - m_frame_number, "", m_thread.GetIndexID(), m_frame_number, + log->Printf("%*sFrame %d could not supply caller's reg %d location", + m_frame_number, "", m_frame_number, lldb_regnum); } return false; @@ -727,8 +746,8 @@ RegisterContextLLDB::SavedLocationForRegister (uint32_t lldb_regnum, RegisterLoc m_registers[lldb_regnum] = new_regloc; if (log) { - log->Printf("%*sThread %u Frame %d could not supply caller's reg %d location", - m_frame_number, "", m_thread.GetIndexID(), m_frame_number, + log->Printf("%*sFrame %d could not supply caller's reg %d location", + m_frame_number, "", m_frame_number, lldb_regnum); } return false; @@ -744,8 +763,8 @@ RegisterContextLLDB::SavedLocationForRegister (uint32_t lldb_regnum, RegisterLoc { if (log) { - log->Printf("%*sThread %u Frame %d could not supply caller's reg %d location", - m_frame_number, "", m_thread.GetIndexID(), m_frame_number, + log->Printf("%*sFrame %d could not supply caller's reg %d location", + m_frame_number, "", m_frame_number, lldb_regnum); } return false; @@ -778,8 +797,8 @@ RegisterContextLLDB::SavedLocationForRegister (uint32_t lldb_regnum, RegisterLoc { if (log) { - log->Printf("%*sThread %u Frame %d could not supply caller's reg %d location", - m_frame_number, "", m_thread.GetIndexID(), m_frame_number, + log->Printf("%*sFrame %d could not supply caller's reg %d location", + m_frame_number, "", m_frame_number, lldb_regnum); } return false; @@ -792,8 +811,8 @@ RegisterContextLLDB::SavedLocationForRegister (uint32_t lldb_regnum, RegisterLoc if (log) { - log->Printf("%*sThread %u Frame %d could not supply caller's reg %d location", - m_frame_number, "", m_thread.GetIndexID(), m_frame_number, + log->Printf("%*sFrame %d could not supply caller's reg %d location", + m_frame_number, "", m_frame_number, lldb_regnum); } @@ -875,10 +894,10 @@ RegisterContextLLDB::ReadRegisterBytes (uint32_t lldb_reg, DataExtractor& data) if (!IsValid()) return false; - if (log) + if (log && IsLogVerbose ()) { - log->Printf("%*sThread %u Frame %d looking for register saved location for reg %d", - m_frame_number, "", m_thread.GetIndexID(), m_frame_number, + log->Printf("%*sFrame %d looking for register saved location for reg %d", + m_frame_number, "", m_frame_number, lldb_reg); } @@ -887,8 +906,8 @@ RegisterContextLLDB::ReadRegisterBytes (uint32_t lldb_reg, DataExtractor& data) { if (log) { - log->Printf("%*sThread %u Frame %d passing along to the live register context for reg %d", - m_frame_number, "", m_thread.GetIndexID(), m_frame_number, + log->Printf("%*sFrame %d passing along to the live register context for reg %d", + m_frame_number, "", m_frame_number, lldb_reg); } return m_base_reg_ctx->ReadRegisterBytes (lldb_reg, data); |

