summaryrefslogtreecommitdiffstats
path: root/lldb/packages/Python/lldbsuite/test
diff options
context:
space:
mode:
authorSterling Augustine <saugustine@google.com>2019-10-31 12:45:20 -0700
committerSterling Augustine <saugustine@google.com>2019-11-07 14:48:35 -0800
commitd3c744313c3cca0c076f031ec71e66ca74b12f2a (patch)
treebc89d98a2cbbb6b816d55dff22652fd709c1ceab /lldb/packages/Python/lldbsuite/test
parentb4237db295d925646e4fe67c54517d22c78d1cc4 (diff)
downloadbcm5719-llvm-d3c744313c3cca0c076f031ec71e66ca74b12f2a.tar.gz
bcm5719-llvm-d3c744313c3cca0c076f031ec71e66ca74b12f2a.zip
Correctly update isSignalFrame when unwinding the stack via dwarf.
A "signal frame" is a function or block of code where execution arrives via a signal or interrupt, rather than via a normal call instruction. In fact, a particular instruction is interrupted by the signal and needs to be restarted. Therefore, when the signal handler is complete, execution needs to return to the interrupted instruction, rather than the instruction immediately following the call instruction, as in a normal call. Stack unwinders need to know this to correctly unwind signal frames. Dwarf handily provides an "S" in the CIE augmentation string to describe this case, and the libunwind API provides various functions to for unwinders to determine it,. The llvm libunwind implementation correctly sets it's internal variable "isSignalFrame" when initializing an unwind context. However, upon stepping up the stack, the current implementation correctly reads the augmentation string and sets it in the CIE info (which it then discards), libunwind doesn't update it's internal unwind context data structure. This change fixes that, and provides compatibility with both the canonical libunwind and the libgcc implementation. Reviewers: jfb Subscribers: christof, libcxx-commits Tags: #libc Differential Revision: https://reviews.llvm.org/D69677
Diffstat (limited to 'lldb/packages/Python/lldbsuite/test')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud