diff options
author | David Spickett <david.spickett@linaro.org> | 2021-10-08 10:44:23 +0000 |
---|---|---|
committer | David Spickett <david.spickett@linaro.org> | 2021-11-11 11:32:06 +0000 |
commit | 9db2541d4c30100d7ccc6cc9db717df102b302d9 (patch) | |
tree | 6ff5617cef74e14e1b4184bdc47ec8969c8c1b0b /llvm/lib/CodeGen/MachineBasicBlock.cpp | |
parent | 1e6d9c06a5d20b65499b74a891a0e79cada3803e (diff) | |
download | llvm-9db2541d4c30100d7ccc6cc9db717df102b302d9.zip llvm-9db2541d4c30100d7ccc6cc9db717df102b302d9.tar.gz llvm-9db2541d4c30100d7ccc6cc9db717df102b302d9.tar.bz2 |
[lldb][AArch64] Add UnwindPlan for Linux sigreturn
This adds a specific unwind plan for AArch64 Linux sigreturn frames.
Previously we assumed that the fp would be valid here but it is not.
https://github.com/torvalds/linux/blob/master/arch/arm64/kernel/vdso/sigreturn.S
On Ubuntu Bionic it happened to point to an old frame info which meant
you got what looked like a correct backtrace. On Focal, the info is
completely invalid. (probably due to some code shuffling in libc)
This adds an UnwindPlan that knows that the sp in a sigreturn frame
points to an rt_sigframe from which we can offset to get saved
sp and pc values to backtrace correctly.
Based on LibUnwind's change: https://reviews.llvm.org/D90898
A new test is added that sets all compares the frames from the initial
signal catch to the handler break. Ensuring that the stack/frame pointer,
function name and register values match.
(this test is AArch64 Linux specific because it's the only one
with a specific unwind plan for this situation)
Fixes https://bugs.llvm.org/show_bug.cgi?id=52165
Reviewed By: omjavaid, labath
Differential Revision: https://reviews.llvm.org/D112069
Diffstat (limited to 'llvm/lib/CodeGen/MachineBasicBlock.cpp')
0 files changed, 0 insertions, 0 deletions