diff options
author | Jason Molenda <jmolenda@apple.com> | 2020-02-25 14:55:47 -0800 |
---|---|---|
committer | Jason Molenda <jmolenda@apple.com> | 2020-02-25 14:58:20 -0800 |
commit | 4b2b8b96db2837a95e8c3ceca3f31ac5641ca001 (patch) | |
tree | 05b9a4d3555a359793bd7a47c4c891aed7c25c7e /lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp | |
parent | 3b5530cf9647cf79ee45aef42c4f5fa7cc9acfd9 (diff) | |
download | llvm-4b2b8b96db2837a95e8c3ceca3f31ac5641ca001.zip llvm-4b2b8b96db2837a95e8c3ceca3f31ac5641ca001.tar.gz llvm-4b2b8b96db2837a95e8c3ceca3f31ac5641ca001.tar.bz2 |
Re-land Unwind past an interrupt handler correctly on arm or at pc==0
Updated the patch to only fetch $pc on a Return Address-using
target only if we're in a trap frame *and* if there is a saved
location for $pc in the trap frame's unwind rules. If not,
we fall back to fetching the Return Address register (eg $lr).
Original commit msg:
Unwind past an interrupt handler correctly on arm or at pc==0
Fix RegisterContextLLDB::InitializeNonZerothFrame so that it
will fetch a FullUnwindPlan instead of falling back to the
architectural default unwind plan -- GetFullUnwindPlan knows
how to spot a jmp 0x0 that results in a fault, which may be
the case when we see a trap handler on the stack.
Fix RegisterContextLLDB::SavedLocationForRegister so that when
the pc value is requested from a trap handler frame, where we
have a complete register context available to us, don't provide
the Return Address register (lr) instead of the pc. We have
an actual pc value here, and it's pointing to the instruction
that faulted.
Differential revision: https://reviews.llvm.org/D75007
<rdar://problem/59416588>
Diffstat (limited to 'lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp')
0 files changed, 0 insertions, 0 deletions