diff options
author | Jason Molenda <jmolenda@apple.com> | 2014-02-21 05:20:25 +0000 |
---|---|---|
committer | Jason Molenda <jmolenda@apple.com> | 2014-02-21 05:20:25 +0000 |
commit | 31d7ad4ecff690d83f404e49662b5edc9d95ae53 (patch) | |
tree | ed8bf5d4fe6a3588b3614a97ef4eb7d88f768f07 /clang/lib/Basic/FileManager.cpp | |
parent | d57124455baec5c51de8e1bb0f1c84166e5a36da (diff) | |
download | llvm-31d7ad4ecff690d83f404e49662b5edc9d95ae53.zip llvm-31d7ad4ecff690d83f404e49662b5edc9d95ae53.tar.gz llvm-31d7ad4ecff690d83f404e49662b5edc9d95ae53.tar.bz2 |
Add a new idea of a "fallback" UnwindPlan to the RegisterContextLLDB
class. If we try to unwind a stack frame to find a caller stack
frame, and we fail to get a valid-looking frame, AND if the UnwindPlan
we used is an assembly-inspection based UnwindPlan, then we should
throw away the assembly-inspection UnwindPlan and try unwinding with
the architectural default UnwindPlan.
This code path won't be taken if eh_frame unwind instructions are available -
lldb will always prefer those once it's off the zeroth frame.
The problem I'm trying to fix here is the class of unwind failures that
happen when we have hand-written assembly on the stack, with no eh_frame,
and lldb's assembly parser fails to understand the assembly. People usually
write their hand-written assembly to follow the frame-pointer-preserving
conventions of the platform so the architectural default UnwindPlan will
often work. We won't have the spill location for most of the non-volatile
registers if we fall back to this, but it's better than stopping the unwind
prematurely.
This is a bit of a tricky change that I believe is correct, but if we get
unwinds that go of into the weeds / unwind bogus frames at the end of the
stack, I'll need to revisit it.
<rdar://problem/16099440>
llvm-svn: 201839
Diffstat (limited to 'clang/lib/Basic/FileManager.cpp')
0 files changed, 0 insertions, 0 deletions