[lldb-dev] avoid crash in unwinder if abi wasn't set
Ed Maste
emaste at freebsd.org
Wed Oct 2 08:02:43 PDT 2013
On 2 October 2013 10:11, Carlo Kok <ck at remobjects.com> wrote:
>
> I was trying to see how far I could get debugging with arm64 (not far yet) but the code in attach patch catch the abi not existing yet, instead of crashing in GetSourceName() it just logs that there's no unwind frame. If oke I'll commit.
I ran into this just yesterday (and hacked in a different workaround,
which I've now undone). What do you think of this version instead,
which perhaps makes the issue more clear for next person to add a new
architecture:
diff --git a/source/Plugins/Process/Utility/RegisterContextLLDB.cpp
b/source/Plugins/Process/Utility/RegisterContextLLDB.cpp
index b3d9aa3..3872add 100644
--- a/source/Plugins/Process/Utility/RegisterContextLLDB.cpp
+++ b/source/Plugins/Process/Utility/RegisterContextLLDB.cpp
@@ -620,6 +620,10 @@ RegisterContextLLDB::GetFullUnwindPlanForFrame ()
arch_default_unwind_plan_sp.reset (new UnwindPlan
(lldb::eRegisterKindGeneric));
abi->CreateDefaultUnwindPlan(*arch_default_unwind_plan_sp);
}
+ else
+ {
+ UnwindLogMsgVerbose ("unable to get ABI for default UnwindPlan");
+ }
bool behaves_like_zeroth_frame = false;
if (IsFrameZero ()
@@ -759,7 +763,8 @@ RegisterContextLLDB::GetFullUnwindPlanForFrame ()
}
// If nothing else, use the architectural default UnwindPlan and
hope that does the job.
- UnwindLogMsgVerbose ("frame uses %s for full UnwindPlan",
arch_default_unwind_plan_sp->GetSourceName().GetCString());
+ if (arch_default_unwind_plan_sp)
+ UnwindLogMsgVerbose ("frame uses %s for full UnwindPlan",
arch_default_unwind_plan_sp->GetSourceName().GetCString());
return arch_default_unwind_plan_sp;
}
(Otherwise, there are a couple of whitespace issues with your patch --
EOL after the else, and 2-space indents.)
More information about the lldb-dev
mailing list