HomePhabricator

Bug where insn-based unwind plans on arm64 could be wrong (#1082)
1be5d83869c5Unpublished

Authored by jasonmolenda on Apr 15 2020, 9:14 AM.

Unpublished Commit ยท Learn More

Not On Permanent Ref: This commit is not an ancestor of any permanent ref.

Description

Bug where insn-based unwind plans on arm64 could be wrong (#1082)

Fix a bug where UnwindAssemblyInstEmulation would confuse which
register is used to compute the Canonical Frame Address after it
had branched over a mid-function epilogue (where the CFA reg changes
from $fp to $sp in the process of epiloguing). Reinstate the
correct CFA register after we forward the unwind rule for branch
targets. The failure mode was that UnwindAssemblyInstEmulation
would think CFA was set in terms of $sp after one of these epilogues,
and if it sees modifications to $sp after the branch target, it would
change the CFA offset in the unwind rule -- even though the CFA is
defined in terms of $fp and the $sp changes are irrelevant to correct
calculation.

rdar://problem/60300528

Differential Revision: https://reviews.llvm.org/D78077

(cherry picked from commit 1cd92e480c12c03ab9a381b29e4e3964892afa01)